فهرست منبع

* Moved deflag config code to config.c from userrec.c
* Added config for mop
* Added deflag_user for mdop/mop in first-thing checks
* Possibly fixed mass deop-kick excess flood issue


svn: 297

Bryan Drewery 22 سال پیش
والد
کامیت
034caf5944
5فایلهای تغییر یافته به همراه184 افزوده شده و 191 حذف شده
  1. 162 1
      src/config.c
  2. 5 4
      src/flags.h
  3. 1 2
      src/main.c
  4. 16 12
      src/mod/irc.mod/mode.c
  5. 0 172
      src/userrec.c

+ 162 - 1
src/config.c

@@ -72,6 +72,158 @@ struct cfg_entry CFG_CMDPREFIX = {
   cmdprefix_changed, cmdprefix_changed, cmdprefix_describe
 };
 
+
+struct cfg_entry
+  CFG_BADCOOKIE,
+  CFG_MANUALOP,
+#ifdef G_MEAN
+  CFG_MEANDEOP,
+  CFG_MEANKICK,
+  CFG_MEANBAN,
+#endif /* G_MEAN */
+  CFG_MDOP,
+  CFG_MOP;
+
+
+void deflag_describe(struct cfg_entry *cfgent, int idx)
+{
+  if (cfgent == &CFG_BADCOOKIE)
+    dprintf(idx, STR("bad-cookie decides what happens to a bot if it does an illegal op (no/incorrect op cookie)\n"));
+  else if (cfgent==&CFG_MANUALOP)
+    dprintf(idx, STR("manop decides what happens to a user doing a manual op in a -manop channel\n"));
+#ifdef G_MEAN
+  else if (cfgent==&CFG_MEANDEOP)
+    dprintf(idx, STR("mean-deop decides what happens to a user deopping a bot in a +mean channel\n"));
+  else if (cfgent==&CFG_MEANKICK)
+    dprintf(idx, STR("mean-kick decides what happens to a user kicking a bot in a +mean channel\n"));
+  else if (cfgent==&CFG_MEANBAN)
+    dprintf(idx, STR("mean-ban decides what happens to a user banning a bot in a +mean channel\n"));
+#endif /* G_MEAN */
+  else if (cfgent==&CFG_MDOP)
+    dprintf(idx, STR("mdop decides what happens to a user doing a mass deop\n"));
+  else if (cfgent==&CFG_MOP)
+    dprintf(idx, STR("mop decides what happens to a user doing a mass op\n"));
+  dprintf(idx, STR("Valid settings are: ignore (No flag changes), deop (set flags to +d), kick (set flags to +dk) or delete (remove from userlist)\n"));
+}
+
+void deflag_changed(struct cfg_entry *entry, char *oldval, int *valid) 
+{
+  char *p = (char *) entry->gdata;
+  if (!p)
+    return;
+  if (strcmp(p, STR("ignore")) && strcmp(p, STR("deop")) && strcmp(p, STR("kick")) && strcmp(p, STR("delete")))
+    *valid=0;
+}
+
+struct cfg_entry CFG_BADCOOKIE = {
+  "bad-cookie", CFGF_GLOBAL, NULL, NULL,
+  deflag_changed, NULL, deflag_describe
+};
+
+struct cfg_entry CFG_MANUALOP = {
+  "manop", CFGF_GLOBAL, NULL, NULL,
+  deflag_changed, NULL, deflag_describe
+};
+
+#ifdef G_MEAN
+struct cfg_entry CFG_MEANDEOP = {
+  "mean-deop", CFGF_GLOBAL, NULL, NULL,
+  deflag_changed, NULL, deflag_describe
+};
+
+
+struct cfg_entry CFG_MEANKICK = {
+  "mean-kick", CFGF_GLOBAL, NULL, NULL,
+  deflag_changed, NULL, deflag_describe
+};
+
+struct cfg_entry CFG_MEANBAN = {
+  "mean-ban", CFGF_GLOBAL, NULL, NULL,
+  deflag_changed, NULL, deflag_describe
+};
+#endif /* G_MEAN */
+
+struct cfg_entry CFG_MDOP = {
+  "mdop", CFGF_GLOBAL, NULL, NULL,
+  deflag_changed, NULL, deflag_describe
+};
+
+struct cfg_entry CFG_MOP = {
+  "mop", CFGF_GLOBAL, NULL, NULL,
+  deflag_changed, NULL, deflag_describe
+};
+
+void deflag_user(struct userrec *u, int why, char *msg, struct chanset_t *chan)
+{
+  char tmp[256], tmp2[1024];
+  struct cfg_entry *ent = NULL;
+
+  struct flag_record fr = {FR_GLOBAL, FR_CHAN, 0, 0, 0};
+
+  if (!u)
+    return;
+
+  switch (why) {
+  case DEFLAG_BADCOOKIE:
+    strcpy(tmp, STR("Bad op cookie"));
+    ent = &CFG_BADCOOKIE;
+    break;
+  case DEFLAG_MANUALOP:
+    strcpy(tmp, STR("Manual op in -manop channel"));
+    ent = &CFG_MANUALOP;
+    break;
+#ifdef G_MEAN
+  case DEFLAG_MEAN_DEOP:
+    strcpy(tmp, STR("Deopped bot in +mean channel"));
+    ent = &CFG_MEANDEOP;
+    break;
+  case DEFLAG_MEAN_KICK:
+    strcpy(tmp, STR("Kicked bot in +mean channel"));
+    ent = &CFG_MEANDEOP;
+    break;
+  case DEFLAG_MEAN_BAN:
+    strcpy(tmp, STR("Banned bot in +mean channel"));
+    ent = &CFG_MEANDEOP;
+    break;
+#endif /* G_MEAN */
+  case DEFLAG_MDOP:
+    strcpy(tmp, STR("Mass deop"));
+    ent = &CFG_MDOP;
+    break;
+  case DEFLAG_MOP:
+    strcpy(tmp, STR("Mass op"));
+    ent = &CFG_MOP;
+    break;
+  default:
+    ent = NULL;
+    sprintf(tmp, STR("Reason #%i"), why);
+  }
+  if (ent && ent->gdata && !strcmp(ent->gdata, STR("deop"))) {
+    putlog(LOG_WARN, "*",  STR("Setting %s +d (%s): %s\n"), u->handle, tmp, msg);
+    sprintf(tmp2, STR("+d: %s (%s)"), tmp, msg);
+    set_user(&USERENTRY_COMMENT, u, tmp2);
+    get_user_flagrec(u, &fr, chan->dname);
+    fr.global = USER_DEOP;
+    fr.chan = USER_DEOP;
+    set_user_flagrec(u, &fr, chan->dname);
+  } else if (ent && ent->gdata && !strcmp(ent->gdata, STR("kick"))) {
+    putlog(LOG_WARN, "*",  STR("Setting %s +dk (%s): %s\n"), u->handle, tmp, msg);
+    sprintf(tmp2, STR("+dk: %s (%s)"), tmp, msg);
+    set_user(&USERENTRY_COMMENT, u, tmp2);
+    get_user_flagrec(u, &fr, chan->dname);
+    fr.global = USER_DEOP | USER_KICK;
+    fr.chan = USER_DEOP | USER_KICK;
+    set_user_flagrec(u, &fr, chan->dname);
+  } else if (ent && ent->gdata && !strcmp(ent->gdata, STR("delete"))) {
+    putlog(LOG_WARN, "*",  STR("Deleting %s (%s): %s\n"), u->handle, tmp, msg);
+    deluser(u->handle);
+  } else {
+    putlog(LOG_WARN, "*",  STR("No user flag effects for %s (%s): %s\n"), u->handle, tmp, msg);
+    sprintf(tmp2, STR("Warning: %s (%s)"), tmp, msg);
+    set_user(&USERENTRY_COMMENT, u, tmp2);
+  }
+}
+
 void misc_describe(struct cfg_entry *cfgent, int idx)
 {
   int i = 0;
@@ -186,7 +338,7 @@ struct cfg_entry CFG_PROCESSLIST = {
 
 #ifdef S_DCCPASS
 struct cmd_pass *cmdpass = NULL;
-#endif
+#endif /* S_DCCPASS */
 
 /* this is cfg shit from servers/irc/ctcp because hub doesnt load
  * these mods */
@@ -405,6 +557,15 @@ void init_config()
   add_cfg(&CFG_BADPROCESS);
   add_cfg(&CFG_PROCESSLIST);
 #endif /* S_PROCESSCHECK */
+  add_cfg(&CFG_BADCOOKIE);
+  add_cfg(&CFG_MANUALOP);
+#ifdef G_MEAN
+  add_cfg(&CFG_MEANDEOP);
+  add_cfg(&CFG_MEANKICK);
+  add_cfg(&CFG_MEANBAN);
+#endif /* G_MEAN */
+  add_cfg(&CFG_MDOP);
+  add_cfg(&CFG_MOP);
 #ifdef HUB
   add_cfg(&CFG_NICK);
   add_cfg(&CFG_SERVERS);

+ 5 - 4
src/flags.h

@@ -45,11 +45,12 @@ struct flag_record {
 #define DEFLAG_BADCOOKIE   1
 #define DEFLAG_MANUALOP    2
 #ifdef G_MEAN
-#define DEFLAG_MEAN_DEOP   3
-#define DEFLAG_MEAN_KICK   4
-#define DEFLAG_MEAN_BAN    5
-#endif
+#  define DEFLAG_MEAN_DEOP   3
+#  define DEFLAG_MEAN_KICK   4
+#  define DEFLAG_MEAN_BAN    5
+#endif /* G_MEAN */
 #define DEFLAG_MDOP        6
+#define DEFLAG_MOP	   7
 
 #define USER_VALID 0x03ffffff	/* all USER_ flags in use              */
 #define CHAN_VALID 0x03ffffff	/* all flags that can be chan specific */

+ 1 - 2
src/main.c

@@ -993,7 +993,7 @@ void restart_chons();
 void check_static(char *, char *(*)());
 
 #include "mod/static.h"
-int init_userrec(), init_mem(), init_dcc_max(), init_userent(), init_misc(), init_auth(), init_config(), init_bots(),
+int init_mem(), init_dcc_max(), init_userent(), init_misc(), init_auth(), init_config(), init_bots(),
  init_net(), init_modules(), init_tcl(int, char **), init_botcmd(), init_settings();
 
 void got_ed(char *which, char *in, char *out)
@@ -1480,7 +1480,6 @@ int main(int argc, char **argv)
   init_tcl(argc, argv);
   init_auth();
   init_config();
-  init_userrec();
   if (backgrd)
     bg_prepare_split();
   init_botcmd();

+ 16 - 12
src/mod/irc.mod/mode.c

@@ -1275,29 +1275,33 @@ static int gotmode(char *from, char *msg)
       if ((chan) && (deops >= 3)) {
         if ((!ufrom) || (!(ufrom->flags & USER_BOT))) {
           if (ROLE_KICK_MDOP) {
-            m=ismember(chan, nfrom);
-            if (!m || !chan_sentkick(m)) {
-/* FIXME: A COMMON EXCESS FLOOD */
+            m = ismember(chan, nfrom);
+            if (m && !chan_sentkick(m)) {
+              m->flags |= SENTKICK;
               sprintf(tmp, STR("KICK %s %s :%s%s\n"), chan->name, nfrom, kickprefix, kickreason(KICK_MASSDEOP));
               tputs(servi, tmp, strlen(tmp));
-              if (m)
-                m->flags |= SENTKICK;
+              if (ufrom) {
+                sprintf(tmp, STR("Mass deop on %s by %s"), chan->dname, nfrom);
+                deflag_user(ufrom, DEFLAG_MDOP, tmp, chan);
+              }
             }
           }
         }
       }
-
       /* check for mop */
       if (chan && (ops >= 3)) {
         if (channel_nomop(chan)) {
           if ((!ufrom) || (!(ufrom->flags & USER_BOT))) {
             if (ROLE_KICK_MDOP) {
-              m=ismember(chan, nfrom);
-              if (!m || !chan_sentkick(m)) {
+              m = ismember(chan, nfrom);
+              if (m && !chan_sentkick(m)) {
+                m->flags |= SENTKICK;
                 sprintf(tmp, STR("KICK %s %s :%s%s\n"), chan->name, nfrom, kickprefix, kickreason(KICK_MANUALOP));
                 tputs(servi, tmp, strlen(tmp));
-                if (m)
-                  m->flags |= SENTKICK;
+                if (ufrom) {
+                  sprintf(tmp, STR("Mass op on %s by %s"), chan->dname, nfrom);
+                  deflag_user(ufrom, DEFLAG_MOP, tmp, chan);
+                }
               }
             }
           }
@@ -1307,9 +1311,9 @@ static int gotmode(char *from, char *msg)
       if (chan && ops && (ufrom) && (ufrom->flags & USER_BOT) && !channel_fastop(chan) && !channel_take(chan)) {
         int isbadop = 0;
         if ((modecnt != 2) || (strncmp(modes[0], "+o", 2)) ||
-            (strncmp(modes[1], "-b", 2)))
+            (strncmp(modes[1], "-b", 2))) {
           isbadop = 1;
-        else {
+        } else {
           char enccookie[25], plaincookie[25], key[NICKLEN + 20], goodcookie[25];
 
           /* -b *!*@[...] */

+ 0 - 172
src/userrec.c

@@ -860,175 +860,3 @@ void user_del_chan(char *dname)
   }
 }
 
-struct cfg_entry
-  CFG_BADCOOKIE,
-  CFG_MANUALOP,
-#ifdef G_MEAN
-  CFG_MEANDEOP,
-  CFG_MEANKICK,
-  CFG_MEANBAN,
-#endif /* G_MEAN */
-  CFG_MDOP;
-
-int deflag_dontshare=0;
-char deflag_tmp[20];
-
-#define DEFL_IGNORE 0
-#define DEFL_DEOP 1
-#define DEFL_KICK 2
-#define DEFL_DELETE 3
-
-
-void deflag_describe(struct cfg_entry *cfgent, int idx)
-{
-  if (cfgent == &CFG_BADCOOKIE)
-    dprintf(idx, STR("bad-cookie decides what happens to a bot if it does an illegal op (no/incorrect op cookie)\n"));
-  else if (cfgent==&CFG_MANUALOP)
-    dprintf(idx, STR("manop decides what happens to a user doing a manual op in a -manop channel\n"));
-#ifdef G_MEAN
-  else if (cfgent==&CFG_MEANDEOP)
-    dprintf(idx, STR("mean-deop decides what happens to a user deopping a bot in a +mean channel\n"));
-  else if (cfgent==&CFG_MEANKICK)
-    dprintf(idx, STR("mean-kick decides what happens to a user kicking a bot in a +mean channel\n"));
-  else if (cfgent==&CFG_MEANBAN)
-    dprintf(idx, STR("mean-ban decides what happens to a user banning a bot in a +mean channel\n"));
-#endif /* G_MEAN */
-  else if (cfgent==&CFG_MDOP)
-    dprintf(idx, STR("mdop decides what happens to a user doing a mass deop\n"));
-  dprintf(idx, STR("Valid settings are: ignore (No flag changes), deop (set flags to +d), kick (set flags to +dk) or delete (remove from userlist)\n"));
-}
-
-void deflag_changed(struct cfg_entry * entry, char * oldval, int * valid) {
-  char * p = (char *) entry->gdata;
-  if (!p)
-    return;
-  if (strcmp(p, STR("ignore")) && strcmp(p, STR("deop")) && strcmp(p, STR("kick")) && strcmp(p, STR("delete")))
-    *valid=0;
-}
-
-struct cfg_entry CFG_BADCOOKIE = {
-  "bad-cookie", CFGF_GLOBAL, NULL, NULL,
-  deflag_changed,
-  NULL,
-  deflag_describe
-};
-
-struct cfg_entry CFG_MANUALOP = {
-  "manop", CFGF_GLOBAL, NULL, NULL,
-  deflag_changed,
-  NULL,
-  deflag_describe
-};
-
-#ifdef G_MEAN
-struct cfg_entry CFG_MEANDEOP = {
-  "mean-deop", CFGF_GLOBAL, NULL, NULL,
-  deflag_changed,
-  NULL,
-  deflag_describe
-};
-
-
-struct cfg_entry CFG_MEANKICK = {
-  "mean-kick", CFGF_GLOBAL, NULL, NULL,
-  deflag_changed,
-  NULL,
-  deflag_describe
-};
-
-struct cfg_entry CFG_MEANBAN = {
-  "mean-ban", CFGF_GLOBAL, NULL, NULL,
-  deflag_changed,
-  NULL,
-  deflag_describe
-};
-#endif /* G_MEAN */
-
-struct cfg_entry CFG_MDOP = {
-  "mdop", CFGF_GLOBAL, NULL, NULL,
-  deflag_changed,
-  NULL,
-  deflag_describe
-};
-
-
-
-void deflag_user(struct userrec *u, int why, char *msg, struct chanset_t *chan)
-{
-  char tmp[256], tmp2[1024];
-  struct cfg_entry * ent = NULL;
-
-  struct flag_record fr = {FR_GLOBAL, FR_CHAN, 0, 0, 0};
-
-  if (!u)
-    return;
-
-  switch (why) {
-  case DEFLAG_BADCOOKIE:
-    strcpy(tmp, STR("Bad op cookie"));
-    ent=&CFG_BADCOOKIE;
-    break;
-  case DEFLAG_MANUALOP:
-    strcpy(tmp, STR("Manual op in -manop channel"));
-    ent=&CFG_MANUALOP;
-    break;
-#ifdef G_MEAN
-  case DEFLAG_MEAN_DEOP:
-    strcpy(tmp, STR("Deopped bot in +mean channel"));
-    ent=&CFG_MEANDEOP;
-    break;
-  case DEFLAG_MEAN_KICK:
-    strcpy(tmp, STR("Kicked bot in +mean channel"));
-    ent=&CFG_MEANDEOP;
-    break;
-  case DEFLAG_MEAN_BAN:
-    strcpy(tmp, STR("Banned bot in +mean channel"));
-    ent=&CFG_MEANDEOP;
-    break;
-#endif /* G_MEAN */
-  case DEFLAG_MDOP:
-    strcpy(tmp, STR("Mass deop"));
-    ent=&CFG_MDOP;
-    break;
-  default:
-    ent=NULL;
-    sprintf(tmp, STR("Reason #%i"), why);
-  }
-  if (ent && ent->gdata && !strcmp(ent->gdata, STR("deop"))) {
-    putlog(LOG_WARN, "*",  STR("Setting %s +d (%s): %s\n"), u->handle, tmp, msg);
-    sprintf(tmp2, STR("+d: %s (%s)"), tmp, msg);
-    set_user(&USERENTRY_COMMENT, u, tmp2);
-    get_user_flagrec(u, &fr, chan->dname);
-    fr.global = USER_DEOP;
-    fr.chan = USER_DEOP;
-    set_user_flagrec(u, &fr, chan->dname);
-  } else if (ent && ent->gdata && !strcmp(ent->gdata, STR("kick"))) {
-    putlog(LOG_WARN, "*",  STR("Setting %s +dk (%s): %s\n"), u->handle, tmp, msg);
-    sprintf(tmp2, STR("+dk: %s (%s)"), tmp, msg);
-    set_user(&USERENTRY_COMMENT, u, tmp2);
-    get_user_flagrec(u, &fr, chan->dname);
-    fr.global = USER_DEOP | USER_KICK;
-    fr.chan = USER_DEOP | USER_KICK;
-    set_user_flagrec(u, &fr, chan->dname);
-  } else if (ent && ent->gdata && !strcmp(ent->gdata, STR("delete"))) {
-    putlog(LOG_WARN, "*",  STR("Deleting %s (%s): %s\n"), u->handle, tmp, msg);
-    deluser(u->handle);
-  } else {
-    putlog(LOG_WARN, "*",  STR("No user flag effects for %s (%s): %s\n"), u->handle, tmp, msg);
-    sprintf(tmp2, STR("Warning: %s (%s)"), tmp, msg);
-    set_user(&USERENTRY_COMMENT, u, tmp2);
-  }
-}
-
-void init_userrec() {
-  add_cfg(&CFG_BADCOOKIE);
-  add_cfg(&CFG_MANUALOP);
-#ifdef G_MEAN
-  add_cfg(&CFG_MEANDEOP);
-  add_cfg(&CFG_MEANKICK);
-  add_cfg(&CFG_MEANBAN);
-#endif /* G_MEAN */
-  add_cfg(&CFG_MDOP);
-}
-
-