/* /secure/sefun/security.c * from Nightmare 3.3 * returns the file privs for any file or directory * created by Descartes of Borg 940903 */ #include <privs.h> string file_privs(string file) { string *path; string ret; if(file[0..1] == "//") file = file[1..]; if(!sizeof(path = explode(file, "/"))) ret = 0; else { switch(path[0]) { case "adm": ret = PRIV_SECURE;break; case "cmds": ret = PRIV_CMDS;break; case "daemon": ret = PRIV_MUDLIB;break; case "estates": ret = PRIV_GENERAL;break; case "lib": ret = PRIV_GENERAL;break; case "secure": ret = PRIV_SECURE;break; case "shadows": ret = PRIV_GENERAL;break; case "www": ret = PRIV_WWW;break; case "realms": if(sizeof(path) > 2) ret = lower_case(path[2]); else ret = 0; break; case "domains": if(sizeof(path) > 1) ret = capitalize(lower_case(path[1])); else ret = 0; break; default: ret = 0; } } //this_object()->tc("file_privs: "+file+" : "+ret); return ret; } int member_group(mixed who, string grp) { string *ppl; if(objectp(who)) who = (string)who->GetKeyName(); if(!(ppl = (string *)master()->query_group(grp))) return 0; return (member_array(who, ppl) != -1); } mixed unguarded(function f) { return (mixed)master()->apply_unguarded(f); }