]> git.pld-linux.org Git - packages/eggdrop.git/blame - eggdrop-multilevel_sharing.patch
- refresh config.sub
[packages/eggdrop.git] / eggdrop-multilevel_sharing.patch
CommitLineData
f09e0694
AG
1diff -burN eggdrop1.6.15/doc/USERS eggdrop1.6.15-multilevel_sharing/doc/USERS
2--- eggdrop1.6.15/doc/USERS Mon May 5 00:05:32 2003
3+++ eggdrop1.6.15-multilevel_sharing/doc/USERS Fri May 9 18:44:33 2003
4@@ -75,6 +75,11 @@
5
6 u (unshared) user record is not sent to other bots.
7
8+ s (protected) is working similar like u flag, but changes can be made
9+ only from bot that is aggressively sharing with us (Hub).
10+ User cannot be changed by bot that is connected below
11+ this bot. (This flag can be useful in multilevel sharing)
12+
13 h (highlight) use bold text in help/text files.
14
15 All global flags other then u, h, b, c, x, j, and p are also
16diff -burN eggdrop1.6.15/doc/tcl-commands.doc eggdrop1.6.15-multilevel_sharing/doc/tcl-commands.doc
17--- eggdrop1.6.15/doc/tcl-commands.doc Mon May 5 00:05:32 2003
18+++ eggdrop1.6.15-multilevel_sharing/doc/tcl-commands.doc Fri May 9 18:44:33 2003
19@@ -1245,6 +1245,17 @@
20 Module: filesys
21
22
23+
24+***### SHARE MODULE COMMANDS ###***
25+
26+ noshare <command> [<arg1> <arg2> ...]
27+ Description: executes command with setting noshare = 1 in code,
28+ that means, if you i.e. do chattr using this command,
29+ bot will make changes on his userlist, but won't send changes
30+ to other bots. This is useful in some situations.
31+ Returns: whatever is returned by <command>
32+ Module: share
33+
34 *** MISCELLANEOUS COMMANDS ***
35
36 bind <type> <flags> <keyword/mask> [proc-name]
37diff -burN eggdrop1.6.15/eggdrop.conf eggdrop1.6.15-multilevel_sharing/eggdrop.conf
38--- eggdrop1.6.15/eggdrop.conf Mon May 5 00:05:32 2003
39+++ eggdrop1.6.15-multilevel_sharing/eggdrop.conf Fri May 9 18:44:33 2003
40@@ -1139,11 +1139,21 @@
41 # changes from other bots should be ignored?
42 #set private-globals "mnot"
43
44+# When sharing user lists, which channel flags changes from other bots
45+# should be ignored?
46+#set private-chanflags "mn"
47+
48 # When sharing user lists, don't accept ANY userfile changes from other
49 # bots? Paranoid people should use this feature on their hub bot. This
50 # will force all userlist changes to be made via the hub.
51 #set private-user 0
52
53+# When you have multilevel botnet, this option permits hub, to make changes,
54+# even when private-global, private-chanflags and/or private-user are set.
55+# NOTE: this option doesn't permit hub to force flags filtered by
56+# private-globals
57+#set permit-hub 1
58+
59 # This setting makes the bot discard its own bot records in favor of
60 # the ones sent by the hub.
61 # NOTE: No passwords or botflags are shared, only ports and
62diff -burN eggdrop1.6.15/help/cmds2.help eggdrop1.6.15-multilevel_sharing/help/cmds2.help
63--- eggdrop1.6.15/help/cmds2.help Mon May 5 00:05:32 2003
64+++ eggdrop1.6.15-multilevel_sharing/help/cmds2.help Fri May 9 18:44:33 2003
65@@ -336,6 +336,7 @@
66 p party-line (user has access to the partyline)
67 q global quiet (user does not get voice on +autovoice channels.)
68 r global dehalfop (user cannot gain halfops on any of the bot's channels)
69+ s protected (when sharing changes can be made only by hub)
70 t botnet master (user has access to all features dealing with the botnet.)
71 u unshared (user record is not sent to other bots.)
72 v global voice (user get +v automatically on +autovoice channels)
73diff -burN eggdrop1.6.15/src/cmds.c eggdrop1.6.15-multilevel_sharing/src/cmds.c
74--- eggdrop1.6.15/src/cmds.c Mon May 5 00:05:32 2003
75+++ eggdrop1.6.15-multilevel_sharing/src/cmds.c Fri May 9 18:46:00 2003
76@@ -1556,8 +1556,8 @@
77 mns.chan &= ~(BOT_SHARE);
78 }
79 if (!glob_owner(user)) {
80- pls.global &=~(USER_OWNER | USER_MASTER | USER_BOTMAST | USER_UNSHARED);
81- mns.global &=~(USER_OWNER | USER_MASTER | USER_BOTMAST | USER_UNSHARED);
82+ pls.global &=~(USER_OWNER | USER_MASTER | USER_BOTMAST | USER_UNSHARED | USER_PROTECTED);
83+ mns.global &=~(USER_OWNER | USER_MASTER | USER_BOTMAST | USER_UNSHARED | USER_PROTECTED);
84
85 if (chan) {
86 pls.chan &= ~USER_OWNER;
87diff -burN eggdrop1.6.15/src/flags.h eggdrop1.6.15-multilevel_sharing/src/flags.h
88--- eggdrop1.6.15/src/flags.h Mon May 5 00:05:32 2003
89+++ eggdrop1.6.15-multilevel_sharing/src/flags.h Fri May 9 18:48:57 2003
90@@ -44,8 +44,8 @@
91
92 /*
93 * userflags:
94- * abcdefgh?jklmnopqr?tuvwxyz + user defined A-Z
95- * unused letters: is
96+ * abcdefgh?jklmnopqrstuvwxyz + user defined A-Z
97+ * unused letters: i
98 *
99 * botflags:
100 * 0123456789ab????ghi??l???p?rs???????
101@@ -55,7 +55,7 @@
102 * a??defg???klmno?qr??uv??yz + user defined A-Z
103 * unused letters: bchijpstwx
104 */
105-#define USER_VALID 0x03fbfeff /* Sum of all USER_ flags */
106+#define USER_VALID 0x03fffeff /* Sum of all USER_ flags */
107 #define CHAN_VALID 0x03777c79 /* Sum of all CHAN_ flags */
108 #define BOT_VALID 0x7fe689C1 /* Sum of all BOT_ flags */
109
110@@ -78,7 +78,7 @@
111 #define USER_PARTY 0x00008000 /* p user has party line access */
112 #define USER_QUIET 0x00010000 /* q user is global de-voice */
113 #define USER_DEHALFOP 0x00020000 /* r user is global de-halfop */
114-#define USER_S 0x00040000 /* s unused */
115+#define USER_PROTECTED 0x00040000 /* s user is protected (cannot be removed/changed by downlinks */
116 #define USER_BOTMAST 0x00080000 /* t user is botnet master */
117 #define USER_UNSHARED 0x00100000 /* u not shared with sharebots */
118 #define USER_VOICE 0x00200000 /* v user is +v on all channels */
119@@ -166,6 +166,7 @@
120 #define glob_hilite(x) ((x).global & USER_HIGHLITE)
121 #define chan_exempt(x) ((x).chan & USER_EXEMPT)
122 #define glob_exempt(x) ((x).global & USER_EXEMPT)
123+#define glob_protected(x) ((x).global & USER_PROTECTED)
124
125 #define bot_global(x) ((x).bot & BOT_GLOBAL)
126 #define bot_chan(x) ((x).chan & BOT_AGGRESSIVE)
127diff -burN eggdrop1.6.15/src/mod/share.mod/Makefile eggdrop1.6.15-multilevel_sharing/src/mod/share.mod/Makefile
128--- eggdrop1.6.15/src/mod/share.mod/Makefile Mon May 5 00:05:33 2003
129+++ eggdrop1.6.15-multilevel_sharing/src/mod/share.mod/Makefile Fri May 9 18:49:41 2003
130@@ -20,7 +20,7 @@
131 mv share.o ../
132
133 ../../../share.$(MOD_EXT): ../share.o
134- $(LD) -o ../../../share.$(MOD_EXT) ../share.o
135+ $(LD) -o ../../../share.$(MOD_EXT) ../share.o ${XLIBS}
136 $(STRIP) ../../../share.$(MOD_EXT)
137
138 depend:
139diff -burN eggdrop1.6.15/src/mod/share.mod/share.c eggdrop1.6.15-multilevel_sharing/src/mod/share.mod/share.c
140--- eggdrop1.6.15/src/mod/share.mod/share.c Mon May 5 00:05:33 2003
141+++ eggdrop1.6.15-multilevel_sharing/src/mod/share.mod/share.c Fri May 9 19:10:34 2003
142@@ -50,11 +50,14 @@
143 static int private_global = 0;
144 static int private_user = 0;
145 static char private_globals[50];
146+static char private_chanflags[50];
147 static int allow_resync = 0;
148 static struct flag_record fr = { 0, 0, 0, 0, 0, 0 };
149 static int resync_time = 900;
150 static int overr_local_bots = 0; /* Override local bots? */
151
152+static int permit_hub = 0; /* Permit hub to do changes even, when we use private_*, */
153+ /* but not private_globals (this have a reason) */
154
155 struct delay_mode {
156 struct delay_mode *next;
157@@ -93,6 +96,7 @@
158 static void q_resync(char *, struct chanset_t *);
159 static void cancel_user_xfer(int, void *);
160 static int private_globals_bitmask();
161+static int private_chanflags_bitmask();
162
163 #include "share.h"
164
165@@ -307,7 +311,7 @@
166 char *hand;
167 struct userrec *u;
168
169- if ((dcc[idx].status & STAT_SHARE) && !private_user) {
170+ if ((dcc[idx].status & STAT_SHARE) && (!private_user || PERMIT_HUB(idx))) {
171 hand = newsplit(&par);
172 u = get_user_by_handle(userlist, hand);
173 if (u && !(u->flags & USER_UNSHARED)) {
174@@ -329,26 +333,33 @@
175 int bfl, ofl;
176 module_entry *me;
177
178- if ((dcc[idx].status & STAT_SHARE) && !private_user) {
179+ if ((dcc[idx].status & STAT_SHARE) && (!private_user || PERMIT_HUB(idx))) {
180 hand = newsplit(&par);
181 u = get_user_by_handle(userlist, hand);
182- if (u && !(u->flags & USER_UNSHARED)) {
183+ if (u && !(u->flags & USER_UNSHARED) && !IS_USER_PROTECTED(u, idx)) {
184 atr = newsplit(&par);
185 cst = findchan_by_dname(par);
186 if (!par[0] || (cst && channel_shared(cst))) {
187- if (!(dcc[idx].status & STAT_GETTING) && (cst || !private_global))
188- shareout_but(cst, idx, "a %s %s %s\n", hand, atr, par);
189 noshare = 1;
190 if (par[0] && cst) {
191+ int pchbm = 0;
192+ if (!PERMIT_HUB(idx))
193+ pchbm = private_chanflags_bitmask();
194 fr.match = (FR_CHAN | FR_BOT);
195+ /* bot's sharing flags */
196 get_user_flagrec(dcc[idx].user, &fr, par);
197 if (bot_chan(fr) || bot_global(fr)) {
198 fr.match = FR_CHAN;
199 fr2.match = FR_CHAN;
200 break_down_flags(atr, &fr, 0);
201 get_user_flagrec(u, &fr2, par);
202- fr.chan = (fr2.chan & BOT_AGGRESSIVE) |
203- (fr.chan & ~BOT_AGGRESSIVE);
204+ fr.chan = (fr2.chan & BOT_AGGRESSIVE) | (fr.chan & ~BOT_AGGRESSIVE);
205+ /* Checking for forced flags */
206+ if ( (pchbm & USER_OWNER) && chan_owner(fr) && !chan_owner(fr2))
207+ fr.chan &= ~(USER_MASTER | USER_OP);
208+ else if ( (pchbm & USER_MASTER) && chan_master(fr) && !chan_master(fr2))
209+ fr.chan &= ~USER_OP;
210+ fr.chan = (fr2.chan & pchbm) | (fr.chan & ~pchbm);
211 set_user_flagrec(u, &fr, par);
212 check_dcc_chanattrs(u, par, fr.chan, fr2.chan);
213 noshare = 0;
214@@ -365,7 +376,7 @@
215 putlog(LOG_CMDS, "*",
216 "Rejected flags for unshared channel %s from %s",
217 par, dcc[idx].nick);
218- } else if (!private_global) {
219+ } else if (!private_global || PERMIT_HUB(idx)) {
220 int pgbm = private_globals_bitmask();
221
222 /* Don't let bot flags be altered */
223@@ -384,15 +395,17 @@
224 if (!(dcc[idx].status & STAT_GETTING))
225 putlog(LOG_CMDS, "*", "%s: chattr %s %s", dcc[idx].nick, hand, s);
226 if ((me = module_find("irc", 0, 0))) {
227+ struct chanset_t *tmpcst;
228 Function *func = me->funcs;
229-
230- for (cst = chanset; cst; cst = cst->next)
231- (func[IRC_RECHECK_CHANNEL]) (cst, 0);
232+ for (tmpcst = chanset; tmpcst; tmpcst = tmpcst->next)
233+ (func[IRC_RECHECK_CHANNEL]) (tmpcst, 0);
234 }
235 } else
236 putlog(LOG_CMDS, "*", "Rejected global flags for %s from %s",
237 hand, dcc[idx].nick);
238 noshare = 0;
239+ if (!(dcc[idx].status & STAT_GETTING) && (cst || !private_global || PERMIT_HUB(idx)))
240+ shareout_but(cst, idx, "a %s %s %s\n", hand, s, par);
241 }
242 }
243 }
244@@ -404,7 +417,7 @@
245 struct chanset_t *chan;
246 struct userrec *u;
247
248- if ((dcc[idx].status & STAT_SHARE) && !private_user) {
249+ if ((dcc[idx].status & STAT_SHARE) && (!private_user || PERMIT_HUB(idx))) {
250 user = newsplit(&par);
251 if ((u = get_user_by_handle(userlist, user))) {
252 chan = findchan_by_dname(par);
253@@ -433,7 +446,7 @@
254 struct chanset_t *chan;
255 struct userrec *u;
256
257- if ((dcc[idx].status & STAT_SHARE) && !private_user) {
258+ if ((dcc[idx].status & STAT_SHARE) && (!private_user || PERMIT_HUB(idx))) {
259 user = newsplit(&par);
260 if ((u = get_user_by_handle(userlist, user))) {
261 chan = findchan_by_dname(par);
262@@ -459,13 +472,13 @@
263 char *nick, *host, *pass, s[100];
264 struct userrec *u;
265
266- if ((dcc[idx].status & STAT_SHARE) && !private_user) {
267+ if ((dcc[idx].status & STAT_SHARE) && (!private_user || PERMIT_HUB(idx))) {
268 nick = newsplit(&par);
269 host = newsplit(&par);
270 pass = newsplit(&par);
271
272 if (!(u = get_user_by_handle(userlist, nick)) ||
273- !(u->flags & USER_UNSHARED)) {
274+ !((u->flags & USER_UNSHARED) || IS_USER_PROTECTED(u, idx))) {
275 fr.global = 0;
276
277 fr.match = FR_GLOBAL;
278@@ -510,9 +523,9 @@
279 struct userrec *u;
280
281 /* If user is a share bot, ignore command */
282- if ((dcc[idx].status & STAT_SHARE) && !private_user &&
283+ if ((dcc[idx].status & STAT_SHARE) && (!private_user || PERMIT_HUB(idx)) &&
284 (u = get_user_by_handle(userlist, par)) &&
285- !(u->flags & USER_UNSHARED) &&
286+ !(u->flags & USER_UNSHARED) && !IS_USER_PROTECTED(u, idx) &&
287 !((u->flags & USER_BOT) && (bot_flags(u) & BOT_SHARE))) {
288 noshare = 1;
289 if (deluser(par)) {
290@@ -528,10 +541,10 @@
291 char *hand;
292 struct userrec *u;
293
294- if ((dcc[idx].status & STAT_SHARE) && !private_user) {
295+ if ((dcc[idx].status & STAT_SHARE) && (!private_user || PERMIT_HUB(idx))) {
296 hand = newsplit(&par);
297 if ((u = get_user_by_handle(userlist, hand)) &&
298- !(u->flags & USER_UNSHARED)) {
299+ !(u->flags & USER_UNSHARED) && !IS_USER_PROTECTED(u, idx)) {
300 shareout_but(NULL, idx, "+h %s %s\n", hand, par);
301 set_user(&USERENTRY_HOSTS, u, par);
302 putlog(LOG_CMDS, "*", "%s: +host %s %s", dcc[idx].nick, hand, par);
303@@ -544,10 +557,10 @@
304 char *hand, p[32];
305 struct userrec *u;
306
307- if ((dcc[idx].status & STAT_SHARE) && !private_user) {
308+ if ((dcc[idx].status & STAT_SHARE) && (!private_user || PERMIT_HUB(idx))) {
309 hand = newsplit(&par);
310 if (!(u = get_user_by_handle(userlist, hand)) ||
311- !(u->flags & USER_UNSHARED)) {
312+ !((u->flags & USER_UNSHARED) || IS_USER_PROTECTED(u, idx))) {
313 if (!(dcc[idx].status & STAT_GETTING))
314 shareout_but(NULL, idx, "+bh %s %s\n", hand, par);
315 /* Add bot to userlist if not there */
316@@ -570,10 +583,10 @@
317 char *hand;
318 struct userrec *u;
319
320- if ((dcc[idx].status & STAT_SHARE) && !private_user) {
321+ if ((dcc[idx].status & STAT_SHARE) && (!private_user || PERMIT_HUB(idx))) {
322 hand = newsplit(&par);
323 if ((u = get_user_by_handle(userlist, hand)) &&
324- !(u->flags & USER_UNSHARED)) {
325+ !(u->flags & USER_UNSHARED) && !IS_USER_PROTECTED(u, idx)) {
326 shareout_but(NULL, idx, "-h %s %s\n", hand, par);
327 noshare = 1;
328 delhost_by_handle(hand, par);
329@@ -590,11 +603,11 @@
330 struct user_entry_type *uet;
331 struct user_entry *e;
332
333- if ((dcc[idx].status & STAT_SHARE) && !private_user) {
334+ if ((dcc[idx].status & STAT_SHARE) && (!private_user || PERMIT_HUB(idx))) {
335 key = newsplit(&par);
336 hand = newsplit(&par);
337 if (!(u = get_user_by_handle(userlist, hand)) ||
338- !(u->flags & USER_UNSHARED)) {
339+ !((u->flags & USER_UNSHARED) || IS_USER_PROTECTED(u,idx))) {
340 if (!(uet = find_entry_type(key)))
341 /* If it's not a supported type, forget it */
342 debug2("Ignore ch %s from %s (unknown type)", key, dcc[idx].nick);
343@@ -638,10 +651,10 @@
344 struct chanset_t *cst;
345 struct userrec *u;
346
347- if ((dcc[idx].status & STAT_SHARE) && !private_user) {
348+ if ((dcc[idx].status & STAT_SHARE) && (!private_user || PERMIT_HUB(idx))) {
349 hand = newsplit(&par);
350 if ((u = get_user_by_handle(userlist, hand)) &&
351- !(u->flags & USER_UNSHARED) && share_greet) {
352+ !(u->flags & USER_UNSHARED) && !IS_USER_PROTECTED(u, idx) && share_greet) {
353 chan = newsplit(&par);
354 cst = findchan_by_dname(chan);
355 fr.match = (FR_CHAN | FR_BOT);
356@@ -2033,11 +2046,13 @@
357 {"private-global", &private_global},
358 {"private-user", &private_user},
359 {"override-bots", &overr_local_bots},
360+ {"permit-hub", &permit_hub},
361 {NULL, NULL}
362 };
363
364 static tcl_strings my_strings[] = {
365 {"private-globals", private_globals, 50, 0},
366+ {"private-chanflags", private_chanflags, 50, 0},
367 {NULL, NULL, 0, 0}
368 };
369
370@@ -2056,6 +2071,39 @@
371 {NULL, NULL, NULL, NULL}
372 };
373
374+static int tcl_noshare STDVAR
375+{
376+ int res;
377+ char *x;
378+
379+ if (argc < 2) {
380+ Tcl_AppendResult(irp, "wrong # args: should be \"",
381+ argv[0], " arg ?arg ...?\"", NULL);
382+ return TCL_ERROR;
383+ }
384+
385+ Context;
386+
387+ noshare = 1;
388+
389+ x = Tcl_Merge(argc - 1, argv + 1);
390+ res = Tcl_Eval(irp, x);
391+ Tcl_Free((char *) x);
392+
393+ noshare = 0;
394+
395+ Context;
396+ return res;
397+}
398+
399+
400+static tcl_cmds my_tclcmds[] =
401+{
402+ {"noshare", tcl_noshare},
403+ {NULL, NULL}
404+};
405+
406+
407 static char *share_close()
408 {
409 int i;
410@@ -2088,6 +2136,7 @@
411 delay_free_mem();
412 rem_tcl_ints(my_ints);
413 rem_tcl_strings(my_strings);
414+ rem_tcl_commands(my_tclcmds);
415 rem_builtins(H_dcc, my_cmds);
416 rem_help_reference("share.help");
417 return NULL;
418@@ -2207,6 +2256,7 @@
419 DCC_BOT.kill = cancel_user_xfer;
420 add_tcl_ints(my_ints);
421 add_tcl_strings(my_strings);
422+ add_tcl_commands(my_tclcmds);
423 add_builtins(H_dcc, my_cmds);
424 uff_init();
425 uff_addtable(internal_uff_table);
426@@ -2220,3 +2270,11 @@
427 break_down_flags(private_globals, &fr, 0);
428 return fr.global;
429 }
430+
431+int private_chanflags_bitmask()
432+{
433+ struct flag_record fr = {FR_CHAN, 0, 0, 0, 0, 0};
434+
435+ break_down_flags(private_chanflags, &fr, 0);
436+ return fr.chan;
437+}
438diff -burN eggdrop1.6.15/src/mod/share.mod/share.h eggdrop1.6.15-multilevel_sharing/src/mod/share.mod/share.h
439--- eggdrop1.6.15/src/mod/share.mod/share.h Mon May 5 00:05:33 2003
440+++ eggdrop1.6.15-multilevel_sharing/src/mod/share.mod/share.h Fri May 9 19:11:25 2003
441@@ -52,6 +52,11 @@
442 * `priority'. */
443 } uff_table_t;
444
445+/* Do we allow hub to change user value <TaKeDa> */
446+#define PERMIT_HUB(x) (permit_hub && (dcc[x].status & STAT_AGGRESSIVE))
447+/* Is user protected and if he is do we allow changes? <TaKeDa> */
448+#define IS_USER_PROTECTED(user,idx) (!(dcc[idx].status & STAT_AGGRESSIVE) && (user->flags & USER_PROTECTED))
449+
450 #ifndef MAKING_SHARE
451 /* 4 - 7 */
452 #define finish_share ((void (*) (int))share_funcs[4])
453diff -burN eggdrop1.6.15/src/patch.h eggdrop1.6.15-multilevel_sharing/src/patch.h
454--- eggdrop1.6.15/src/patch.h Mon May 5 00:08:01 2003
455+++ eggdrop1.6.15-multilevel_sharing/src/patch.h Fri May 9 19:11:50 2003
456@@ -36,7 +36,7 @@
457 *
458 *
459 */
460-/* PATCH GOES HERE */
461+patch("multilevel_sharing");
462 /*
463 *
464 *
This page took 0.07654 seconds and 4 git commands to generate.