diff --git a/data/nickserv.example.conf b/data/nickserv.example.conf index 6aa509773..281ba32f6 100644 --- a/data/nickserv.example.conf +++ b/data/nickserv.example.conf @@ -202,11 +202,13 @@ module #restrictopernicks = yes /* - * The username, and possibly hostname, used for fake users created when Anope needs to - * hold a nickname. + * The username, hostname, and real name used for pseudoclients created when + * Anope needs to hold a nickname. This is only used if your IRCd does not + * support SVSHOLDs. */ enforceruser = "enforcer" enforcerhost = "${services.host}" + enforcerreal = "Services Enforcer" /* * The length of time Anope should hold nicknames for. diff --git a/modules/nickserv/nickserv.cpp b/modules/nickserv/nickserv.cpp index 274189792..ea45ac97a 100644 --- a/modules/nickserv/nickserv.cpp +++ b/modules/nickserv/nickserv.cpp @@ -11,6 +11,11 @@ #include "module.h" +namespace +{ + Anope::string enforcer_user, enforcer_host, enforcer_real; +} + class NickServCollide; static std::set collides; @@ -98,7 +103,7 @@ class NickServRelease final public: NickServRelease(Module *me, NickAlias *na, time_t delay) - : User(na->nick, Config->GetModule(me).Get("enforceruser", "user"), Config->GetModule(me).Get("enforcerhost", Me->GetName()), "", "", Me, "Services Enforcer", Anope::CurTime, "", {}, IRCD->UID_Retrieve(), NULL) + : User(na->nick, enforcer_user, enforcer_host, "", "", Me, enforcer_real, Anope::CurTime, "", {}, IRCD->UID_Retrieve(), nullptr) , Timer(me, delay) , nick(na->nick) { @@ -317,7 +322,8 @@ public: void OnReload(Configuration::Conf &conf) override { - const Anope::string &nsnick = conf.GetModule(this).Get("client"); + const auto &modconf = conf.GetModule(this); + const Anope::string &nsnick = modconf.Get("client"); if (nsnick.empty()) throw ConfigException(Module::name + ": must be defined"); @@ -328,7 +334,7 @@ public: NickServ = bi; - spacesepstream(conf.GetModule(this).Get("defaults", "memo_signon memo_receive")).GetTokens(defaults); + spacesepstream(modconf.Get("defaults", "memo_signon memo_receive")).GetTokens(defaults); if (defaults.empty()) { defaults.emplace_back("MEMO_SIGNON"); @@ -336,6 +342,10 @@ public: } else if (defaults[0].equals_ci("none")) defaults.clear(); + + enforcer_user = modconf.Get("enforceruser", "enforcer"); + enforcer_host = modconf.Get("enforcerhost", Me->GetName()); + enforcer_real = modconf.Get("enforcerreal", "Services Enforcer"); } void OnDelNick(NickAlias *na) override