blob: 99ec6f6ebbf2d70ae056c27acb37b9744c411a12 [file] [log] [blame]
MG Mud User88f12472016-06-24 23:31:02 +02001// MorgenGrauen MUDlib
2//
3// master/domain.c -- Regionen und Regionsmagier
4//
5// $Id: domain.c 7162 2009-02-26 21:14:43Z Zesstra $
6
7#pragma strict_types
8
9#include "/secure/master.h"
10#include "/sys/files.h"
11
12int domain_master(string user, string domain)
13{
14 string *domains;
15 int i;
16
17 if (!find_userinfo(user)||
18 !pointerp(domains=get_userinfo(user)[USER_DOMAIN+1]))
19 return 0;
20 return (member(domains,domain) != -1);
21}
22
23int domain_member(string user, string domain)
24{
25 if (domain=="erzmagier") return 0;
26 return (IS_DOMAINMEMBER(user)&&file_size("/d/"+domain+"/"+user)==-2);
27}
28
29int add_domain_master(string user,string dom)
30{
31 string *domains;
32
33 if ((call_other(SIMUL_EFUN_FILE, "process_call") ||
34 call_other(SIMUL_EFUN_FILE, "secure_level") < GOD_LVL) ||
35 !find_userinfo(user))
36 return 0;
37 domains=get_userinfo(user)[USER_DOMAIN+1];
38 if (!domains)
39 set_domains(user,({dom}));
40 else
41 {
42 // Doppelte Eintraege vermeiden
43 domains=domains-({dom})+({dom});
44 set_domains(user, domains);
45 }
46 if (get_wiz_level(user) < LORD_LVL+5) {
47 update_wiz_level(user,LORD_LVL+5);
48 SendWizardHelpMail(user, LORD_LVL+5);
49 }
50 return 1;
51}
52
53int remove_domain_master(string user,string dom)
54{
55 string *domains;
56
57 if (!IS_GOD(geteuid(previous_object()))
58 ||!find_userinfo(user)
59 ||!(domains=get_userinfo(user)[USER_DOMAIN+1])
60 || member(domains,dom)==-1)
61 return 0;
62 domains-=({dom});
63 set_domains(user,domains);
64 return 1;
65}
66
67string *get_domains() {
68 string *regions=({});
69 // alle Verzeichnisse in /d/ ermitteln
70 foreach(string region: (get_dir("/"DOMAINDIR"/*")
71 || ({}))-({".","..","erzmagier"})) {
72 if (region[0]!='.' && file_size("/d/"+region) == FSIZE_DIR)
73 //Verzeichnis, kein File und faengt nicht mit "." an: aufnehmen.
74 regions+=({region});
75 }
76 return regions;
77}
78
79// in welchen Regionen hat 'wiz' ein Verzeichnis?
80string *get_domain_homes(string wiz)
81{
82 string *homes=({});
83 string tmp;
84
85 if (query_wiz_level(wiz)<=WIZARD_LVL) return ({});
86
87 tmp = "/d/%s/"+wiz;
88 foreach(string dir: get_domains()) {
89 if (dir[0]!='.' && file_size(sprintf(tmp,dir)) == FSIZE_DIR)
90 //Magierverzeichnis da und faengt nicht mit "." an: aufnehmen.
91 homes+=({dir});
92 }
93 return homes;
94}
95