]> git.netwichtig.de Git - user/henk/code/inspircd.git/blobdiff - src/commands/cmd_userhost.cpp
cmd_userhost Fix +H hidden opers being shown as opers
[user/henk/code/inspircd.git] / src / commands / cmd_userhost.cpp
index 79685388f64e6c27b3687479fdd3a1e5e48011f0..7e1efd6375de04c8c041c588f32580e03c91f6ee 100644 (file)
@@ -49,6 +49,8 @@ CmdResult CommandUserhost::Handle (const std::vector<std::string>& parameters, U
        unsigned int max = parameters.size();
        if (max > 5)
                max = 5;
+
+       bool has_privs = user->HasPrivPermission("users/auspex");
        for (unsigned int i = 0; i < max; i++)
        {
                User *u = ServerInstance->FindNickOnly(parameters[i]);
@@ -58,7 +60,12 @@ CmdResult CommandUserhost::Handle (const std::vector<std::string>& parameters, U
                        retbuf = retbuf + u->nick;
 
                        if (IS_OPER(u))
-                               retbuf = retbuf + "*";
+                       {
+                               // XXX: +H hidden opers must not be shown as opers
+                               ModeHandler* mh = ServerInstance->Modes->FindMode('H', MODETYPE_USER);
+                               if ((u == user) || (has_privs) || (!mh) || (!u->IsModeSet('H')) || (mh->name != "hideoper"))
+                                       retbuf += '*';
+                       }
 
                        retbuf = retbuf + "=";
 
@@ -69,7 +76,7 @@ CmdResult CommandUserhost::Handle (const std::vector<std::string>& parameters, U
 
                        retbuf = retbuf + u->ident + "@";
 
-                       if (user->HasPrivPermission("users/auspex"))
+                       if (has_privs)
                        {
                                retbuf = retbuf + u->host;
                        }