From 4ffe61102e8c115fad747b89c3a6d86524a2033b Mon Sep 17 00:00:00 2001 From: pk910 Date: Tue, 23 Aug 2011 01:17:55 +0200 Subject: [PATCH] fixed access check & added cmd_up --- bot_NeonServ.c | 7 ++++++- cmd_neonserv_adduser.c | 5 ++++- cmd_neonserv_clvl.c | 5 ++++- cmd_neonserv_deluser.c | 5 ++++- cmd_neonserv_suspend.c | 5 ++++- cmd_neonserv_unsuspend.c | 5 ++++- cmd_neonserv_up.c | 43 ++++++++++++++++++++++++++++++++++++++++ 7 files changed, 69 insertions(+), 6 deletions(-) create mode 100644 cmd_neonserv_up.c diff --git a/bot_NeonServ.c b/bot_NeonServ.c index 647b3e7..674d116 100644 --- a/bot_NeonServ.c +++ b/bot_NeonServ.c @@ -26,6 +26,8 @@ static const struct default_language_entry msgtab[] = { {"NS_ADDUSER_DONE", "Added %s to the %s user list with access %d."}, {"NS_NOT_ON_USERLIST", "%s lacks access to \002%s\002."}, {"NS_NOT_ON_USERLIST_YOU", "You lack access to \002%s\002."}, + {"NS_NOT_ON_CHANNEL", "%s isn't currently in \002%s\002."}, + {"NS_NOT_ON_CHANNEL_YOU", "You aren't currently in \002%s\002."}, {"NS_DELUSER_DONE", "Deleted %s (with access %d) from the %s user list."}, {"NS_ACCESS_OUTRANKED", "You cannot give users access greater than or equal to your own."}, {"NS_USER_OUTRANKED", "\002%s\002 outranks you (command has no effect)."}, @@ -68,6 +70,8 @@ static const struct default_language_entry msgtab[] = { {"NS_MYACCESS_HEADER_INFO", "Info"}, {"NS_MYACCESS_COUNT", "%s has access in \002%d\002 channel(s) and is owner of \002%d\002 channel(s)."}, {"NS_MYACCESS_COUNT_MATCH", "%s has access in \002%d\002 channel(s) and is owner of \002%d\002 channel(s) (\002%d\002 channels matching your request)."}, + {"NS_UP_ALREADY_OP", "You are already opped in \002%s\002."}, + {"NS_UP_ALREADY_VOICE", "You are already voiced in \002%s\002."}, {NULL, NULL} }; @@ -85,7 +89,7 @@ INCLUDE ALL CMD's HERE //#include "cmd_neonserv_trim.c" //#include "cmd_neonserv_giveownership.c" #include "cmd_neonserv_users.c" -//#include "cmd_neonserv_up.c" +#include "cmd_neonserv_up.c" //#include "cmd_neonserv_down.c" //#include "cmd_neonserv_upall.c" //#include "cmd_neonserv_downall.c" @@ -226,6 +230,7 @@ void init_NeonServ() { register_command(BOTID, "unsuspend", neonserv_cmd_unsuspend, 1, CMDFLAG_REQUIRE_CHAN | CMDFLAG_REGISTERED_CHAN | CMDFLAG_REQUIRE_AUTH | CMDFLAG_CHECK_AUTH); register_command(BOTID, "delme", neonserv_cmd_delme, 0, CMDFLAG_REQUIRE_CHAN | CMDFLAG_REGISTERED_CHAN | CMDFLAG_REQUIRE_AUTH | CMDFLAG_CHECK_AUTH); register_command(BOTID, "myaccess", neonserv_cmd_myaccess, 0, CMDFLAG_REQUIRE_AUTH | CMDFLAG_CHECK_AUTH); + register_command(BOTID, "up", neonserv_cmd_up, 0, CMDFLAG_REQUIRE_CHAN | CMDFLAG_REGISTERED_CHAN); start_bots(); bind_bot_ready(neonserv_bot_ready); diff --git a/cmd_neonserv_adduser.c b/cmd_neonserv_adduser.c index f68f041..a0b5e7e 100644 --- a/cmd_neonserv_adduser.c +++ b/cmd_neonserv_adduser.c @@ -20,7 +20,10 @@ static CMD_BIND(neonserv_cmd_adduser) { MYSQL_RES *res; MYSQL_ROW row; check_mysql(); - checkChannelAccess(user, chan, "channel_canadd", 1, 0); + if(!checkChannelAccess(user, chan, "channel_canadd", 1, 0)) { + reply(getTextBot(), user, "NS_ACCESS_DENIED"); + return; + } caccess = atoi(argv[1]); if(caccess <= 0 || caccess > 500) { reply(getTextBot(), user, "NS_INVALID_ACCESS", caccess); diff --git a/cmd_neonserv_clvl.c b/cmd_neonserv_clvl.c index 9d4e7e4..d0ce7a4 100644 --- a/cmd_neonserv_clvl.c +++ b/cmd_neonserv_clvl.c @@ -17,7 +17,10 @@ struct neonserv_cmd_clvl_cache { static CMD_BIND(neonserv_cmd_clvl) { int caccess; check_mysql(); - checkChannelAccess(user, chan, "channel_canclvl", 1, 0); + if(!checkChannelAccess(user, chan, "channel_canclvl", 1, 0)) { + reply(getTextBot(), user, "NS_ACCESS_DENIED"); + return; + } caccess = atoi(argv[1]); if(caccess <= 0 || caccess > 500) { reply(getTextBot(), user, "NS_INVALID_ACCESS", caccess); diff --git a/cmd_neonserv_deluser.c b/cmd_neonserv_deluser.c index 79e76ea..7eda8e4 100644 --- a/cmd_neonserv_deluser.c +++ b/cmd_neonserv_deluser.c @@ -14,7 +14,10 @@ struct neonserv_cmd_deluser_cache { static CMD_BIND(neonserv_cmd_deluser) { check_mysql(); - checkChannelAccess(user, chan, "channel_candel", 1, 0); + if(!checkChannelAccess(user, chan, "channel_candel", 1, 0)) { + reply(getTextBot(), user, "NS_ACCESS_DENIED"); + return; + } if(argv[0][0] == '*') { //we've got an auth argv[0]++; diff --git a/cmd_neonserv_suspend.c b/cmd_neonserv_suspend.c index 37d205e..8c991ad 100644 --- a/cmd_neonserv_suspend.c +++ b/cmd_neonserv_suspend.c @@ -14,7 +14,10 @@ struct neonserv_cmd_suspend_cache { static CMD_BIND(neonserv_cmd_suspend) { check_mysql(); - checkChannelAccess(user, chan, "channel_cansuspend", 1, 0); + if(!checkChannelAccess(user, chan, "channel_cansuspend", 1, 0)) { + reply(getTextBot(), user, "NS_ACCESS_DENIED"); + return; + } if(argv[0][0] == '*') { //we've got an auth argv[0]++; diff --git a/cmd_neonserv_unsuspend.c b/cmd_neonserv_unsuspend.c index 2e26bc7..3c5a0c1 100644 --- a/cmd_neonserv_unsuspend.c +++ b/cmd_neonserv_unsuspend.c @@ -14,7 +14,10 @@ struct neonserv_cmd_unsuspend_cache { static CMD_BIND(neonserv_cmd_unsuspend) { check_mysql(); - checkChannelAccess(user, chan, "channel_cansuspend", 1, 0); + if(!checkChannelAccess(user, chan, "channel_cansuspend", 1, 0)) { + reply(getTextBot(), user, "NS_ACCESS_DENIED"); + return; + } if(argv[0][0] == '*') { //we've got an auth argv[0]++; diff --git a/cmd_neonserv_up.c b/cmd_neonserv_up.c new file mode 100644 index 0000000..5141496 --- /dev/null +++ b/cmd_neonserv_up.c @@ -0,0 +1,43 @@ + +/* +* no arguments +*/ + +static CMD_BIND(neonserv_cmd_up) { + struct ChanUser *chanuser = getChanUser(user, chan); + if(!chanuser) { + reply(getTextBot(), user, "NS_NOT_ON_CHANNEL_YOU", chan->name); + return; + } + check_mysql(); + loadChannelSettings(chan); + MYSQL_RES *res, *default_res; + MYSQL_ROW row, default_row; + int chan_getop, chan_getvoice, caccess; + printf_mysql_query("SELECT `channel_getop`, `channel_getvoice` FROM `channels` WHERE `channel_id` = '%d'", chan->channel_id); + res = mysql_use(); + if ((row = mysql_fetch_row(res)) == NULL) return; + if(!row[0] || !row[1]) { + printf_mysql_query("SELECT `channel_getop`, `channel_getvoice` FROM `channels` WHERE `channel_name` = 'defaults'"); + default_res = mysql_use(); + if ((default_row = mysql_fetch_row(default_res)) == NULL) return; + chan_getop = (row[0] ? atoi(row[0]) : atoi(default_row[0])); + chan_getvoice = (row[1] ? atoi(row[1]) : atoi(default_row[1])); + } else { + chan_getop = atoi(row[0]); + chan_getvoice = atoi(row[1]); + } + caccess = getChannelAccess(user, chan, 1); + if(caccess >= chan_getop) { + if(!(chanuser->flags & CHANUSERFLAG_OPPED)) { + putsock(client, "MODE %s +o %s", chan->name, user->nick); + } else + reply(getTextBot(), user, "NS_UP_ALREADY_OP", chan->name); + } else if(caccess >= chan_getvoice) { + if(!(chanuser->flags & CHANUSERFLAG_OPPED)) { + putsock(client, "MODE %s +v %s", chan->name, user->nick); + } else + reply(getTextBot(), user, "NS_UP_ALREADY_VOICE", chan->name); + } else + reply(getTextBot(), user, "NS_NOT_ON_USERLIST_YOU", chan->name); +} -- 2.20.1