cmd_names Do the HasPrivPermission() check only in the NAMES handler

This commit is contained in:
Attila Molnar 2015-05-16 16:53:21 +02:00
parent 930fd98e48
commit c27122858b
2 changed files with 8 additions and 9 deletions

View File

@ -53,10 +53,11 @@ CmdResult CommandNames::Handle (const std::vector<std::string>& parameters, User
// - the user doing the /NAMES is inside the channel
// - the user doing the /NAMES has the channels/auspex privilege
bool has_user = c->HasUser(user);
if ((!c->IsModeSet(secretmode)) || (has_user) || (user->HasPrivPermission("channels/auspex")))
// If the user is inside the channel or has privs, instruct SendNames() to show invisible (+i) members
bool show_invisible = ((c->HasUser(user)) || (user->HasPrivPermission("channels/auspex")));
if ((show_invisible) || (!c->IsModeSet(secretmode)))
{
SendNames(user, c, has_user);
SendNames(user, c, show_invisible);
return CMD_SUCCESS;
}
}
@ -65,10 +66,8 @@ CmdResult CommandNames::Handle (const std::vector<std::string>& parameters, User
return CMD_FAILURE;
}
void CommandNames::SendNames(User* user, Channel* chan, bool isinside)
void CommandNames::SendNames(User* user, Channel* chan, bool show_invisible)
{
bool has_privs = user->HasPrivPermission("channels/auspex");
std::string list;
if (chan->IsModeSet(secretmode))
list.push_back('@');
@ -87,7 +86,7 @@ void CommandNames::SendNames(User* user, Channel* chan, bool isinside)
const Channel::MemberMap& members = chan->GetUsers();
for (Channel::MemberMap::const_iterator i = members.begin(); i != members.end(); ++i)
{
if ((!isinside) && (i->first->IsModeSet(invisiblemode)) && (!has_privs))
if ((!show_invisible) && (i->first->IsModeSet(invisiblemode)))
{
// Member is invisible and we are not supposed to show them
continue;

View File

@ -104,9 +104,9 @@ class CommandNames : public Command
/** Spool the NAMES list for a given channel to the given user
* @param user User to spool the NAMES list to
* @param chan Channel whose nicklist to send
* @param isinside If true, the user is inside the channel, if not then false
* @param show_invisible True to show invisible (+i) members to the user, false to omit them from the list
*/
void SendNames(User* user, Channel* chan, bool isinside);
void SendNames(User* user, Channel* chan, bool show_invisible);
};
/** Handle /KICK.