]> git.pld-linux.org Git - packages/eggdrop.git/blame - eggdrop-multilevel_sharing.patch
- more ru_RU -> ru, uk_UA -> uk changes
[packages/eggdrop.git] / eggdrop-multilevel_sharing.patch
CommitLineData
9f896ea6 1diff -burN eggdrop1.6.17.orig/doc/tcl-commands.doc eggdrop1.6.17/doc/tcl-commands.doc
42c14b21
AG
2--- eggdrop1.6.17.orig/doc/tcl-commands.doc 2004-11-01 12:48:53.000000000 +0100
3+++ eggdrop1.6.17/doc/tcl-commands.doc 2004-11-01 14:21:10.565861080 +0100
9f896ea6 4@@ -1258,6 +1258,17 @@
f09e0694
AG
5 Module: filesys
6
7
8+
9+***### SHARE MODULE COMMANDS ###***
10+
11+ noshare <command> [<arg1> <arg2> ...]
12+ Description: executes command with setting noshare = 1 in code,
13+ that means, if you i.e. do chattr using this command,
14+ bot will make changes on his userlist, but won't send changes
15+ to other bots. This is useful in some situations.
16+ Returns: whatever is returned by <command>
17+ Module: share
18+
19 *** MISCELLANEOUS COMMANDS ***
20
21 bind <type> <flags> <keyword/mask> [proc-name]
9f896ea6 22diff -burN eggdrop1.6.17.orig/doc/USERS eggdrop1.6.17/doc/USERS
42c14b21
AG
23--- eggdrop1.6.17.orig/doc/USERS 2004-11-01 12:48:53.000000000 +0100
24+++ eggdrop1.6.17/doc/USERS 2004-11-01 14:21:10.567860776 +0100
9f896ea6
AG
25@@ -77,6 +77,11 @@
26
27 u (unshared) user record is not sent to other bots.
28
29+ s (protected) is working similar like u flag, but changes can be made
30+ only from bot that is aggressively sharing with us (Hub).
31+ User cannot be changed by bot that is connected below
32+ this bot. (This flag can be useful in multilevel sharing)
33+
34 h (highlight) use bold text in help/text files.
35
36 All global flags other then u, h, b, c, x, j, and p are also
37diff -burN eggdrop1.6.17.orig/eggdrop.conf eggdrop1.6.17/eggdrop.conf
42c14b21
AG
38--- eggdrop1.6.17.orig/eggdrop.conf 2004-11-01 12:48:53.000000000 +0100
39+++ eggdrop1.6.17/eggdrop.conf 2004-11-01 14:21:10.570860320 +0100
9f896ea6 40@@ -1145,11 +1145,21 @@
f09e0694
AG
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
9f896ea6 62diff -burN eggdrop1.6.17.orig/help/cmds2.help eggdrop1.6.17/help/cmds2.help
42c14b21
AG
63--- eggdrop1.6.17.orig/help/cmds2.help 2004-11-01 12:48:53.000000000 +0100
64+++ eggdrop1.6.17/help/cmds2.help 2004-11-01 14:21:10.572860016 +0100
9f896ea6
AG
65@@ -372,6 +372,7 @@
66 %bp%b - party-line (user has access to the partyline)
67 %bq%b - quiet (user cannot gain voice on any channel)
68 %br%b - dehalfop (user cannot gain halfops on any channel)
69+ %bs%b - protected (when sharing changes can be made only by hub)
70 %bt%b - botnet master (user has access to features related to the botnet)
71 %bu%b - unshared (user's user record is not sent to other bots)
72 %bv%b - voice (user gets +v automatically on +autovoice channels)
73diff -burN eggdrop1.6.17.orig/src/cmds.c eggdrop1.6.17/src/cmds.c
42c14b21
AG
74--- eggdrop1.6.17.orig/src/cmds.c 2004-11-01 12:48:53.000000000 +0100
75+++ eggdrop1.6.17/src/cmds.c 2004-11-01 14:21:10.576859408 +0100
9f896ea6 76@@ -1551,8 +1551,8 @@
f09e0694
AG
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;
9f896ea6 87diff -burN eggdrop1.6.17.orig/src/flags.h eggdrop1.6.17/src/flags.h
42c14b21
AG
88--- eggdrop1.6.17.orig/src/flags.h 2004-11-01 12:48:53.000000000 +0100
89+++ eggdrop1.6.17/src/flags.h 2004-11-01 14:21:10.577859256 +0100
f09e0694
AG
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)
9f896ea6 127diff -burN eggdrop1.6.17.orig/src/mod/share.mod/share.c eggdrop1.6.17/src/mod/share.mod/share.c
42c14b21
AG
128--- eggdrop1.6.17.orig/src/mod/share.mod/share.c 2004-11-01 12:48:53.000000000 +0100
129+++ eggdrop1.6.17/src/mod/share.mod/share.c 2004-11-01 14:27:44.822924896 +0100
f09e0694
AG
130@@ -50,11 +50,14 @@
131 static int private_global = 0;
132 static int private_user = 0;
133 static char private_globals[50];
134+static char private_chanflags[50];
135 static int allow_resync = 0;
136 static struct flag_record fr = { 0, 0, 0, 0, 0, 0 };
137 static int resync_time = 900;
138 static int overr_local_bots = 0; /* Override local bots? */
139
140+static int permit_hub = 0; /* Permit hub to do changes even, when we use private_*, */
141+ /* but not private_globals (this have a reason) */
142
9f896ea6
AG
143 /* Store info for sharebots */
144 struct share_msgq {
145@@ -81,6 +84,7 @@
f09e0694
AG
146 static void q_resync(char *, struct chanset_t *);
147 static void cancel_user_xfer(int, void *);
148 static int private_globals_bitmask();
149+static int private_chanflags_bitmask();
150
151 #include "share.h"
152
9f896ea6 153@@ -314,7 +318,7 @@
f09e0694
AG
154 char *hand;
155 struct userrec *u;
156
157- if ((dcc[idx].status & STAT_SHARE) && !private_user) {
158+ if ((dcc[idx].status & STAT_SHARE) && (!private_user || PERMIT_HUB(idx))) {
159 hand = newsplit(&par);
160 u = get_user_by_handle(userlist, hand);
161 if (u && !(u->flags & USER_UNSHARED)) {
9f896ea6 162@@ -336,26 +340,33 @@
f09e0694
AG
163 int bfl, ofl;
164 module_entry *me;
165
166- if ((dcc[idx].status & STAT_SHARE) && !private_user) {
167+ if ((dcc[idx].status & STAT_SHARE) && (!private_user || PERMIT_HUB(idx))) {
168 hand = newsplit(&par);
169 u = get_user_by_handle(userlist, hand);
170- if (u && !(u->flags & USER_UNSHARED)) {
171+ if (u && !(u->flags & USER_UNSHARED) && !IS_USER_PROTECTED(u, idx)) {
172 atr = newsplit(&par);
173 cst = findchan_by_dname(par);
174 if (!par[0] || (cst && channel_shared(cst))) {
175- if (!(dcc[idx].status & STAT_GETTING) && (cst || !private_global))
176- shareout_but(cst, idx, "a %s %s %s\n", hand, atr, par);
177 noshare = 1;
178 if (par[0] && cst) {
179+ int pchbm = 0;
180+ if (!PERMIT_HUB(idx))
9f896ea6 181+ pchbm = private_chanflags_bitmask();
f09e0694
AG
182 fr.match = (FR_CHAN | FR_BOT);
183+ /* bot's sharing flags */
184 get_user_flagrec(dcc[idx].user, &fr, par);
185 if (bot_chan(fr) || bot_global(fr)) {
186 fr.match = FR_CHAN;
187 fr2.match = FR_CHAN;
188 break_down_flags(atr, &fr, 0);
189 get_user_flagrec(u, &fr2, par);
190- fr.chan = (fr2.chan & BOT_AGGRESSIVE) |
191- (fr.chan & ~BOT_AGGRESSIVE);
192+ fr.chan = (fr2.chan & BOT_AGGRESSIVE) | (fr.chan & ~BOT_AGGRESSIVE);
193+ /* Checking for forced flags */
194+ if ( (pchbm & USER_OWNER) && chan_owner(fr) && !chan_owner(fr2))
195+ fr.chan &= ~(USER_MASTER | USER_OP);
196+ else if ( (pchbm & USER_MASTER) && chan_master(fr) && !chan_master(fr2))
197+ fr.chan &= ~USER_OP;
198+ fr.chan = (fr2.chan & pchbm) | (fr.chan & ~pchbm);
199 set_user_flagrec(u, &fr, par);
200 check_dcc_chanattrs(u, par, fr.chan, fr2.chan);
201 noshare = 0;
9f896ea6 202@@ -372,7 +383,7 @@
f09e0694
AG
203 putlog(LOG_CMDS, "*",
204 "Rejected flags for unshared channel %s from %s",
205 par, dcc[idx].nick);
206- } else if (!private_global) {
9f896ea6 207+ } else if (!private_global || PERMIT_HUB(idx)) {
f09e0694
AG
208 int pgbm = private_globals_bitmask();
209
210 /* Don't let bot flags be altered */
9f896ea6 211@@ -391,15 +402,18 @@
f09e0694
AG
212 if (!(dcc[idx].status & STAT_GETTING))
213 putlog(LOG_CMDS, "*", "%s: chattr %s %s", dcc[idx].nick, hand, s);
214 if ((me = module_find("irc", 0, 0))) {
215+ struct chanset_t *tmpcst;
216 Function *func = me->funcs;
9f896ea6 217
f09e0694
AG
218- for (cst = chanset; cst; cst = cst->next)
219- (func[IRC_RECHECK_CHANNEL]) (cst, 0);
220+ for (tmpcst = chanset; tmpcst; tmpcst = tmpcst->next)
9f896ea6 221+ (func[IRC_RECHECK_CHANNEL]) (tmpcst, 0);
f09e0694
AG
222 }
223 } else
224 putlog(LOG_CMDS, "*", "Rejected global flags for %s from %s",
225 hand, dcc[idx].nick);
226 noshare = 0;
227+ if (!(dcc[idx].status & STAT_GETTING) && (cst || !private_global || PERMIT_HUB(idx)))
228+ shareout_but(cst, idx, "a %s %s %s\n", hand, s, par);
229 }
230 }
231 }
9f896ea6 232@@ -411,7 +425,7 @@
f09e0694
AG
233 struct chanset_t *chan;
234 struct userrec *u;
235
236- if ((dcc[idx].status & STAT_SHARE) && !private_user) {
237+ if ((dcc[idx].status & STAT_SHARE) && (!private_user || PERMIT_HUB(idx))) {
238 user = newsplit(&par);
239 if ((u = get_user_by_handle(userlist, user))) {
240 chan = findchan_by_dname(par);
9f896ea6 241@@ -440,7 +454,7 @@
f09e0694
AG
242 struct chanset_t *chan;
243 struct userrec *u;
244
245- if ((dcc[idx].status & STAT_SHARE) && !private_user) {
246+ if ((dcc[idx].status & STAT_SHARE) && (!private_user || PERMIT_HUB(idx))) {
247 user = newsplit(&par);
248 if ((u = get_user_by_handle(userlist, user))) {
249 chan = findchan_by_dname(par);
9f896ea6 250@@ -466,13 +480,13 @@
f09e0694
AG
251 char *nick, *host, *pass, s[100];
252 struct userrec *u;
253
254- if ((dcc[idx].status & STAT_SHARE) && !private_user) {
255+ if ((dcc[idx].status & STAT_SHARE) && (!private_user || PERMIT_HUB(idx))) {
256 nick = newsplit(&par);
257 host = newsplit(&par);
258 pass = newsplit(&par);
259
260 if (!(u = get_user_by_handle(userlist, nick)) ||
261- !(u->flags & USER_UNSHARED)) {
262+ !((u->flags & USER_UNSHARED) || IS_USER_PROTECTED(u, idx))) {
263 fr.global = 0;
264
265 fr.match = FR_GLOBAL;
9f896ea6 266@@ -517,9 +531,9 @@
f09e0694
AG
267 struct userrec *u;
268
269 /* If user is a share bot, ignore command */
270- if ((dcc[idx].status & STAT_SHARE) && !private_user &&
271+ if ((dcc[idx].status & STAT_SHARE) && (!private_user || PERMIT_HUB(idx)) &&
272 (u = get_user_by_handle(userlist, par)) &&
273- !(u->flags & USER_UNSHARED) &&
274+ !(u->flags & USER_UNSHARED) && !IS_USER_PROTECTED(u, idx) &&
275 !((u->flags & USER_BOT) && (bot_flags(u) & BOT_SHARE))) {
276 noshare = 1;
277 if (deluser(par)) {
9f896ea6 278@@ -535,10 +549,10 @@
f09e0694
AG
279 char *hand;
280 struct userrec *u;
281
282- if ((dcc[idx].status & STAT_SHARE) && !private_user) {
283+ if ((dcc[idx].status & STAT_SHARE) && (!private_user || PERMIT_HUB(idx))) {
284 hand = newsplit(&par);
285 if ((u = get_user_by_handle(userlist, hand)) &&
286- !(u->flags & USER_UNSHARED)) {
287+ !(u->flags & USER_UNSHARED) && !IS_USER_PROTECTED(u, idx)) {
288 shareout_but(NULL, idx, "+h %s %s\n", hand, par);
289 set_user(&USERENTRY_HOSTS, u, par);
290 putlog(LOG_CMDS, "*", "%s: +host %s %s", dcc[idx].nick, hand, par);
9f896ea6 291@@ -551,10 +565,10 @@
f09e0694
AG
292 char *hand, p[32];
293 struct userrec *u;
294
295- if ((dcc[idx].status & STAT_SHARE) && !private_user) {
296+ if ((dcc[idx].status & STAT_SHARE) && (!private_user || PERMIT_HUB(idx))) {
297 hand = newsplit(&par);
298 if (!(u = get_user_by_handle(userlist, hand)) ||
299- !(u->flags & USER_UNSHARED)) {
300+ !((u->flags & USER_UNSHARED) || IS_USER_PROTECTED(u, idx))) {
301 if (!(dcc[idx].status & STAT_GETTING))
302 shareout_but(NULL, idx, "+bh %s %s\n", hand, par);
303 /* Add bot to userlist if not there */
9f896ea6 304@@ -577,10 +591,10 @@
f09e0694
AG
305 char *hand;
306 struct userrec *u;
307
308- if ((dcc[idx].status & STAT_SHARE) && !private_user) {
309+ if ((dcc[idx].status & STAT_SHARE) && (!private_user || PERMIT_HUB(idx))) {
310 hand = newsplit(&par);
311 if ((u = get_user_by_handle(userlist, hand)) &&
312- !(u->flags & USER_UNSHARED)) {
313+ !(u->flags & USER_UNSHARED) && !IS_USER_PROTECTED(u, idx)) {
314 shareout_but(NULL, idx, "-h %s %s\n", hand, par);
315 noshare = 1;
316 delhost_by_handle(hand, par);
9f896ea6 317@@ -597,11 +611,11 @@
f09e0694
AG
318 struct user_entry_type *uet;
319 struct user_entry *e;
320
321- if ((dcc[idx].status & STAT_SHARE) && !private_user) {
322+ if ((dcc[idx].status & STAT_SHARE) && (!private_user || PERMIT_HUB(idx))) {
323 key = newsplit(&par);
324 hand = newsplit(&par);
325 if (!(u = get_user_by_handle(userlist, hand)) ||
326- !(u->flags & USER_UNSHARED)) {
327+ !((u->flags & USER_UNSHARED) || IS_USER_PROTECTED(u,idx))) {
328 if (!(uet = find_entry_type(key)))
329 /* If it's not a supported type, forget it */
330 debug2("Ignore ch %s from %s (unknown type)", key, dcc[idx].nick);
9f896ea6 331@@ -645,10 +659,10 @@
f09e0694
AG
332 struct chanset_t *cst;
333 struct userrec *u;
334
335- if ((dcc[idx].status & STAT_SHARE) && !private_user) {
336+ if ((dcc[idx].status & STAT_SHARE) && (!private_user || PERMIT_HUB(idx))) {
337 hand = newsplit(&par);
338 if ((u = get_user_by_handle(userlist, hand)) &&
339- !(u->flags & USER_UNSHARED) && share_greet) {
340+ !(u->flags & USER_UNSHARED) && !IS_USER_PROTECTED(u, idx) && share_greet) {
341 chan = newsplit(&par);
342 cst = findchan_by_dname(chan);
343 fr.match = (FR_CHAN | FR_BOT);
9f896ea6 344@@ -2039,11 +2053,13 @@
f09e0694
AG
345 {"private-global", &private_global},
346 {"private-user", &private_user},
347 {"override-bots", &overr_local_bots},
348+ {"permit-hub", &permit_hub},
349 {NULL, NULL}
350 };
351
352 static tcl_strings my_strings[] = {
353 {"private-globals", private_globals, 50, 0},
354+ {"private-chanflags", private_chanflags, 50, 0},
355 {NULL, NULL, 0, 0}
356 };
357
42c14b21 358@@ -2062,6 +2078,38 @@
f09e0694
AG
359 {NULL, NULL, NULL, NULL}
360 };
361
362+static int tcl_noshare STDVAR
363+{
364+ int res;
365+ char *x;
366+
367+ if (argc < 2) {
368+ Tcl_AppendResult(irp, "wrong # args: should be \"",
369+ argv[0], " arg ?arg ...?\"", NULL);
370+ return TCL_ERROR;
371+ }
372+
373+ Context;
374+
375+ noshare = 1;
376+
377+ x = Tcl_Merge(argc - 1, argv + 1);
378+ res = Tcl_Eval(irp, x);
379+ Tcl_Free((char *) x);
380+
381+ noshare = 0;
382+
383+ Context;
384+ return res;
385+}
386+
387+
388+static tcl_cmds my_tclcmds[] =
389+{
390+ {"noshare", tcl_noshare},
391+ {NULL, NULL}
42c14b21 392+};
f09e0694 393+
42c14b21 394 static char *share_close()
f09e0694
AG
395 {
396 int i;
42c14b21 397@@ -2094,6 +2142,7 @@
f09e0694
AG
398 delay_free_mem();
399 rem_tcl_ints(my_ints);
400 rem_tcl_strings(my_strings);
401+ rem_tcl_commands(my_tclcmds);
402 rem_builtins(H_dcc, my_cmds);
403 rem_help_reference("share.help");
404 return NULL;
42c14b21 405@@ -2213,6 +2262,7 @@
f09e0694
AG
406 DCC_BOT.kill = cancel_user_xfer;
407 add_tcl_ints(my_ints);
408 add_tcl_strings(my_strings);
409+ add_tcl_commands(my_tclcmds);
410 add_builtins(H_dcc, my_cmds);
411 uff_init();
412 uff_addtable(internal_uff_table);
42c14b21 413@@ -2226,3 +2276,11 @@
f09e0694
AG
414 break_down_flags(private_globals, &fr, 0);
415 return fr.global;
416 }
417+
418+int private_chanflags_bitmask()
419+{
420+ struct flag_record fr = {FR_CHAN, 0, 0, 0, 0, 0};
421+
422+ break_down_flags(private_chanflags, &fr, 0);
423+ return fr.chan;
424+}
9f896ea6 425diff -burN eggdrop1.6.17.orig/src/mod/share.mod/share.h eggdrop1.6.17/src/mod/share.mod/share.h
42c14b21
AG
426--- eggdrop1.6.17.orig/src/mod/share.mod/share.h 2004-11-01 12:48:53.000000000 +0100
427+++ eggdrop1.6.17/src/mod/share.mod/share.h 2004-11-01 14:21:10.583858344 +0100
f09e0694
AG
428@@ -52,6 +52,11 @@
429 * `priority'. */
430 } uff_table_t;
431
432+/* Do we allow hub to change user value <TaKeDa> */
433+#define PERMIT_HUB(x) (permit_hub && (dcc[x].status & STAT_AGGRESSIVE))
434+/* Is user protected and if he is do we allow changes? <TaKeDa> */
435+#define IS_USER_PROTECTED(user,idx) (!(dcc[idx].status & STAT_AGGRESSIVE) && (user->flags & USER_PROTECTED))
436+
437 #ifndef MAKING_SHARE
438 /* 4 - 7 */
439 #define finish_share ((void (*) (int))share_funcs[4])
9f896ea6 440diff -burN eggdrop1.6.17.orig/src/patch.h eggdrop1.6.17/src/patch.h
42c14b21
AG
441--- eggdrop1.6.17.orig/src/patch.h 2004-11-01 12:48:53.000000000 +0100
442+++ eggdrop1.6.17/src/patch.h 2004-11-01 14:21:10.584858192 +0100
f09e0694
AG
443@@ -36,7 +36,7 @@
444 *
445 *
446 */
447-/* PATCH GOES HERE */
448+patch("multilevel_sharing");
449 /*
450 *
451 *
This page took 0.121009 seconds and 4 git commands to generate.