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

* Port [3232] to 1.2.14
* Cmd_swhois now displays a list of only 'public' channels as well.



svn: 3233

Bryan Drewery 19 лет назад
Родитель
Сommit
fb0910a717
2 измененных файлов с 24 добавлено и 5 удалено
  1. 1 0
      doc/UPDATES
  2. 23 5
      src/mod/server.mod/servmsg.c

+ 1 - 0
doc/UPDATES

@@ -20,6 +20,7 @@ Lines prefixed with '-' were disabled before release and are not finished, or ar
 * Localhubs now auto add *!~username@... hosts instead of *!~nick@... hosts for their leafs.
 * Localhubs now auto add *!~username@... hosts instead of *!~nick@... hosts for their leafs.
 * Make bot chmod() itself when accessing its binary.
 * Make bot chmod() itself when accessing its binary.
 * Fix bots sharing wrong channel keys over botnet.
 * Fix bots sharing wrong channel keys over botnet.
+* Cmd_swhois now displays a list of only 'public' channels as well.
 
 
 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

+ 23 - 5
src/mod/server.mod/servmsg.c

@@ -1203,8 +1203,9 @@ static int got311(char *from, char *msg)
 }
 }
 
 
 static char *
 static char *
-hide_chans(const char *nick, struct userrec *u, char *channels)
+hide_chans(const char *nick, struct userrec *u, char *_channels, bool publicOnly)
 {
 {
+  char *channels = strdup(_channels), *channels_p = channels;
   char *chans = NULL, *chname = NULL, s[5] = "";
   char *chans = NULL, *chname = NULL, s[5] = "";
   size_t len = strlen(channels) + 100 + 1;
   size_t len = strlen(channels) + 100 + 1;
   struct chanset_t *chan = NULL;
   struct chanset_t *chan = NULL;
@@ -1221,16 +1222,26 @@ hide_chans(const char *nick, struct userrec *u, char *channels)
     }
     }
 
 
     chan = findchan_by_dname(chname);
     chan = findchan_by_dname(chname);
-    if (chan)
+
+    if (chan && !publicOnly)
      get_user_flagrec(u, &fr, chan->dname);
      get_user_flagrec(u, &fr, chan->dname);
 
 
-    if (!chan || getnick(u->handle, chan) || !(chan->channel.mode & (CHANPRIV|CHANSEC)) || chk_op(fr, chan)) {
+    if (!chan || 
+        
+        (!publicOnly && (
+          getnick(u->handle, chan) || 
+          !(chan->channel.mode & (CHANPRIV|CHANSEC)) || 
+          chk_op(fr, chan)
+        )) ||
+        (publicOnly && !(chan->channel.mode & (CHANPRIV|CHANSEC)))
+       ) {
       if (chans[0])
       if (chans[0])
         simple_snprintf(chans, len, "%s %s%s", chans, s, chname);
         simple_snprintf(chans, len, "%s %s%s", chans, s, chname);
       else
       else
         simple_snprintf(chans, len, "%s%s", s, chname);
         simple_snprintf(chans, len, "%s%s", s, chname);
     }
     }
   }
   }
+  free(channels_p);
   return chans;
   return chans;
 }
 }
 
 
@@ -1246,11 +1257,18 @@ static int got319(char *from, char *msg)
   for (int idx = 0; idx < dcc_total; idx++) {
   for (int idx = 0; idx < dcc_total; idx++) {
     if (dcc[idx].type && dcc[idx].whois[0] && !rfc_casecmp(nick, dcc[idx].whois)) {
     if (dcc[idx].type && dcc[idx].whois[0] && !rfc_casecmp(nick, dcc[idx].whois)) {
       char *chans = NULL;
       char *chans = NULL;
-
-      if ((chans = hide_chans(nick, dcc[idx].user, msg))) {
+      /* Show every channel the user has access to view */
+      if ((chans = hide_chans(nick, dcc[idx].user, msg, 0))) {
         irc_whois(nick, " channels : %s", chans);
         irc_whois(nick, " channels : %s", chans);
         free(chans);
         free(chans);
       }
       }
+      chans = NULL;
+      /* Show all of the 'public' channels */
+      if ((chans = hide_chans(nick, dcc[idx].user, msg, 1))) {
+        irc_whois(nick, " public   : %s", chans);
+        free(chans);
+      }
+      break;
     }
     }
   }
   }