]> git.netwichtig.de Git - user/henk/code/inspircd.git/blobdiff - src/whois.cpp
Merge pull request #1162 from SaberUK/insp20+fix-deinstall
[user/henk/code/inspircd.git] / src / whois.cpp
index 8f85d86cce7e60883c2a58022122a78212ab9fbd..bec9c7ea9e0e44824e09eacbf0d303fda43280cd 100644 (file)
@@ -1,16 +1,22 @@
-/*       +------------------------------------+
- *       | Inspire Internet Relay Chat Daemon |
- *       +------------------------------------+
+/*
+ * InspIRCd -- Internet Relay Chat Daemon
  *
- *  InspIRCd: (C) 2002-2010 InspIRCd Development Team
- * See: http://wiki.inspircd.org/Credits
+ *   Copyright (C) 2009 Daniel De Graaf <danieldg@inspircd.org>
  *
- * This program is free but copyrighted software; see
- *         the file COPYING for details.
+ * This file is part of InspIRCd.  InspIRCd is free software: you can
+ * redistribute it and/or modify it under the terms of the GNU General Public
+ * License as published by the Free Software Foundation, version 2.
  *
- * ---------------------------------------------------
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
 
+
 #include "inspircd.h"
 
 void InspIRCd::DoWhois(User* user, User* dest,unsigned long signon, unsigned long idle, const char* nick)
@@ -22,15 +28,19 @@ void InspIRCd::DoWhois(User* user, User* dest,unsigned long signon, unsigned lon
        }
 
        std::string cl = dest->ChannelList(user, false);
+       const ServerConfig::OperSpyWhoisState state = user->HasPrivPermission("users/auspex") ? ServerInstance->Config->OperSpyWhois : ServerConfig::SPYWHOIS_NONE;
+
+       if (state == ServerConfig::SPYWHOIS_SINGLEMSG)
+               cl.append(dest->ChannelList(user, true));
+
+       user->SplitChanList(dest,cl);
 
-       if (cl.length())
-               user->SplitChanList(dest,cl);
-       if (IS_OPER(user) && ServerInstance->Config->OperSpyWhois)
+       if (state == ServerConfig::SPYWHOIS_SPLITMSG)
        {
                std::string scl = dest->ChannelList(user, true);
                if (scl.length())
                {
-                       this->SendWhoisLine(user, dest, 336, "%s %s :is on private/secret channels:",user->nick.c_str(), dest->nick.c_str());
+                       SendWhoisLine(user, dest, 336, "%s %s :is on private/secret channels:",user->nick.c_str(), dest->nick.c_str());
                        user->SplitChanList(dest,scl);
                }
        }
@@ -40,7 +50,8 @@ void InspIRCd::DoWhois(User* user, User* dest,unsigned long signon, unsigned lon
        }
        else
        {
-               this->SendWhoisLine(user, dest, 312, "%s %s %s :%s",user->nick.c_str(), dest->nick.c_str(), dest->server.c_str(), this->GetServerDescription(dest->server).c_str());
+               std::string serverdesc = GetServerDescription(dest->server);
+               this->SendWhoisLine(user, dest, 312, "%s %s %s :%s",user->nick.c_str(), dest->nick.c_str(), dest->server.c_str(), serverdesc.c_str());
        }
 
        if (IS_AWAY(dest))