From a299f351c2508686888d276685c3770a929a23bf Mon Sep 17 00:00:00 2001 From: pk910 Date: Mon, 17 Oct 2011 15:39:01 +0200 Subject: [PATCH] prevent strange users from kicking/banning their selves (and crying about it ... ? :D) --- src/bot_NeonServ.c | 1 + src/cmd_neonserv_addban.c | 4 ++++ src/cmd_neonserv_ban.c | 5 +++++ src/cmd_neonserv_kick.c | 12 ++++++++++++ src/cmd_neonserv_kickban.c | 12 ++++++++++++ 5 files changed, 34 insertions(+) diff --git a/src/bot_NeonServ.c b/src/bot_NeonServ.c index f81228e..362d999 100644 --- a/src/bot_NeonServ.c +++ b/src/bot_NeonServ.c @@ -57,6 +57,7 @@ static const struct default_language_entry msgtab[] = { {"NS_NO_ACCESS", "You lack sufficient access to use this command."}, {"NS_USER_PROTECTED", "Sorry, $b%s$b is protected."}, /* {ARGS: "TestUser"} */ {"NS_SERVICE_IMMUNE", "$b%s$b may not be kicked, killed, banned, or deopped."}, /* {ARGS: "TestUser"} */ + {"NS_YOU_PROTECTED", "You may not kick or ban yourself."}, {"NS_TABLE_NONE", " None"}, {"NS_TABLE_COUNT", "Found $b%d$b matches."}, /* {ARGS: 5} */ {"NS_BAN_ALREADY_ADDED", "$b%s$b is already banned in %s."}, /* {ARGS: "*!*@moeeep.*", "#TestChan"} */ diff --git a/src/cmd_neonserv_addban.c b/src/cmd_neonserv_addban.c index 49bf014..a35c933 100644 --- a/src/cmd_neonserv_addban.c +++ b/src/cmd_neonserv_addban.c @@ -74,6 +74,10 @@ static void neonserv_cmd_addban_async1(struct ClientSocket *client, struct Clien reply(textclient, user, "NS_SERVICE_IMMUNE", chanuser->user->nick); return; } + if(cuser == user || ((cuser->flags & USERFLAG_ISAUTHED) && !stricmp(user->auth, cuser->auth))) { + reply(textclient, user, "NS_YOU_PROTECTED"); + return; + } if(isUserProtected(chan, cuser, user)) { reply(textclient, user, "NS_USER_PROTECTED", cuser->nick); return; diff --git a/src/cmd_neonserv_ban.c b/src/cmd_neonserv_ban.c index 232b679..7dec14d 100644 --- a/src/cmd_neonserv_ban.c +++ b/src/cmd_neonserv_ban.c @@ -81,6 +81,11 @@ static void neonserv_cmd_ban_async1(struct ClientSocket *client, struct ClientSo skip = 1; break; } + if(cuser == user || ((cuser->flags & USERFLAG_ISAUTHED) && !stricmp(user->auth, cuser->auth))) { + reply(textclient, user, "NS_YOU_PROTECTED"); + skip = 1; + break; + } if(isUserProtected(chan, cuser, user)) { reply(textclient, user, "NS_USER_PROTECTED", cuser->nick); skip = 1; diff --git a/src/cmd_neonserv_kick.c b/src/cmd_neonserv_kick.c index c0d73f9..5361414 100644 --- a/src/cmd_neonserv_kick.c +++ b/src/cmd_neonserv_kick.c @@ -86,6 +86,10 @@ static void neonserv_cmd_kick_async1(struct ClientSocket *client, struct ClientS reply(textclient, user, "NS_SERVICE_IMMUNE", chanuser->user->nick); continue; } + if(cuser == user || ((cuser->flags & USERFLAG_ISAUTHED) && !stricmp(user->auth, cuser->auth))) { + reply(textclient, user, "NS_YOU_PROTECTED"); + continue; + } if(isUserProtected(chan, cuser, user)) { reply(textclient, user, "NS_USER_PROTECTED", cuser->nick); continue; @@ -106,6 +110,10 @@ static void neonserv_cmd_kick_async1(struct ClientSocket *client, struct ClientS //KICK AUTH nick++; cuser = NULL; + if(!stricmp(user->auth, nick)) { + reply(textclient, user, "NS_YOU_PROTECTED"); + continue; + } for(chanuser = getChannelUsers(chan, NULL); chanuser; chanuser = getChannelUsers(chan, chanuser)) { if((chanuser->user->flags & USERFLAG_ISAUTHED) && !stricmp(chanuser->user->auth, nick)) { provided_nicks++; @@ -138,6 +146,10 @@ static void neonserv_cmd_kick_async1(struct ClientSocket *client, struct ClientS reply(textclient, user, "NS_SERVICE_IMMUNE", cuser->nick); continue; } + if(cuser == user || ((cuser->flags & USERFLAG_ISAUTHED) && !stricmp(user->auth, cuser->auth))) { + reply(textclient, user, "NS_YOU_PROTECTED"); + continue; + } if(isUserProtected(chan, cuser, user)) { reply(textclient, user, "NS_USER_PROTECTED", cuser->nick); continue; diff --git a/src/cmd_neonserv_kickban.c b/src/cmd_neonserv_kickban.c index 9d750c0..d71c3a7 100644 --- a/src/cmd_neonserv_kickban.c +++ b/src/cmd_neonserv_kickban.c @@ -86,6 +86,10 @@ static void neonserv_cmd_kickban_async1(struct ClientSocket *client, struct Clie reply(textclient, user, "NS_SERVICE_IMMUNE", chanuser->user->nick); continue; } + if(cuser == user || ((cuser->flags & USERFLAG_ISAUTHED) && !stricmp(user->auth, cuser->auth))) { + reply(textclient, user, "NS_YOU_PROTECTED"); + continue; + } if(isUserProtected(chan, cuser, user)) { reply(textclient, user, "NS_USER_PROTECTED", cuser->nick); continue; @@ -109,6 +113,10 @@ static void neonserv_cmd_kickban_async1(struct ClientSocket *client, struct Clie //KICK AUTH nick++; cuser = NULL; + if(!stricmp(user->auth, nick)) { + reply(textclient, user, "NS_YOU_PROTECTED"); + continue; + } for(chanuser = getChannelUsers(chan, NULL); chanuser; chanuser = getChannelUsers(chan, chanuser)) { if((chanuser->user->flags & USERFLAG_ISAUTHED) && !stricmp(chanuser->user->auth, nick)) { provided_nicks++; @@ -139,6 +147,10 @@ static void neonserv_cmd_kickban_async1(struct ClientSocket *client, struct Clie reply(textclient, user, "NS_SERVICE_IMMUNE", cuser->nick); continue; } + if(cuser == user || ((cuser->flags & USERFLAG_ISAUTHED) && !stricmp(user->auth, cuser->auth))) { + reply(textclient, user, "NS_YOU_PROTECTED"); + continue; + } if(isUserProtected(chan, cuser, user)) { reply(textclient, user, "NS_USER_PROTECTED", cuser->nick); continue; -- 2.20.1