Example #1
0
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();
}
Example #2
0
/**
 * 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;
}
Example #3
0
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);
}
Example #4
0
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();
}