]> git.netwichtig.de Git - user/henk/code/inspircd.git/blobdiff - src/cmd_who.cpp
Bad w00tie bad, /who isnt checking +s for channel /who!
[user/henk/code/inspircd.git] / src / cmd_who.cpp
index 81145a91c13659d9305393eff20df1f5c7f6e100..508956c44f166c051c10ac8749f10699569df717 100644 (file)
@@ -82,6 +82,19 @@ extern "C" command_t* init_command(InspIRCd* Instance)
        return new cmd_who(Instance);
 }
 
+bool cmd_who::CanView(chanrec* chan, userrec* user)
+{
+       /* Execute items in fastest-to-execute first order */
+       if (*user->oper)
+               return true;
+       else if (!chan->IsModeSet('s') && !chan->IsModeSet('p'))
+               return true;
+       else if (chan->HasUser(user))
+               return true;
+
+       return false;
+}
+
 CmdResult cmd_who::Handle (const char** parameters, int pcnt, userrec *user)
 {
        /*
@@ -145,7 +158,7 @@ CmdResult cmd_who::Handle (const char** parameters, int pcnt, userrec *user)
        /* who on a channel? */
        ch = ServerInstance->FindChan(matchtext);
 
-       if (ch)
+       if ((ch) && (CanView(ch,user)))
        {
                /* who on a channel. */
                CUList *cu = ch->GetUsers();