diff options
Diffstat (limited to 'modules/commands/ns_register.cpp')
| -rw-r--r-- | modules/commands/ns_register.cpp | 12 |
1 files changed, 7 insertions, 5 deletions
diff --git a/modules/commands/ns_register.cpp b/modules/commands/ns_register.cpp index 6fd47ad38..63c566a0c 100644 --- a/modules/commands/ns_register.cpp +++ b/modules/commands/ns_register.cpp @@ -25,13 +25,15 @@ class CommandNSConfirm : public Command void Execute(CommandSource &source, const std::vector<Anope::string> ¶ms) override { - const Anope::string &passcode = params[0]; + Anope::string *code = source.nc ? source.nc->GetExt<Anope::string>("passcode") : NULL; + bool confirming_other = !code || *code != params[0]; - if (source.nc && (!source.nc->HasExt("UNCONFIRMED") || source.IsOper()) && source.HasPriv("nickserv/confirm")) + if (source.nc && (!source.nc->HasExt("UNCONFIRMED") || (source.IsOper() && confirming_other)) && source.HasPriv("nickserv/confirm")) { - NickAlias *na = NickAlias::Find(passcode); + const Anope::string &nick = params[0]; + NickAlias *na = NickAlias::Find(nick); if (na == NULL) - source.Reply(NICK_X_NOT_REGISTERED, passcode.c_str()); + source.Reply(NICK_X_NOT_REGISTERED, nick.c_str()); else if (na->nc->HasExt("UNCONFIRMED") == false) source.Reply(_("Nick \002%s\002 is already confirmed."), na->nick.c_str()); else @@ -58,7 +60,7 @@ class CommandNSConfirm : public Command } else if (source.nc) { - Anope::string *code = source.nc->GetExt<Anope::string>("passcode"); + const Anope::string &passcode = params[0]; if (code != NULL && *code == passcode) { NickCore *nc = source.nc; |
