diff options
author | Robin Burchell w00t@inspircd.org <Robin Burchell w00t@inspircd.org@5417fbe8-f217-4b02-8779-1006273d7864> | 2008-11-03 23:35:06 +0000 |
---|---|---|
committer | Robin Burchell w00t@inspircd.org <Robin Burchell w00t@inspircd.org@5417fbe8-f217-4b02-8779-1006273d7864> | 2008-11-03 23:35:06 +0000 |
commit | c6e4c00e7a70f3976769e470f207159d4d019ea9 (patch) | |
tree | 111ef0d90c44de9874a0074a54b24c2fb7d7c136 /src/core/bs_bot.c | |
parent | bcff05ae3a9890d2fd93a9118e40c9d3c9bfd54d (diff) |
Disallow deletion of core services.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@1532 5417fbe8-f217-4b02-8779-1006273d7864
Diffstat (limited to 'src/core/bs_bot.c')
-rw-r--r-- | src/core/bs_bot.c | 51 |
1 files changed, 31 insertions, 20 deletions
diff --git a/src/core/bs_bot.c b/src/core/bs_bot.c index 0a69cc971..24f808faa 100644 --- a/src/core/bs_bot.c +++ b/src/core/bs_bot.c @@ -310,26 +310,37 @@ int do_bot(User * u) send_event(EVENT_BOT_CHANGE, 1, bi->nick); } } else if (!stricmp(cmd, "DEL")) { - char *nick = strtok(NULL, " "); - - if (!nick) - syntax_error(s_BotServ, u, "BOT", BOT_BOT_SYNTAX); - else if (readonly) - notice_lang(s_BotServ, u, BOT_BOT_READONLY); - else if (!(bi = findbot(nick))) - notice_lang(s_BotServ, u, BOT_DOES_NOT_EXIST, nick); - else { - send_event(EVENT_BOT_DEL, 1, bi->nick); - ircdproto->SendQuit(bi, - "Quit: Help! I'm being deleted by %s!", - u->nick); - if (ircd->sqline) { - ircdproto->SendSQLineDel(bi->nick); - } - delete bi; - - notice_lang(s_BotServ, u, BOT_BOT_DELETED, nick); - } + char *nick = strtok(NULL, " "); + + if (!nick) + { + syntax_error(s_BotServ, u, "BOT", BOT_BOT_SYNTAX); + return MOD_CONT; + } + + if (readonly) + { + notice_lang(s_BotServ, u, BOT_BOT_READONLY); + return MOD_CONT; + } + + if (!(bi = findbot(nick))) + { + notice_lang(s_BotServ, u, BOT_DOES_NOT_EXIST, nick); + return MOD_CONT; + } + + if (nickIsServices(nick, 0)) + { + notice_lang(s_BotServ, u, BOT_DOES_NOT_EXIST); + return MOD_CONT; + } + + send_event(EVENT_BOT_DEL, 1, bi->nick); + ircdproto->SendQuit(bi, "Quit: Help! I'm being deleted by %s!", u->nick); + ircdproto->SendSQLineDel(bi->nick); + delete bi; + notice_lang(s_BotServ, u, BOT_BOT_DELETED, nick); } else syntax_error(s_BotServ, u, "BOT", BOT_BOT_SYNTAX); |