summaryrefslogtreecommitdiff
path: root/src/core/cs_suspend.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/core/cs_suspend.c')
-rw-r--r--src/core/cs_suspend.c29
1 files changed, 26 insertions, 3 deletions
diff --git a/src/core/cs_suspend.c b/src/core/cs_suspend.c
index 69e236a33..674861578 100644
--- a/src/core/cs_suspend.c
+++ b/src/core/cs_suspend.c
@@ -88,6 +88,11 @@ int do_suspend(User * u)
return MOD_CONT;
}
+ if (chan[0] != '#') {
+ notice_lang(s_ChanServ, u, CHAN_UNSUSPEND_ERROR);
+ return MOD_CONT;
+ }
+
/* Only SUSPEND existing channels, otherwise use FORBID (bug #54) */
if ((ci = cs_findchan(chan)) == NULL) {
notice_lang(s_ChanServ, u, CHAN_X_NOT_REGISTERED, chan);
@@ -163,12 +168,30 @@ int do_unsuspend(User * u)
if (readonly)
notice_lang(s_ChanServ, u, READ_ONLY_MODE);
- ci = cs_findchan(chan);
+ /* Only UNSUSPEND already suspended channels */
+ if ((ci = cs_findchan(chan)) == NULL) {
+ notice_lang(s_ChanServ, u, CHAN_X_NOT_REGISTERED, chan);
+ return MOD_CONT;
+ }
+
+ if (!(ci->flags & CI_SUSPENDED))
+ {
+ notice_lang(s_ChanServ, u, CHAN_UNSUSPEND_FAILED, chan);
+ return MOD_CONT;
+ }
if (ci) {
ci->flags &= ~CI_SUSPENDED;
- ci->forbidreason = NULL;
- ci->forbidby = NULL;
+ if (ci->forbidreason)
+ {
+ free(ci->forbidreason);
+ ci->forbidreason = NULL;
+ }
+ if (ci->forbidby)
+ {
+ free(ci->forbidby);
+ ci->forbidby = NULL;
+ }
if (WallForbid)
anope_cmd_global(s_ChanServ,