diff options
author | Adam <Adam@anope.org> | 2010-11-15 21:04:01 -0500 |
---|---|---|
committer | Adam <Adam@anope.org> | 2010-12-12 19:33:58 -0500 |
commit | 5f18cb018dee9ff71efbfdd247a8dc4ca472b16b (patch) | |
tree | a4e36b8d4554e820a49cd4cc810982824d3ecd66 /modules | |
parent | 872bc3fa5e696e5e05ec98bdadec309185c48419 (diff) |
Allow users to drop their own nickrequests
Diffstat (limited to 'modules')
-rw-r--r-- | modules/core/ns_drop.cpp | 43 | ||||
-rw-r--r-- | modules/core/ns_register.cpp | 2 |
2 files changed, 31 insertions, 14 deletions
diff --git a/modules/core/ns_drop.cpp b/modules/core/ns_drop.cpp index 13f003ff2..a3e292df1 100644 --- a/modules/core/ns_drop.cpp +++ b/modules/core/ns_drop.cpp @@ -18,15 +18,12 @@ class CommandNSDrop : public Command public: CommandNSDrop() : Command("DROP", 0, 1) { + this->SetFlag(CFLAG_ALLOW_UNREGISTERED); } CommandReturn Execute(User *u, const std::vector<Anope::string> ¶ms) { Anope::string nick = !params.empty() ? params[0] : ""; - NickAlias *na; - NickRequest *nr = NULL; - int is_mine; /* Does the nick being dropped belong to the user that is dropping? */ - Anope::string my_nick; if (readonly) { @@ -34,27 +31,47 @@ class CommandNSDrop : public Command return MOD_CONT; } - if (!(na = findnick(!nick.empty() ? nick : u->nick))) + NickAlias *na = findnick((u->Account() && !nick.empty() ? nick : u->nick)); + if (!na) { - if (!nick.empty()) + NickRequest *nr = findrequestnick(u->Account() && !nick.empty() ? nick : u->nick); + if (nr && u->Account() && u->Account()->IsServicesOper()) + { + if (Config->WallDrop) + ircdproto->SendGlobops(NickServ, "\2%s\2 used DROP on \2%s\2", u->nick.c_str(), nick.c_str()); + + Log(LOG_ADMIN, u, this) << "to drop nickname " << nr->nick << " (email: " << nr->email << ")"; + delete nr; + u->SendMessage(NickServ, NICK_X_DROPPED, nick.c_str()); + } + else if (nr && !nick.empty()) { - if ((nr = findrequestnick(nick)) && u->Account()->IsServicesOper()) + int res = enc_check_password(nick, nr->password); + if (res) { - if (Config->WallDrop) - ircdproto->SendGlobops(NickServ, "\2%s\2 used DROP on \2%s\2", u->nick.c_str(), nick.c_str()); - Log(LOG_ADMIN, u, this) << "to drop nickname " << nr->nick << " (email: " << nr->email << ")"; + Log(LOG_COMMAND, u, this) << "to drop nick request " << nr->nick; + u->SendMessage(NickServ, NICK_X_DROPPED, nr->nick.c_str()); delete nr; - u->SendMessage(NickServ, NICK_X_DROPPED, nick.c_str()); } + else if (bad_password(u)) + return MOD_STOP; else - u->SendMessage(NickServ, NICK_X_NOT_REGISTERED, nick.c_str()); + u->SendMessage(NickServ, PASSWORD_INCORRECT); } else u->SendMessage(NickServ, NICK_NOT_REGISTERED); + return MOD_CONT; } - is_mine = u->Account() && u->Account() == na->nc; + if (!u->Account()) + { + u->SendMessage(NickServ, NICK_IDENTIFY_REQUIRED, Config->s_NickServ.c_str()); + return MOD_CONT; + } + + bool is_mine = u->Account() == na->nc; + Anope::string my_nick; if (is_mine && nick.empty()) my_nick = na->nick; diff --git a/modules/core/ns_register.cpp b/modules/core/ns_register.cpp index a2af5ad7e..4a1f74e9d 100644 --- a/modules/core/ns_register.cpp +++ b/modules/core/ns_register.cpp @@ -279,7 +279,7 @@ class CommandNSRegister : public CommandNSConfirm { if (SendRegmail(u, nr)) { - u->SendMessage(NickServ, NICK_ENTER_REG_CODE, email.c_str(), Config->s_NickServ.c_str()); + u->SendMessage(NickServ, NICK_ENTER_REG_CODE, email.c_str(), Config->s_NickServ.c_str(), Config->s_NickServ.c_str()); Log(LOG_COMMAND, u, this) << "send registration verification code to " << nr->email; } else |