// FTP access generator
// 31 may 93 Chrisy
// Modified for RoD Chrisy 15 June 1993
#include <standard.h>
#include "/secure/master.h"
#define OUTFILE "/secure/ftp_access.inf"
#define SAVEFILE "/secure/ftp_access"
#define MASTERFILE MASTER
// restored from master.o
mapping positions;
mapping permissions;
// Globals :)
mapping perms;
int make_perms_active;
// prototypes
void make_perms();
// functions
int query_prevent_shadow() { return 1; }
nomask void create()
{
seteuid(getuid());
if(file_length(MASTERFILE+".o"))
restore_object(MASTERFILE,1);
permissions = MASTER->query_permissions();
perms = ([ ]);
if(!positions) positions = ([]);
if(!permissions) permissions = (["":([]) ]);
make_perms();
}
nomask void dest_me()
{
destruct(this_object());
}
nomask void save_me()
{
string *nams, *paths;
mapping acc;
int sz, asz, i, j;
save_object(SAVEFILE,1);
rm(OUTFILE);
write_file(OUTFILE, "# This file is generated by the "+
"Mudlib.\n# You shouldn't change it.\n"+
"# Created: "+ctime(time())+".\n");
nams = keys(perms);
sz = sizeof(nams);
for(i=0; i<sz; i++)
{
acc = perms[nams[i]];
paths = keys(acc);
asz = sizeof(paths);
for(j=0; j<asz; j++)
write_file(OUTFILE, sprintf("%s %s %d\n", nams[i],
paths[j], acc[paths[j]]));
}
SETEUID;
}
void make_perms()
{
if(make_perms_active)
return;
call_out("do_make_perms", 0);
make_perms_active = 1;
}
void do_make_perms()
{
string *paths, *nams;
mapping acc;
int sz, nsz, i, j;
make_perms_active = 0;
paths = keys(permissions);
sz = sizeof(paths);
for(i=0; i<sz; i++)
{
acc = permissions[paths[i]];
if(!mappingp(acc)) acc = ([ ]);
nams = keys(acc);
nsz = sizeof(nams);
for(j=0; j<nsz; j++)
{
if(!perms[nams[j]])
perms[nams[j]] = ([ ]);
if(acc[nams[j]]&WRITE_MASK) acc[nams[j]] |= READ_MASK;
perms[nams[j]][paths[i]] = acc[nams[j]];
}
}
nams = keys(positions);
nsz = sizeof(nams);
for(i=0; i<nsz; i++)
{
if(!perms[nams[i]])
perms[nams[i]] = ([ ]);
switch(positions[nams[i]])
{
case LORD:
perms[nams[i]]["/d"] = READ_MASK|WRITE_MASK;
break;
case HIGH_LORD:
perms[nams[i]]["/"] = READ_MASK|WRITE_MASK;
break;
}
perms[nams[i]]["/w/"+nams[i]] = READ_MASK|WRITE_MASK;
}
save_me();
}