]> jfr.im git - irc/quakenet/newserv.git/blobdiff - channel/channelhandlers.c
Remove trusts2 from paulbranch.
[irc/quakenet/newserv.git] / channel / channelhandlers.c
index 18b8fb4fb0bcf8230a55948df7b22f4582a89f8a..f21caa461f8324770214f2fe6f636daa097b1d84 100644 (file)
@@ -508,9 +508,11 @@ int handletopicmsg(void *source, int cargc, char **cargv) {
   if (cargc>3)
     timestamp=strtol(cargv[cargc-3], NULL, 10);
   
+  np=getnickbynumericstr((char *)source);
+
   /* The following check removed because servers can set topics.. */
 #if 0
-  if ((np=getnickbynumericstr((char *)source))==NULL) {
+  if (np==NULL) {
     /* We should check the sender exists, but we still change the topic even if it doesn't */
     Error("channel",ERR_WARNING,"Topic change by non-existent user %s",(char *)source);
   }
@@ -938,10 +940,16 @@ void handlewhoischannels(int hooknum, void *arg) {
   sstring *name;
   unsigned long *num;
   int i;
-  void **args = (void **)arg;
-  nick *sender = (nick *)args[0], *target = (nick *)args[1];
-
-  if(IsService(target) || IsHideChan(target))
+  char **args = (char **)arg;
+  nick *sender = (nick *)args[0]; /* sender nick */
+  nick *target = (nick *)args[1]; /* target nick */
+  char *sourcenum = args[2];      /* source numeric */
+
+  /* do not show channels for +k service clients or IRC Operators
+   * do not show channels for +n users
+   * unless they whois themselves
+   */
+  if ((IsService(target) || IsHideChan(target)) && sender != target)
     return;
 
   chans = (channel **)(target->channels->content);
@@ -964,8 +972,13 @@ void handlewhoischannels(int hooknum, void *arg) {
       bufpos=0;
     }
 
+    /*
+     * 319 RPL_WHOISCHANNELS "source 319 target nick :channels"
+     *                       "irc.netsplit.net 319 foobar barfoo :@#chan1 +#chan2 #chan3"
+     *                       "irc.netsplit.net 319 foobar barfoo :-@#chan1 -+#chan2 -#chan3"
+     */
     if(buffer[0] == '\0')
-      bufpos=snprintf(buffer, sizeof(buffer), ":%s 319 %s %s :", myserver->content, sender->nick, target->nick);
+      bufpos=snprintf(buffer, sizeof(buffer), "%s 319 %s %s :", getmynumeric(), sourcenum, target->nick);
 
     num = getnumerichandlefromchanhash(chans[i]->users, target->numeric);