ignore MODE -z but allow MODE +z
[srvx.git] / src / proto-p10.c
index 3b68011b05f06e69af800b86889b03cc701dd1d7..d2f20a07796bc67e1e11ca0059e2fdd6383200bd 100644 (file)
@@ -2427,8 +2427,14 @@ mod_chanmode_parse(struct chanNode *channel, char **modes, unsigned int argc, un
         case 's': do_chan_mode(MODE_SECRET); break;
         case 't': do_chan_mode(MODE_TOPICLIMIT); break;
         case 'z':
-          if (!(flags & MCP_REGISTERED))
-              do_chan_mode(MODE_REGISTERED);
+          if (!(flags & MCP_REGISTERED) && (!(flags & MCP_IGN_REGISTERED) || add)) {
+            do_chan_mode(MODE_REGISTERED);
++          } else if (flags & MCP_IGN_REGISTERED) {
++           /* ignore the modechange but continue parsing */
+           } else {
+            mod_chanmode_free(change);
+            return NULL;
+           }
           break;
 #undef do_chan_mode
         case 'l':