summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAdam <Adam@anope.org>2013-08-12 15:45:50 -0400
committerAdam <Adam@anope.org>2013-08-12 15:45:50 -0400
commitde5c8c0d386375c46d812c5843a5bb5a850ee865 (patch)
treed2e7834cbe85a56505ee63d22609c79b0ac5af55
parent8e011bbb783df2c646f479e7b02989f9165ed7c1 (diff)
Fix some issues with suspend
-rw-r--r--include/modules/cs_suspend.h1
-rw-r--r--include/modules/ns_suspend.h1
-rw-r--r--modules/commands/cs_list.cpp8
-rw-r--r--modules/commands/cs_suspend.cpp22
-rw-r--r--modules/commands/ns_access.cpp2
-rw-r--r--modules/commands/ns_ajoin.cpp2
-rw-r--r--modules/commands/ns_cert.cpp6
-rw-r--r--modules/commands/ns_group.cpp2
-rw-r--r--modules/commands/ns_identify.cpp2
-rw-r--r--modules/commands/ns_list.cpp6
-rw-r--r--modules/commands/ns_recover.cpp2
-rw-r--r--modules/commands/ns_suspend.cpp18
-rw-r--r--modules/database/db_old.cpp4
-rw-r--r--modules/pseudoclients/nickserv.cpp2
14 files changed, 46 insertions, 32 deletions
diff --git a/include/modules/cs_suspend.h b/include/modules/cs_suspend.h
index dbdd3b9e9..436e030d0 100644
--- a/include/modules/cs_suspend.h
+++ b/include/modules/cs_suspend.h
@@ -14,6 +14,7 @@ struct CSSuspendInfo
Anope::string chan, by, reason;
time_t time, expires;
+ virtual ~CSSuspendInfo() { }
protected:
CSSuspendInfo() { }
};
diff --git a/include/modules/ns_suspend.h b/include/modules/ns_suspend.h
index 59f3d5d58..5bdbd1568 100644
--- a/include/modules/ns_suspend.h
+++ b/include/modules/ns_suspend.h
@@ -14,6 +14,7 @@ struct NSSuspendInfo
Anope::string nick, by, reason;
time_t when, expires;
+ virtual ~NSSuspendInfo() { }
protected:
NSSuspendInfo() { }
};
diff --git a/modules/commands/cs_list.cpp b/modules/commands/cs_list.cpp
index 00dc0d8a5..6fd20d05f 100644
--- a/modules/commands/cs_list.cpp
+++ b/modules/commands/cs_list.cpp
@@ -58,7 +58,7 @@ class CommandCSList : public Command
spacesepstream keywords(params[1]);
while (keywords.GetToken(keyword))
{
- if (keyword.equals_ci("SUSPENDED"))
+ if (keyword.equals_ci("CS_SUSPENDED"))
suspended = true;
if (keyword.equals_ci("NOEXPIRE"))
channoexpire = true;
@@ -81,9 +81,9 @@ class CommandCSList : public Command
{
const ChannelInfo *ci = it->second;
- if (!is_servadmin && (ci->HasExt("CS_PRIVATE") || ci->HasExt("SUSPENDED")))
+ if (!is_servadmin && (ci->HasExt("CS_PRIVATE") || ci->HasExt("CS_SUSPENDED")))
continue;
- else if (suspended && !ci->HasExt("SUSPENDED"))
+ else if (suspended && !ci->HasExt("CS_SUSPENDED"))
continue;
else if (channoexpire && !ci->HasExt("CS_NO_EXPIRE"))
continue;
@@ -98,7 +98,7 @@ class CommandCSList : public Command
ListFormatter::ListEntry entry;
entry["Name"] = (isnoexpire ? "!" : "") + ci->name;
- if (ci->HasExt("SUSPENDED"))
+ if (ci->HasExt("CS_SUSPENDED"))
entry["Description"] = "[Suspended]";
else
entry["Description"] = ci->desc;
diff --git a/modules/commands/cs_suspend.cpp b/modules/commands/cs_suspend.cpp
index b7ffccda6..0326b38ba 100644
--- a/modules/commands/cs_suspend.cpp
+++ b/modules/commands/cs_suspend.cpp
@@ -38,11 +38,11 @@ struct CSSuspendInfoImpl : CSSuspendInfo, Serializable
ChannelInfo *ci = ChannelInfo::Find(schan);
if (!ci)
return NULL;
- si = ci->Extend<CSSuspendInfoImpl>("cs_suspend");
+ si = ci->Extend<CSSuspendInfoImpl>("CS_SUSPENDED");
data["chan"] >> si->chan;
}
- data["bi"] >> si->by;
+ data["by"] >> si->by;
data["reason"] >> si->reason;
data["time"] >> si->time;
data["expires"] >> si->expires;
@@ -53,7 +53,7 @@ struct CSSuspendInfoImpl : CSSuspendInfo, Serializable
class CommandCSSuspend : public Command
{
public:
- CommandCSSuspend(Module *creator) : Command(creator, "chanserv/suspend", 1, 3)
+ CommandCSSuspend(Module *creator) : Command(creator, "chanserv/suspend", 2, 3)
{
this->SetDesc(_("Prevent a channel from being used preserving channel data and settings"));
this->SetSyntax(_("\037channel\037 [+\037expiry\037] \037reason\037"));
@@ -62,7 +62,7 @@ class CommandCSSuspend : public Command
void Execute(CommandSource &source, const std::vector<Anope::string> &params) anope_override
{
const Anope::string &chan = params[0];
- Anope::string expiry = params.size() > 1 ? params[1] : "";
+ Anope::string expiry = params[1];
Anope::string reason = params.size() > 2 ? params[2] : "";
time_t expiry_secs = Config->GetModule(this->owner)->Get<time_t>("expire");
@@ -85,7 +85,13 @@ class CommandCSSuspend : public Command
return;
}
- CSSuspendInfo *si = ci->Extend<CSSuspendInfo>("cs_suspend");
+ if (ci->HasExt("CS_SUSPENDED"))
+ {
+ source.Reply(_("\2%s\2 is already suspended."), ci->name.c_str());
+ return;
+ }
+
+ CSSuspendInfo *si = ci->Extend<CSSuspendInfo>("CS_SUSPENDED");
si->chan = ci->name;
si->by = source.GetNick();
si->reason = reason;
@@ -153,7 +159,7 @@ class CommandCSUnSuspend : public Command
}
/* Only UNSUSPEND already suspended channels */
- CSSuspendInfo *si = ci->GetExt<CSSuspendInfo>("cs_suspend");
+ CSSuspendInfo *si = ci->GetExt<CSSuspendInfo>("CS_SUSPENDED");
if (!si)
{
source.Reply(_("Channel \002%s\002 isn't suspended."), ci->name.c_str());
@@ -162,7 +168,7 @@ class CommandCSUnSuspend : public Command
Log(LOG_ADMIN, source, this, ci) << " which was suspended by " << si->by << " for: " << (!si->reason.empty() ? si->reason : "No reason");
- ci->Shrink<CSSuspendInfo>("cs_suspend");
+ ci->Shrink<CSSuspendInfo>("CS_SUSPENDED");
source.Reply(_("Channel \002%s\002 is now released."), ci->name.c_str());
@@ -190,7 +196,7 @@ class CSSuspend : public Module
public:
CSSuspend(const Anope::string &modname, const Anope::string &creator) : Module(modname, creator, VENDOR),
- commandcssuspend(this), commandcsunsuspend(this), suspend(this, "cs_suspend"),
+ commandcssuspend(this), commandcsunsuspend(this), suspend(this, "CS_SUSPENDED"),
suspend_type("CSSuspendInfo", CSSuspendInfoImpl::Unserialize)
{
}
diff --git a/modules/commands/ns_access.cpp b/modules/commands/ns_access.cpp
index d42ef5bc6..f21edbf08 100644
--- a/modules/commands/ns_access.cpp
+++ b/modules/commands/ns_access.cpp
@@ -133,7 +133,7 @@ class CommandNSAccess : public Command
source.Reply(BAD_USERHOST_MASK);
source.Reply(MORE_INFO, Config->StrictPrivmsg.c_str(), source.service->nick.c_str(), source.command.c_str());
}
- else if (nc->HasExt("SUSPENDED"))
+ else if (nc->HasExt("NS_SUSPENDED"))
source.Reply(NICK_X_SUSPENDED, nc->display.c_str());
else if (cmd.equals_ci("ADD"))
return this->DoAdd(source, nc, mask);
diff --git a/modules/commands/ns_ajoin.cpp b/modules/commands/ns_ajoin.cpp
index 9fa75eea8..4409afa2b 100644
--- a/modules/commands/ns_ajoin.cpp
+++ b/modules/commands/ns_ajoin.cpp
@@ -265,7 +265,7 @@ class NSAJoin : public Module
if (ci != NULL)
{
- if (ci->HasExt("SUSPENDED"))
+ if (ci->HasExt("CS_SUSPENDED"))
continue;
}
if (c != NULL)
diff --git a/modules/commands/ns_cert.cpp b/modules/commands/ns_cert.cpp
index 561f89304..014a31a0d 100644
--- a/modules/commands/ns_cert.cpp
+++ b/modules/commands/ns_cert.cpp
@@ -144,7 +144,7 @@ class CommandNSCert : public Command
return;
}
- if (nc->HasExt("SUSPENDED"))
+ if (nc->HasExt("NS_SUSPENDED"))
{
source.Reply(NICK_X_SUSPENDED, nc->display.c_str());
return;
@@ -277,7 +277,7 @@ class CommandNSCert : public Command
NickCore *nc = source.nc;
- if (source.nc->HasExt("SUSPENDED"))
+ if (source.nc->HasExt("NS_SUSPENDED"))
source.Reply(NICK_X_SUSPENDED, source.nc->display.c_str());
else if (cmd.equals_ci("ADD"))
return this->DoAdd(source, nc, mask);
@@ -335,7 +335,7 @@ class NSCert : public Module
return;
if (u->IsIdentified() && u->Account() == na->nc)
return;
- if (na->nc->HasExt("SUSPENDED"))
+ if (na->nc->HasExt("NS_SUSPENDED"))
return;
NSCertList *cl = certs.Get(na->nc);
diff --git a/modules/commands/ns_group.cpp b/modules/commands/ns_group.cpp
index 160980bc9..26f267c6d 100644
--- a/modules/commands/ns_group.cpp
+++ b/modules/commands/ns_group.cpp
@@ -117,7 +117,7 @@ class CommandNSGroup : public Command
source.Reply(NICK_X_NOT_REGISTERED, nick.c_str());
else if (Anope::CurTime < u->lastnickreg + reg_delay)
source.Reply(_("Please wait %d seconds before using the GROUP command again."), (reg_delay + u->lastnickreg) - Anope::CurTime);
- else if (target->nc->HasExt("SUSPENDED"))
+ else if (target->nc->HasExt("NS_SUSPENDED"))
{
Log(LOG_COMMAND, source, this) << "tried to use GROUP for SUSPENDED nick " << target->nick;
source.Reply(NICK_X_SUSPENDED, target->nick.c_str());
diff --git a/modules/commands/ns_identify.cpp b/modules/commands/ns_identify.cpp
index d66913851..ede1c381c 100644
--- a/modules/commands/ns_identify.cpp
+++ b/modules/commands/ns_identify.cpp
@@ -75,7 +75,7 @@ class CommandNSIdentify : public Command
Anope::string pass = params[params.size() - 1];
NickAlias *na = NickAlias::Find(nick);
- if (na && na->nc->HasExt("SUSPENDED"))
+ if (na && na->nc->HasExt("NS_SUSPENDED"))
source.Reply(NICK_X_SUSPENDED, na->nick.c_str());
else if (u->Account() && na && u->Account() == na->nc)
source.Reply(_("You are already identified."));
diff --git a/modules/commands/ns_list.cpp b/modules/commands/ns_list.cpp
index 31f2cbb51..058ae91b4 100644
--- a/modules/commands/ns_list.cpp
+++ b/modules/commands/ns_list.cpp
@@ -62,7 +62,7 @@ class CommandNSList : public Command
{
if (keyword.equals_ci("NOEXPIRE"))
nsnoexpire = true;
- if (keyword.equals_ci("SUSPENDED"))
+ if (keyword.equals_ci("NS_SUSPENDED"))
suspended = true;
if (keyword.equals_ci("UNCONFIRMED"))
unconfirmed = true;
@@ -87,7 +87,7 @@ class CommandNSList : public Command
continue;
else if (nsnoexpire && !na->HasExt("NS_NO_EXPIRE"))
continue;
- else if (suspended && !na->nc->HasExt("SUSPENDED"))
+ else if (suspended && !na->nc->HasExt("NS_SUSPENDED"))
continue;
else if (unconfirmed && !na->nc->HasExt("UNCONFIRMED"))
continue;
@@ -108,7 +108,7 @@ class CommandNSList : public Command
entry["Nick"] = (isnoexpire ? "!" : "") + na->nick;
if (na->nc->HasExt("HIDE_MASK") && !is_servadmin && na->nc != mync)
entry["Last usermask"] = "[Hostname hidden]";
- else if (na->nc->HasExt("SUSPENDED"))
+ else if (na->nc->HasExt("NS_SUSPENDED"))
entry["Last usermask"] = "[Suspended]";
else if (na->nc->HasExt("UNCONFIRMED"))
entry["Last usermask"] = "[Unconfirmed]";
diff --git a/modules/commands/ns_recover.cpp b/modules/commands/ns_recover.cpp
index 48c625ace..3d7bdd49b 100644
--- a/modules/commands/ns_recover.cpp
+++ b/modules/commands/ns_recover.cpp
@@ -151,7 +151,7 @@ class CommandNSRecover : public Command
source.Reply(NICK_X_NOT_REGISTERED, nick.c_str());
return;
}
- else if (na->nc->HasExt("SUSPENDED"))
+ else if (na->nc->HasExt("NS_SUSPENDED"))
{
source.Reply(NICK_X_SUSPENDED, na->nick.c_str());
return;
diff --git a/modules/commands/ns_suspend.cpp b/modules/commands/ns_suspend.cpp
index 76c195a34..9545bdc60 100644
--- a/modules/commands/ns_suspend.cpp
+++ b/modules/commands/ns_suspend.cpp
@@ -40,11 +40,11 @@ struct NSSuspendInfoImpl : NSSuspendInfo, Serializable
NickAlias *na = NickAlias::Find(snick);
if (!na)
return NULL;
- si = na->Extend<NSSuspendInfoImpl>("SUSPENDED");
+ si = na->nc->Extend<NSSuspendInfoImpl>("NS_SUSPENDED");
data["nick"] >> si->nick;
}
- data["bi"] >> si->by;
+ data["by"] >> si->by;
data["reason"] >> si->reason;
data["time"] >> si->when;
data["expires"] >> si->expires;
@@ -97,9 +97,15 @@ class CommandNSSuspend : public Command
return;
}
+ if (na->nc->HasExt("NS_SUSPENDED"))
+ {
+ source.Reply(_("\2%s\2 is already suspended."), na->nc->display.c_str());
+ return;
+ }
+
NickCore *nc = na->nc;
- NSSuspendInfo *si = nc->Extend<NSSuspendInfo>("SUSPENDED");
+ NSSuspendInfo *si = nc->Extend<NSSuspendInfo>("NS_SUSPENDED");
si->nick = nc->display;
si->by = source.GetNick();
si->reason = reason;
@@ -168,13 +174,13 @@ class CommandNSUnSuspend : public Command
return;
}
- if (!na->nc->HasExt("SUSPENDED"))
+ if (!na->nc->HasExt("NS_SUSPENDED"))
{
source.Reply(_("Nick %s is not suspended."), na->nick.c_str());
return;
}
- na->nc->Shrink<NSSuspendInfo>("SUSPENDED");
+ na->nc->Shrink<NSSuspendInfo>("NS_SUSPENDED");
Log(LOG_ADMIN, source, this) << "for " << na->nick;
source.Reply(_("Nick %s is now released."), nick.c_str());
@@ -200,7 +206,7 @@ class NSSuspend : public Module
public:
NSSuspend(const Anope::string &modname, const Anope::string &creator) : Module(modname, creator, VENDOR),
- commandnssuspend(this), commandnsunsuspend(this), suspend(this, "SUSPENDED"),
+ commandnssuspend(this), commandnsunsuspend(this), suspend(this, "NS_SUSPENDED"),
suspend_type("NSSuspendInfo", NSSuspendInfoImpl::Unserialize)
{
}
diff --git a/modules/database/db_old.cpp b/modules/database/db_old.cpp
index 8ce79f708..d90424d21 100644
--- a/modules/database/db_old.cpp
+++ b/modules/database/db_old.cpp
@@ -484,7 +484,7 @@ static void LoadNicks()
if (u32 & OLD_NI_HIDE_STATUS)
nc->Extend<bool>("HIDE_STATUS");
if (u32 & OLD_NI_SUSPENDED)
- nc->Extend<bool>("SUSPENDED");
+ nc->Extend<bool>("NS_SUSPENDED");
if (!(u32 & OLD_NI_AUTOOP))
nc->Extend<bool>("AUTOOP");
@@ -749,7 +749,7 @@ static void LoadChannels()
if (tmpu32 & OLD_CI_SIGNKICK_LEVEL)
ci->Extend<bool>("SIGNKICK_LEVEL");
if (tmpu32 & OLD_CI_SUSPENDED)
- ci->Extend<bool>("SUSPENDED");
+ ci->Extend<bool>("CS_SUSPENDED");
READ(read_string(buffer, f));
READ(read_string(buffer, f));
diff --git a/modules/pseudoclients/nickserv.cpp b/modules/pseudoclients/nickserv.cpp
index f5c94fa7d..6700dce48 100644
--- a/modules/pseudoclients/nickserv.cpp
+++ b/modules/pseudoclients/nickserv.cpp
@@ -471,7 +471,7 @@ class NickServCore : public Module, public NickServService
/* Update last quit and last seen for the user */
NickAlias *na = NickAlias::Find(u->nick);
- if (na && !na->nc->HasExt("SUSPENDED") && (u->IsRecognized() || u->IsIdentified(true)))
+ if (na && !na->nc->HasExt("NS_SUSPENDED") && (u->IsRecognized() || u->IsIdentified(true)))
{
na->last_seen = Anope::CurTime;
na->last_quit = msg;