summaryrefslogtreecommitdiff
path: root/modules/commands/ns_release.cpp
diff options
context:
space:
mode:
authorAdam <Adam@anope.org>2012-06-18 05:04:30 -0400
committerAdam <Adam@anope.org>2012-06-18 05:04:30 -0400
commit2dec8e767a70def4b9b04a96ae4f75e4d1013038 (patch)
tree36f5b551ff359a578e17d5e7d2f486970d759a7b /modules/commands/ns_release.cpp
parent873d4287de57f7f9caa23cb2c9265d1ad2804aba (diff)
Allow userless command sources
Diffstat (limited to 'modules/commands/ns_release.cpp')
-rw-r--r--modules/commands/ns_release.cpp23
1 files changed, 14 insertions, 9 deletions
diff --git a/modules/commands/ns_release.cpp b/modules/commands/ns_release.cpp
index 3c5a230b3..44c89fbf7 100644
--- a/modules/commands/ns_release.cpp
+++ b/modules/commands/ns_release.cpp
@@ -25,7 +25,6 @@ class CommandNSRelease : public Command
void Execute(CommandSource &source, const std::vector<Anope::string> &params) anope_override
{
- User *u = source.u;
const Anope::string &nick = params[0];
Anope::string pass = params.size() > 1 ? params[1] : "";
NickAlias *na;
@@ -45,26 +44,32 @@ class CommandNSRelease : public Command
if (MOD_RESULT == EVENT_ALLOW)
{
- Log(LOG_COMMAND, u, this) << "for nickname " << na->nick;
+ Log(LOG_COMMAND, source, this) << "for nickname " << na->nick;
na->Release();
source.Reply(_("Services' hold on \002%s\002 has been released."), nick.c_str());
}
else
{
source.Reply(ACCESS_DENIED);
- Log(LOG_COMMAND, u, this) << "invalid password for " << nick;
- bad_password(u);
+ Log(LOG_COMMAND, source, this) << "invalid password for " << nick;
+ if (source.GetUser())
+ bad_password(source.GetUser());
}
}
else
{
- bool override = u->Account() != na->nc && u->HasPriv("nickserv/release");
+ bool override = source.nc != na->nc && source.HasPriv("nickserv/release");
- if (override || u->Account() == na->nc ||
- (!na->nc->HasFlag(NI_SECURE) && is_on_access(u, na->nc)) ||
- (!u->fingerprint.empty() && na->nc->FindCert(u->fingerprint)))
+ bool ok = override;
+ if (source.nc == na->nc)
+ ok = true;
+ else if (source.GetUser() && !na->nc->HasFlag(NI_SECURE) && is_on_access(source.GetUser(), na->nc))
+ ok = true;
+ else if (source.GetUser() && !source.GetUser()->fingerprint.empty() && na->nc->FindCert(source.GetUser()->fingerprint))
+ ok = true;
+ if (ok)
{
- Log(override ? LOG_OVERRIDE : LOG_COMMAND, u, this) << "for nickname " << na->nick;
+ Log(override ? LOG_OVERRIDE : LOG_COMMAND, source, this) << "for nickname " << na->nick;
na->Release();
source.Reply(_("Services' hold on \002%s\002 has been released."), nick.c_str());
}