summaryrefslogtreecommitdiff
path: root/modules/core
diff options
context:
space:
mode:
authorAdam <Adam@anope.org>2010-11-15 21:04:01 -0500
committerAdam <Adam@anope.org>2010-12-12 19:33:58 -0500
commit5f18cb018dee9ff71efbfdd247a8dc4ca472b16b (patch)
treea4e36b8d4554e820a49cd4cc810982824d3ecd66 /modules/core
parent872bc3fa5e696e5e05ec98bdadec309185c48419 (diff)
Allow users to drop their own nickrequests
Diffstat (limited to 'modules/core')
-rw-r--r--modules/core/ns_drop.cpp43
-rw-r--r--modules/core/ns_register.cpp2
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> &params)
{
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