diff options
author | geniusdex geniusdex@31f1291d-b8d6-0310-a050-a5561fc1590b <geniusdex geniusdex@31f1291d-b8d6-0310-a050-a5561fc1590b@5417fbe8-f217-4b02-8779-1006273d7864> | 2008-01-26 10:07:07 +0000 |
---|---|---|
committer | geniusdex geniusdex@31f1291d-b8d6-0310-a050-a5561fc1590b <geniusdex geniusdex@31f1291d-b8d6-0310-a050-a5561fc1590b@5417fbe8-f217-4b02-8779-1006273d7864> | 2008-01-26 10:07:07 +0000 |
commit | d7c0230e7809377fd9490f403caab8e0bfeddd6f (patch) | |
tree | e5301024555fcbd7d97a2922fd6596195066cdd9 /src | |
parent | 721a24ae219f0b062c63ce4f77a2c6ef34f08b94 (diff) |
BUILD : 1.7.21 (1355) BUGS : 834 NOTES : Fixed various oddities in ChanServ suspend code
git-svn-id: svn://svn.anope.org/anope/trunk@1355 31f1291d-b8d6-0310-a050-a5561fc1590b
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@1070 5417fbe8-f217-4b02-8779-1006273d7864
Diffstat (limited to 'src')
-rw-r--r-- | src/core/cs_suspend.c | 29 |
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, |