added "nowho" parameter to debug userlist and fixed memory leak in DBHelper.c
[NeonServV5.git] / src / cmd_neonserv_mode.c
index f7f2db17a4ff352541e3fa4e9c43718eece33171..8a11e36ea1d3612cd2a9515c889b904bdb62f5f8 100644 (file)
@@ -1,3 +1,19 @@
+/* cmd_neonserv_mode.c - NeonServ v5.3
+ * Copyright (C) 2011-2012  Philipp Kreil (pk910)
+ * 
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ * 
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ * 
+ * You should have received a copy of the GNU General Public License 
+ * along with this program. If not, see <http://www.gnu.org/licenses/>. 
+ */
 
 #include "cmd_neonserv.h"
 
@@ -60,7 +76,7 @@ static void neonserv_cmd_mode_async1(struct ClientSocket *client, struct ClientS
         parseModeString(modelock, row[4]);
     else if(defaults[4])
         parseModeString(modelock, defaults[4]);
-    int uaccess = getChannelAccess(user, chan, 0);
+    int uaccess = getChannelAccess(user, chan);
     char *a, *b = mode;
     char *argv[MAXNUMPARAMS];
     char *carg;
@@ -232,6 +248,12 @@ static void neonserv_cmd_mode_async1(struct ClientSocket *client, struct ClientS
                                 }
                             }
                         }
+                    } else if(!add && (modetype & CHANNEL_MODE_TYPE) == CHANNEL_MODE_TYPE_B) {
+                        if(arg == argc && !(modetype & CHANNEL_MODE_KEY)) {
+                            reply(textclient, user, "NS_MODE_INVALID", modeStr[i]);
+                            return;
+                        }
+                        carg = (arg == argc ? NULL : argv[arg++]);
                     } else
                         carg = NULL;
                     if((modetype & CHANNEL_MODE_TYPE) == CHANNEL_MODE_TYPE_D && isModeSet(chan->modes, modeStr[i]) == add)