summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/modules.h4
-rw-r--r--src/commands.c26
-rw-r--r--src/core/bs_act.c6
-rw-r--r--src/core/bs_assign.c6
-rw-r--r--src/core/bs_badwords.c6
-rw-r--r--src/core/bs_info.c4
-rw-r--r--src/core/bs_kick.c2
-rw-r--r--src/core/bs_say.c6
-rw-r--r--src/core/bs_set.c2
-rw-r--r--src/core/bs_unassign.c2
-rw-r--r--src/core/cs_access.c4
-rw-r--r--src/core/cs_akick.c2
-rw-r--r--src/core/cs_ban.c8
-rw-r--r--src/core/cs_clear.c2
-rw-r--r--src/core/cs_drop.c2
-rw-r--r--src/core/cs_getkey.c6
-rw-r--r--src/core/cs_getpass.c6
-rw-r--r--src/core/cs_identify.c6
-rw-r--r--src/core/cs_info.c2
-rw-r--r--src/core/cs_invite.c10
-rw-r--r--src/core/cs_kick.c2
-rw-r--r--src/core/cs_logout.c2
-rw-r--r--src/core/cs_modes.c2
-rw-r--r--src/core/cs_register.c10
-rw-r--r--src/core/cs_sendpass.c2
-rw-r--r--src/core/cs_set.c2
-rw-r--r--src/core/cs_status.c2
-rw-r--r--src/core/cs_suspend.c1
-rw-r--r--src/core/cs_topic.c2
-rw-r--r--src/core/cs_xop.c2
-rw-r--r--src/core/ms_del.c5
-rw-r--r--src/core/ms_info.c5
-rw-r--r--src/core/ms_list.c5
-rw-r--r--src/core/ms_read.c5
-rw-r--r--src/core/ms_set.c5
35 files changed, 33 insertions, 131 deletions
diff --git a/include/modules.h b/include/modules.h
index 153d56853..8bf3077ad 100644
--- a/include/modules.h
+++ b/include/modules.h
@@ -217,7 +217,9 @@ struct ModuleLang_ {
enum CommandFlags
{
- CFLAG_ALLOW_UNREGISTERED = 1
+ CFLAG_ALLOW_UNREGISTERED = 1,
+ CFLAG_ALLOW_FORBIDDEN = 2,
+ CFLAG_ALLOW_SUSPENDED = 4
};
/** Every services command is a class, inheriting from Command.
diff --git a/src/commands.c b/src/commands.c
index 399d8e332..17deffb04 100644
--- a/src/commands.c
+++ b/src/commands.c
@@ -53,7 +53,7 @@ void mod_run_cmd(char *service, User * u, CommandHash * cmdTable[], const char *
{
Command *c = findCommand(cmdTable, cmd);
int retVal = 0;
-
+ ChannelInfo *ci;
if (!c)
{
@@ -125,6 +125,27 @@ void mod_run_cmd(char *service, User * u, CommandHash * cmdTable[], const char *
if (MOD_RESULT == EVENT_STOP)
return;
+ if (params.size() > 0 && ircdproto->IsChannelValid(params[0].c_str()))
+ {
+ if ((ci = cs_findchan(params[0].c_str())))
+ {
+ if ((ci->flags & CI_FORBIDDEN) && (!c->HasFlag(CFLAG_ALLOW_FORBIDDEN)))
+ {
+ notice_lang(service, u, CHAN_X_FORBIDDEN, ci->name);
+ alog("Access denied for user %s with service %s and command %s because of FORBIDDEN channel %s",
+ u->nick, service, cmd, ci->name);
+ return;
+ }
+ else if ((ci->flags & CI_SUSPENDED) && (!c->HasFlag(CFLAG_ALLOW_SUSPENDED)))
+ {
+ notice_lang(service, u, CHAN_X_FORBIDDEN, ci->name);
+ alog("Access denied for user %s with service %s and command %s because of SUSPENDED channel %s",
+ u->nick, service, cmd, ci->name);
+ return;
+ }
+ }
+ }
+
retVal = c->Execute(u, params);
FOREACH_MOD(I_OnPostCommand, OnPostCommand(u, c->service, c->name, params));
@@ -140,8 +161,7 @@ void mod_run_cmd(char *service, User * u, CommandHash * cmdTable[], const char *
* @param cmd Command
* @return void
*/
-void mod_help_cmd(char *service, User * u, CommandHash * cmdTable[],
- const char *cmd)
+void mod_help_cmd(char *service, User * u, CommandHash * cmdTable[], const char *cmd)
{
spacesepstream tokens(cmd);
std::string token;
diff --git a/src/core/bs_act.c b/src/core/bs_act.c
index 3c0472c7c..3003e5afa 100644
--- a/src/core/bs_act.c
+++ b/src/core/bs_act.c
@@ -35,12 +35,6 @@ class CommandBSAct : public Command
return MOD_CONT;
}
- if (ci->flags & CI_FORBIDDEN)
- {
- notice_lang(s_BotServ, u, CHAN_X_FORBIDDEN, ci->name);
- return MOD_CONT;
- }
-
if (!check_access(u, ci, CA_SAY))
{
notice_lang(s_BotServ, u, ACCESS_DENIED);
diff --git a/src/core/bs_assign.c b/src/core/bs_assign.c
index 84ce81e68..f4b891820 100644
--- a/src/core/bs_assign.c
+++ b/src/core/bs_assign.c
@@ -49,12 +49,6 @@ class CommandBSAssign : public Command
return MOD_CONT;
}
- if (ci->flags & CI_FORBIDDEN)
- {
- notice_lang(s_BotServ, u, CHAN_X_FORBIDDEN, chan);
- return MOD_CONT;
- }
-
if ((ci->botflags & BS_NOBOT) || (!check_access(u, ci, CA_ASSIGN) && !u->nc->HasPriv("botserv/administration")))
{
notice_lang(s_BotServ, u, PERMISSION_DENIED);
diff --git a/src/core/bs_badwords.c b/src/core/bs_badwords.c
index 29025965f..00d1bace2 100644
--- a/src/core/bs_badwords.c
+++ b/src/core/bs_badwords.c
@@ -255,12 +255,6 @@ class CommandBSBadwords : public Command
return MOD_CONT;
}
- if (ci->flags & CI_FORBIDDEN)
- {
- notice_lang(s_BotServ, u, CHAN_X_FORBIDDEN, chan);
- return MOD_CONT;
- }
-
if (!check_access(u, ci, CA_BADWORDS) && (!need_args || !u->nc->HasPriv("botserv/administration")))
{
notice_lang(s_BotServ, u, ACCESS_DENIED);
diff --git a/src/core/bs_info.c b/src/core/bs_info.c
index 3b98e5eb5..36625a731 100644
--- a/src/core/bs_info.c
+++ b/src/core/bs_info.c
@@ -90,10 +90,6 @@ class CommandBSInfo : public Command
notice_lang(s_BotServ, u, PERMISSION_DENIED);
return MOD_CONT;
}
- if (ci->flags & CI_FORBIDDEN) {
- notice_lang(s_BotServ, u, CHAN_X_FORBIDDEN, query);
- return MOD_CONT;
- }
notice_lang(s_BotServ, u, BOT_INFO_CHAN_HEADER, ci->name);
if (ci->bi)
diff --git a/src/core/bs_kick.c b/src/core/bs_kick.c
index 2e5d1d724..1e7787f03 100644
--- a/src/core/bs_kick.c
+++ b/src/core/bs_kick.c
@@ -42,8 +42,6 @@ class CommandBSKick : public Command
syntax_error(s_BotServ, u, "KICK", BOT_KICK_SYNTAX);
else if (!(ci = cs_findchan(chan)))
notice_lang(s_BotServ, u, CHAN_X_NOT_REGISTERED, chan);
- else if (ci->flags & CI_FORBIDDEN)
- notice_lang(s_BotServ, u, CHAN_X_FORBIDDEN, chan);
else if (!check_access(u, ci, CA_SET) && !u->nc->HasPriv("botserv/administration"))
notice_lang(s_BotServ, u, ACCESS_DENIED);
else if (!ci->bi)
diff --git a/src/core/bs_say.c b/src/core/bs_say.c
index e1c2934c8..153a20eb2 100644
--- a/src/core/bs_say.c
+++ b/src/core/bs_say.c
@@ -37,12 +37,6 @@ class CommandBSSay : public Command
return MOD_CONT;
}
- if (ci->flags & CI_FORBIDDEN)
- {
- notice_lang(s_BotServ, u, CHAN_X_FORBIDDEN, chan);
- return MOD_CONT;
- }
-
if (!check_access(u, ci, CA_SAY))
{
notice_lang(s_BotServ, u, ACCESS_DENIED);
diff --git a/src/core/bs_set.c b/src/core/bs_set.c
index 0953e3f6e..34d3f66d4 100644
--- a/src/core/bs_set.c
+++ b/src/core/bs_set.c
@@ -64,8 +64,6 @@ class CommandBSSet : public Command
return MOD_CONT;
} else if (!(ci = cs_findchan(chan)))
notice_lang(s_BotServ, u, CHAN_X_NOT_REGISTERED, chan);
- else if (ci->flags & CI_FORBIDDEN)
- notice_lang(s_BotServ, u, CHAN_X_FORBIDDEN, chan);
else if (!u->nc->HasPriv("botserv/administration") && !check_access(u, ci, CA_SET))
notice_lang(s_BotServ, u, ACCESS_DENIED);
else {
diff --git a/src/core/bs_unassign.c b/src/core/bs_unassign.c
index 9749f0eb3..01ed984b0 100644
--- a/src/core/bs_unassign.c
+++ b/src/core/bs_unassign.c
@@ -34,8 +34,6 @@ class CommandBSUnassign : public Command
notice_lang(s_BotServ, u, BOT_ASSIGN_READONLY);
else if (!(ci = cs_findchan(chan)))
notice_lang(s_BotServ, u, CHAN_X_NOT_REGISTERED, chan);
- else if (ci->flags & CI_FORBIDDEN)
- notice_lang(s_BotServ, u, CHAN_X_FORBIDDEN, chan);
else if (!u->nc->HasPriv("botserv/administration") && !check_access(u, ci, CA_ASSIGN))
notice_lang(s_BotServ, u, ACCESS_DENIED);
else if (!ci->bi)
diff --git a/src/core/cs_access.c b/src/core/cs_access.c
index e5e9d135f..ced9bf8ba 100644
--- a/src/core/cs_access.c
+++ b/src/core/cs_access.c
@@ -124,8 +124,6 @@ class CommandCSAccess : public Command
this->OnSyntaxError(u);
else if (!(ci = cs_findchan(chan)))
notice_lang(s_ChanServ, u, CHAN_X_NOT_REGISTERED, chan);
- else if (ci->flags & CI_FORBIDDEN)
- notice_lang(s_ChanServ, u, CHAN_X_FORBIDDEN, chan);
/* We still allow LIST in xOP mode, but not others */
else if ((ci->flags & CI_XOP) && !is_list)
{
@@ -397,8 +395,6 @@ class CommandCSLevels : public Command
this->OnSyntaxError(u);
} else if (!(ci = cs_findchan(chan))) {
notice_lang(s_ChanServ, u, CHAN_X_NOT_REGISTERED, chan);
- } else if (ci->flags & CI_FORBIDDEN) {
- notice_lang(s_ChanServ, u, CHAN_X_FORBIDDEN, chan);
} else if (ci->flags & CI_XOP) {
notice_lang(s_ChanServ, u, CHAN_LEVELS_XOP);
} else if (!is_founder(u, ci) && !u->nc->HasPriv("chanserv/access/change")) {
diff --git a/src/core/cs_akick.c b/src/core/cs_akick.c
index 229678780..524b80fb5 100644
--- a/src/core/cs_akick.c
+++ b/src/core/cs_akick.c
@@ -218,8 +218,6 @@ class CommandCSAKick : public Command
syntax_error(s_ChanServ, u, "AKICK", CHAN_AKICK_SYNTAX);
} else if (!(ci = cs_findchan(chan))) {
notice_lang(s_ChanServ, u, CHAN_X_NOT_REGISTERED, chan);
- } else if (ci-> flags & CI_FORBIDDEN) {
- notice_lang(s_ChanServ, u, CHAN_X_FORBIDDEN, chan);
} else if (!check_access(u, ci, CA_AKICK) && !u->nc->HasPriv("chanserv/access/change"))
{
notice_lang(s_ChanServ, u, ACCESS_DENIED);
diff --git a/src/core/cs_ban.c b/src/core/cs_ban.c
index bb0b6d13b..3ac9f3174 100644
--- a/src/core/cs_ban.c
+++ b/src/core/cs_ban.c
@@ -64,8 +64,6 @@ class CommandCSBan : public Command
notice_lang(s_ChanServ, u, CHAN_X_NOT_IN_USE, chan);
} else if (!(ci = c->ci)) {
notice_lang(s_ChanServ, u, CHAN_X_NOT_REGISTERED, chan);
- } else if (ci->flags & CI_FORBIDDEN) {
- notice_lang(s_ChanServ, u, CHAN_X_FORBIDDEN, chan);
} else if (is_same ? !(u2 = u) : !(u2 = finduser(target))) {
notice_lang(s_ChanServ, u, NICK_X_NOT_IN_USE, target);
} else if (!is_same ? !check_access(u, ci, CA_BAN) :
@@ -155,12 +153,6 @@ class CommandCSUnban : public Command
return MOD_CONT;
}
- if (ci->flags & CI_FORBIDDEN)
- {
- notice_lang(s_ChanServ, u, CHAN_X_FORBIDDEN, chan);
- return MOD_CONT;
- }
-
if (!check_access(u, ci, CA_UNBAN))
{
notice_lang(s_ChanServ, u, PERMISSION_DENIED);
diff --git a/src/core/cs_clear.c b/src/core/cs_clear.c
index 12780a43e..aa17b27d0 100644
--- a/src/core/cs_clear.c
+++ b/src/core/cs_clear.c
@@ -45,8 +45,6 @@ class CommandCSClear : public Command
notice_lang(s_ChanServ, u, CHAN_X_NOT_IN_USE, chan);
} else if (!(ci = c->ci)) {
notice_lang(s_ChanServ, u, CHAN_X_NOT_REGISTERED, chan);
- } else if (ci->flags & CI_FORBIDDEN) {
- notice_lang(s_ChanServ, u, CHAN_X_FORBIDDEN, chan);
} else if (!u || !check_access(u, ci, CA_CLEAR)) {
notice_lang(s_ChanServ, u, PERMISSION_DENIED);
} else if (stricmp(what, "bans") == 0) {
diff --git a/src/core/cs_drop.c b/src/core/cs_drop.c
index 476917cc2..81cae5a5a 100644
--- a/src/core/cs_drop.c
+++ b/src/core/cs_drop.c
@@ -32,6 +32,8 @@ class CommandCSDrop : public Command
public:
CommandCSDrop() : Command("DROP", 1, 1)
{
+ this->SetFlag(CFLAG_ALLOW_FORBIDDEN);
+ this->SetFlag(CFLAG_ALLOW_SUSPENDED);
}
CommandReturn Execute(User *u, std::vector<std::string> &params)
diff --git a/src/core/cs_getkey.c b/src/core/cs_getkey.c
index 7518fa791..e07850924 100644
--- a/src/core/cs_getkey.c
+++ b/src/core/cs_getkey.c
@@ -50,12 +50,6 @@ class CommandCSGetKey : public Command
return MOD_CONT;
}
- if (ci->flags & CI_FORBIDDEN)
- {
- notice_lang(s_ChanServ, u, CHAN_X_FORBIDDEN, chan);
- return MOD_CONT;
- }
-
if (!check_access(u, ci, CA_GETKEY))
{
notice_lang(s_ChanServ, u, ACCESS_DENIED);
diff --git a/src/core/cs_getpass.c b/src/core/cs_getpass.c
index 687f7cf7d..130f6217b 100644
--- a/src/core/cs_getpass.c
+++ b/src/core/cs_getpass.c
@@ -29,6 +29,7 @@ class CommandCSGetPass : public Command
public:
CommandCSGetPass() : Command("GETPASS", 1, 1)
{
+ this->SetFlag(CFLAG_ALLOW_SUSPENDED);
}
CommandReturn Execute(User *u, std::vector<std::string> &params)
@@ -48,11 +49,6 @@ class CommandCSGetPass : public Command
notice_lang(s_ChanServ, u, CHAN_X_NOT_REGISTERED, chan);
return MOD_CONT;
}
- if (ci->flags & CI_FORBIDDEN)
- {
- notice_lang(s_ChanServ, u, CHAN_X_FORBIDDEN, chan);
- return MOD_CONT;
- }
if (!enc_decrypt(ci->founderpass, tmp_pass, PASSMAX - 1))
{
notice_lang(s_ChanServ, u, CHAN_GETPASS_UNAVAILABLE);
diff --git a/src/core/cs_identify.c b/src/core/cs_identify.c
index 7819f6091..59dba5247 100644
--- a/src/core/cs_identify.c
+++ b/src/core/cs_identify.c
@@ -48,12 +48,6 @@ class CommandCSIdentify : public Command
return MOD_CONT;
}
- if (ci->flags & CI_FORBIDDEN)
- {
- notice_lang(s_ChanServ, u, CHAN_X_FORBIDDEN, chan);
- return MOD_CONT;
- }
-
if (!nick_identified(u))
{
notice_lang(s_ChanServ, u, NICK_IDENTIFY_REQUIRED, s_NickServ);
diff --git a/src/core/cs_info.c b/src/core/cs_info.c
index 6492bc45b..5123858af 100644
--- a/src/core/cs_info.c
+++ b/src/core/cs_info.c
@@ -44,6 +44,8 @@ class CommandCSInfo : public Command
CommandCSInfo() : Command("INFO", 1, 2)
{
this->SetFlag(CFLAG_ALLOW_UNREGISTERED);
+ this->SetFlag(CFLAG_ALLOW_SUSPENDED);
+ this->SetFlag(CFLAG_ALLOW_FORBIDDEN);
}
CommandReturn Execute(User *u, std::vector<std::string> &params)
diff --git a/src/core/cs_invite.c b/src/core/cs_invite.c
index 6d6d19a26..c19823fad 100644
--- a/src/core/cs_invite.c
+++ b/src/core/cs_invite.c
@@ -48,16 +48,6 @@ class CommandCSInvite : public Command
notice_lang(s_ChanServ, u, CHAN_X_NOT_REGISTERED, chan);
return MOD_CONT;
}
- else if (ci->flags & CI_FORBIDDEN)
- {
- notice_lang(s_ChanServ, u, CHAN_X_FORBIDDEN, chan);
- return MOD_CONT;
- }
- else if (ci->flags & CI_SUSPENDED)
- {
- notice_lang(s_ChanServ, u, CHAN_X_FORBIDDEN, chan);
- return MOD_CONT;
- }
else if (!u || !check_access(u, ci, CA_INVITE))
{
notice_lang(s_ChanServ, u, PERMISSION_DENIED);
diff --git a/src/core/cs_kick.c b/src/core/cs_kick.c
index be71fb4f5..db53e22aa 100644
--- a/src/core/cs_kick.c
+++ b/src/core/cs_kick.c
@@ -60,8 +60,6 @@ class CommandCSKick : public Command
notice_lang(s_ChanServ, u, CHAN_X_NOT_IN_USE, chan);
} else if (!(ci = c->ci)) {
notice_lang(s_ChanServ, u, CHAN_X_NOT_REGISTERED, chan);
- } else if (ci->flags & CI_FORBIDDEN) {
- notice_lang(s_ChanServ, u, CHAN_X_FORBIDDEN, chan);
} else if (is_same ? !(u2 = u) : !(u2 = finduser(target))) {
notice_lang(s_ChanServ, u, NICK_X_NOT_IN_USE, target);
} else if (!is_on_chan(c, u2)) {
diff --git a/src/core/cs_logout.c b/src/core/cs_logout.c
index 682a4b201..81a27c451 100644
--- a/src/core/cs_logout.c
+++ b/src/core/cs_logout.c
@@ -72,8 +72,6 @@ class CommandCSLogout : public Command
this->OnSyntaxError(u);
else if (!(ci = cs_findchan(chan)))
notice_lang(s_ChanServ, u, CHAN_X_NOT_REGISTERED, chan);
- else if ((ci->flags & CI_FORBIDDEN))
- notice_lang(s_ChanServ, u, CHAN_X_FORBIDDEN, chan);
else if (nick && !(u2 = finduser(nick)))
notice_lang(s_ChanServ, u, NICK_X_NOT_IN_USE, nick);
else if (u2 != u && !is_real_founder(u, ci) && !is_admin)
diff --git a/src/core/cs_modes.c b/src/core/cs_modes.c
index e0a7f3111..8aebedcdf 100644
--- a/src/core/cs_modes.c
+++ b/src/core/cs_modes.c
@@ -64,8 +64,6 @@ static CommandReturn do_util(User *u, CSModeUtil *util, const char *chan, const
notice_lang(s_ChanServ, u, CHAN_X_NOT_IN_USE, chan);
} else if (!(ci = c->ci)) {
notice_lang(s_ChanServ, u, CHAN_X_NOT_REGISTERED, c->name);
- } else if (ci->flags & CI_FORBIDDEN) {
- notice_lang(s_ChanServ, u, CHAN_X_FORBIDDEN, ci->name);
} else if (is_same ? !(u2 = u) : !(u2 = finduser(nick))) {
notice_lang(s_ChanServ, u, NICK_X_NOT_IN_USE, nick);
} else if (!is_on_chan(c, u2)) {
diff --git a/src/core/cs_register.c b/src/core/cs_register.c
index ef7533946..096eb32d3 100644
--- a/src/core/cs_register.c
+++ b/src/core/cs_register.c
@@ -57,15 +57,7 @@ class CommandCSRegister : public Command
else if (!(c = findchan(chan)))
notice_lang(s_ChanServ, u, CHAN_REGISTER_NONE_CHANNEL, chan);
else if ((ci = cs_findchan(chan)))
- {
- if (ci->flags & CI_FORBIDDEN)
- {
- alog("%s: Attempt to register FORBIDden channel %s by %s!%s@%s", s_ChanServ, ci->name, u->nick, u->GetIdent().c_str(), u->host);
- notice_lang(s_ChanServ, u, CHAN_MAY_NOT_BE_REGISTERED, chan);
- }
- else
- notice_lang(s_ChanServ, u, CHAN_ALREADY_REGISTERED, chan);
- }
+ notice_lang(s_ChanServ, u, CHAN_ALREADY_REGISTERED, chan);
else if (!stricmp(chan, "#"))
notice_lang(s_ChanServ, u, CHAN_MAY_NOT_BE_REGISTERED, chan);
else if (!chan_has_user_status(c, u, CUS_OP))
diff --git a/src/core/cs_sendpass.c b/src/core/cs_sendpass.c
index 47402b4e9..b6d130cdb 100644
--- a/src/core/cs_sendpass.c
+++ b/src/core/cs_sendpass.c
@@ -34,8 +34,6 @@ class CommandCSSendPass : public Command
notice_lang(s_ChanServ, u, PERMISSION_DENIED);
else if (!(ci = cs_findchan(chan)) || !(founder = ci->founder))
notice_lang(s_ChanServ, u, CHAN_X_NOT_REGISTERED, chan);
- else if (ci->flags & CI_FORBIDDEN)
- notice_lang(s_ChanServ, u, CHAN_X_FORBIDDEN, chan);
else
{
char buf[BUFSIZE];
diff --git a/src/core/cs_set.c b/src/core/cs_set.c
index 1d17d5bdf..57f87ca55 100644
--- a/src/core/cs_set.c
+++ b/src/core/cs_set.c
@@ -574,8 +574,6 @@ class CommandCSSet : public Command
syntax_error(s_ChanServ, u, "SET", CHAN_SET_SYNTAX);
} else if (!(ci = cs_findchan(chan))) {
notice_lang(s_ChanServ, u, CHAN_X_NOT_REGISTERED, chan);
- } else if (ci->flags & CI_FORBIDDEN) {
- notice_lang(s_ChanServ, u, CHAN_X_FORBIDDEN, chan);
} else if (!is_servadmin && !check_access(u, ci, CA_SET)) {
notice_lang(s_ChanServ, u, ACCESS_DENIED);
} else if (stricmp(cmd, "FOUNDER") == 0) {
diff --git a/src/core/cs_status.c b/src/core/cs_status.c
index bf985abd2..1bca1483f 100644
--- a/src/core/cs_status.c
+++ b/src/core/cs_status.c
@@ -44,8 +44,6 @@ class CommandCSStatus : public Command
}
if (!ci)
notice_lang(s_ChanServ, u, CHAN_STATUS_NOT_REGGED, temp);
- else if (ci->flags & CI_FORBIDDEN)
- notice_lang(s_ChanServ, u, CHAN_STATUS_FORBIDDEN, chan);
else if ((u2 = finduser(nick)))
notice_lang(s_ChanServ, u, CHAN_STATUS_INFO, chan, nick, get_access(u2, ci));
else /* !u2 */
diff --git a/src/core/cs_suspend.c b/src/core/cs_suspend.c
index 4f9772ba1..161471382 100644
--- a/src/core/cs_suspend.c
+++ b/src/core/cs_suspend.c
@@ -127,6 +127,7 @@ class CommandCSUnSuspend : public Command
public:
CommandCSUnSuspend() : Command("UNSUSPEND", 1, 1)
{
+ this->SetFlag(CFLAG_ALLOW_SUSPENDED);
}
CommandReturn Execute(User *u, std::vector<std::string> &params)
diff --git a/src/core/cs_topic.c b/src/core/cs_topic.c
index 578e8e9c3..54a49ab59 100644
--- a/src/core/cs_topic.c
+++ b/src/core/cs_topic.c
@@ -36,8 +36,6 @@ class CommandCSTopic : public Command
notice_lang(s_ChanServ, u, CHAN_X_NOT_IN_USE, chan);
else if (!(ci = c->ci))
notice_lang(s_ChanServ, u, CHAN_X_NOT_REGISTERED, c->name);
- else if (ci->flags & CI_FORBIDDEN)
- notice_lang(s_ChanServ, u, CHAN_X_FORBIDDEN, ci->name);
else if (!check_access(u, ci, CA_TOPIC) && !u->nc->HasCommand("chanserv/topic"))
notice_lang(s_ChanServ, u, PERMISSION_DENIED);
else
diff --git a/src/core/cs_xop.c b/src/core/cs_xop.c
index f2b41e167..6cf790851 100644
--- a/src/core/cs_xop.c
+++ b/src/core/cs_xop.c
@@ -366,8 +366,6 @@ class XOPBase : public Command
if (!(ci = cs_findchan(chan)))
notice_lang(s_ChanServ, u, CHAN_X_NOT_REGISTERED, chan);
- else if (ci->flags & CI_FORBIDDEN)
- notice_lang(s_ChanServ, u, CHAN_X_FORBIDDEN, chan);
else if (!(ci->flags & CI_XOP))
notice_lang(s_ChanServ, u, CHAN_XOP_ACCESS, s_ChanServ);
else if (!stricmp(cmd, "ADD"))
diff --git a/src/core/ms_del.c b/src/core/ms_del.c
index cb20a2b22..d3eea944a 100644
--- a/src/core/ms_del.c
+++ b/src/core/ms_del.c
@@ -48,11 +48,6 @@ class CommandMSDel : public Command
notice_lang(s_MemoServ, u, READ_ONLY_MODE);
return MOD_CONT;
}
- else if (ci->flags & CI_FORBIDDEN)
- {
- notice_lang(s_MemoServ, u, CHAN_X_FORBIDDEN, chan);
- return MOD_CONT;
- }
else if (!check_access(u, ci, CA_MEMO))
{
notice_lang(s_MemoServ, u, ACCESS_DENIED);
diff --git a/src/core/ms_info.c b/src/core/ms_info.c
index 8a88d1d34..41bfffd61 100644
--- a/src/core/ms_info.c
+++ b/src/core/ms_info.c
@@ -56,11 +56,6 @@ class CommandMSInfo : public Command
notice_lang(s_MemoServ, u, CHAN_X_NOT_REGISTERED, name);
return MOD_CONT;
}
- else if (ci->flags & CI_FORBIDDEN)
- {
- notice_lang(s_MemoServ, u, CHAN_X_FORBIDDEN, name);
- return MOD_CONT;
- }
else if (!check_access(u, ci, CA_MEMO))
{
notice_lang(s_MemoServ, u, ACCESS_DENIED);
diff --git a/src/core/ms_list.c b/src/core/ms_list.c
index 4465a2e47..85cd21047 100644
--- a/src/core/ms_list.c
+++ b/src/core/ms_list.c
@@ -43,11 +43,6 @@ class CommandMSList : public Command
notice_lang(s_MemoServ, u, CHAN_X_NOT_REGISTERED, chan);
return MOD_CONT;
}
- else if (ci->flags & CI_FORBIDDEN)
- {
- notice_lang(s_MemoServ, u, CHAN_X_FORBIDDEN, chan);
- return MOD_CONT;
- }
else if (!check_access(u, ci, CA_MEMO))
{
notice_lang(s_MemoServ, u, ACCESS_DENIED);
diff --git a/src/core/ms_read.c b/src/core/ms_read.c
index bf07e30e0..15c968b94 100644
--- a/src/core/ms_read.c
+++ b/src/core/ms_read.c
@@ -43,11 +43,6 @@ class CommandMSRead : public Command
notice_lang(s_MemoServ, u, CHAN_X_NOT_REGISTERED, chan);
return MOD_CONT;
}
- else if (ci->flags & CI_FORBIDDEN)
- {
- notice_lang(s_MemoServ, u, CHAN_X_FORBIDDEN, chan);
- return MOD_CONT;
- }
else if (!check_access(u, ci, CA_MEMO))
{
notice_lang(s_MemoServ, u, ACCESS_DENIED);
diff --git a/src/core/ms_set.c b/src/core/ms_set.c
index 209ad453d..a9922aae8 100644
--- a/src/core/ms_set.c
+++ b/src/core/ms_set.c
@@ -88,11 +88,6 @@ class CommandMSSet : public Command
notice_lang(s_MemoServ, u, CHAN_X_NOT_REGISTERED, chan);
return MOD_CONT;
}
- else if (ci->flags & CI_FORBIDDEN)
- {
- notice_lang(s_MemoServ, u, CHAN_X_FORBIDDEN, chan);
- return MOD_CONT;
- }
else if (!is_servadmin && !check_access(u, ci, CA_MEMO))
{
notice_lang(s_MemoServ, u, ACCESS_DENIED);