From: special Date: Sun, 13 Sep 2009 19:26:55 +0000 (+0000) Subject: Don't allow /who to match servers when HideWhoisServer is enabled (unless the user... X-Git-Tag: v2.0.23~1555 X-Git-Url: https://git.netwichtig.de/gitweb/?a=commitdiff_plain;h=933c31331b9fe4fc8921019f605330be656baa27;p=user%2Fhenk%2Fcode%2Finspircd.git Don't allow /who to match servers when HideWhoisServer is enabled (unless the user has the privilege) git-svn-id: http://svn.inspircd.org/repository/trunk/inspircd@11692 e03df62e-2008-0410-955e-edbf42e46eb7 --- diff --git a/src/commands/cmd_who.cpp b/src/commands/cmd_who.cpp index 1e7c7d6aa..61b5a0f60 100644 --- a/src/commands/cmd_who.cpp +++ b/src/commands/cmd_who.cpp @@ -54,7 +54,7 @@ class CommandWho : public Command * @return A value from CmdResult to indicate command success or failure. */ CmdResult Handle(const std::vector& parameters, User *user); - bool whomatch(User* user, const char* matchtext); + bool whomatch(User* cuser, User* user, const char* matchtext); }; #endif @@ -74,7 +74,7 @@ static const std::string& get_first_visible_channel(User *u) return star; } -bool CommandWho::whomatch(User* user, const char* matchtext) +bool CommandWho::whomatch(User* cuser, User* user, const char* matchtext) { bool match = false; bool positive = false; @@ -157,7 +157,8 @@ bool CommandWho::whomatch(User* user, const char* matchtext) if (!match) match = InspIRCd::Match(user->nick, matchtext); - if (!match) + /* Don't allow server name matches if HideWhoisServer is enabled, unless the command user has the priv */ + if (!match && (!*ServerInstance->Config->HideWhoisServer || cuser->HasPrivPermission("users/auspex"))) match = InspIRCd::Match(user->server, matchtext); return match; @@ -364,7 +365,7 @@ CmdResult CommandWho::Handle (const std::vector& parameters, User * { User* oper = *i; - if (whomatch(oper, matchtext)) + if (whomatch(user, oper, matchtext)) { if (!user->SharesChannelWith(oper)) { @@ -380,7 +381,7 @@ CmdResult CommandWho::Handle (const std::vector& parameters, User * { for (user_hash::iterator i = ServerInstance->Users->clientlist->begin(); i != ServerInstance->Users->clientlist->end(); i++) { - if (whomatch(i->second, matchtext)) + if (whomatch(user, i->second, matchtext)) { if (!user->SharesChannelWith(i->second)) {