/* Standard domain master object
* Radix May 10, 1996
*/
int open_read = 1;
string DOM_LORD, DOMAIN;
mapping perms;
void set_domain(string dom) { DOMAIN = dom; }
void set_domain_lord(string lord) { DOM_LORD = lord; }
void set_open_read(int i) { open_read = i; }
int query_open_read() { return open_read; }
void set_permissions(mapping p) { perms = p; }
int query_prevent_shadow() { return 1; }
mixed members;
void create()
{
int i;
mapping map;
members = ([ ]);
perms = ([ ]);
seteuid("/secure/master"->creator_file(file_name(this_object())));
restore_object(file_name(this_object()), 1);
if (pointerp(members))
{
map = ([ ]);
for (i=0;i<sizeof(members);i++)
map[members[i]] = "No Project";
members = map;
}
} /* create() */
void save_me() {
seteuid("/secure/master"->get_root_uid());
save_object(file_name(this_object()), 1);
seteuid("/secure/master"->creator_file(file_name(this_object())));
} /* save_me() */
string query_dom_lord() { return DOM_LORD; }
varargs int query_dom_manip(string euid)
{
if(!euid) euid = geteuid(this_player(1));
if((euid == query_dom_lord()) ||
(master()->query_lord(euid) &&
"/secure/master"->high_programmer(geteuid(this_player()))))
return 1;
if(lower_case(euid) == DOMAIN) return 1;
return 0;
}
int valid_read(string *path, string euid, string funct)
{
if(query_open_read()) return 1;
if(query_dom_manip(euid))
return 1;
return (members[euid] != 0);
} /* valid_read() */
int valid_write(string *path, string euid, string funct)
{
if(query_dom_manip(euid))
return 1;
if(path[2]=="master" || path[2]=="master.c" || path[2]=="master.o")
return 0;
if(euid == "Dom: "+DOMAIN) return 1;
if(!members[euid]) return 0;
// Okay, we have a member (non Thane/Lord).. check sub-dir access
if((level = get_permissions(path,euid,funct)) > 0)
} /* valid_write() */
void dest_me() { destruct(this_object()); }
/* please note the + ({ })... this is for security reasons.
*/
string *query_members() { return keys(members) + ({ }); }
int add_member(string name)
{
if(!query_dom_manip(geteuid(this_player(1)))) return 0;
if(members[name]) return 0;
members[name] = "newbie";
save_me();
return 1;
} /* add_member() */
int remove_member(string name)
{
int i;
if(!query_dom_manip(geteuid(this_player(1)))) return 0;
if(!members[name]) return 0;
members = m_delete(members, name);
save_me();
return 1;
} /* remove_member() */
int set_project(string name, string pro)
{
if(!query_dom_manip(geteuid(this_player(1)))) return 0;
if(!members[name]) return 0;
if(!pro || pro == "") pro = "project unset";
members[name] = pro;
save_me();
return 1;
} /* set_project() */
int query_member(string name)
{
return !undefinedp(members[name]) || name == DOM_LORD;
} /* query_member() */
string query_project(string name)
{
if(!members[name])
return "project unset";
return members[name];
} /* query_project() */
void smart_log(string error, string where)
{
write_file("d/"+DOMAIN+"/player_reports", error);
} /* smart_log() */
string log_who(string where)
{
return DOM_LORD;
} /* log_who() */
string author_file(string *str)
{
switch (str[1])
{
case "fr" :
return DOM_LORD;
default: return "baldrick";
}
} /* author_file() */
int path_comp(string *a, string *b)
{
int i;
if(!a || !b) return 0;
if(sizeof(a) != sizeof(b)) return 0;
for(i=0; i<sizeof(a); i++)
if(a[i] != b[i])
return 0;
return 1;
}