]> git.netwichtig.de Git - user/henk/code/inspircd.git/blobdiff - src/coremods/core_whois.cpp
core_privmsg: respect the exemption list when sending $* messages.
[user/henk/code/inspircd.git] / src / coremods / core_whois.cpp
index 4ec59278142ba1c398b01c1653038f5fb0b17f30..0db634810535598cc61a7294ec0aa08885be8eb2 100644 (file)
@@ -88,8 +88,14 @@ class CommandWhois : public SplitCommand
        void SendChanList(WhoisContextImpl& whois);
 
  public:
+        /** If true then all opers are shown with a generic 'is an IRC operator' line rather than the oper type. */
+       bool genericoper;
+
+        /** How to handle private/secret channels in the WHOIS response. */
        SplitWhoisState splitwhois;
 
+
+
        /** Constructor for whois.
         */
        CommandWhois(Module* parent)
@@ -109,8 +115,8 @@ class CommandWhois : public SplitCommand
         * @param user The user issuing the command
         * @return A value from CmdResult to indicate command success or failure.
         */
-       CmdResult HandleLocal(const std::vector<std::string>& parameters, LocalUser* user) CXX11_OVERRIDE;
-       CmdResult HandleRemote(const std::vector<std::string>& parameters, RemoteUser* target) CXX11_OVERRIDE;
+       CmdResult HandleLocal(LocalUser* user, const Params& parameters) CXX11_OVERRIDE;
+       CmdResult HandleRemote(RemoteUser* target, const Params& parameters) CXX11_OVERRIDE;
 };
 
 class WhoisNumericSink
@@ -211,7 +217,7 @@ void CommandWhois::DoWhois(LocalUser* user, User* dest, time_t signon, unsigned
 {
        WhoisContextImpl whois(user, dest, lineevprov);
 
-       whois.SendLine(RPL_WHOISUSER, dest->ident, dest->GetDisplayedHost(), '*', dest->fullname);
+       whois.SendLine(RPL_WHOISUSER, dest->ident, dest->GetDisplayedHost(), '*', dest->GetRealName());
        if (whois.IsSelfWhois() || user->HasPrivPermission("users/auspex"))
        {
                whois.SendLine(RPL_WHOISHOST, InspIRCd::Format("is connecting from %s@%s %s", dest->ident.c_str(), dest->GetRealHost().c_str(), dest->GetIPString().c_str()));
@@ -235,7 +241,7 @@ void CommandWhois::DoWhois(LocalUser* user, User* dest, time_t signon, unsigned
 
        if (dest->IsOper())
        {
-               if (ServerInstance->Config->GenericOper)
+               if (genericoper)
                        whois.SendLine(RPL_WHOISOPERATOR, "is an IRC operator");
                else
                        whois.SendLine(RPL_WHOISOPERATOR, InspIRCd::Format("is %s %s on %s", (strchr("AEIOUaeiou",dest->oper->name[0]) ? "an" : "a"), dest->oper->name.c_str(), ServerInstance->Config->Network.c_str()));
@@ -267,7 +273,7 @@ void CommandWhois::DoWhois(LocalUser* user, User* dest, time_t signon, unsigned
        whois.SendLine(RPL_ENDOFWHOIS, "End of /WHOIS list.");
 }
 
-CmdResult CommandWhois::HandleRemote(const std::vector<std::string>& parameters, RemoteUser* target)
+CmdResult CommandWhois::HandleRemote(RemoteUser* target, const Params& parameters)
 {
        if (parameters.size() < 2)
                return CMD_FAILURE;
@@ -287,7 +293,7 @@ CmdResult CommandWhois::HandleRemote(const std::vector<std::string>& parameters,
        return CMD_SUCCESS;
 }
 
-CmdResult CommandWhois::HandleLocal(const std::vector<std::string>& parameters, LocalUser* user)
+CmdResult CommandWhois::HandleLocal(LocalUser* user, const Params& parameters)
 {
        User *dest;
        unsigned int userindex = 0;
@@ -351,14 +357,19 @@ class CoreModWhois : public Module
        {
                ConfigTag* tag = ServerInstance->Config->ConfValue("options");
                const std::string splitwhois = tag->getString("splitwhois", "no");
+               SplitWhoisState newsplitstate;
                if (stdalgo::string::equalsci(splitwhois, "no"))
-                       cmd.splitwhois = SPLITWHOIS_NONE;
+                       newsplitstate = SPLITWHOIS_NONE;
                else if (stdalgo::string::equalsci(splitwhois, "split"))
-                       cmd.splitwhois = SPLITWHOIS_SPLIT;
+                       newsplitstate = SPLITWHOIS_SPLIT;
                else if (stdalgo::string::equalsci(splitwhois, "splitmsg"))
-                       cmd.splitwhois = SPLITWHOIS_SPLITMSG;
+                       newsplitstate = SPLITWHOIS_SPLITMSG;
                else
                        throw ModuleException(splitwhois + " is an invalid <security:splitwhois> value, at " + tag->getTagLocation()); 
+
+               ConfigTag* security = ServerInstance->Config->ConfValue("security");
+               cmd.genericoper = security->getBool("genericoper");
+               cmd.splitwhois = newsplitstate;
        }
 
        Version GetVersion() CXX11_OVERRIDE