void db_removenick(char *nick, char *reason) { char *sqlreason; int nickid = db_getnick(nick); SET_SEGV_LOCATION(); if (!denora->do_sql) { return; } if (nickid == 0) { alog(LOG_DEBUG, "nickid 0"); return; } SET_SEGV_LOCATION(); db_removefromchans(nickid); if (UserCacheTime) { sqlreason = rdb_escape(reason); rdb_query(QUERY_LOW, "UPDATE %s SET online=\'N\', lastquit=NOW(), lastquitmsg=\'%s\', servid=0 WHERE nickid=%d", UserTable, sqlreason, nickid); if (sqlreason) { free(sqlreason); } } else { rdb_query(QUERY_LOW, "DELETE FROM %s WHERE nickid=%d", UserTable, nickid); } SET_SEGV_LOCATION(); }
/** * Handle AWAY messages * * @param source is the nick of the person whom is now away * @param msg is the text of the away message * * @return always returns MOD_CONT */ int m_away(char *source, char *msg) { User *u; if (!source) { return MOD_CONT; } u = user_find(source); if (!u) { return MOD_CONT; } SET_SEGV_LOCATION(); if (msg) { stats->away++; u->isaway = 1; u->awaymsg = sstrdup(msg); } else { stats->away--; u->isaway = 0; u->awaymsg = NULL; } if (denora->do_sql) { rdb_query (QUERY_LOW, "UPDATE %s SET away=\'%s\', awaymsg=\'%s\' WHERE nickid=%d", UserTable, (u->isaway ? (char *) "Y" : (char *) "N"), rdb_escape(u->awaymsg), db_getnick(u->sqlnick)); } return MOD_CONT; }
void db_removenick(char *nick) { int nickid = db_getnick(nick); //TODO if (nickid == 0) fatal("nickid 0"); db_removefromchans(nickid); if (UserCacheTime) db_query("UPDATE " TBL_USER " SET online=\"N\", lastquit=NOW(), servid=NULL WHERE nickid=\"%d\"", nickid); else db_query("DELETE FROM " TBL_USER " WHERE nickid=\'%d\'", nickid); }
void db_removenick_nt(char *nick, char *reason) { char *sqlreason; int nickid = db_getnick(nick); User *u; #ifdef USE_MYSQL MYSQL_RES *mysql_res; MYSQL_RES *mysql_res2; #endif char *username, *host, *queryhost; char *newnick; char *olduser = (char *) ""; char *newuser = (char *) ""; u = user_find(nick); SET_SEGV_LOCATION(); if (!denora->do_sql) { return; } if (nickid == 0) { alog(LOG_DEBUG, "nickid 0"); return; } SET_SEGV_LOCATION(); db_removefromchans(nickid); if (UserCacheTime) { sqlreason = rdb_escape(reason); if (u) { username = rdb_escape(u->username); host = rdb_escape(u->host); queryhost = (myNumToken(host, '.') >= 2) ? strchr(host, '.') : host; queryhost = StrReverse(queryhost); rdb_query(QUERY_HIGH, "SELECT nick FROM %s WHERE username=\'%s\' AND REVERSE(hostname) LIKE \'%s%%\' AND online=\'Y\' AND nick != \'%s\' ORDER BY connecttime DESC", UserTable, username, queryhost, u->sqlnick); #ifdef USE_MYSQL mysql_res = mysql_store_result(mysql); if (mysql_res) { if (mysql_num_rows(mysql_res) > 0) { /* Getting nickname of user we found */ mysql_row = mysql_fetch_row(mysql_res); newnick = rdb_escape(mysql_row[0]); mysql_free_result(mysql_res); /* Deleting user as we got one with a similar mask which is still online */ alog(LOG_DEBUG, "db_removenick_nt(%s): There is %s with similar mask online, so we will delete %s.", nick, newnick, nick); rdb_query(QUERY_LOW, "DELETE FROM %s WHERE nickid=%d", UserTable, nickid); /* Getting uname of the old and new users */ rdb_query(QUERY_LOW, "SELECT nick, uname FROM %s WHERE nick=\'%s\' OR nick=\'%s\'", AliasesTable, newnick, u->sqlnick); mysql_res2 = mysql_store_result(mysql); if (mysql_res2) { while ((mysql_row = mysql_fetch_row(mysql_res2)) != NULL) { if (stricmp(mysql_row[0], newnick) == 0) { newuser = rdb_escape(mysql_row[1]); } if (stricmp(mysql_row[0], u->sqlnick) == 0) { olduser = rdb_escape(mysql_row[1]); } } mysql_free_result(mysql_res2); } /* Summing old user to new user, if they differ */ /*if ((!BadPtr(newuser)) && (!BadPtr(olduser)) && (stricmp(newuser, olduser) != 0)) { alog(LOG_DEBUG, "db_removenick_nt(%s): summing old user %s and new user %s.", nick, olduser, newuser); sumuser(u, olduser, newuser); if (olduser) { free(olduser); } if (newuser) { free(newuser); } }*/ if (newnick) { free(newnick); } } else { mysql_free_result(mysql_res); rdb_query(QUERY_LOW, "UPDATE %s SET online=\'N\', lastquit=NOW(), lastquitmsg=\'%s\', servid=0 WHERE nickid=%d", UserTable, sqlreason, nickid); } } if (username) { free(username); } if (host) { free(host); } SET_SEGV_LOCATION(); #endif } else { rdb_query(QUERY_LOW, "UPDATE %s SET online=\'N\', lastquit=NOW(), lastquitmsg=\'%s\', servid=0 WHERE nickid=%d", UserTable, sqlreason, nickid); } if (sqlreason) { free(sqlreason); } } else { rdb_query(QUERY_LOW, "DELETE FROM %s WHERE nickid=%d", UserTable, nickid); } SET_SEGV_LOCATION(); }