diff options
Diffstat (limited to 'src/rdb.c')
-rw-r--r-- | src/rdb.c | 452 |
1 files changed, 32 insertions, 420 deletions
@@ -13,454 +13,66 @@ */ #include "services.h" -/*************************************************************************/ - -int rdb_init() -{ - -#ifdef USE_MYSQL - return db_mysql_init(); -#endif - -} - -/*************************************************************************/ - -int rdb_open() -{ - -#ifdef USE_MYSQL - return do_mysql; // db_mysql_open(); -#endif - -} - -/*************************************************************************/ - -int rdb_close() -{ - -#ifdef USE_MYSQL - return 1; // db_mysql_close(); -#endif - -} - -/*************************************************************************/ - -int rdb_tag_table(char *table) -{ - static char buf[1024]; - -#ifdef USE_MYSQL - snprintf(buf, sizeof(buf), "UPDATE %s SET active='0'", table); - return db_mysql_query(buf); -#endif - - return 0; - -} - -/*************************************************************************/ - -int rdb_clear_table(char *table) -{ - static char buf[1024]; - -#ifdef USE_MYSQL - snprintf(buf, sizeof(buf), "TRUNCATE TABLE %s", table); - return db_mysql_query(buf); -#endif - - return 0; - -} - -/*************************************************************************/ - -int rdb_scrub_table(char *table, char *clause) -{ - - static char buf[1024]; - -#ifdef USE_MYSQL - snprintf(buf, sizeof(buf), "DELETE FROM %s WHERE %s", table, clause); - return db_mysql_query(buf); -#endif - - return 0; - -} - -/*************************************************************************/ - -int rdb_direct_query(char *query) -{ - -#ifdef USE_MYSQL - alog("Direct Query: %s", query); - return db_mysql_query(query); -#endif - - return 0; - -} - -/*************************************************************************/ - -/* I still don't really like doing it this way, it should really be done - * inside mysql.c and not here. So I'll revisit this later - */ -int rdb_ns_set_display(char *newnick, char *oldnick) -{ - static char buf[1024]; - -#ifdef USE_MYSQL - /* Change the display on NS_CORE */ - snprintf(buf, sizeof(buf), - "UPDATE anope_ns_core SET display='%s' WHERE display='%s'", - newnick, oldnick); - db_mysql_query(buf); - - /* Change the display on NS_ALIAS for all grouped nicks */ - snprintf(buf, sizeof(buf), - "UPDATE anope_ns_alias SET display='%s' WHERE display='%s'", - newnick, oldnick); - db_mysql_query(buf); - - /* Change the display on ChanServ ACCESS list */ - snprintf(buf, sizeof(buf), - "UPDATE anope_cs_access SET display='%s' WHERE display='%s'", - newnick, oldnick); - db_mysql_query(buf); - - /* Change the display on ChanServ AKICK list */ - snprintf(buf, sizeof(buf), - "UPDATE anope_cs_access SET creator='%s' WHERE creator='%s'", - newnick, oldnick); - db_mysql_query(buf); - - /* Change the display on MemoServ sent memos */ - snprintf(buf, sizeof(buf), - "UPDATE anope_ms_info SET sender='%s' WHERE sender='%s'", - newnick, oldnick); - db_mysql_query(buf); - - /* Change the display on MemoServ received memos */ - snprintf(buf, sizeof(buf), - "UPDATE anope_ms_info SET receiver='%s' WHERE receiver='%s'", - newnick, oldnick); - db_mysql_query(buf); - - /* Need to do bwords and akills */ - -#endif - - return 0; -} - -/*************************************************************************/ - -int rdb_cs_deluser(char *nick) -{ - static char buf[1024]; - -#ifdef USE_MYSQL - snprintf(buf, sizeof(buf), - "UPDATE anope_cs_info SET successor=NULL WHERE successor='%s'", - nick); - db_mysql_query(buf); - - snprintf(buf, sizeof(buf), "display='%s'", nick); - rdb_scrub_table("anope_cs_access", buf); - snprintf(buf, sizeof(buf), "creator='%s'", nick); - rdb_scrub_table("anope_cs_akicks", buf); - - return 1; -#endif - - return 0; -} - -/*************************************************************************/ - -int rdb_cs_delchan(ChannelInfo * ci) -{ - static char buf[1024]; - char *channel = ci->name; - -#ifdef USE_MYSQL - snprintf(buf, sizeof(buf), - "UPDATE anope_cs_info SET successor=NULL WHERE name='%s'", - channel); - db_mysql_query(buf); - - snprintf(buf, sizeof(buf), "name='%s'", channel); - rdb_scrub_table("anope_cs_info", buf); - snprintf(buf, sizeof(buf), "receiver='%s' AND serv='CHAN'", channel); - rdb_scrub_table("anope_ms_info", buf); - snprintf(buf, sizeof(buf), "channel='%s'", channel); - rdb_scrub_table("anope_cs_access", buf); - rdb_scrub_table("anope_cs_akicks", buf); - rdb_scrub_table("anope_cs_levels", buf); - rdb_scrub_table("anope_cs_badwords", buf); - if (ci->founder) { - snprintf(buf, sizeof(buf), - "update anope_ns_core set channelcount=channelcount-1 where display='%s'", - ci->founder->display); - db_mysql_query(buf); - } - - return 1; -#endif - - return 0; -} - -/*************************************************************************/ - -int rdb_cs_set_founder(char *channel, char *founder) -{ - static char buf[1024]; - -#ifdef USE_MYSQL - snprintf(buf, sizeof(buf), - "UPDATE anope_cs_info SET founder='%s', successor=NULL WHERE name='%s'", - founder, channel); - db_mysql_query(buf); - - snprintf(buf, sizeof(buf), - "UPDATE anope_ns_core SET channelcount=channelcount+1 WHERE display='%s'", - founder); - db_mysql_query(buf); - - /* Do i need to scrub the access list for this channel ? */ - snprintf(buf, sizeof(buf), "display='%s' AND channel='%s'", founder, - channel); - rdb_scrub_table("anope_cs_access", buf); - - return 1; -#endif - - return 0; -} - -/*************************************************************************/ - -void rdb_save_ns_core(NickCore * nc) -{ - #ifdef USE_MYSQL - db_mysql_save_ns_core(nc); +#define RDB_MYSQL(x) x +#else +#define RDB_MYSQL(x) #endif -} - -/*************************************************************************/ - -void rdb_save_ns_alias(NickAlias * na) +void rdb_init(void) { - -#ifdef USE_MYSQL - db_mysql_save_ns_alias(na); -#endif - + RDB_MYSQL(db_mysql_init()); } -/*************************************************************************/ - -void rdb_save_ns_req(NickRequest * nr) +void rdb_end(void) { - -#ifdef USE_MYSQL - db_mysql_save_ns_req(nr); -#endif - + RDB_MYSQL(db_mysql_end()); } -/*************************************************************************/ - -void rdb_save_cs_info(ChannelInfo * ci) +/* BotServ */ +void rdb_bs_add_bot(BotInfo *bi) { - -#ifdef USE_MYSQL - db_mysql_save_cs_info(ci); -#endif - + RDB_MYSQL(db_mysql_bs_add_bot(bi)); } -/*************************************************************************/ - -void rdb_save_bs_core(BotInfo * bi) +void rdb_bs_del_bot(BotInfo *bi) { - -#ifdef USE_MYSQL - db_mysql_save_bs_core(bi); -#endif - + RDB_MYSQL(db_mysql_bs_del_bot(bi)); } -/*************************************************************************/ - -void rdb_save_hs_core(HostCore * hc) +void rdb_bs_change_bot(BotInfo *bi, char *newnick, char *newuser, char *newhost, char *newreal) { - -#ifdef USE_MYSQL - db_mysql_save_hs_core(hc); -#endif - + RDB_MYSQL(db_mysql_bs_chg_bot(bi, newnick, newuser, newhost, newreal)); } -/*************************************************************************/ - -void rdb_save_os_db(unsigned int maxucnt, unsigned int maxutime, - SList * ak, SList * sgl, SList * sql, SList * szl, - HostCache * hc) +void rdb_bs_change_bot_chancount(BotInfo *bi) { - -#ifdef USE_MYSQL - db_mysql_save_os_db(maxusercnt, maxusertime, ak, sgl, sql, szl, hc); -#endif - + RDB_MYSQL(db_mysql_bs_chg_bot_chancount(bi)); } -/*************************************************************************/ - -void rdb_save_news(NewsItem * ni) +void rdb_bs_change_bot_flags(BotInfo *bi) { - -#ifdef USE_MYSQL - db_mysql_save_news(ni); -#endif - + RDB_MYSQL(db_mysql_bs_chg_bot_flags(bi)); } -/*************************************************************************/ - -void rdb_load_bs_dbase(void) +void rdb_cs_add_access(ChannelInfo *ci, ChanAccess *access) { - -#ifdef USE_MYSQL - db_mysql_load_bs_dbase(); -#endif - + RDB_MYSQL(db_mysql_cs_add_access(ci, access)); } -/*************************************************************************/ - -void rdb_load_hs_dbase(void) +void rdb_cs_del_access(ChanAccess *access) { - -#ifdef USE_MYSQL - db_mysql_load_hs_dbase(); -#endif - -} - -/*************************************************************************/ - -void rdb_load_ns_dbase(void) -{ - -#ifdef USE_MYSQL - db_mysql_load_ns_dbase(); -#endif -} - -/*************************************************************************/ - -void rdb_load_news(void) -{ -#ifdef USE_MYSQL - db_mysql_load_news(); -#endif -} - -/*************************************************************************/ - -void rdb_load_exceptions(void) -{ -#ifdef USE_MYSQL - db_mysql_load_exceptions(); -#endif -} - -/*************************************************************************/ - -void rdb_load_cs_dbase(void) -{ -#ifdef USE_MYSQL - db_mysql_load_cs_dbase(); -#endif -} - -/*************************************************************************/ - -void rdb_load_os_dbase(void) -{ -#ifdef USE_MYSQL - db_mysql_load_os_dbase(); -#endif -} - -/*************************************************************************/ - -void rdb_load_ns_req_dbase(void) -{ -#ifdef USE_MYSQL - db_mysql_load_ns_req_dbase(); -#endif -} - -/*************************************************************************/ - -void rdb_load_dbases(void) -{ - if (!skeleton) { - rdb_load_ns_dbase(); - if (debug) - alog("RDB: Loaded NickServ DataBase (1/8)"); - if (s_HostServ) { - rdb_load_hs_dbase(); - if (debug) - alog("RDB: Loaded HostServ DataBase (2/8)"); - } - if (s_BotServ) { - rdb_load_bs_dbase(); - if (debug) - alog("RDB: Loaded BotServ DataBase (3/8)"); + ChannelInfo *ci, *found; + ChanAccess *caccess; + int i, y; + /* Need to fetch channel manually since ChanAccess has no member for it */ + for (i = 0; i < 256; i++) { + for (ci = chanlists[i]; ci; ci = ci->next) { + for (caccess = ci->access, y = 0; y < ci->accesscount; caccess++, y++) { + if (caccess == access) { found = ci; } + } } - rdb_load_cs_dbase(); - if (debug) - alog("RDB: Loaded ChanServ DataBase (4/8)"); } - rdb_load_os_dbase(); - if (debug) - alog("RDB: Loaded OperServ DataBase (5/8)"); - rdb_load_news(); - if (debug) - alog("RDB: Loaded News DataBase (6/8)"); - rdb_load_exceptions(); - if (debug) - alog("RDB: Loaded Exception Database (7/8)"); - if (PreNickDBName) { - rdb_load_ns_req_dbase(); - if (debug) - alog("RDB: Loaded PreNick DataBase (8/8)"); - } else { - if (debug) - alog("RDB: No need to load PreNickDB (8/8)"); - } - alog("RDB: All DataBases loaded."); -} - -/*************************************************************************/ - -void rdb_save_exceptions(Exception * e) -{ - -#ifdef USE_MYSQL - db_mysql_save_exceptions(e); -#endif - + if (!found) return; + RDB_MYSQL(db_mysql_cs_del_access(found, access)); } |