X-Git-Url: http://git.pk910.de/?a=blobdiff_plain;f=src%2FDBHelper.c;h=fe48bc4a54487bd5075fcfcbc483fc206b099b1b;hb=c575e458c6257e75b97884847143b20965a5dfda;hp=643eb2f0082b643e1105840e0fe8e48d1e1aa609;hpb=95fed4deda0319bee515e44ceec0c77061a2c04e;p=NeonServV5.git diff --git a/src/DBHelper.c b/src/DBHelper.c index 643eb2f..fe48bc4 100644 --- a/src/DBHelper.c +++ b/src/DBHelper.c @@ -1,4 +1,4 @@ -/* DBHelper.c - NeonServ v5.0 +/* DBHelper.c - NeonServ v5.2 * Copyright (C) 2011 Philipp Kreil (pk910) * * This program is free software: you can redistribute it and/or modify @@ -180,3 +180,46 @@ char *getBanAffectingMask(struct ChanNode *chan, char *mask) { } return NULL; } + +int renameAccount(char *oldauth, char *newauth) { + MYSQL_RES *res, *res2; + MYSQL_ROW row, row2; + printf_mysql_query("SELECT `user_id` FROM `users` WHERE `user_user` = '%s'", escape_string(oldauth)); + res = mysql_use(); + if ((row = mysql_fetch_row(res)) != NULL) { + int userid = atoi(row[0]); + printf_mysql_query("SELECT `user_id` FROM `users` WHERE `user_user` = '%s'", escape_string(newauth)); + res = mysql_use(); + if((row = mysql_fetch_row(res)) != NULL) { + //merge + int newuid = atoi(row[0]); + printf_mysql_query("SELECT `chanuser_id`, `chanuser_access`, `chanuser_flags` FROM `chanusers` WHERE `chanuser_uid` = '%d'", newuid); + res = mysql_use(); + while((row = mysql_fetch_row(res)) != NULL) { + printf_mysql_query("SELECT `chanuser_id`, `chanuser_access`, `chanuser_flags` FROM `chanusers` WHERE `chanuser_uid` = '%d'", userid); + res2 = mysql_use(); + if((row2 = mysql_fetch_row(res2)) != NULL) { + if(atoi(row[0]) > atoi(row2[0])) { + printf_mysql_query("UPDATE `chanusers` SET `chanuser_access` = '%s' WHERE `chanuser_id` = '%s'", row[0], row2[0]); + } + printf_mysql_query("DELETE FROM `chanusers` WHERE `chanuser_id` = '%s'", row[0]); + } else + printf_mysql_query("UPDATE `chanusers` SET `chanuser_uid` = '%d' WHERE `chanuser_id` = '%s'", userid, row[0]); + } + printf_mysql_query("UPDATE `channels` SET `channel_registrator` = '%d' WHERE `channel_registrator` = '%d'", userid, newuid); + printf_mysql_query("UPDATE `bans` SET `ban_owner` = '%d' WHERE `ban_owner` = '%d'", userid, newuid); + printf_mysql_query("UPDATE `events` SET `auth` = '%s' WHERE `auth` = '%s'", escape_string(newauth), escape_string(oldauth)); + printf_mysql_query("UPDATE `godlog` SET `godlog_uid` = '%d' WHERE `godlog_uid` = '%d'", userid, newuid); + printf_mysql_query("UPDATE `owner_history` SET `owner_history_to_uid` = '%d' WHERE `owner_history_to_uid` = '%d'", userid, newuid); + printf_mysql_query("UPDATE `owner_history` SET `owner_history_from_uid` = '%d' WHERE `owner_history_from_uid` = '%d'", userid, newuid); + printf_mysql_query("UPDATE `owner_history` SET `owner_history_from_uid` = '%d' WHERE `owner_history_from_uid` = '%d'", userid, newuid); + printf_mysql_query("UPDATE `noinvite` SET `uid` = '%d' WHERE `uid` = '%d'", userid, newuid); + printf_mysql_query("DELETE FROM `users` WHERE `chanuser_id` = '%d'", newuid); + } else { + //simply rename the account + printf_mysql_query("UPDATE `users` SET `user_user` = '%s' WHERE `user_id` = '%d'", escape_string(newauth), userid); + } + return 1; + } + return 0; +}