Jelajahi Sumber

* Port [3349] to 1.2.14
* Make ops exempt from the nomassjoin protections
* chanset flood-join now also counts PARTs as flooding.



svn: 3350

Bryan Drewery 19 tahun lalu
induk
melakukan
33bb1b3673
2 mengubah file dengan 14 tambahan dan 9 penghapusan
  1. 1 0
      doc/UPDATES
  2. 13 9
      src/mod/irc.mod/chan.c

+ 1 - 0
doc/UPDATES

@@ -36,6 +36,7 @@ Lines prefixed with '-' were disabled before release and are not finished, or ar
 * Add BOT flag +f for handling cpu intensive floods (none supported yet)
 * Add BOT flag +f for handling cpu intensive floods (none supported yet)
 * Add chanset 'flood-exempt' to exempt ops/voices from flood controls (see 'help chaninfo')
 * Add chanset 'flood-exempt' to exempt ops/voices from flood controls (see 'help chaninfo')
 * Add chanset 'flood-lock-time' to control how long to keep the channel locked during drone floods.
 * Add chanset 'flood-lock-time' to control how long to keep the channel locked during drone floods.
+* chanset flood-join now also counts PARTs as flooding.
 
 
 1.2.13 - http://wraith.shatow.net/milestone/1.2.13
 1.2.13 - http://wraith.shatow.net/milestone/1.2.13
 * Fix cmd_chanset accepting invalid flags
 * Fix cmd_chanset accepting invalid flags

+ 13 - 9
src/mod/irc.mod/chan.c

@@ -2433,7 +2433,7 @@ static int gotjoin(char *from, char *chname)
 	m->user = u;
 	m->user = u;
         m->tried_getuser = 1;
         m->tried_getuser = 1;
 
 
-        if (channel_nomassjoin(chan) && me_op(chan)) {
+        if (!chk_op(fr, chan) && channel_nomassjoin(chan) && me_op(chan)) {
           if (chan->channel.drone_jointime < now - flood_massjoin.time) {      //expired, reset counter
           if (chan->channel.drone_jointime < now - flood_massjoin.time) {      //expired, reset counter
             chan->channel.drone_joins = 0;
             chan->channel.drone_joins = 0;
           }
           }
@@ -2576,14 +2576,19 @@ static int gotpart(char *from, char *msg)
 {
 {
   char *nick = NULL, *chname = NULL;
   char *nick = NULL, *chname = NULL;
   struct chanset_t *chan = NULL;
   struct chanset_t *chan = NULL;
-  struct userrec *u = NULL;
+  char buf[UHOSTLEN] = "", *uhost = buf;
 
 
   chname = newsplit(&msg);
   chname = newsplit(&msg);
   fixcolon(chname);
   fixcolon(chname);
   fixcolon(msg);
   fixcolon(msg);
   chan = findchan(chname);
   chan = findchan(chname);
-  u = get_user_by_host(from);
-  nick = splitnick(&from);
+
+  strcpy(uhost, from);
+  nick = splitnick(&uhost);
+
+  memberlist* m = ismember(chan, nick);
+  struct userrec *u = m->user;
+
   if (chan && !shouldjoin(chan) && match_my_nick(nick)) {
   if (chan && !shouldjoin(chan) && match_my_nick(nick)) {
     irc_log(chan, "Parting");    
     irc_log(chan, "Parting");    
     clear_channel(chan, 1);
     clear_channel(chan, 1);
@@ -2599,15 +2604,14 @@ static int gotpart(char *from, char *msg)
       reset_chan_info(chan);
       reset_chan_info(chan);
     }
     }
     set_handle_laston(chan->dname, u, now);
     set_handle_laston(chan->dname, u, now);
-    chan = findchan(chname);
-    if (!chan)
-      return 0;
+
+    detect_chan_flood(nick, m->userhost, from, chan, FLOOD_JOIN, NULL);
 
 
     killmember(chan, nick);
     killmember(chan, nick);
     if (msg[0])
     if (msg[0])
-      irc_log(chan, "Part: %s (%s) [%s]", nick, from, msg);
+      irc_log(chan, "Part: %s (%s) [%s]", nick, uhost, msg);
     else
     else
-      irc_log(chan, "Part: %s (%s)", nick, from);
+      irc_log(chan, "Part: %s (%s)", nick, uhost);
     /* If it was me, all hell breaks loose... */
     /* If it was me, all hell breaks loose... */
     if (match_my_nick(nick)) {
     if (match_my_nick(nick)) {
       clear_channel(chan, 1);
       clear_channel(chan, 1);