X-Git-Url: http://git.pk910.de/?a=blobdiff_plain;f=cmd_neonserv_register.c;h=d336d7fc15a42f9e769c8ffe34f1d9b942e58e4b;hb=795115bf680185ae01043bd1222b78bfed8c1d87;hp=24063899c4ea9deb86dfed55156eaccca17ee364;hpb=594bd1c6ce7a27d00d57d5db2b8eae2f0b876821;p=NeonServV5.git diff --git a/cmd_neonserv_register.c b/cmd_neonserv_register.c index 2406389..d336d7f 100644 --- a/cmd_neonserv_register.c +++ b/cmd_neonserv_register.c @@ -1,21 +1,24 @@ +#include "cmd_neonserv.h" + /* * argv[0] - channel * argv[0/1] - nick / *auth */ static AUTHLOOKUP_CALLBACK(neonserv_cmd_register_auth_lookup); static USERAUTH_CALLBACK(neonserv_cmd_register_nick_lookup); -static void neonserv_cmd_register_async1(struct ClientSocket *client, struct ClientSocket *textclient, struct UserNode *user, struct ChanNode *chan, char *channel, char *auth); +static void neonserv_cmd_register_async1(struct ClientSocket *client, struct ClientSocket *textclient, struct UserNode *user, struct ChanNode *chan, struct Event *event, char *channel, char *auth); struct neonserv_cmd_register_cache { struct ClientSocket *client, *textclient; struct UserNode *user; struct ChanNode *chan; + struct Event *event; char *nick; char *channel; }; -static CMD_BIND(neonserv_cmd_register) { +CMD_BIND(neonserv_cmd_register) { MYSQL_RES *res; MYSQL_ROW row; char *channel = argv[0]; @@ -23,20 +26,20 @@ static CMD_BIND(neonserv_cmd_register) { reply(getTextBot(), user, "NS_INVALID_CHANNEL_NAME", argv[0]); return; } - printf_mysql_query("SELECT `botid` FROM `bot_channels` LEFT JOIN `bots` ON `bot_channels`.`botid` = `bots`.`id` WHERE `chanid` = '%d' AND `botclass` = '%d'", chan->channel_id, client->botid); + printf_mysql_query("SELECT `botid` FROM `bot_channels` LEFT JOIN `bots` ON `bot_channels`.`botid` = `bots`.`id` LEFT JOIN `channels` ON `bot_channels`.`chanid` = `channels`.`channel_id` WHERE `channel_name` = '%s' AND `botclass` = '%d'", escape_string(channel), client->botid); res = mysql_use(); if ((row = mysql_fetch_row(res)) != NULL) { reply(getTextBot(), user, "NS_REGISTER_ALREADY", argv[0], client->user->nick); return; } //check own access - if(argv[0][0] == '*') { + if(argv[1][0] == '*') { //we've got an auth - argv[0]++; - printf_mysql_query("SELECT `user_user` FROM `users` WHERE `user_user` = '%s'", escape_string(argv[0])); + argv[1]++; + printf_mysql_query("SELECT `user_user` FROM `users` WHERE `user_user` = '%s'", escape_string(argv[1])); res = mysql_use(); if ((row = mysql_fetch_row(res)) != NULL) { - neonserv_cmd_register_async1(client, getTextBot(), user, chan, channel, row[0]); + neonserv_cmd_register_async1(client, getTextBot(), user, chan, event, channel, row[0]); } else { //we need to create a new user... //but first lookup the auth to check if it really exists @@ -49,18 +52,19 @@ static CMD_BIND(neonserv_cmd_register) { cache->textclient = getTextBot(); cache->user = user; cache->chan = chan; - cache->nick = strdup(argv[0]); + cache->event = event; + cache->nick = strdup(argv[1]); cache->channel = strdup(channel); - lookup_authname(argv[0], neonserv_cmd_register_auth_lookup, cache); + lookup_authname(argv[1], neonserv_cmd_register_auth_lookup, cache); } } else { - struct UserNode *cuser = getUserByNick(argv[0]); + struct UserNode *cuser = getUserByNick(argv[1]); if(!cuser) { - cuser = createTempUser(argv[0]); + cuser = createTempUser(argv[1]); cuser->flags |= USERFLAG_ISTMPUSER; } if(cuser->flags & USERFLAG_ISAUTHED) { - neonserv_cmd_register_async1(client, getTextBot(), user, chan, channel, cuser->auth); + neonserv_cmd_register_async1(client, getTextBot(), user, chan, event, channel, cuser->auth); } else { struct neonserv_cmd_register_cache *cache = malloc(sizeof(*cache)); if (!cache) { @@ -71,7 +75,8 @@ static CMD_BIND(neonserv_cmd_register) { cache->textclient = getTextBot(); cache->user = user; cache->chan = chan; - cache->nick = strdup(argv[0]); + cache->event = event; + cache->nick = strdup(argv[1]); cache->channel = strdup(channel); get_userauth(cuser, neonserv_cmd_register_nick_lookup, cache); } @@ -84,7 +89,7 @@ static AUTHLOOKUP_CALLBACK(neonserv_cmd_register_auth_lookup) { //AUTH_DOES_NOT_EXIST reply(cache->textclient, cache->user, "NS_AUTH_UNKNOWN", cache->nick); } else - neonserv_cmd_register_async1(cache->client, cache->textclient, cache->user, cache->chan, cache->channel, auth); + neonserv_cmd_register_async1(cache->client, cache->textclient, cache->user, cache->chan, cache->event, cache->channel, auth); free(cache->channel); free(cache->nick); free(cache); @@ -101,13 +106,13 @@ static USERAUTH_CALLBACK(neonserv_cmd_register_nick_lookup) { reply(cache->textclient, cache->user, "NS_USER_NEED_AUTH", cache->nick); } else - neonserv_cmd_register_async1(cache->client, cache->textclient, cache->user, cache->chan, cache->channel, user->auth); + neonserv_cmd_register_async1(cache->client, cache->textclient, cache->user, cache->chan, cache->event, cache->channel, user->auth); free(cache->channel); free(cache->nick); free(cache); } -static void neonserv_cmd_register_async1(struct ClientSocket *client, struct ClientSocket *textclient, struct UserNode *user, struct ChanNode *chan, char *channel, char *auth) { +static void neonserv_cmd_register_async1(struct ClientSocket *client, struct ClientSocket *textclient, struct UserNode *user, struct ChanNode *chan, struct Event *event, char *channel, char *auth) { //we've got a valid auth now... MYSQL_RES *res; MYSQL_ROW row, row2; @@ -126,7 +131,7 @@ static void neonserv_cmd_register_async1(struct ClientSocket *client, struct Cli printf_mysql_query("INSERT INTO `users` (`user_user`) VALUES ('%s')", escape_string(auth)); userid = (int) mysql_insert_id(mysql_conn); } - printf_mysql_query("SELECT `botid`, `max_channels`, `defaulttrigger` FROM `bots` WHERE `botclass` = '%d' ORDER BY `register_priority` DESC", client->botid); + printf_mysql_query("SELECT `id`, `max_channels`, `defaulttrigger` FROM `bots` WHERE `botclass` = '%d' ORDER BY `register_priority` DESC", client->botid); res = mysql_use(); int botid = 0; char *bottrigger; @@ -167,4 +172,5 @@ static void neonserv_cmd_register_async1(struct ClientSocket *client, struct Cli printf_mysql_query("DELETE FROM `chanusers` WHERE `chanuser_cid` = '%d'", chanid); printf_mysql_query("INSERT INTO `chanusers` (`chanuser_cid`, `chanuser_uid`, `chanuser_access`) VALUES ('%d', '%d', '%d')", chanid, userid, 500); reply(textclient, user, "NS_REGISTER_DONE", channel, auth); + logEvent(event); }