X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;f=src%2Fcoremods%2Fcore_whois.cpp;h=c1c4777ef24c397b4bcaff5c555ed290a47ce811;hb=e2b0f3dc9ef4d56c71d7abda13e6139ca092e387;hp=8f09396b295aae20e22ee6206832aef0e3951ba2;hpb=384ef31bc01e4a1a2e59d082c9066002410ba54a;p=user%2Fhenk%2Fcode%2Finspircd.git diff --git a/src/coremods/core_whois.cpp b/src/coremods/core_whois.cpp index 8f09396b2..c1c4777ef 100644 --- a/src/coremods/core_whois.cpp +++ b/src/coremods/core_whois.cpp @@ -1,9 +1,17 @@ /* * InspIRCd -- Internet Relay Chat Daemon * + * Copyright (C) 2019 Matt Schatz + * Copyright (C) 2018 linuxdaemon + * Copyright (C) 2018 Dylan Frank + * Copyright (C) 2017-2018, 2020 Sadie Powell + * Copyright (C) 2012-2016 Attila Molnar + * Copyright (C) 2012, 2019 Robby + * Copyright (C) 2009 Uli Schlachter * Copyright (C) 2009 Daniel De Graaf - * Copyright (C) 2008 Thomas Stagner * Copyright (C) 2007 Robin Burchell + * Copyright (C) 2007 Dennis Friis + * Copyright (C) 2006-2008, 2010 Craig Edwards * * This file is part of InspIRCd. InspIRCd is free software: you can * redistribute it and/or modify it under the terms of the GNU General Public @@ -22,22 +30,6 @@ #include "inspircd.h" #include "modules/whois.h" -enum -{ - // From RFC 1459. - RPL_WHOISUSER = 311, - RPL_WHOISOPERATOR = 313, - RPL_WHOISIDLE = 317, - RPL_WHOISCHANNELS = 319, - - // From UnrealIRCd. - RPL_WHOISHOST = 378, - RPL_WHOISMODES = 379, - - // InspIRCd-specific. - RPL_CHANNELSMSG = 651 -}; - enum SplitWhoisState { // Don't split private/secret channels into a separate RPL_WHOISCHANNELS numeric. @@ -88,8 +80,14 @@ class CommandWhois : public SplitCommand void SendChanList(WhoisContextImpl& whois); public: + /** If true then all opers are shown with a generic 'is a server 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) @@ -101,7 +99,7 @@ class CommandWhois : public SplitCommand , lineevprov(parent, "event/whoisline") { Penalty = 2; - syntax = "{,}"; + syntax = "[] [,]+"; } /** Handle command. @@ -211,7 +209,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,8 +233,8 @@ void CommandWhois::DoWhois(LocalUser* user, User* dest, time_t signon, unsigned if (dest->IsOper()) { - if (ServerInstance->Config->GenericOper) - whois.SendLine(RPL_WHOISOPERATOR, "is an IRC operator"); + if (genericoper) + whois.SendLine(RPL_WHOISOPERATOR, "is a server 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())); } @@ -298,8 +296,8 @@ CmdResult CommandWhois::HandleLocal(LocalUser* user, const Params& parameters) return CMD_SUCCESS; /* - * If 2 paramters are specified (/whois nick nick), ignore the first one like spanningtree - * does, and use the second one, otherwise, use the only paramter. -- djGrrr + * If 2 parameters are specified (/whois nick nick), ignore the first one like spanningtree + * does, and use the second one, otherwise, use the only parameter. -- djGrrr */ if (parameters.size() > 1) userindex = 1; @@ -350,15 +348,20 @@ class CoreModWhois : public Module void ReadConfig(ConfigStatus&) CXX11_OVERRIDE { ConfigTag* tag = ServerInstance->Config->ConfValue("options"); - const std::string splitwhois = tag->getString("splitwhois", "no"); + const std::string splitwhois = tag->getString("splitwhois", "no", 1); + 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 value, at " + tag->getTagLocation()); + throw ModuleException(splitwhois + " is an invalid value, at " + tag->getTagLocation()); + + ConfigTag* security = ServerInstance->Config->ConfValue("security"); + cmd.genericoper = security->getBool("genericoper"); + cmd.splitwhois = newsplitstate; } Version GetVersion() CXX11_OVERRIDE