]> git.netwichtig.de Git - user/henk/code/inspircd.git/commitdiff
Bad w00tie bad, /who isnt checking +s for channel /who!
authorbrain <brain@e03df62e-2008-0410-955e-edbf42e46eb7>
Thu, 7 Dec 2006 23:00:43 +0000 (23:00 +0000)
committerbrain <brain@e03df62e-2008-0410-955e-edbf42e46eb7>
Thu, 7 Dec 2006 23:00:43 +0000 (23:00 +0000)
git-svn-id: http://svn.inspircd.org/repository/trunk/inspircd@5883 e03df62e-2008-0410-955e-edbf42e46eb7

include/commands/cmd_who.h
src/cmd_who.cpp

index 8b5bbe89e3242006308067bf1449a8edf1c6f416..299b70cdde1f2b653f353e21aef1a1376f404def 100644 (file)
@@ -26,6 +26,7 @@
  */
 class cmd_who : public command_t
 {
+       bool CanView(chanrec* chan, userrec* user);
  public:
         cmd_who (InspIRCd* Instance) : command_t(Instance,"WHO",0,1) { syntax = "<server>|<nickname>|<channel>|<realname>|<host>|0 [ohur]"; }
         CmdResult Handle(const char** parameters, int pcnt, userrec *user);
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();