From: ankry Date: Wed, 11 Jun 2003 13:57:18 +0000 (+0000) Subject: f0fd5dc004cc34ba0769e852036312ff multilevel_sharing1.6.15.patch X-Git-Tag: auto/ac/eggdrop-1_6_15-1~16 X-Git-Url: https://git.pld-linux.org/?a=commitdiff_plain;h=fb6bed58aef50cf8724fee7689ec1ad8ee2d9d08;p=packages%2Feggdrop.git f0fd5dc004cc34ba0769e852036312ff multilevel_sharing1.6.15.patch Changed files: multilevel_sharing1.6.15.patch -> 1.1 --- diff --git a/multilevel_sharing1.6.15.patch b/multilevel_sharing1.6.15.patch new file mode 100644 index 0000000..ef2b051 --- /dev/null +++ b/multilevel_sharing1.6.15.patch @@ -0,0 +1,464 @@ +diff -burN eggdrop1.6.15/doc/USERS eggdrop1.6.15-multilevel_sharing/doc/USERS +--- eggdrop1.6.15/doc/USERS Mon May 5 00:05:32 2003 ++++ eggdrop1.6.15-multilevel_sharing/doc/USERS Fri May 9 18:44:33 2003 +@@ -75,6 +75,11 @@ + + u (unshared) user record is not sent to other bots. + ++ s (protected) is working similar like u flag, but changes can be made ++ only from bot that is aggressively sharing with us (Hub). ++ User cannot be changed by bot that is connected below ++ this bot. (This flag can be useful in multilevel sharing) ++ + h (highlight) use bold text in help/text files. + + All global flags other then u, h, b, c, x, j, and p are also +diff -burN eggdrop1.6.15/doc/tcl-commands.doc eggdrop1.6.15-multilevel_sharing/doc/tcl-commands.doc +--- eggdrop1.6.15/doc/tcl-commands.doc Mon May 5 00:05:32 2003 ++++ eggdrop1.6.15-multilevel_sharing/doc/tcl-commands.doc Fri May 9 18:44:33 2003 +@@ -1245,6 +1245,17 @@ + Module: filesys + + ++ ++***### SHARE MODULE COMMANDS ###*** ++ ++ noshare [ ...] ++ Description: executes command with setting noshare = 1 in code, ++ that means, if you i.e. do chattr using this command, ++ bot will make changes on his userlist, but won't send changes ++ to other bots. This is useful in some situations. ++ Returns: whatever is returned by ++ Module: share ++ + *** MISCELLANEOUS COMMANDS *** + + bind [proc-name] +diff -burN eggdrop1.6.15/eggdrop.conf eggdrop1.6.15-multilevel_sharing/eggdrop.conf +--- eggdrop1.6.15/eggdrop.conf Mon May 5 00:05:32 2003 ++++ eggdrop1.6.15-multilevel_sharing/eggdrop.conf Fri May 9 18:44:33 2003 +@@ -1139,11 +1139,21 @@ + # changes from other bots should be ignored? + #set private-globals "mnot" + ++# When sharing user lists, which channel flags changes from other bots ++# should be ignored? ++#set private-chanflags "mn" ++ + # When sharing user lists, don't accept ANY userfile changes from other + # bots? Paranoid people should use this feature on their hub bot. This + # will force all userlist changes to be made via the hub. + #set private-user 0 + ++# When you have multilevel botnet, this option permits hub, to make changes, ++# even when private-global, private-chanflags and/or private-user are set. ++# NOTE: this option doesn't permit hub to force flags filtered by ++# private-globals ++#set permit-hub 1 ++ + # This setting makes the bot discard its own bot records in favor of + # the ones sent by the hub. + # NOTE: No passwords or botflags are shared, only ports and +diff -burN eggdrop1.6.15/help/cmds2.help eggdrop1.6.15-multilevel_sharing/help/cmds2.help +--- eggdrop1.6.15/help/cmds2.help Mon May 5 00:05:32 2003 ++++ eggdrop1.6.15-multilevel_sharing/help/cmds2.help Fri May 9 18:44:33 2003 +@@ -336,6 +336,7 @@ + p party-line (user has access to the partyline) + q global quiet (user does not get voice on +autovoice channels.) + r global dehalfop (user cannot gain halfops on any of the bot's channels) ++ s protected (when sharing changes can be made only by hub) + t botnet master (user has access to all features dealing with the botnet.) + u unshared (user record is not sent to other bots.) + v global voice (user get +v automatically on +autovoice channels) +diff -burN eggdrop1.6.15/src/cmds.c eggdrop1.6.15-multilevel_sharing/src/cmds.c +--- eggdrop1.6.15/src/cmds.c Mon May 5 00:05:32 2003 ++++ eggdrop1.6.15-multilevel_sharing/src/cmds.c Fri May 9 18:46:00 2003 +@@ -1556,8 +1556,8 @@ + mns.chan &= ~(BOT_SHARE); + } + if (!glob_owner(user)) { +- pls.global &=~(USER_OWNER | USER_MASTER | USER_BOTMAST | USER_UNSHARED); +- mns.global &=~(USER_OWNER | USER_MASTER | USER_BOTMAST | USER_UNSHARED); ++ pls.global &=~(USER_OWNER | USER_MASTER | USER_BOTMAST | USER_UNSHARED | USER_PROTECTED); ++ mns.global &=~(USER_OWNER | USER_MASTER | USER_BOTMAST | USER_UNSHARED | USER_PROTECTED); + + if (chan) { + pls.chan &= ~USER_OWNER; +diff -burN eggdrop1.6.15/src/flags.h eggdrop1.6.15-multilevel_sharing/src/flags.h +--- eggdrop1.6.15/src/flags.h Mon May 5 00:05:32 2003 ++++ eggdrop1.6.15-multilevel_sharing/src/flags.h Fri May 9 18:48:57 2003 +@@ -44,8 +44,8 @@ + + /* + * userflags: +- * abcdefgh?jklmnopqr?tuvwxyz + user defined A-Z +- * unused letters: is ++ * abcdefgh?jklmnopqrstuvwxyz + user defined A-Z ++ * unused letters: i + * + * botflags: + * 0123456789ab????ghi??l???p?rs??????? +@@ -55,7 +55,7 @@ + * a??defg???klmno?qr??uv??yz + user defined A-Z + * unused letters: bchijpstwx + */ +-#define USER_VALID 0x03fbfeff /* Sum of all USER_ flags */ ++#define USER_VALID 0x03fffeff /* Sum of all USER_ flags */ + #define CHAN_VALID 0x03777c79 /* Sum of all CHAN_ flags */ + #define BOT_VALID 0x7fe689C1 /* Sum of all BOT_ flags */ + +@@ -78,7 +78,7 @@ + #define USER_PARTY 0x00008000 /* p user has party line access */ + #define USER_QUIET 0x00010000 /* q user is global de-voice */ + #define USER_DEHALFOP 0x00020000 /* r user is global de-halfop */ +-#define USER_S 0x00040000 /* s unused */ ++#define USER_PROTECTED 0x00040000 /* s user is protected (cannot be removed/changed by downlinks */ + #define USER_BOTMAST 0x00080000 /* t user is botnet master */ + #define USER_UNSHARED 0x00100000 /* u not shared with sharebots */ + #define USER_VOICE 0x00200000 /* v user is +v on all channels */ +@@ -166,6 +166,7 @@ + #define glob_hilite(x) ((x).global & USER_HIGHLITE) + #define chan_exempt(x) ((x).chan & USER_EXEMPT) + #define glob_exempt(x) ((x).global & USER_EXEMPT) ++#define glob_protected(x) ((x).global & USER_PROTECTED) + + #define bot_global(x) ((x).bot & BOT_GLOBAL) + #define bot_chan(x) ((x).chan & BOT_AGGRESSIVE) +diff -burN eggdrop1.6.15/src/mod/share.mod/Makefile eggdrop1.6.15-multilevel_sharing/src/mod/share.mod/Makefile +--- eggdrop1.6.15/src/mod/share.mod/Makefile Mon May 5 00:05:33 2003 ++++ eggdrop1.6.15-multilevel_sharing/src/mod/share.mod/Makefile Fri May 9 18:49:41 2003 +@@ -20,7 +20,7 @@ + mv share.o ../ + + ../../../share.$(MOD_EXT): ../share.o +- $(LD) -o ../../../share.$(MOD_EXT) ../share.o ++ $(LD) -o ../../../share.$(MOD_EXT) ../share.o ${XLIBS} + $(STRIP) ../../../share.$(MOD_EXT) + + depend: +diff -burN eggdrop1.6.15/src/mod/share.mod/share.c eggdrop1.6.15-multilevel_sharing/src/mod/share.mod/share.c +--- eggdrop1.6.15/src/mod/share.mod/share.c Mon May 5 00:05:33 2003 ++++ eggdrop1.6.15-multilevel_sharing/src/mod/share.mod/share.c Fri May 9 19:10:34 2003 +@@ -50,11 +50,14 @@ + static int private_global = 0; + static int private_user = 0; + static char private_globals[50]; ++static char private_chanflags[50]; + static int allow_resync = 0; + static struct flag_record fr = { 0, 0, 0, 0, 0, 0 }; + static int resync_time = 900; + static int overr_local_bots = 0; /* Override local bots? */ + ++static int permit_hub = 0; /* Permit hub to do changes even, when we use private_*, */ ++ /* but not private_globals (this have a reason) */ + + struct delay_mode { + struct delay_mode *next; +@@ -93,6 +96,7 @@ + static void q_resync(char *, struct chanset_t *); + static void cancel_user_xfer(int, void *); + static int private_globals_bitmask(); ++static int private_chanflags_bitmask(); + + #include "share.h" + +@@ -307,7 +311,7 @@ + char *hand; + struct userrec *u; + +- if ((dcc[idx].status & STAT_SHARE) && !private_user) { ++ if ((dcc[idx].status & STAT_SHARE) && (!private_user || PERMIT_HUB(idx))) { + hand = newsplit(&par); + u = get_user_by_handle(userlist, hand); + if (u && !(u->flags & USER_UNSHARED)) { +@@ -329,26 +333,33 @@ + int bfl, ofl; + module_entry *me; + +- if ((dcc[idx].status & STAT_SHARE) && !private_user) { ++ if ((dcc[idx].status & STAT_SHARE) && (!private_user || PERMIT_HUB(idx))) { + hand = newsplit(&par); + u = get_user_by_handle(userlist, hand); +- if (u && !(u->flags & USER_UNSHARED)) { ++ if (u && !(u->flags & USER_UNSHARED) && !IS_USER_PROTECTED(u, idx)) { + atr = newsplit(&par); + cst = findchan_by_dname(par); + if (!par[0] || (cst && channel_shared(cst))) { +- if (!(dcc[idx].status & STAT_GETTING) && (cst || !private_global)) +- shareout_but(cst, idx, "a %s %s %s\n", hand, atr, par); + noshare = 1; + if (par[0] && cst) { ++ int pchbm = 0; ++ if (!PERMIT_HUB(idx)) ++ pchbm = private_chanflags_bitmask(); + fr.match = (FR_CHAN | FR_BOT); ++ /* bot's sharing flags */ + get_user_flagrec(dcc[idx].user, &fr, par); + if (bot_chan(fr) || bot_global(fr)) { + fr.match = FR_CHAN; + fr2.match = FR_CHAN; + break_down_flags(atr, &fr, 0); + get_user_flagrec(u, &fr2, par); +- fr.chan = (fr2.chan & BOT_AGGRESSIVE) | +- (fr.chan & ~BOT_AGGRESSIVE); ++ fr.chan = (fr2.chan & BOT_AGGRESSIVE) | (fr.chan & ~BOT_AGGRESSIVE); ++ /* Checking for forced flags */ ++ if ( (pchbm & USER_OWNER) && chan_owner(fr) && !chan_owner(fr2)) ++ fr.chan &= ~(USER_MASTER | USER_OP); ++ else if ( (pchbm & USER_MASTER) && chan_master(fr) && !chan_master(fr2)) ++ fr.chan &= ~USER_OP; ++ fr.chan = (fr2.chan & pchbm) | (fr.chan & ~pchbm); + set_user_flagrec(u, &fr, par); + check_dcc_chanattrs(u, par, fr.chan, fr2.chan); + noshare = 0; +@@ -365,7 +376,7 @@ + putlog(LOG_CMDS, "*", + "Rejected flags for unshared channel %s from %s", + par, dcc[idx].nick); +- } else if (!private_global) { ++ } else if (!private_global || PERMIT_HUB(idx)) { + int pgbm = private_globals_bitmask(); + + /* Don't let bot flags be altered */ +@@ -384,15 +395,17 @@ + if (!(dcc[idx].status & STAT_GETTING)) + putlog(LOG_CMDS, "*", "%s: chattr %s %s", dcc[idx].nick, hand, s); + if ((me = module_find("irc", 0, 0))) { ++ struct chanset_t *tmpcst; + Function *func = me->funcs; +- +- for (cst = chanset; cst; cst = cst->next) +- (func[IRC_RECHECK_CHANNEL]) (cst, 0); ++ for (tmpcst = chanset; tmpcst; tmpcst = tmpcst->next) ++ (func[IRC_RECHECK_CHANNEL]) (tmpcst, 0); + } + } else + putlog(LOG_CMDS, "*", "Rejected global flags for %s from %s", + hand, dcc[idx].nick); + noshare = 0; ++ if (!(dcc[idx].status & STAT_GETTING) && (cst || !private_global || PERMIT_HUB(idx))) ++ shareout_but(cst, idx, "a %s %s %s\n", hand, s, par); + } + } + } +@@ -404,7 +417,7 @@ + struct chanset_t *chan; + struct userrec *u; + +- if ((dcc[idx].status & STAT_SHARE) && !private_user) { ++ if ((dcc[idx].status & STAT_SHARE) && (!private_user || PERMIT_HUB(idx))) { + user = newsplit(&par); + if ((u = get_user_by_handle(userlist, user))) { + chan = findchan_by_dname(par); +@@ -433,7 +446,7 @@ + struct chanset_t *chan; + struct userrec *u; + +- if ((dcc[idx].status & STAT_SHARE) && !private_user) { ++ if ((dcc[idx].status & STAT_SHARE) && (!private_user || PERMIT_HUB(idx))) { + user = newsplit(&par); + if ((u = get_user_by_handle(userlist, user))) { + chan = findchan_by_dname(par); +@@ -459,13 +472,13 @@ + char *nick, *host, *pass, s[100]; + struct userrec *u; + +- if ((dcc[idx].status & STAT_SHARE) && !private_user) { ++ if ((dcc[idx].status & STAT_SHARE) && (!private_user || PERMIT_HUB(idx))) { + nick = newsplit(&par); + host = newsplit(&par); + pass = newsplit(&par); + + if (!(u = get_user_by_handle(userlist, nick)) || +- !(u->flags & USER_UNSHARED)) { ++ !((u->flags & USER_UNSHARED) || IS_USER_PROTECTED(u, idx))) { + fr.global = 0; + + fr.match = FR_GLOBAL; +@@ -510,9 +523,9 @@ + struct userrec *u; + + /* If user is a share bot, ignore command */ +- if ((dcc[idx].status & STAT_SHARE) && !private_user && ++ if ((dcc[idx].status & STAT_SHARE) && (!private_user || PERMIT_HUB(idx)) && + (u = get_user_by_handle(userlist, par)) && +- !(u->flags & USER_UNSHARED) && ++ !(u->flags & USER_UNSHARED) && !IS_USER_PROTECTED(u, idx) && + !((u->flags & USER_BOT) && (bot_flags(u) & BOT_SHARE))) { + noshare = 1; + if (deluser(par)) { +@@ -528,10 +541,10 @@ + char *hand; + struct userrec *u; + +- if ((dcc[idx].status & STAT_SHARE) && !private_user) { ++ if ((dcc[idx].status & STAT_SHARE) && (!private_user || PERMIT_HUB(idx))) { + hand = newsplit(&par); + if ((u = get_user_by_handle(userlist, hand)) && +- !(u->flags & USER_UNSHARED)) { ++ !(u->flags & USER_UNSHARED) && !IS_USER_PROTECTED(u, idx)) { + shareout_but(NULL, idx, "+h %s %s\n", hand, par); + set_user(&USERENTRY_HOSTS, u, par); + putlog(LOG_CMDS, "*", "%s: +host %s %s", dcc[idx].nick, hand, par); +@@ -544,10 +557,10 @@ + char *hand, p[32]; + struct userrec *u; + +- if ((dcc[idx].status & STAT_SHARE) && !private_user) { ++ if ((dcc[idx].status & STAT_SHARE) && (!private_user || PERMIT_HUB(idx))) { + hand = newsplit(&par); + if (!(u = get_user_by_handle(userlist, hand)) || +- !(u->flags & USER_UNSHARED)) { ++ !((u->flags & USER_UNSHARED) || IS_USER_PROTECTED(u, idx))) { + if (!(dcc[idx].status & STAT_GETTING)) + shareout_but(NULL, idx, "+bh %s %s\n", hand, par); + /* Add bot to userlist if not there */ +@@ -570,10 +583,10 @@ + char *hand; + struct userrec *u; + +- if ((dcc[idx].status & STAT_SHARE) && !private_user) { ++ if ((dcc[idx].status & STAT_SHARE) && (!private_user || PERMIT_HUB(idx))) { + hand = newsplit(&par); + if ((u = get_user_by_handle(userlist, hand)) && +- !(u->flags & USER_UNSHARED)) { ++ !(u->flags & USER_UNSHARED) && !IS_USER_PROTECTED(u, idx)) { + shareout_but(NULL, idx, "-h %s %s\n", hand, par); + noshare = 1; + delhost_by_handle(hand, par); +@@ -590,11 +603,11 @@ + struct user_entry_type *uet; + struct user_entry *e; + +- if ((dcc[idx].status & STAT_SHARE) && !private_user) { ++ if ((dcc[idx].status & STAT_SHARE) && (!private_user || PERMIT_HUB(idx))) { + key = newsplit(&par); + hand = newsplit(&par); + if (!(u = get_user_by_handle(userlist, hand)) || +- !(u->flags & USER_UNSHARED)) { ++ !((u->flags & USER_UNSHARED) || IS_USER_PROTECTED(u,idx))) { + if (!(uet = find_entry_type(key))) + /* If it's not a supported type, forget it */ + debug2("Ignore ch %s from %s (unknown type)", key, dcc[idx].nick); +@@ -638,10 +651,10 @@ + struct chanset_t *cst; + struct userrec *u; + +- if ((dcc[idx].status & STAT_SHARE) && !private_user) { ++ if ((dcc[idx].status & STAT_SHARE) && (!private_user || PERMIT_HUB(idx))) { + hand = newsplit(&par); + if ((u = get_user_by_handle(userlist, hand)) && +- !(u->flags & USER_UNSHARED) && share_greet) { ++ !(u->flags & USER_UNSHARED) && !IS_USER_PROTECTED(u, idx) && share_greet) { + chan = newsplit(&par); + cst = findchan_by_dname(chan); + fr.match = (FR_CHAN | FR_BOT); +@@ -2033,11 +2046,13 @@ + {"private-global", &private_global}, + {"private-user", &private_user}, + {"override-bots", &overr_local_bots}, ++ {"permit-hub", &permit_hub}, + {NULL, NULL} + }; + + static tcl_strings my_strings[] = { + {"private-globals", private_globals, 50, 0}, ++ {"private-chanflags", private_chanflags, 50, 0}, + {NULL, NULL, 0, 0} + }; + +@@ -2056,6 +2071,39 @@ + {NULL, NULL, NULL, NULL} + }; + ++static int tcl_noshare STDVAR ++{ ++ int res; ++ char *x; ++ ++ if (argc < 2) { ++ Tcl_AppendResult(irp, "wrong # args: should be \"", ++ argv[0], " arg ?arg ...?\"", NULL); ++ return TCL_ERROR; ++ } ++ ++ Context; ++ ++ noshare = 1; ++ ++ x = Tcl_Merge(argc - 1, argv + 1); ++ res = Tcl_Eval(irp, x); ++ Tcl_Free((char *) x); ++ ++ noshare = 0; ++ ++ Context; ++ return res; ++} ++ ++ ++static tcl_cmds my_tclcmds[] = ++{ ++ {"noshare", tcl_noshare}, ++ {NULL, NULL} ++}; ++ ++ + static char *share_close() + { + int i; +@@ -2088,6 +2136,7 @@ + delay_free_mem(); + rem_tcl_ints(my_ints); + rem_tcl_strings(my_strings); ++ rem_tcl_commands(my_tclcmds); + rem_builtins(H_dcc, my_cmds); + rem_help_reference("share.help"); + return NULL; +@@ -2207,6 +2256,7 @@ + DCC_BOT.kill = cancel_user_xfer; + add_tcl_ints(my_ints); + add_tcl_strings(my_strings); ++ add_tcl_commands(my_tclcmds); + add_builtins(H_dcc, my_cmds); + uff_init(); + uff_addtable(internal_uff_table); +@@ -2220,3 +2270,11 @@ + break_down_flags(private_globals, &fr, 0); + return fr.global; + } ++ ++int private_chanflags_bitmask() ++{ ++ struct flag_record fr = {FR_CHAN, 0, 0, 0, 0, 0}; ++ ++ break_down_flags(private_chanflags, &fr, 0); ++ return fr.chan; ++} +diff -burN eggdrop1.6.15/src/mod/share.mod/share.h eggdrop1.6.15-multilevel_sharing/src/mod/share.mod/share.h +--- eggdrop1.6.15/src/mod/share.mod/share.h Mon May 5 00:05:33 2003 ++++ eggdrop1.6.15-multilevel_sharing/src/mod/share.mod/share.h Fri May 9 19:11:25 2003 +@@ -52,6 +52,11 @@ + * `priority'. */ + } uff_table_t; + ++/* Do we allow hub to change user value */ ++#define PERMIT_HUB(x) (permit_hub && (dcc[x].status & STAT_AGGRESSIVE)) ++/* Is user protected and if he is do we allow changes? */ ++#define IS_USER_PROTECTED(user,idx) (!(dcc[idx].status & STAT_AGGRESSIVE) && (user->flags & USER_PROTECTED)) ++ + #ifndef MAKING_SHARE + /* 4 - 7 */ + #define finish_share ((void (*) (int))share_funcs[4]) +diff -burN eggdrop1.6.15/src/patch.h eggdrop1.6.15-multilevel_sharing/src/patch.h +--- eggdrop1.6.15/src/patch.h Mon May 5 00:08:01 2003 ++++ eggdrop1.6.15-multilevel_sharing/src/patch.h Fri May 9 19:11:50 2003 +@@ -36,7 +36,7 @@ + * + * + */ +-/* PATCH GOES HERE */ ++patch("multilevel_sharing"); + /* + * + *