blob: a66e4e9fbe68adb3c33b633a19c3955a26791999 [file] [log] [blame]
MG Mud User88f12472016-06-24 23:31:02 +02001// MorgenGrauen MUDlib
2//
3// master.c -- master object
4//
5// $Id: master.c 7041 2008-10-13 18:18:27Z Zesstra $
Zesstra3bee4f92019-11-28 20:17:36 +01006#pragma strict_types,no_clone,no_shadow
7#pragma pedantic,range_check,warn_deprecated
MG Mud User88f12472016-06-24 23:31:02 +02008
Dominik Schäfera87e4082017-03-26 20:17:54 +02009#include "/secure/config.h"
10#define WHITELIST "/"LIBDATADIR"/secure/ARCH/players_deny_whitelist.o"
11#define TARGETLIST "/"LIBDATADIR"/secure/ARCH/players_deny_targets.o"
12#define WHITELISTDUMP "/"LIBDATADIR"/secure/ARCH/players_deny_whitelist.dump"
13#define TARGETLISTDUMP "/"LIBDATADIR"/secure/ARCH/players_deny_targets.dump"
MG Mud User88f12472016-06-24 23:31:02 +020014
15//#define PLDENY_LEARNMODE
16
17#include "/secure/wizlevels.h"
18#include "/secure/master.h"
19
20/* Diese Objekte duerfen aus /players/ includieren/erben */
21nosave private mapping whitelist;
22/* Diese Dinge werden von Objektn in whitelist aus /players/ inkludiert/geerbt. */
23nosave private mapping targets;
24
25private mapping ParseList(string list) {
26 mixed data;
27
28 if (!stringp(list)) return ([:0 ]);
29 if (!stringp(data = read_file(list))) return ([:0 ]);
30 data = explode(data, "\n") || ({});
31
32 return mkmapping(data);
33}
34
35private void ParseWhiteList() {
36 DEBUG("Parsing Whitelist\n");
37 whitelist=ParseList(WHITELISTDUMP);
38}
39private void ParseTargetList() {
40 DEBUG("Parsing Targetlist\n");
41 targets=ParseList(TARGETLISTDUMP);
42}
43
44private void DumpList(mapping list, string file) {
45 if (!stringp(file) || !mappingp(list)
46 || !sizeof(file) || !sizeof(list))
47 return;
48
49 write_file(file, implode(m_indices(list),"\n"), 1);
50}
51
52private void DumpWhiteList() {
53 DEBUG("Dumping Whitelist\n");
54 DumpList(whitelist, WHITELISTDUMP);
55}
56private void DumpTargetList() {
57 DEBUG("Dumping Targetlist\n");
58 DumpList(targets, TARGETLISTDUMP);
59}
60
61public void DumpPLDenyLists() {
62 if ( extern_call() && call_sefun("secure_level") < ARCH_LVL )
63 return;
64 DEBUG("Dumping PLDenylists\n");
65 limited(#'DumpWhiteList);
66 limited(#'DumpTargetList);
67}
68
69public void SavePLDenyLists() {
70 if ( extern_call() && call_sefun("secure_level") < ARCH_LVL )
71 return;
72 DEBUG("Saving PLDenyLists\n");
73 write_file(WHITELIST,
74 save_value(whitelist), 1);
75 write_file(TARGETLIST,
76 save_value(targets), 1);
77}
78
79public void LoadPLDenylists() {
80 mixed tmp;
81
82 if ( extern_call() && call_sefun("secure_level") < ARCH_LVL )
83 return;
84
Zesstrad77ab422019-09-27 17:39:27 +020085 debug_message("Loading PLDenylists\n", DMSG_STAMP);
MG Mud User88f12472016-06-24 23:31:02 +020086
87 if (stringp(tmp=read_file(WHITELIST))) {
88 // savefile exists
89 whitelist = restore_value(tmp);
90 }
91 else {
92 limited(#'ParseWhiteList);
93 }
94 if (stringp(tmp=read_file(TARGETLIST))) {
95 targets = restore_value(tmp);
96 }
97 else {
98 limited(#'ParseTargetList);
99 }
100}
101
102mixed include_file(string file, string compiled_file, int sys_include) {
103
104 if (sys_include) return 0;
105 // Loggen, wenn Files ausserhalb /players/ Kram aus /players/
106 // inkludieren/erben.
107 if (strstr(file, "/players/") == 0
108 && (strstr(compiled_file,"/players/") == -1
109 && !member(whitelist, compiled_file) )) {
110#ifdef PLDENY_LEARNMODE
111 DEBUG("include_file(): Whitelisting: "+compiled_file+"\n");
112 m_add(whitelist, compiled_file);
113 m_add(targets, file);
114 call_sefun("log_file", "PLAYERSWHITELIST",
115 sprintf("%s (inkludiert %s)\n",compiled_file, file),
116 1000000);
117#else
118 // verweigern.
119 return -1;
120#endif
121 }
122 return 0;
123}
124
125mixed inherit_file(string file, string compiled_file) {
126
127 // Loggen, wenn Files ausserhalb /players/ Kram aus /players/
128 // inkludieren/erben.
129 if (strstr(file, "/players/") == 0
130 && (strstr(compiled_file,"/players/") == -1
131 && !member(whitelist, compiled_file) )) {
132#ifdef PLDENY_LEARNMODE
133 DEBUG("include_file(): Whitelisting: "+compiled_file+"\n");
134 m_add(whitelist, compiled_file);
135 m_add(targets, file);
136 call_sefun("log_file", "PLAYERSWHITELIST",
137 sprintf("%s (erbt %s)\n",compiled_file, file),
138 1000000);
139#else
140 // verweigern.
141 return -1;
142#endif
143 }
144 return 0;
145}
146