| // MorgenGrauen MUDlib |
| // |
| // master/domain.c -- Regionen und Regionsmagier |
| // |
| // $Id: domain.c 7162 2009-02-26 21:14:43Z Zesstra $ |
| |
| #pragma strict_types |
| |
| #include "/secure/master.h" |
| #include "/sys/files.h" |
| |
| int domain_master(string user, string domain) |
| { |
| string *domains; |
| int i; |
| |
| if (!find_userinfo(user)|| |
| !pointerp(domains=get_userinfo(user)[USER_DOMAIN+1])) |
| return 0; |
| return (member(domains,domain) != -1); |
| } |
| |
| int domain_member(string user, string domain) |
| { |
| if (domain=="erzmagier") return 0; |
| return (IS_DOMAINMEMBER(user)&&file_size("/d/"+domain+"/"+user)==-2); |
| } |
| |
| int add_domain_master(string user,string dom) |
| { |
| string *domains; |
| |
| if ((call_other(SIMUL_EFUN_FILE, "process_call") || |
| call_other(SIMUL_EFUN_FILE, "secure_level") < GOD_LVL) || |
| !find_userinfo(user)) |
| return 0; |
| domains=get_userinfo(user)[USER_DOMAIN+1]; |
| if (!domains) |
| set_domains(user,({dom})); |
| else |
| { |
| // Doppelte Eintraege vermeiden |
| domains=domains-({dom})+({dom}); |
| set_domains(user, domains); |
| } |
| if (get_wiz_level(user) < LORD_LVL+5) { |
| update_wiz_level(user,LORD_LVL+5); |
| SendWizardHelpMail(user, LORD_LVL+5); |
| } |
| return 1; |
| } |
| |
| int remove_domain_master(string user,string dom) |
| { |
| string *domains; |
| |
| if (!IS_GOD(geteuid(previous_object())) |
| ||!find_userinfo(user) |
| ||!(domains=get_userinfo(user)[USER_DOMAIN+1]) |
| || member(domains,dom)==-1) |
| return 0; |
| domains-=({dom}); |
| set_domains(user,domains); |
| return 1; |
| } |
| |
| string *get_domains() { |
| string *regions=({}); |
| // alle Verzeichnisse in /d/ ermitteln |
| foreach(string region: (get_dir("/"DOMAINDIR"/*") |
| || ({}))-({".","..","erzmagier"})) { |
| if (region[0]!='.' && file_size("/d/"+region) == FSIZE_DIR) |
| //Verzeichnis, kein File und faengt nicht mit "." an: aufnehmen. |
| regions+=({region}); |
| } |
| return regions; |
| } |
| |
| // in welchen Regionen hat 'wiz' ein Verzeichnis? |
| string *get_domain_homes(string wiz) |
| { |
| string *homes=({}); |
| string tmp; |
| |
| if (query_wiz_level(wiz)<=WIZARD_LVL) return ({}); |
| |
| tmp = "/d/%s/"+wiz; |
| foreach(string dir: get_domains()) { |
| if (dir[0]!='.' && file_size(sprintf(tmp,dir)) == FSIZE_DIR) |
| //Magierverzeichnis da und faengt nicht mit "." an: aufnehmen. |
| homes+=({dir}); |
| } |
| return homes; |
| } |
| |