diff options
-rw-r--r-- | src/commands/cmd_who.cpp | 11 |
1 files changed, 6 insertions, 5 deletions
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<std::string>& 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<std::string>& 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<std::string>& 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)) { |