From: pk910 Date: Sat, 24 Sep 2011 18:25:20 +0000 (+0200) Subject: renamed cmd_a to cmd_access X-Git-Tag: v5.3~366 X-Git-Url: http://git.pk910.de/?a=commitdiff_plain;h=c8136270dcc7283b8f6eb350dae1e9a9176025e6;p=NeonServV5.git renamed cmd_a to cmd_access --- diff --git a/bot_NeonServ.c b/bot_NeonServ.c index 5841c29..bc7f7c6 100644 --- a/bot_NeonServ.c +++ b/bot_NeonServ.c @@ -231,7 +231,7 @@ static struct ClientSocket *getBotForChannel(struct ChanNode *chan); INCLUDE ALL CMD's HERE */ //USER CMD's -#include "cmd_neonserv_a.c" +#include "cmd_neonserv_access.c" #include "cmd_neonserv_myaccess.c" #include "cmd_neonserv_adduser.c" #include "cmd_neonserv_clvl.c" @@ -442,7 +442,7 @@ void init_NeonServ() { USER_COMMAND("adduser", neonserv_cmd_adduser, 2, "#channel_canadd", CMDFLAG_REQUIRE_CHAN | CMDFLAG_REGISTERED_CHAN | CMDFLAG_REQUIRE_AUTH | CMDFLAG_CHECK_AUTH | CMDFLAG_LOG); USER_COMMAND("deluser", neonserv_cmd_deluser, 1, "#channel_candel", CMDFLAG_REQUIRE_CHAN | CMDFLAG_REGISTERED_CHAN | CMDFLAG_REQUIRE_AUTH | CMDFLAG_CHECK_AUTH | CMDFLAG_LOG); USER_COMMAND("clvl", neonserv_cmd_clvl, 2, "#channel_canclvl", CMDFLAG_REQUIRE_CHAN | CMDFLAG_REGISTERED_CHAN | CMDFLAG_REQUIRE_AUTH | CMDFLAG_CHECK_AUTH | CMDFLAG_LOG); - USER_COMMAND("a", neonserv_cmd_a, 0, NULL, CMDFLAG_REQUIRE_CHAN | CMDFLAG_REGISTERED_CHAN | CMDFLAG_LOG); + USER_COMMAND("access", neonserv_cmd_access, 0, NULL, CMDFLAG_REQUIRE_CHAN | CMDFLAG_REGISTERED_CHAN | CMDFLAG_LOG); USER_COMMAND("users", neonserv_cmd_users, 0, NULL, CMDFLAG_REQUIRE_CHAN | CMDFLAG_REGISTERED_CHAN); USER_COMMAND("suspend", neonserv_cmd_suspend, 1, "#channel_cansuspend", CMDFLAG_REQUIRE_CHAN | CMDFLAG_REGISTERED_CHAN | CMDFLAG_REQUIRE_AUTH | CMDFLAG_CHECK_AUTH | CMDFLAG_LOG); USER_COMMAND("unsuspend", neonserv_cmd_unsuspend, 1, "#channel_cansuspend", CMDFLAG_REQUIRE_CHAN | CMDFLAG_REGISTERED_CHAN | CMDFLAG_REQUIRE_AUTH | CMDFLAG_CHECK_AUTH | CMDFLAG_LOG); diff --git a/cmd_neonserv_a.c b/cmd_neonserv_a.c deleted file mode 100644 index d7ae550..0000000 --- a/cmd_neonserv_a.c +++ /dev/null @@ -1,113 +0,0 @@ - -/* -* argv[0] - nick / *auth -*/ -static USERAUTH_CALLBACK(neonserv_cmd_a_nick_lookup); -static void neonserv_cmd_a_async1(struct ClientSocket *client, struct ClientSocket *textclient, struct UserNode *user, struct ChanNode *chan, char *nick, char *auth, struct UserNode *target); - -struct neonserv_cmd_a_cache { - struct ClientSocket *client, *textclient; - struct UserNode *user; - struct ChanNode *chan; - char *nick; -}; - -static CMD_BIND(neonserv_cmd_a) { - if(argc == 0) { - if(!(user->flags & USERFLAG_ISAUTHED)) { - struct neonserv_cmd_a_cache *cache = malloc(sizeof(*cache)); - if (!cache) { - perror("malloc() failed"); - return; - } - cache->client = client; - cache->textclient = getTextBot(); - cache->user = user; - cache->chan = chan; - cache->nick = strdup(argv[0]); - get_userauth(user, neonserv_cmd_a_nick_lookup, cache); - } else - neonserv_cmd_a_async1(client, getTextBot(), user, chan, user->nick, user->auth, user); - } - else if(argv[0][0] == '*') { - //we've got an auth - argv[0]++; - neonserv_cmd_a_async1(client, getTextBot(), user, chan, NULL, argv[0], NULL); - } else { - struct UserNode *cuser = getUserByNick(argv[0]); - if(!cuser) { - cuser = createTempUser(argv[0]); - cuser->flags |= USERFLAG_ISTMPUSER; - } - if(cuser->flags & USERFLAG_ISAUTHED) { - neonserv_cmd_a_async1(client, getTextBot(), user, chan, argv[0], cuser->auth, cuser); - } else { - struct neonserv_cmd_a_cache *cache = malloc(sizeof(*cache)); - if (!cache) { - perror("malloc() failed"); - return; - } - cache->client = client; - cache->textclient = getTextBot(); - cache->user = user; - cache->chan = chan; - cache->nick = strdup(argv[0]); - get_userauth(cuser, neonserv_cmd_a_nick_lookup, cache); - } - } -} - -static USERAUTH_CALLBACK(neonserv_cmd_a_nick_lookup) { - struct neonserv_cmd_a_cache *cache = data; - if(!user) { - //USER_DOES_NOT_EXIST - reply(cache->textclient, cache->user, "NS_USER_UNKNOWN", cache->nick); - } - else if(!(user->flags & USERFLAG_ISAUTHED)) { - //USER_NOT_AUTHED - if(!strcmp(cache->nick, cache->user->nick)) - reply(cache->textclient, cache->user, "NS_YOU_NEED_AUTH"); - else - reply(cache->textclient, cache->user, "NS_USER_NEED_AUTH", cache->nick); - } - else - neonserv_cmd_a_async1(cache->client, cache->textclient, cache->user, cache->chan, user->nick, user->auth, user); - free(cache->nick); - free(cache); -} - -static void neonserv_cmd_a_async1(struct ClientSocket *client, struct ClientSocket *textclient, struct UserNode *user, struct ChanNode *chan, char *nick, char *auth, struct UserNode *target) { - //we've got a valid auth now... - MYSQL_RES *res; - MYSQL_ROW user_row, chanuser_row; - int userid; - printf_mysql_query("SELECT `user_id`, `user_access`, `user_god` FROM `users` WHERE `user_user` = '%s'", escape_string(auth)); - res = mysql_use(); - if ((user_row = mysql_fetch_row(res)) != NULL) { - userid = atoi(user_row[0]); - //check if the user is already added - printf_mysql_query("SELECT `chanuser_access`, `chanuser_flags`, `chanuser_infoline` FROM `chanusers` WHERE `chanuser_cid` = '%d' AND `chanuser_uid` = '%d'", chan->channel_id, userid); - res = mysql_use(); - if ((chanuser_row = mysql_fetch_row(res)) != NULL) { - //access output - if(nick) - reply(textclient, user, (strcmp(user_row[2], "1") ? "NS_A_ACCESS_AUTH" : "NS_A_ACCESS_AUTH_GOD"), nick, auth, atoi(chanuser_row[0]), chan->name); - else - reply(textclient, user, (strcmp(user_row[2], "1") ? "NS_A_ACCESS_NICK" : "NS_A_ACCESS_NICK_GOD"), auth, atoi(chanuser_row[0]), chan->name); - int cflags = atoi(chanuser_row[1]); - if(cflags & DB_CHANUSER_SUSPENDED) - reply(textclient, user, "NS_A_SUSPENDED", (nick ? nick : auth), chan->name); - if(chanuser_row[2] && strcmp(chanuser_row[2], "")) - reply(textclient, user, "[%s] %s", (nick ? nick : auth), chanuser_row[2]); - } else if(!strcmp(user_row[2], "1")) { - if(nick) - reply(textclient, user, "NS_A_LACKS_ACCESS_BUT_GOD_AUTH", nick, auth, chan->name); - else - reply(textclient, user, "NS_A_LACKS_ACCESS_BUT_GOD_NICK", auth, chan->name); - } else - reply(textclient, user, "NS_NOT_ON_USERLIST", nick, chan->name); - } else - reply(textclient, user, "NS_NOT_ON_USERLIST", nick, chan->name); - if(target && (target->flags & USERFLAG_ISIRCOP)) - reply(textclient, user, "NS_A_IS_IRCOP", nick); -} diff --git a/cmd_neonserv_access.c b/cmd_neonserv_access.c new file mode 100644 index 0000000..e064f8a --- /dev/null +++ b/cmd_neonserv_access.c @@ -0,0 +1,113 @@ + +/* +* argv[0] - nick / *auth +*/ +static USERAUTH_CALLBACK(neonserv_cmd_access_nick_lookup); +static void neonserv_cmd_access_async1(struct ClientSocket *client, struct ClientSocket *textclient, struct UserNode *user, struct ChanNode *chan, char *nick, char *auth, struct UserNode *target); + +struct neonserv_cmd_access_cache { + struct ClientSocket *client, *textclient; + struct UserNode *user; + struct ChanNode *chan; + char *nick; +}; + +static CMD_BIND(neonserv_cmd_access) { + if(argc == 0) { + if(!(user->flags & USERFLAG_ISAUTHED)) { + struct neonserv_cmd_access_cache *cache = malloc(sizeof(*cache)); + if (!cache) { + perror("malloc() failed"); + return; + } + cache->client = client; + cache->textclient = getTextBot(); + cache->user = user; + cache->chan = chan; + cache->nick = strdup(argv[0]); + get_userauth(user, neonserv_cmd_access_nick_lookup, cache); + } else + neonserv_cmd_access_async1(client, getTextBot(), user, chan, user->nick, user->auth, user); + } + else if(argv[0][0] == '*') { + //we've got an auth + argv[0]++; + neonserv_cmd_access_async1(client, getTextBot(), user, chan, NULL, argv[0], NULL); + } else { + struct UserNode *cuser = getUserByNick(argv[0]); + if(!cuser) { + cuser = createTempUser(argv[0]); + cuser->flags |= USERFLAG_ISTMPUSER; + } + if(cuser->flags & USERFLAG_ISAUTHED) { + neonserv_cmd_access_async1(client, getTextBot(), user, chan, argv[0], cuser->auth, cuser); + } else { + struct neonserv_cmd_access_cache *cache = malloc(sizeof(*cache)); + if (!cache) { + perror("malloc() failed"); + return; + } + cache->client = client; + cache->textclient = getTextBot(); + cache->user = user; + cache->chan = chan; + cache->nick = strdup(argv[0]); + get_userauth(cuser, neonserv_cmd_access_nick_lookup, cache); + } + } +} + +static USERAUTH_CALLBACK(neonserv_cmd_access_nick_lookup) { + struct neonserv_cmd_access_cache *cache = data; + if(!user) { + //USER_DOES_NOT_EXIST + reply(cache->textclient, cache->user, "NS_USER_UNKNOWN", cache->nick); + } + else if(!(user->flags & USERFLAG_ISAUTHED)) { + //USER_NOT_AUTHED + if(!strcmp(cache->nick, cache->user->nick)) + reply(cache->textclient, cache->user, "NS_YOU_NEED_AUTH"); + else + reply(cache->textclient, cache->user, "NS_USER_NEED_AUTH", cache->nick); + } + else + neonserv_cmd_access_async1(cache->client, cache->textclient, cache->user, cache->chan, user->nick, user->auth, user); + free(cache->nick); + free(cache); +} + +static void neonserv_cmd_access_async1(struct ClientSocket *client, struct ClientSocket *textclient, struct UserNode *user, struct ChanNode *chan, char *nick, char *auth, struct UserNode *target) { + //we've got a valid auth now... + MYSQL_RES *res; + MYSQL_ROW user_row, chanuser_row; + int userid; + printf_mysql_query("SELECT `user_id`, `user_access`, `user_god` FROM `users` WHERE `user_user` = '%s'", escape_string(auth)); + res = mysql_use(); + if ((user_row = mysql_fetch_row(res)) != NULL) { + userid = atoi(user_row[0]); + //check if the user is already added + printf_mysql_query("SELECT `chanuser_access`, `chanuser_flags`, `chanuser_infoline` FROM `chanusers` WHERE `chanuser_cid` = '%d' AND `chanuser_uid` = '%d'", chan->channel_id, userid); + res = mysql_use(); + if ((chanuser_row = mysql_fetch_row(res)) != NULL) { + //access output + if(nick) + reply(textclient, user, (strcmp(user_row[2], "1") ? "NS_A_ACCESS_AUTH" : "NS_A_ACCESS_AUTH_GOD"), nick, auth, atoi(chanuser_row[0]), chan->name); + else + reply(textclient, user, (strcmp(user_row[2], "1") ? "NS_A_ACCESS_NICK" : "NS_A_ACCESS_NICK_GOD"), auth, atoi(chanuser_row[0]), chan->name); + int cflags = atoi(chanuser_row[1]); + if(cflags & DB_CHANUSER_SUSPENDED) + reply(textclient, user, "NS_A_SUSPENDED", (nick ? nick : auth), chan->name); + if(chanuser_row[2] && strcmp(chanuser_row[2], "")) + reply(textclient, user, "[%s] %s", (nick ? nick : auth), chanuser_row[2]); + } else if(!strcmp(user_row[2], "1")) { + if(nick) + reply(textclient, user, "NS_A_LACKS_ACCESS_BUT_GOD_AUTH", nick, auth, chan->name); + else + reply(textclient, user, "NS_A_LACKS_ACCESS_BUT_GOD_NICK", auth, chan->name); + } else + reply(textclient, user, "NS_NOT_ON_USERLIST", nick, chan->name); + } else + reply(textclient, user, "NS_NOT_ON_USERLIST", nick, chan->name); + if(target && (target->flags & USERFLAG_ISIRCOP)) + reply(textclient, user, "NS_A_IS_IRCOP", nick); +}