]> git.netwichtig.de Git - user/henk/code/inspircd.git/blobdiff - src/coremods/core_userhost.cpp
Introduce Stats::Context, pass it to the OnStats hook and switch all code to it
[user/henk/code/inspircd.git] / src / coremods / core_userhost.cpp
index a6782419496a0710f13bc8480a4248d7e07c87d7..eae6e51ce3f0f3a1eaa2b61f343d57e9edce3652 100644 (file)
  */
 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() ? '-' : '+');