summaryrefslogtreecommitdiff
path: root/src/coremods/core_userhost.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/coremods/core_userhost.cpp')
-rw-r--r--src/coremods/core_userhost.cpp19
1 files changed, 16 insertions, 3 deletions
diff --git a/src/coremods/core_userhost.cpp b/src/coremods/core_userhost.cpp
index a67824194..eae6e51ce 100644
--- a/src/coremods/core_userhost.cpp
+++ b/src/coremods/core_userhost.cpp
@@ -24,10 +24,15 @@
*/
class CommandUserhost : public Command
{
+ UserModeReference hideopermode;
+
public:
/** Constructor for userhost.
*/
- CommandUserhost ( Module* parent) : Command(parent,"USERHOST", 1, 5) {
+ CommandUserhost(Module* parent)
+ : Command(parent,"USERHOST", 1)
+ , hideopermode(parent, "hideoper")
+ {
syntax = "<nick> [<nick> ...]";
}
/** Handle command.
@@ -44,7 +49,11 @@ CmdResult CommandUserhost::Handle (const std::vector<std::string>& parameters, U
std::string retbuf = "302 " + user->nick + " :";
- for (unsigned int i = 0; i < parameters.size(); i++)
+ unsigned int max = parameters.size();
+ if (max > 5)
+ max = 5;
+
+ for (unsigned int i = 0; i < max; i++)
{
User *u = ServerInstance->FindNickOnly(parameters[i]);
@@ -53,7 +62,11 @@ CmdResult CommandUserhost::Handle (const std::vector<std::string>& parameters, U
retbuf += u->nick;
if (u->IsOper())
- retbuf += '*';
+ {
+ // XXX: +H hidden opers must not be shown as opers
+ if ((u == user) || (has_privs) || (!u->IsModeSet(hideopermode)))
+ retbuf += '*';
+ }
retbuf += '=';
retbuf += (u->IsAway() ? '-' : '+');