X-Git-Url: http://git.pk910.de/?a=blobdiff_plain;f=cmd_neonserv_giveowner.c;h=8f173ac326511f74440d9826d8b5270b5bb860f0;hb=795115bf680185ae01043bd1222b78bfed8c1d87;hp=5cf31852d7c2a888b9bb735c9024a2fdef713224;hpb=bd45ca5fc3a5ee0a4bfd8b1a3c3a8d4a9a03cd0e;p=NeonServV5.git diff --git a/cmd_neonserv_giveowner.c b/cmd_neonserv_giveowner.c index 5cf3185..8f173ac 100644 --- a/cmd_neonserv_giveowner.c +++ b/cmd_neonserv_giveowner.c @@ -1,4 +1,6 @@ +#include "cmd_neonserv.h" + /* * argv[0] - nick / *auth * argv[1] - key @@ -7,26 +9,21 @@ #define GIVEOWNER_TIMEOUT 86400 /* 60*60*24 = 86400 */ static USERAUTH_CALLBACK(neonserv_cmd_giveowner_nick_lookup); -static void neonserv_cmd_giveowner_async1(struct ClientSocket *client, struct ClientSocket *textclient, struct UserNode *user, struct ChanNode *chan, char *nick, char *auth, char *key); +static void neonserv_cmd_giveowner_async1(struct ClientSocket *client, struct ClientSocket *textclient, struct UserNode *user, struct ChanNode *chan, struct Event *event, char *nick, char *auth, char *key); struct neonserv_cmd_giveowner_cache { struct ClientSocket *client, *textclient; struct UserNode *user; struct ChanNode *chan; + struct Event *event; char *nick; char *key; }; -static CMD_BIND(neonserv_cmd_giveowner) { - check_mysql(); - if(getChannelAccess(user, chan, 0) != 500) { - reply(getTextBot(), user, "NS_ACCESS_DENIED"); - return; - } +CMD_BIND(neonserv_cmd_giveowner) { MYSQL_RES *res; MYSQL_ROW row; - int userid; - printf_mysql_query("SELECT `channel_lastgiveowner` FROM `channels` WHERE `channel_id` = '%s'", chan->channel_id); + printf_mysql_query("SELECT `channel_lastgiveowner` FROM `channels` WHERE `channel_id` = '%d'", chan->channel_id); res = mysql_use(); if ((row = mysql_fetch_row(res)) == NULL) return; if(strcmp(row[0], "0") && (atoi(row[0]) + GIVEOWNER_TIMEOUT) > time(0)) { @@ -37,7 +34,7 @@ static CMD_BIND(neonserv_cmd_giveowner) { if(argv[0][0] == '*') { //we've got an auth argv[0]++; - neonserv_cmd_giveowner_async1(client, getTextBot(), user, chan, argv[0], argv[0], (argc != 1 ? argv[1] : NULL)); + neonserv_cmd_giveowner_async1(client, getTextBot(), user, chan, event, argv[0], argv[0], (argc != 1 ? argv[1] : NULL)); } else { struct UserNode *cuser = getUserByNick(argv[0]); if(!cuser) { @@ -45,7 +42,7 @@ static CMD_BIND(neonserv_cmd_giveowner) { cuser->flags |= USERFLAG_ISTMPUSER; } if(cuser->flags & USERFLAG_ISAUTHED) { - neonserv_cmd_giveowner_async1(client, getTextBot(), user, chan, argv[0], cuser->auth, (argc != 1 ? argv[1] : NULL)); + neonserv_cmd_giveowner_async1(client, getTextBot(), user, chan, event, argv[0], cuser->auth, (argc != 1 ? argv[1] : NULL)); } else { struct neonserv_cmd_giveowner_cache *cache = malloc(sizeof(*cache)); if (!cache) { @@ -56,6 +53,7 @@ static CMD_BIND(neonserv_cmd_giveowner) { cache->textclient = getTextBot(); cache->user = user; cache->chan = chan; + cache->event = event; cache->nick = strdup(argv[0]); cache->key = (argc != 1 ? strdup(argv[1]) : NULL); get_userauth(cuser, neonserv_cmd_giveowner_nick_lookup, cache); @@ -74,14 +72,14 @@ static USERAUTH_CALLBACK(neonserv_cmd_giveowner_nick_lookup) { reply(cache->textclient, cache->user, "NS_USER_NEED_AUTH", cache->nick); } else - neonserv_cmd_giveowner_async1(cache->client, cache->textclient, cache->user, cache->chan, user->nick, user->auth, cache->key); + neonserv_cmd_giveowner_async1(cache->client, cache->textclient, cache->user, cache->chan, cache->event, user->nick, user->auth, cache->key); free(cache->nick); if(cache->key) free(cache->key); free(cache); } -static void neonserv_cmd_giveowner_async1(struct ClientSocket *client, struct ClientSocket *textclient, struct UserNode *user, struct ChanNode *chan, char *nick, char *auth, char *key) { +static void neonserv_cmd_giveowner_async1(struct ClientSocket *client, struct ClientSocket *textclient, struct UserNode *user, struct ChanNode *chan, struct Event *event, char *nick, char *auth, char *key) { //we've got a valid auth now... if(!stricmp(user->auth, auth)) { reply(textclient, user, "NS_GIVEOWNER_SELF"); @@ -112,6 +110,7 @@ static void neonserv_cmd_giveowner_async1(struct ClientSocket *client, struct Cl printf_mysql_query("UPDATE `chanusers` SET `chanuser_access` = '499' WHERE `chanuser_cid` = '%d' AND `chanuser_uid` = (SELECT `user_id` FROM `users` WHERE `user_user` = '%s')", chan->channel_id, escape_string(user->auth)); printf_mysql_query("INSERT INTO `owner_history` (`owner_history_cid`, `owner_history_uid`, `owner_history_time`) VALUE ('%d', '%d', UNIX_TIMESTAMP())", chan->channel_id, userid); reply(textclient, user, "NS_GIVEOWNER_DONE", chan->name, auth); + logEvent(event); } else { reply(textclient, user, "NS_GIVEOWNER_CONFIRM", auth, giveownerkey); }