Просмотр исходного кода

* Woops, needed this stuff

svn: 910
Bryan Drewery 22 лет назад
Родитель
Сommit
36216483f9
3 измененных файлов с 28 добавлено и 14 удалено
  1. 2 0
      src/mod/channels.mod/channels.c
  2. 23 13
      src/mod/channels.mod/cmdschan.c
  3. 3 1
      src/mod/channels.mod/userchan.c

+ 2 - 0
src/mod/channels.mod/channels.c

@@ -44,6 +44,7 @@ static int 			global_invite_time;
 
 /* Global channel settings (drummer/dw) */
 char 				glob_chanset[512] = "", cfg_glob_chanset[512] = "";
+static char *lastdeletedmask = NULL;
 
 /* Global flood settings */
 static int 			gfld_chan_thr;
@@ -911,6 +912,7 @@ void channels_init()
   gfld_ctcp_thr = 0;
   gfld_ctcp_time = 0;
   global_idle_kick = 0;
+  lastdeletedmask = 0;
   use_info = 1;
   strcpy(glob_chanmode, "nt");
   udef = NULL;

+ 23 - 13
src/mod/channels.mod/cmdschan.c

@@ -175,8 +175,8 @@ static void cmd_mns_mask(char type, struct userrec *u, int idx, char *par)
 {
   int i = 0, j;
   struct chanset_t *chan = NULL;
-  char s[UHOSTLEN], *who, *chname, *cmd;
-  masklist *m;
+  char s[UHOSTLEN] = "", *who = NULL, *chname = NULL, *cmd = NULL, *mask = NULL;
+  masklist *m = NULL;
 
   cmd = type == 'b' ? "ban" : type == 'e' ? "exempt" : "invite";
   if (!par[0]) {
@@ -203,11 +203,15 @@ static void cmd_mns_mask(char type, struct userrec *u, int idx, char *par)
   strncpyz(s, who, sizeof s);
   i = u_delmask(type, NULL, s, (u->flags & USER_MASTER));
   if (i > 0) {
-    putlog(LOG_CMDS, "*", "#%s# -%s %s", dcc[idx].nick, cmd, s);
+    if (lastdeletedmask)
+      mask = lastdeletedmask;
+    else
+      mask = s;
+    putlog(LOG_CMDS, "*", "#%s# -%s %s", dcc[idx].nick, cmd, mask);
     dprintf(idx, "%s %s: %s\n", "Removed", cmd, s);
 #ifdef LEAF
     for (chan = chanset; chan != NULL; chan = chan->next)
-      add_mode(chan, '-', type, s);
+      add_mode(chan, '-', type, mask);
 #endif /* LEAF */
     return;
   }
@@ -216,14 +220,18 @@ static void cmd_mns_mask(char type, struct userrec *u, int idx, char *par)
     chan = findchan_by_dname(chname);
   if (chan) {
     m = type == 'b' ? chan->channel.ban : type == 'e' ? chan->channel.exempt : chan->channel.invite;
-    if (atoi(who) > 0) {
-      egg_snprintf(s, sizeof s, "%d", -i);
+    if ((i = atoi(who)) > 0) {
+      egg_snprintf(s, sizeof s, "%d", i);
       j = u_delmask(type, chan, s, 1);
       if (j > 0) {
-	putlog(LOG_CMDS, "*", "#%s# (%s) -%s %s", dcc[idx].nick, chan->dname, cmd, s);
-	dprintf(idx, "Removed %1$s channel %2$s: %3$s\n", chan->dname, cmd, s);
+        if (lastdeletedmask)
+          mask = lastdeletedmask;
+        else
+          mask = s;
+	putlog(LOG_CMDS, "*", "#%s# (%s) -%s %s", dcc[idx].nick, chan->dname, cmd, mask);
+	dprintf(idx, "Removed %1$s channel %2$s: %3$s\n", chan->dname, cmd, mask);
 #ifdef LEAF
-	add_mode(chan, '-', type, s);
+	add_mode(chan, '-', type, mask);
 #endif  /* LEAF */
 	return;
       }
@@ -954,13 +962,15 @@ static void cmd_pls_chan(struct userrec *u, int idx, char *par)
     return;
   } else if ((chan = findchan(chname))) {
     putallbots(buf);
-    /* This prevents someone adding a channel by it's unique server
-     * name <cybah>
-     */
     dprintf(idx, "That channel already exists as %s!\n", chan->dname);
     return;
+  } else if (strchr(CHANMETA, chname[0]) == NULL) {
+    dprintf(idx, "Invalid channel prefix.\n");
+    return;
+  } else if (strchr(chname, ',') != NULL) {
+    dprintf(idx, "Invalid channel name.\n");
+    return;
   }
-
   if (channel_add(result, chname, par) == ERROR) {
     dprintf(idx, "Invalid channel or channel options.\n");
     if (result && result[0])

+ 3 - 1
src/mod/channels.mod/userchan.c

@@ -263,7 +263,9 @@ int u_delmask(char type, struct chanset_t *c, char *who, int doit)
 	free(mask);
       }
     }
-    free((*u)->mask);
+    if (lastdeletedmask)
+      free(lastdeletedmask);
+    lastdeletedmask = (*u)->mask;
     if ((*u)->desc)
       free((*u)->desc);
     if ((*u)->user)