]> jfr.im git - irc/evilnet/x3.git/blobdiff - src/proto-common.c
Fix bug discovered by Wharf in new style code (.users without login causes core)
[irc/evilnet/x3.git] / src / proto-common.c
index 3ea903569e71fdc184cb55c9ef890d1a674ca8bb..f662406a212415fbf2d0195ebd7cc5c554555cb2 100644 (file)
@@ -23,6 +23,7 @@
 #include "ioset.h"
 #include "log.h"
 #include "nickserv.h"
+#include "shun.h"
 #include "timeq.h"
 #ifdef HAVE_SYS_SOCKET_H
 #include <sys/socket.h>
@@ -506,11 +507,11 @@ reg_mode_change_func(mode_change_func_t handler)
 {
     if (mcf_used == mcf_size) {
        if (mcf_size) {
-           mcf_size <<= 1;
-           mcf_list = realloc(mcf_list, mcf_size*sizeof(mode_change_func_t));
+               mcf_size <<= 1;
+               mcf_list = realloc(mcf_list, mcf_size*sizeof(mode_change_func_t));
        } else {
-           mcf_size = 8;
-           mcf_list = malloc(mcf_size*sizeof(mode_change_func_t));
+               mcf_size = 8;
+               mcf_list = malloc(mcf_size*sizeof(mode_change_func_t));
        }
     }
     mcf_list[mcf_used++] = handler;
@@ -626,13 +627,23 @@ mod_chanmode_apply(struct userNode *who, struct chanNode *channel, struct mod_ch
                 break;
             }
             break;
+            /* XXX Hack: this is the stupedest use of switch iv ever seen.
+             * you have to compare for EVERY POSSIBLE COMBINATION of bitmask
+             * because switch does only full comparison. This needs redone as if/else.
+             **/
         case MODE_CHANOP:
         case MODE_HALFOP:
         case MODE_VOICE:
+        case MODE_VOICE|MODE_CHANOP:
+        case MODE_VOICE|MODE_HALFOP:
+        case MODE_CHANOP|MODE_HALFOP:
         case MODE_VOICE|MODE_CHANOP|MODE_HALFOP:
         case MODE_REMOVE|MODE_CHANOP:
         case MODE_REMOVE|MODE_HALFOP:
         case MODE_REMOVE|MODE_VOICE:
+        case MODE_REMOVE|MODE_VOICE|MODE_CHANOP:
+        case MODE_REMOVE|MODE_VOICE|MODE_HALFOP:
+        case MODE_REMOVE|MODE_CHANOP|MODE_HALFOP:
         case MODE_REMOVE|MODE_VOICE|MODE_CHANOP|MODE_HALFOP:
             if (change->args[ii].mode & MODE_REMOVE)
                 change->args[ii].u.member->modes &= ~change->args[ii].mode;
@@ -737,7 +748,7 @@ generate_hostmask(struct userNode *user, int options)
         mask = ~0 << masklen;
         masked_ip = ntohl(user->ip.s_addr) & mask;
         hostname = alloca(32);
-        if (options & GENMASK_SRVXMASK) {
+        if (options & GENMASK_X3MASK) {
             sprintf(hostname, "%d.%d.%d.%d/%d", (masked_ip>>24)&0xFF, (masked_ip>>16)&0xFF, (masked_ip>>8)&0xFF, masked_ip&0xFF, masklen);
         } else {
             int ofs = 0;