diff options
-rw-r--r-- | include/extern.h | 91 | ||||
-rw-r--r-- | include/services.h | 2 | ||||
-rw-r--r-- | src/botserv.c | 31 | ||||
-rw-r--r-- | src/chanserv.c | 50 | ||||
-rw-r--r-- | src/config.c | 2 | ||||
-rw-r--r-- | src/hostserv.c | 33 | ||||
-rw-r--r-- | src/init.c | 34 | ||||
-rw-r--r-- | src/main.c | 36 | ||||
-rw-r--r-- | src/mysql.c | 1755 | ||||
-rw-r--r-- | src/news.c | 19 | ||||
-rw-r--r-- | src/nickserv.c | 112 | ||||
-rw-r--r-- | src/operserv.c | 13 | ||||
-rw-r--r-- | src/rdb.c | 452 | ||||
-rw-r--r-- | src/sessions.c | 19 |
14 files changed, 234 insertions, 2415 deletions
diff --git a/include/extern.h b/include/extern.h index fe02b446b..b24193718 100644 --- a/include/extern.h +++ b/include/extern.h @@ -16,6 +16,7 @@ #define EXTERN_H #include "slist.h" +#include "rdb.h" #define E extern @@ -42,7 +43,6 @@ E void botmsgs(User *u, BotInfo *bi, char *buf); E void botchanmsgs(User *u, ChannelInfo *ci, char *buf); E void load_bs_dbase(void); E void save_bs_dbase(void); -E void save_bs_rdb_dbase(void); E BotInfo *makebot(char *nick); E BotInfo *findbot(char *nick); @@ -101,7 +101,6 @@ E void cs_init(void); E void chanserv(User * u, char *buf); E void load_cs_dbase(void); E void save_cs_dbase(void); -E void save_cs_rdb_dbase(void); E void expire_chans(void); E void cs_remove_nick(const NickCore * nc); E void cs_remove_bot(const BotInfo * bi); @@ -229,7 +228,6 @@ E char *desc_HostServ; E char *s_HostServ; E void load_hs_dbase(void); E void save_hs_dbase(void); -E void save_hs_rdb_dbase(void); E int do_on_id(User * u); E void delHostCore(char *nick); E void hostserv(User * u, char *buf); @@ -422,50 +420,6 @@ E char *ExceptionDBName; E char *SessionLimitDetailsLoc; E char *SessionLimitExceeded; -#ifdef USE_RDB -E int rdb_init(); -E int rdb_open(); -E int rdb_close(); -E int rdb_tag_table(char *table); -E int rdb_tag_table(char *table); -E int rdb_clear_table(char *table); -E int rdb_scrub_table(char *table, char *clause); -E int rdb_direct_query(char *query); -E int rdb_ns_set_display(char *newnick, char *oldnick); -E int rdb_cs_set_founder(char *channel, char *founder); -E int rdb_cs_deluser(char *nick); -E int rdb_cs_delchan(ChannelInfo * ci); -E void rdb_save_ns_core(NickCore * nc); -E void rdb_save_ns_alias(NickAlias * na); -E void rdb_save_ns_req(NickRequest * nr); -E void rdb_save_cs_info(ChannelInfo * ci); -E void rdb_save_bs_core(BotInfo * bi); -E void rdb_save_bs_rdb_core(BotInfo * bi); -E void rdb_save_hs_core(HostCore * hc); -E void rdb_save_os_db(unsigned int maxucnt, unsigned int maxutime, - SList * ak, SList * sgl, SList * sql, SList * szl, - HostCache * hc); -E void rdb_save_news(NewsItem * ni); -E void rdb_save_exceptions(Exception * e); -E void rdb_load_bs_dbase(void); -E void rdb_load_hs_dbase(void); -E void rdb_load_ns_dbase(void); -E void rdb_load_dbases(void); -#endif - -#ifdef USE_MYSQL -E char *MysqlHost; -E char *MysqlUser; -E char *MysqlPass; -E char *MysqlName; -E int MysqlPort; -E char *MysqlSock; -E char *MysqlSecure; -E int MysqlRetries; -E int MysqlRetryGap; -E int UseRDB; -#endif - E int read_config(int reload); E int DefConLevel; @@ -550,10 +504,6 @@ E int nofork; E int forceload; E int noexpire; -#ifdef USE_RDB -E int do_mysql; -#endif - E int is44; E int quitting; @@ -623,7 +573,6 @@ E NewsItem *news; E void get_news_stats(long *nrec, long *memuse); E void load_news(void); E void save_news(void); -E void save_rdb_news(void); E void display_news(User * u, int16 type); E int do_logonnews(User * u); E int do_opernews(User * u); @@ -651,8 +600,6 @@ E void load_ns_dbase(void); E void load_ns_req_db(void); E void save_ns_dbase(void); E void save_ns_req_dbase(void); -E void save_ns_rdb_dbase(void); -E void save_ns_req_rdb_dbase(void); E int validate_user(User * u); E void cancel_user(User * u); E int nick_identified(User * u); @@ -688,7 +635,6 @@ E void operserv(User *u, char *buf); E void os_init(void); E void load_os_dbase(void); E void save_os_dbase(void); -E void save_os_rdb_dbase(void); E void os_remove_nick(NickCore *nc); E int is_services_root(User *u); @@ -822,7 +768,6 @@ E void del_session(const char *host); E void load_exceptions(void); E void save_exceptions(void); -E void save_rdb_exceptions(void); E int do_exception(User *u); E void expire_exceptions(void); @@ -884,42 +829,8 @@ E void split_usermask(const char *mask, char **nick, char **user, char **host); E char *create_mask(User * u); -#ifdef USE_MYSQL -/**** mysql.c ****/ -E MYSQL *mysql; -E MYSQL_RES *mysql_res; -E MYSQL_FIELD *mysql_fields; -E MYSQL_ROW mysql_row; - -E int db_mysql_init(); -E int db_mysql_open(); -E int db_mysql_close(); -E int db_mysql_query(char *sql); -E char *db_mysql_quote(char *sql); -E void db_mysql_save_ns_core(NickCore * nc); -E void db_mysql_save_ns_alias(NickAlias * na); -E void db_mysql_save_ns_req(NickRequest * nr); -E void db_mysql_save_cs_info(ChannelInfo * ci); -E void db_mysql_save_os_db(unsigned int maxucnt, unsigned int maxutime, - SList * ak, SList * sgl, SList * sql, - SList * szl, HostCache * hc); -E void db_mysql_save_news(NewsItem * ni); -E void db_mysql_save_exceptions(Exception * e); -E void db_mysql_save_hs_core(HostCore * hc); -E void db_mysql_save_bs_core(BotInfo * bi); -E void db_mysql_load_bs_dbase(void); -E void db_mysql_load_hs_dbase(void); -E void db_mysql_load_ns_dbase(void); -E void db_mysql_load_ns_req_dbase(void); -E void db_mysql_load_cs_dbase(void); -E void db_mysql_load_os_dbase(void); -E void db_mysql_load_exceptions(void); -E void db_mysql_load_news(void); -#endif - #ifdef USE_ENCRYPTION extern int encrypt_in_place(char *buf, int size); #endif - #endif /* EXTERN_H */ diff --git a/include/services.h b/include/services.h index 5a2a6dd6b..a6d61a19b 100644 --- a/include/services.h +++ b/include/services.h @@ -58,7 +58,7 @@ # define MYSQL_WARNING 2 # define MYSQL_ERROR 4 -#include "mysql.h" +#include <mysql.h> #include "errmsg.h" #endif diff --git a/src/botserv.c b/src/botserv.c index 4b5ce1561..15f09e5c8 100644 --- a/src/botserv.c +++ b/src/botserv.c @@ -722,28 +722,6 @@ void save_bs_dbase(void) /*************************************************************************/ -void save_bs_rdb_dbase(void) -{ -#ifdef USE_RDB - int i; - BotInfo *bi; - - if (!rdb_open()) - return; - - rdb_clear_table("anope_bs_core"); - - for (i = 0; i < 256; i++) { - for (bi = botlists[i]; bi; bi = bi->next) { - rdb_save_bs_core(bi); - } - } - rdb_close(); -#endif -} - -/*************************************************************************/ - /* Inserts a bot in the bot list. I can't be much explicit mh? */ static void insert_bot(BotInfo * bi) @@ -800,6 +778,7 @@ static void change_bot_nick(BotInfo * bi, char *newnick) static int delbot(BotInfo * bi) { cs_remove_bot(bi); + rdb_bs_del_bot(bi); if (bi->next) bi->next->prev = bi->prev; @@ -847,6 +826,7 @@ static void unassign(User * u, ChannelInfo * ci) u->nick); } ci->bi->chancount--; + rdb_bs_change_bot_chancount(ci->bi); ci->bi = NULL; } @@ -1391,6 +1371,8 @@ static int do_bot(User * u) bi->real = sstrdup(real); bi->created = time(NULL); bi->chancount = 0; + + rdb_bs_add_bot(bi); /* We check whether user with this nick is online, and kill it if so */ EnforceQlinedNick(nick, s_BotServ); @@ -1517,6 +1499,8 @@ static int do_bot(User * u) /* We check whether user with this nick is online, and kill it if so */ EnforceQlinedNick(nick, s_BotServ); } + + rdb_bs_change_bot(bi, nick, user, host ,real); if (strcmp(nick, bi->nick)) change_bot_nick(bi, nick); @@ -1653,6 +1637,7 @@ static int do_assign(User * u) unassign(u, ci); ci->bi = bi; bi->chancount++; + rdb_bs_change_bot_chancount(bi); if (ci->c && ci->c->usercount >= BSMinUsers) { bot_join(ci); } @@ -1921,9 +1906,11 @@ static int do_set(User * u) if ((bi = findbot(chan))) { if (!stricmp(value, "ON")) { bi->flags |= BI_PRIVATE; + rdb_bs_change_bot_flags(bi); notice_lang(s_BotServ, u, BOT_SET_PRIVATE_ON, bi->nick); } else if (!stricmp(value, "OFF")) { bi->flags &= ~BI_PRIVATE; + rdb_bs_change_bot_flags(bi); notice_lang(s_BotServ, u, BOT_SET_PRIVATE_OFF, bi->nick); } else { syntax_error(s_BotServ, u, "SET PRIVATE", diff --git a/src/chanserv.c b/src/chanserv.c index 06236c547..eabfd643b 100644 --- a/src/chanserv.c +++ b/src/chanserv.c @@ -1288,35 +1288,6 @@ void save_cs_dbase(void) /*************************************************************************/ -void save_cs_rdb_dbase(void) -{ -#ifdef USE_RDB - int i; - ChannelInfo *ci; - - if (!rdb_open()) - return; - - rdb_tag_table("anope_cs_info"); - rdb_scrub_table("anope_ms_info", "serv='CHAN'"); - rdb_clear_table("anope_cs_access"); - rdb_clear_table("anope_cs_levels"); - rdb_clear_table("anope_cs_akicks"); - rdb_clear_table("anope_cs_badwords"); - - for (i = 0; i < 256; i++) { - for (ci = chanlists[i]; ci; ci = ci->next) { - rdb_save_cs_info(ci); - } /* for (chanlists[i]) */ - } /* for (i) */ - - rdb_scrub_table("anope_cs_info", "active='0'"); - rdb_close(); -#endif -} - -/*************************************************************************/ - /* Check the current modes on a channel; if they conflict with a mode lock, * fix them. */ @@ -1951,12 +1922,6 @@ void cs_remove_nick(const NickCore * nc) ci->founder = nc2; ci->successor = NULL; nc2->channelcount++; -#ifdef USE_RDB - if (rdb_open()) { - rdb_cs_set_founder(ci->name, nc2->display); - rdb_close(); - } -#endif } } else { alog("%s: Deleting channel %s owned by deleted nick %s", s_ChanServ, ci->name, nc->display); @@ -2001,12 +1966,6 @@ void cs_remove_nick(const NickCore * nc) } } } -#ifdef USE_RDB - if (rdb_open()) { - rdb_cs_deluser(nc->display); - rdb_close(); - } -#endif } /*************************************************************************/ @@ -2135,12 +2094,6 @@ int delchan(ChannelInfo * ci) } ci->c->ci = NULL; } -#ifdef USE_RDB - if (rdb_open()) { - rdb_cs_delchan(ci); - rdb_close(); - } -#endif if (ci->next) ci->next->prev = ci->prev; if (ci->prev) @@ -3888,6 +3841,7 @@ static int access_del(User * u, ChanAccess * access, int *perm, int uacc) (*perm)++; return 0; } + rdb_cs_del_access(access); access->nc = NULL; access->in_use = 0; return 1; @@ -4023,6 +3977,7 @@ static int do_access(User * u) return MOD_CONT; } access->level = level; + rdb_cs_add_access(ci, access); alog("%s: %s!%s@%s (level %d) set access level %d to %s (group %s) on channel %s", s_ChanServ, u->nick, u->username, GetHost(u), ulev, access->level, na->nick, nc->display, ci->name); notice_lang(s_ChanServ, u, CHAN_ACCESS_LEVEL_CHANGED, access->nc->display, chan, level); @@ -4052,6 +4007,7 @@ static int do_access(User * u) access->in_use = 1; access->level = level; access->last_seen = 0; + rdb_cs_add_access(ci, access); alog("%s: %s!%s@%s (level %d) set access level %d to %s (group %s) on channel %s", s_ChanServ, u->nick, u->username, GetHost(u), ulev, access->level, na->nick, nc->display, ci->name); notice_lang(s_ChanServ, u, CHAN_ACCESS_ADDED, nc->display, diff --git a/src/config.c b/src/config.c index e2d09f9e3..004f5ac49 100644 --- a/src/config.c +++ b/src/config.c @@ -297,7 +297,6 @@ char *MysqlSecure; char *MysqlSock; int MysqlRetries = 0; int MysqlRetryGap = 0; -int UseRDB = 0; int DefConLevel; int DefCon1; @@ -492,7 +491,6 @@ Directive directives[] = { {"MysqlSock", {{PARAM_STRING, PARAM_RELOAD, &MysqlSock}}}, {"MysqlRetries", {{PARAM_POSINT, PARAM_RELOAD, &MysqlRetries}}}, {"MysqlRetryGap", {{PARAM_POSINT, PARAM_RELOAD, &MysqlRetryGap}}}, - {"UseRDB", {{PARAM_SET, PARAM_RELOAD, &UseRDB}}}, {"ModuleAutoload", {{PARAM_STRING, PARAM_RELOAD, &Modules}}}, {"ModuleDelayedAutoload", {{PARAM_STRING, PARAM_RELOAD, &ModulesDelayed}}}, diff --git a/src/hostserv.c b/src/hostserv.c index 7c2945683..d47ae32db 100644 --- a/src/hostserv.c +++ b/src/hostserv.c @@ -443,25 +443,11 @@ int listOut(User * u) /*************************************************************************/ void delHostCore(char *nick) { -#ifdef USE_RDB - static char clause[128]; -#endif HostCore *tmp; boolean found = false; tmp = findHostCore(head, nick, &found); if (found) { head = deleteHostCore(head, tmp); - -#ifdef USE_RDB - /* Reflect this change in the database right away. */ - if (rdb_open()) { - - snprintf(clause, sizeof(clause), "nick='%s'", nick); - rdb_scrub_table("anope_hs_core", clause); - rdb_close(); - } -#endif - } } @@ -623,25 +609,6 @@ void save_hs_dbase(void) #undef SAFE -void save_hs_rdb_dbase(void) -{ -#ifdef USE_RDB - HostCore *current; - - if (!rdb_open()) - return; - - rdb_clear_table("anope_hs_core"); - - current = head; - while (current != NULL) { - rdb_save_hs_core(current); - current = current->next; - } - rdb_close(); -#endif -} - /*************************************************************************/ /* End of Load/Save Functions */ /*************************************************************************/ diff --git a/src/init.c b/src/init.c index c6daf5918..e8e13d862 100644 --- a/src/init.c +++ b/src/init.c @@ -607,6 +607,11 @@ int init(int ac, char **av) lang_init(); if (debug) alog("debug: Loaded languages"); + + /* Initialize remote database support */ + rdb_init(); + if (debug) + alog("debug: Loaded remote databases"); /* Initialize subservices */ ns_init(); @@ -617,10 +622,6 @@ int init(int ac, char **av) hostserv_init(); helpserv_init(); -#ifdef USE_RDB - rdb_init(); -#endif - /* Initialize proxy detection */ #ifdef USE_THREADS if (ProxyDetect && !proxy_init()) { @@ -643,12 +644,6 @@ int init(int ac, char **av) #endif /* Load up databases */ -#ifdef USE_RDB - if (UseRDB) - rdb_load_dbases(); - /* Need a better way to handle this -dane */ - if (!UseRDB) { -#endif if (!skeleton) { load_ns_dbase(); if (debug) @@ -682,25 +677,8 @@ int init(int ac, char **av) if (debug) alog("debug: Loaded PreNick database (9/9)"); } -#ifdef USE_RDB - } -#endif alog("Databases loaded"); - - /* Save the databases back to file/mysql to reflect any changes */ -#ifdef USE_RDB - if (!UseRDB) { /* Only save if we are not using remote databases - * to avoid floods. As a side effects our nice - * FFF databases won't get overwritten if the - * mysql db is broken (empty etc.) */ -#endif - alog("Info: Reflecting database records."); - save_databases(); -#ifdef USE_RDB - } else { - alog("Info: Not reflecting database records."); - } -#endif + save_databases(); /* Make myself known to myself in the serverlist */ me_server = new_server(NULL, ServerName, ServerDesc, SERVER_ISME); diff --git a/src/main.c b/src/main.c index cb9c3a009..3af7dc73c 100644 --- a/src/main.c +++ b/src/main.c @@ -48,7 +48,6 @@ int is44 = 0; /* -is44 */ #endif #ifdef USE_RDB -int do_mysql = 0; /* use mysql ? */ #endif /* Set to 1 if we are to quit */ @@ -154,40 +153,6 @@ void save_databases(void) save_news(); waiting = -18; save_exceptions(); - -#ifdef USE_RDB - if (do_mysql) { - if (debug) - alog("debug: Saving RDB databases"); - waiting = -10; - if (!skeleton) { - waiting = -11; - save_ns_rdb_dbase(); - waiting = -12; - save_cs_rdb_dbase(); - if (PreNickDBName) { - save_ns_req_rdb_dbase(); - waiting = -13; - } - /* Temporary fix to avoid unwanted timeouts... */ - send_cmd(ServerName, "PONG %s", ServerName); - if (s_BotServ) { - waiting = -14; - save_bs_rdb_dbase(); - } - if (s_HostServ) { - waiting = -15; - save_hs_rdb_dbase(); - } - waiting = -16; - save_os_rdb_dbase(); - waiting = -17; - save_rdb_news(); - waiting = -18; - save_rdb_exceptions(); - } - } -#endif } /*************************************************************************/ @@ -232,6 +197,7 @@ void do_restart_services(void) static void services_shutdown(void) { + rdb_end(); if (!quitmsg) quitmsg = "Terminating, reason unknown"; alog("%s", quitmsg); diff --git a/src/mysql.c b/src/mysql.c index 1b83502c2..3c4541ee3 100644 --- a/src/mysql.c +++ b/src/mysql.c @@ -15,1624 +15,231 @@ /*************************************************************************/ -/* Database Global Variables */ -MYSQL *mysql; /* MySQL Handler */ -MYSQL_RES *mysql_res; /* MySQL Result */ -MYSQL_FIELD *mysql_fields; /* MySQL Fields */ -MYSQL_ROW mysql_row; /* MySQL Row */ +#ifdef USE_MYSQL -/*************************************************************************/ - -void db_mysql_error(int severity, char *msg) -{ - static char buf[512]; - - if (mysql_error(mysql)) { - snprintf(buf, sizeof(buf), "MySQL %s %s: %s", msg, - severity == MYSQL_WARNING ? "warning" : "error", - mysql_error(mysql)); - } else { - snprintf(buf, sizeof(buf), "MySQL %s %s", msg, - severity == MYSQL_WARNING ? "warning" : "error"); - } - - log_perror(buf); - - if (severity == MYSQL_ERROR) { - log_perror("MySQL FATAL error... aborting."); - exit(0); - } - -} +MYSQL *mysql; +MYSQL_RES *mysql_res; +MYSQL_ROW mysql_row; +int do_mysql = 0; -/*************************************************************************/ - -int db_mysql_init() +void db_mysql_init(void) { + if (!MysqlPort) MysqlPort = 3306; - /* If the host is not defined, assume we don't want MySQL */ - if (!MysqlHost) { + if (!MysqlHost && !MysqlSock) { + alog("MySQL is disabled."); do_mysql = 0; - alog("MySQL has been disabled."); - } else { - do_mysql = 1; - alog("MySQL has been enabled."); + return; } - - /* The following configuration options are required. - * If missing disable MySQL to avoid any problems. - */ - - if (!MysqlName || !MysqlUser) { + if (!MysqlUser || !MysqlPass) { + alog("Missing required config directives for MySQL."); do_mysql = 0; - alog("MySQL Error: Set all required configuration options."); + return; } - if (!db_mysql_open()) - do_mysql = 0; - - return 1; -} - -/*************************************************************************/ - -int db_mysql_open() -{ - /* If MySQL is disabled, return 0 */ - if (!do_mysql) - return 0; - mysql = mysql_init(NULL); - if (mysql == NULL) - db_mysql_error(MYSQL_WARNING, "Unable to create mysql object"); - - if (!MysqlPort) - MysqlPort = 3306; - - if (MysqlSock) { - if ((!mysql_real_connect - (mysql, MysqlHost, MysqlUser, MysqlPass, MysqlName, MysqlPort, - MysqlSock, 0))) { - log_perror("Cant connect to MySQL: %s\n", mysql_error(mysql)); - return 0; - } - } else { - if ((!mysql_real_connect - (mysql, MysqlHost, MysqlUser, MysqlPass, MysqlName, MysqlPort, - NULL, 0))) { - log_perror("Cant connect to MySQL: %s\n", mysql_error(mysql)); - return 0; - } + if ((!mysql_real_connect(mysql, MysqlHost, MysqlUser, MysqlPass, MysqlName, MysqlPort, MysqlSock ? MysqlSock : NULL, 0))) { + alog("Unable to connect to MySQL database:"); + alog(mysql_error(mysql)); + do_mysql = 0; + return; } - - return 1; - + + alog("MySQL enabled."); + do_mysql = 1; } -/*************************************************************************/ - -int db_mysql_query(char *sql) +void db_mysql_end(void) { - int result, lcv; - char *s; - - if (!do_mysql) { - return -1; - } - - if (debug) { - s = db_mysql_quote(sql); - alog(s); - free(s); - + if (do_mysql) { + mysql_close(mysql); + alog("MySQL connection closed."); } - - result = mysql_query(mysql, sql); - - if (result) { - switch (mysql_errno(mysql)) { - case CR_SERVER_GONE_ERROR: - case CR_SERVER_LOST: - - for (lcv = 0; lcv < MysqlRetries; lcv++) { - if (db_mysql_open()) { - result = mysql_query(mysql, sql); - return (result); - } - sleep(MysqlRetryGap); - } - - /* If we get here, we could not connect. */ - log_perror("Unable to reconnect to database: %s\n", - mysql_error(mysql)); - db_mysql_error(MYSQL_ERROR, "connect"); - - /* Never reached. */ - break; - - default: - /* Unhandled error. */ - return (result); - } - } - - return (0); - } -/*************************************************************************/ - char *db_mysql_quote(char *sql) { - int slen; char *quoted; - - - if (!sql) { - return sstrdup(""); - } - - slen = strlen(sql); - quoted = malloc((1 + (slen * 2)) * sizeof(char)); - - mysql_real_escape_string(mysql, quoted, sql, slen); + int len; + + if (!do_mysql || !sql) return sstrdup(""); + + len = strlen(sql); + quoted = malloc((2*len + 1) * sizeof(char)); + mysql_real_escape_string(mysql, quoted, sql, len); return quoted; - -} - -/*************************************************************************/ - -/* I don't like using res here, maybe we can pass it as a param? */ -int db_mysql_close() -{ - if (mysql_res) - mysql_free_result(mysql_res); - mysql_close(mysql); - return 1; -} - -/*************************************************************************/ - -/* - * NickServ Specific Secion - */ - -/*************************************************************************/ -void db_mysql_save_ns_req(NickRequest * nr) -{ - char *qnick, *qpasscode, *qpassword, *qemail; - char sqlcmd[MAX_SQL_BUF]; - - qnick = db_mysql_quote(nr->nick); - qpasscode = db_mysql_quote(nr->passcode); - qpassword = db_mysql_quote(nr->password); - qemail = db_mysql_quote(nr->email); - - snprintf(sqlcmd, MAX_SQL_BUF, - "REPLACE anope_ns_request (nick,passcode,password,email,requested,active)" - " VALUES ('%s','%s','%s','%s','%d','1')", - qnick, qpasscode, qpassword, qemail, (int) nr->requested); - if (db_mysql_query(sqlcmd)) { - log_perror("Can't create sql query: %s", sqlcmd); - db_mysql_error(MYSQL_WARNING, "query"); - } - free(qnick); - free(qpasscode); - free(qpassword); - free(qemail); -} - -char *db_mysql_secure(char *pass) -{ - - char epass[BUFSIZE]; - - /* Initialize the buffer. Bug #86 */ - memset(epass, '\0', BUFSIZE); - -#ifdef USE_ENCRYPTION - /* If we use the builtin encryption don't double encrypt! */ - snprintf(epass, sizeof(epass), "'%s'", pass); -#else - - if (!pass) { - snprintf(epass, sizeof(epass), "''"); - } else if ((!MysqlSecure) || (strcmp(MysqlSecure, "") == 0)) { - snprintf(epass, sizeof(epass), "'%s'", pass); - } else if (strcmp(MysqlSecure, "des") == 0) { - snprintf(epass, sizeof(epass), "ENCRYPT('%s')", pass); - } else if (strcmp(MysqlSecure, "md5") == 0) { - snprintf(epass, sizeof(epass), "MD5('%s')", pass); - } else if (strcmp(MysqlSecure, "sha") == 0) { - snprintf(epass, sizeof(epass), "SHA('%s')", pass); - } else { - snprintf(epass, sizeof(epass), "ENCODE('%s','%s')", pass, - MysqlSecure); - } - -#endif - - return sstrdup(epass); - -} - -/*************************************************************************/ -void db_mysql_save_ns_core(NickCore * nc) -{ - char sqlcmd[MAX_SQL_BUF]; - int j; - char **access; - Memo *memos; - char *cnick, *cpass, *epass, *cemail, *cgreet, *curl, *caccess, - *msender, *mtext; - - cnick = db_mysql_quote(nc->display); - cpass = db_mysql_quote(nc->pass); - cemail = db_mysql_quote(nc->email); - cgreet = db_mysql_quote(nc->greet); - curl = db_mysql_quote(nc->url); - - epass = db_mysql_secure(cpass); - free(cpass); - - /* Let's take care of the core itself */ - /* Update the existing records */ - snprintf(sqlcmd, MAX_SQL_BUF, - "UPDATE anope_ns_core SET pass=%s,email='%s',greet='%s',icq='%d',url='%s',flags='%d'," - "language='%d',accesscount='%d',memocount='%d',memomax='%d',channelcount='%d'" - ",channelmax='%d',active='1' WHERE display='%s'", - epass, cemail, cgreet, nc->icq, curl, nc->flags, - nc->language, nc->accesscount, nc->memos.memocount, - nc->memos.memomax, nc->channelcount, nc->channelmax, cnick); - if (db_mysql_query(sqlcmd)) { - log_perror("Can't create sql query: %s", sqlcmd); - db_mysql_error(MYSQL_WARNING, "query"); - } - - /* need to write a wrapper for mysql_affected_rows */ - /* Our previous UPDATE affected no rows, therefore this is a new record */ - if ((int) mysql_affected_rows(mysql) <= 0) { - - /* Let's take care of the core itself */ - snprintf(sqlcmd, MAX_SQL_BUF, - "INSERT DELAYED INTO anope_ns_core (display,pass,email,greet,icq,url,flags," - "language,accesscount,memocount,memomax,channelcount,channelmax,active)" - " VALUES ('%s',%s,'%s','%s','%d','%s','%d','%d','%d','%d','%d','%d','%d','1')", - cnick, epass, cemail, cgreet, nc->icq, curl, nc->flags, - nc->language, nc->accesscount, nc->memos.memocount, - nc->memos.memomax, nc->channelcount, nc->channelmax); - if (db_mysql_query(sqlcmd)) { - log_perror("Can't create sql query: %s", sqlcmd); - db_mysql_error(MYSQL_WARNING, "query"); - } - } - - /* Now let's do the access */ - for (j = 0, access = nc->access; j < nc->accesscount; j++, access++) { - caccess = db_mysql_quote(*access); - snprintf(sqlcmd, MAX_SQL_BUF, - "INSERT DELAYED INTO anope_ns_access (display,access) VALUES ('%s','%s')", - cnick, caccess); - if (db_mysql_query(sqlcmd)) { - log_perror("Can't create sql query: %s", sqlcmd); - db_mysql_error(MYSQL_WARNING, "query"); - } - free(caccess); - } - - /* And... memos */ - memos = nc->memos.memos; - for (j = 0; j < nc->memos.memocount; j++, memos++) { - msender = db_mysql_quote(memos->sender); - mtext = db_mysql_quote(memos->text); - snprintf(sqlcmd, MAX_SQL_BUF, - "INSERT DELAYED INTO anope_ms_info (receiver,number,flags,time,sender,text,serv)" - " VALUES ('%s','%d','%d','%d','%s','%s','NICK')", - cnick, memos->number, memos->flags, - (int) memos->time, msender, mtext); - if (db_mysql_query(sqlcmd)) { - log_perror("Can't create sql query: %s", sqlcmd); - db_mysql_error(MYSQL_WARNING, "query"); - } - free(msender); - free(mtext); - } - - free(cnick); - free(epass); - free(cemail); - free(cgreet); - free(curl); -} - - -/*************************************************************************/ -void db_mysql_save_ns_alias(NickAlias * na) -{ - char sqlcmd[MAX_SQL_BUF]; - char *nnick, *nlmask, *nlrname, *nlquit, *nncnick; - nnick = db_mysql_quote(na->nick); - nlmask = db_mysql_quote(na->last_usermask); - nlrname = db_mysql_quote(na->last_realname); - nlquit = db_mysql_quote(na->last_quit); - nncnick = db_mysql_quote(na->nc->display); - snprintf(sqlcmd, MAX_SQL_BUF, - "UPDATE anope_ns_alias SET last_usermask='%s',last_realname='%s',last_quit='%s',time_registered='%d',last_seen='%d',status='%d',display='%s',active='1' WHERE nick='%s'", - nlmask, nlrname, nlquit, (int) na->time_registered, - (int) na->last_seen, (int) na->status, nncnick, nnick); - if (db_mysql_query(sqlcmd)) { - log_perror("Can't create sql query: %s", sqlcmd); - db_mysql_error(MYSQL_WARNING, "query"); - } - /* Our previous UPDATE affected no rows, therefore this is a new record */ - if ((int) mysql_affected_rows(mysql) <= 0) { - snprintf(sqlcmd, MAX_SQL_BUF, - "INSERT INTO anope_ns_alias (nick,last_usermask,last_realname,last_quit,time_registered,last_seen,status,display,active) VALUES ('%s','%s','%s','%s','%d','%d','%d','%s','1')", - nnick, nlmask, nlrname, nlquit, (int) na->time_registered, - (int) na->last_seen, (int) na->status, nncnick); - if (db_mysql_query(sqlcmd)) { - log_perror("Can't create sql query: %s", sqlcmd); - db_mysql_error(MYSQL_WARNING, "query"); - } - } - - free(nnick); - free(nlmask); - free(nlrname); - free(nlquit); - free(nncnick); - - return; -} - -/*************************************************************************/ - -/* - * ChanServ Specific Secion - */ - -/*************************************************************************/ -void db_mysql_save_cs_info(ChannelInfo * ci) -{ - char sqlcmd[MAX_SQL_BUF]; - int j, position; - Memo *memos; - char *ciname, *cifoundernick, *cisuccessornick, *cifounderpass, - *cidesc, *ciurl, *ciemail, *cilasttopic, *cilasttopicsetter, - *ciforbidby, *ciforbidreason, *cimlock_key, *cimlock_flood, - *cimlock_redirect, *cientrymsg, *cibotnick, *msender, *mtext, - *ciaccessdisp, *ciakickdisp, *ciakickreason, *ciakickcreator, - *cbadwords, *efounderpass; - - ciname = db_mysql_quote(ci->name); - cifoundernick = - ci->founder ? db_mysql_quote(ci->founder->display) : ""; - cisuccessornick = - ci->successor ? db_mysql_quote(ci->successor->display) : ""; - cifounderpass = db_mysql_quote(ci->founderpass); - cidesc = db_mysql_quote(ci->desc); - ciurl = db_mysql_quote(ci->url); - ciemail = db_mysql_quote(ci->email); - cilasttopic = db_mysql_quote(ci->last_topic); - cilasttopicsetter = db_mysql_quote(ci->last_topic_setter); - ciforbidby = db_mysql_quote(ci->forbidby); - ciforbidreason = db_mysql_quote(ci->forbidreason); - cimlock_key = db_mysql_quote(ci->mlock_key); -#ifdef HAS_FMODE - cimlock_flood = db_mysql_quote(ci->mlock_flood); -#else - cimlock_flood = NULL; -#endif -#ifdef HAS_LMODE - cimlock_redirect = db_mysql_quote(ci->mlock_redirect); -#else - cimlock_redirect = NULL; -#endif - cientrymsg = db_mysql_quote(ci->entry_message); - cibotnick = ci->bi ? db_mysql_quote(ci->bi->nick) : ""; - - efounderpass = db_mysql_secure(cifounderpass); - free(cifounderpass); - - /* Let's take care of the core itself */ - snprintf(sqlcmd, MAX_SQL_BUF, - "UPDATE anope_cs_info SET founder='%s',successor='%s',founderpass=%s," - "descr='%s',url='%s',email='%s',time_registered='%d',last_used='%d'," - "last_topic='%s',last_topic_setter='%s',last_topic_time='%d',flags='%d'," - "forbidby='%s',forbidreason='%s',bantype='%d',accesscount='%d'," - "akickcount='%d',mlock_on='%d',mlock_off='%d',mlock_limit='%d'," - "mlock_key='%s',mlock_flood='%s',mlock_redirect='%s',entry_message='%s'," - "memomax='%d',botnick='%s',botflags='%d',ttb='%d',bwcount='%d'," - "capsmin='%d',capspercent='%d',floodlines='%d',floodsecs='%d'," - "repeattimes='%d',active='1' WHERE name='%s'", - cifoundernick, - cisuccessornick, - efounderpass, cidesc, ciurl, ciemail, - (int) ci->time_registered, (int) ci->last_used, - cilasttopic, cilasttopicsetter, - (int) ci->last_topic_time, (int) ci->flags, - ciforbidby, ciforbidreason, (int) ci->bantype, - (int) ci->accesscount, (int) ci->akickcount, - (int) ci->mlock_on, (int) ci->mlock_off, - (int) ci->mlock_limit, cimlock_key, -#ifdef HAS_FMODE - cimlock_flood, -#else - "", -#endif -#ifdef HAS_LMODE - cimlock_redirect, -#else - "", -#endif - cientrymsg, - (int) ci->memos.memomax, - cibotnick, - (int) ci->botflags, - (int) ci->ttb, - (int) ci->bwcount, - (int) ci->capsmin, - (int) ci->capspercent, - (int) ci->floodlines, - (int) ci->floodsecs, (int) ci->repeattimes, ciname); - if (db_mysql_query(sqlcmd)) { - log_perror("Can't create sql query: %s", sqlcmd); - db_mysql_error(MYSQL_WARNING, "query"); - } - - /* Our previous UPDATE affected no rows, therefore this is a new record */ - if ((int) mysql_affected_rows(mysql) <= 0) { - snprintf(sqlcmd, MAX_SQL_BUF, - "INSERT DELAYED INTO anope_cs_info (name,founder,successor,founderpass," - "descr,url,email,time_registered,last_used,last_topic,last_topic_setter" - ",last_topic_time,flags,forbidby,forbidreason,bantype,accesscount,akickcount" - ",mlock_on,mlock_off,mlock_limit,mlock_key,mlock_flood,mlock_redirect," - "entry_message,botnick,botflags,bwcount,capsmin,capspercent,floodlines," - "floodsecs,repeattimes,active) VALUES ('%s','%s','%s',%s,'%s','%s','%s'" - ",'%d','%d','%s','%s','%d','%d','%s','%s','%d','%d','%d','%d','%d','%d'," - "'%s','%s','%s','%s','%s','%d','%d','%d','%d','%d','%d','%d','1')", - ciname, - cifoundernick, - cisuccessornick, - efounderpass, cidesc, ciurl, ciemail, - (int) ci->time_registered, (int) ci->last_used, - cilasttopic, cilasttopicsetter, - (int) ci->last_topic_time, (int) ci->flags, - ciforbidby, ciforbidreason, (int) ci->bantype, - (int) ci->accesscount, (int) ci->akickcount, - (int) ci->mlock_on, (int) ci->mlock_off, - (int) ci->mlock_limit, cimlock_key, -#ifdef HAS_FMODE - cimlock_flood, -#else - "", -#endif -#ifdef HAS_LMODE - cimlock_redirect, -#else - "", -#endif - cientrymsg, - cibotnick, - (int) ci->botflags, - (int) ci->bwcount, - (int) ci->capsmin, - (int) ci->capspercent, - (int) ci->floodlines, - (int) ci->floodsecs, (int) ci->repeattimes); - if (db_mysql_query(sqlcmd)) { - log_perror("Can't create sql query: %s", sqlcmd); - db_mysql_error(MYSQL_WARNING, "query"); - } - } - - /* Memos */ - memos = ci->memos.memos; - for (j = 0; j < ci->memos.memocount; j++, memos++) { - msender = db_mysql_quote(memos->sender); - mtext = db_mysql_quote(memos->text); - snprintf(sqlcmd, MAX_SQL_BUF, - "INSERT DELAYED INTO anope_ms_info (receiver,number,flags,time,sender,text,serv)" - " VALUES ('%s','%d','%d','%d','%s','%s','CHAN')", - ciname, memos->number, memos->flags, - (int) memos->time, msender, mtext); - if (db_mysql_query(sqlcmd)) { - log_perror("Can't create sql query: %s", sqlcmd); - db_mysql_error(MYSQL_WARNING, "query"); - } - free(msender); - free(mtext); - } - - /* Access */ - for (j = 0; j < ci->accesscount; j++) { - if (ci->access[j].in_use) { - ciaccessdisp = db_mysql_quote(ci->access[j].nc->display); - snprintf(sqlcmd, MAX_SQL_BUF, - "INSERT DELAYED INTO anope_cs_access (in_use,level,display,channel,last_seen)" - " VALUES ('%d','%d','%s','%s','%d')", - (int) ci->access[j].in_use, (int) ci->access[j].level, - ciaccessdisp, ciname, (int) ci->access[j].last_seen); - if (db_mysql_query(sqlcmd)) { - log_perror("Can't create sql query: %s", sqlcmd); - db_mysql_error(MYSQL_WARNING, "query"); - } - free(ciaccessdisp); - } - } - - /* Levels */ - position = 0; - for (j = 0; j < CA_SIZE; j++) { - snprintf(sqlcmd, MAX_SQL_BUF, - "INSERT DELAYED INTO anope_cs_levels (channel, position, level) VALUES ('%s','%d','%d')", - ciname, position++, (int) ci->levels[j]); - if (db_mysql_query(sqlcmd)) { - log_perror("Can't create sql query: %s", sqlcmd); - db_mysql_error(MYSQL_WARNING, "query"); - } - } - - /* Akicks */ - for (j = 0; j < ci->akickcount; j++) { - ciakickdisp = - ci->akick[j].flags & AK_USED ? ci->akick[j]. - flags & AK_ISNICK ? db_mysql_quote(ci->akick[j].u.nc-> - display) : - db_mysql_quote(ci->akick[j].u.mask) : ""; - ciakickreason = - ci->akick[j].flags & AK_USED ? db_mysql_quote(ci->akick[j]. - reason) : ""; - ciakickcreator = - ci->akick[j].flags & AK_USED ? db_mysql_quote(ci->akick[j]. - creator) : ""; - snprintf(sqlcmd, MAX_SQL_BUF, - "INSERT DELAYED INTO anope_cs_akicks (channel, flags, dmask, reason, creator," - " addtime) VALUES ('%s','%d','%s','%s','%s','%d')", - ciname, (int) ci->akick[j].flags, ciakickdisp, - ciakickreason, ciakickcreator, - ci->akick[j].flags & AK_USED ? (int) ci->akick[j]. - addtime : 0); - if (db_mysql_query(sqlcmd)) { - log_perror("Can't create sql query: %s", sqlcmd); - db_mysql_error(MYSQL_WARNING, "query"); - } - if (ci->akick[j].flags & AK_USED) { - free(ciakickdisp); - free(ciakickreason); - free(ciakickcreator); - } - } - - /* Bad Words */ - for (j = 0; j < ci->bwcount; j++) { - if (ci->badwords[j].in_use) { - cbadwords = db_mysql_quote(ci->badwords[j].word); - snprintf(sqlcmd, MAX_SQL_BUF, - "INSERT DELAYED INTO anope_cs_badwords (channel, word, type)" - " VALUES ('%s','%s','%d')", ciname, cbadwords, - (int) ci->badwords[j].type); - free(cbadwords); - if (db_mysql_query(sqlcmd)) { - log_perror("Can't create sql query: %s", sqlcmd); - db_mysql_error(MYSQL_WARNING, "query"); - } - } - } - - free(ciname); - if (!(ci->flags & CI_VERBOTEN)) { - free(cifoundernick); - if (strlen(cisuccessornick) > 0) - free(cisuccessornick); - free(efounderpass); - free(cidesc); - free(ciurl); - free(ciemail); - free(cilasttopic); - free(cilasttopicsetter); - free(cimlock_key); - free(cimlock_flood); - free(cimlock_redirect); - free(cientrymsg); - if (ci->bi) - free(cibotnick); - } else { - free(ciforbidby); - free(ciforbidreason); - } - - return; -} - -/*************************************************************************/ - - -/* - * OperServ Specific Section - */ - -/*************************************************************************/ -void db_mysql_save_os_db(unsigned int maxucnt, unsigned int maxutime, - SList * ak, SList * sgl, SList * sql, SList * szl, - HostCache * hc) -{ - char sqlcmd[MAX_SQL_BUF]; - Akill *t_ak; - SXLine *t_sl; - HostCache *t_hc; - char *takuser, *takhost, *takby, *takreason, *tslmask, *tslby, - *tslreason, *thchost; - - int i, j; - - rdb_clear_table("anope_os_core"); - - snprintf(sqlcmd, MAX_SQL_BUF, - "INSERT DELAYED INTO anope_os_core (maxusercnt,maxusertime,akills_count," - "sglines_count,sqlines_count,szlines_count) VALUES " - "('%d','%d','%d','%d','%d','%d')", maxucnt, maxutime, - ak->count, sgl->count, sql->count, szl->count); - if (db_mysql_query(sqlcmd)) { - log_perror("Can't create sql query: %s", sqlcmd); - db_mysql_error(MYSQL_WARNING, "query"); - } - - /* now the akills saving */ - rdb_clear_table("anope_os_akills"); - - j = ak->count; - for (i = 0; i < j; i++) { - t_ak = ak->list[i]; - takuser = db_mysql_quote(t_ak->user); - takhost = db_mysql_quote(t_ak->host); - takby = db_mysql_quote(t_ak->by); - takreason = db_mysql_quote(t_ak->reason); - snprintf(sqlcmd, MAX_SQL_BUF, - "INSERT DELAYED INTO anope_os_akills (user,host,xby,reason,seton,expire) VALUES ('%s','%s','%s','%s','%d','%d')", - takuser, - takhost, - takby, takreason, (int) t_ak->seton, (int) t_ak->expires); - if (db_mysql_query(sqlcmd)) { - log_perror("Can't create sql query: %s", sqlcmd); - db_mysql_error(MYSQL_WARNING, "query"); - } - free(takuser); - free(takhost); - free(takby); - free(takreason); - } - -/* sglines save */ - rdb_clear_table("anope_os_sglines"); - - j = sgl->count; - for (i = 0; i < j; i++) { - t_sl = sgl->list[i]; - tslmask = db_mysql_quote(t_sl->mask); - tslby = db_mysql_quote(t_sl->by); - tslreason = db_mysql_quote(t_sl->reason); - snprintf(sqlcmd, MAX_SQL_BUF, - "INSERT DELAYED INTO anope_os_sglines (mask,xby,reason,seton,expire) VALUES" - " ('%s','%s','%s','%d','%d')", - tslmask, - tslby, tslreason, (int) t_sl->seton, (int) t_sl->expires); - if (db_mysql_query(sqlcmd)) { - log_perror("Can't create sql query: %s", sqlcmd); - db_mysql_error(MYSQL_WARNING, "query"); - } - free(tslmask); - free(tslby); - free(tslreason); - } - -/* sqlines save */ - rdb_clear_table("anope_os_sqlines"); - - j = sql->count; - for (i = 0; i < j; i++) { - t_sl = sql->list[i]; - tslmask = db_mysql_quote(t_sl->mask); - tslby = db_mysql_quote(t_sl->by); - tslreason = db_mysql_quote(t_sl->reason); - snprintf(sqlcmd, MAX_SQL_BUF, - "INSERT DELAYED INTO anope_os_sqlines (mask,xby,reason,seton,expire) VALUES ('%s','%s','%s','%d','%d')", - tslmask, - tslby, tslreason, (int) t_sl->seton, (int) t_sl->expires); - if (db_mysql_query(sqlcmd)) { - log_perror("Can't create sql query: %s", sqlcmd); - db_mysql_error(MYSQL_WARNING, "query"); - } - free(tslmask); - free(tslby); - free(tslreason); - } - -/* szlines save */ - rdb_clear_table("anope_os_szlines"); - - j = szl->count; - for (i = 0; i < j; i++) { - t_sl = szl->list[i]; - tslmask = db_mysql_quote(t_sl->mask); - tslby = db_mysql_quote(t_sl->by); - tslreason = db_mysql_quote(t_sl->reason); - snprintf(sqlcmd, MAX_SQL_BUF, - "INSERT DELAYED INTO anope_os_szlines (mask,xby,reason,seton,expire) VALUES" - " ('%s','%s','%s','%d','%d')", - tslmask, - tslby, tslreason, (int) t_sl->seton, (int) t_sl->expires); - if (db_mysql_query(sqlcmd)) { - log_perror("Can't create sql query: %s", sqlcmd); - db_mysql_error(MYSQL_WARNING, "query"); - } - free(tslmask); - free(tslby); - free(tslreason); - } - -/* and finally we save hcache */ - rdb_clear_table("anope_os_hcache"); - for (i = 0; i < 1024; i++) { - for (t_hc = hcache[i]; t_hc; t_hc = t_hc->next) { - /* Don't save in-progress scans */ - if (t_hc->status < HC_NORMAL) - continue; - thchost = db_mysql_quote(t_hc->host); - snprintf(sqlcmd, MAX_SQL_BUF, - "INSERT DELAYED INTO anope_os_hcache (mask,status,used) VALUES ('%s','%d','%d')", - thchost, (int) t_hc->status, (int) t_hc->used); - if (db_mysql_query(sqlcmd)) { - log_perror("Can't create sql query: %s", sqlcmd); - db_mysql_error(MYSQL_WARNING, "query"); - } - free(thchost); - } - } - - return; } -/*************************************************************************/ -void db_mysql_save_news(NewsItem * ni) -{ - char sqlcmd[MAX_SQL_BUF]; - char *nitext, *niwho; - nitext = db_mysql_quote(ni->text); - niwho = db_mysql_quote(ni->who); - snprintf(sqlcmd, MAX_SQL_BUF, - "INSERT DELAYED INTO anope_os_news (type,num,ntext,who,`time`)" - " VALUES ('%d','%d','%s','%s','%d')", - ni->type, ni->num, nitext, niwho, (int) ni->time); - if (db_mysql_query(sqlcmd)) { - log_perror("Can't create sql query: %s", sqlcmd); - db_mysql_error(MYSQL_WARNING, "query"); - } - free(nitext); - free(niwho); - - return; -} - -/*************************************************************************/ -void db_mysql_save_exceptions(Exception * e) -{ - char sqlcmd[MAX_SQL_BUF]; - char *emask, *ewho, *ereason; - emask = db_mysql_quote(e->mask); - ewho = db_mysql_quote(e->who); - ereason = db_mysql_quote(e->reason); - snprintf(sqlcmd, MAX_SQL_BUF, - "INSERT DELAYED INTO anope_os_exceptions (mask,lim,who,reason,`time`,expires)" - " VALUES ('%s','%d','%s','%s','%d','%d')", - emask, e->limit, ewho, - ereason, (int) e->time, (int) e->expires); - if (db_mysql_query(sqlcmd)) { - log_perror("Can't create sql query: %s", sqlcmd); - db_mysql_error(MYSQL_WARNING, "query"); - } - free(emask); - free(ewho); - free(ereason); - return; -} - -/*************************************************************************/ - - -/* - * HostServ Specific Section - */ - -/*************************************************************************/ -/* TODO: Add vident to tables! */ -void db_mysql_save_hs_core(HostCore * hc) +int db_mysql_query(char *fmt, ...) { - char sqlcmd[MAX_SQL_BUF]; - char *hcnick, *hcvident, *hcvhost, *hccreator; - hcnick = db_mysql_quote(hc->nick); - hcvident = db_mysql_quote(hc->vIdent); - hcvhost = db_mysql_quote(hc->vHost); - hccreator = db_mysql_quote(hc->creator); - snprintf(sqlcmd, MAX_SQL_BUF, - "INSERT DELAYED INTO anope_hs_core (nick,vident,vhost,creator,`time`)" - " VALUES ('%s','%s','%s','%s','%d')", - hcnick, hcvident, hcvhost, hccreator, (int) hc->time); - if (db_mysql_query(sqlcmd)) { - log_perror("Can't create sql query: %s", sqlcmd); - db_mysql_error(MYSQL_WARNING, "query"); - } - free(hcnick); - free(hcvident); - free(hcvhost); - free(hccreator); - - return; -} - -/*************************************************************************/ - -/* - * HostServ Specific Section - */ - -/*************************************************************************/ -void db_mysql_save_bs_core(BotInfo * bi) -{ - char sqlcmd[MAX_SQL_BUF]; - char *binick, *biuser, *bihost, *bireal; - binick = db_mysql_quote(bi->nick); - biuser = db_mysql_quote(bi->user); - bihost = db_mysql_quote(bi->host); - bireal = db_mysql_quote(bi->real); - snprintf(sqlcmd, MAX_SQL_BUF, - "INSERT DELAYED INTO anope_bs_core (nick,user,host,rname,flags,created" - ",chancount) VALUES ('%s','%s','%s','%s','%d','%d','%d')", - binick, biuser, - bihost, bireal, bi->flags, (int) bi->created, bi->chancount); - if (db_mysql_query(sqlcmd)) { - log_perror("Can't create sql query: %s", sqlcmd); - db_mysql_error(MYSQL_WARNING, "query"); - } - free(binick); - free(biuser); - free(bihost); - free(bireal); -} - -/*************************************************************************/ - -void db_mysql_load_bs_dbase(void) -{ - BotInfo *bi; - char sqlcmd[MAX_SQL_BUF]; - - if (!do_mysql) - return; - - snprintf(sqlcmd, MAX_SQL_BUF, - "SELECT `nick`,`user`,`host`,`rname`,`flags`,`created`,`chancount` FROM `anope_bs_core`"); - - if (db_mysql_query(sqlcmd)) { - log_perror("Can't create sql query: %s", sqlcmd); - db_mysql_error(MYSQL_WARNING, "query"); - } - mysql_res = mysql_store_result(mysql); - if (mysql_num_rows(mysql_res) == 0) { - mysql_free_result(mysql_res); - return; + va_list args; + char *s, *sql; + int result; + + if (!do_mysql) return MYSQL_ERR; + + va_start(args, fmt); + + sql = malloc(MAX_SQL_BUF); + vsnprintf(sql, MAX_SQL_BUF, fmt, args); + + if (debug) { + s = db_mysql_quote(sql); + alog(s); + free(s); } - while ((mysql_row = mysql_fetch_row(mysql_res))) { - bi = makebot(mysql_row[0]); - bi->user = sstrdup(mysql_row[1]); - bi->host = sstrdup(mysql_row[2]); - bi->real = sstrdup(mysql_row[3]); - bi->flags = atoi(mysql_row[4]); - bi->created = atoi(mysql_row[5]); - bi->chancount = atoi(mysql_row[6]); + + result = mysql_query(mysql, sql); + if (result) { + log_perror(mysql_error(mysql)); + return MYSQL_ERR; } - mysql_free_result(mysql_res); + va_end(args); + return MYSQL_OK; } -void db_mysql_load_hs_dbase(void) +void db_mysql_store_result(void) { - char sqlcmd[MAX_SQL_BUF]; - char *nick; - char *vHost; - char *creator; - char *vIdent; - int32 time; - - if (!do_mysql) - return; - - snprintf(sqlcmd, MAX_SQL_BUF, - "SELECT `nick`,`vident`,`vhost`,`creator`,`time` FROM `anope_hs_core`"); - - if (db_mysql_query(sqlcmd)) { - log_perror("Can't create sql query: %s", sqlcmd); - db_mysql_error(MYSQL_WARNING, "query"); - } mysql_res = mysql_store_result(mysql); - if (mysql_num_rows(mysql_res) == 0) { - mysql_free_result(mysql_res); - return; - } - while ((mysql_row = mysql_fetch_row(mysql_res))) { - nick = sstrdup(mysql_row[0]); - vIdent = sstrdup(mysql_row[1]); - vHost = sstrdup(mysql_row[2]); - creator = sstrdup(mysql_row[3]); - time = atoi(mysql_row[4]); - addHostCore(nick, vIdent, vHost, creator, time); - free(nick); - free(vHost); - free(creator); - free(vIdent); - } - mysql_free_result(mysql_res); } -void db_mysql_load_news(void) +void db_mysql_free_res(void) { - char sqlcmd[MAX_SQL_BUF]; - int j; - - if (!do_mysql) - return; - - snprintf(sqlcmd, MAX_SQL_BUF, - "SELECT `type`,`num`,`ntext`,`who`,`time` FROM `anope_os_news`"); - if (db_mysql_query(sqlcmd)) { - log_perror("Can't create sql query: %s", sqlcmd); - db_mysql_error(MYSQL_WARNING, "query"); - } - mysql_res = mysql_store_result(mysql); - nnews = mysql_num_rows(mysql_res); - if (nnews < 8) - news_size = 16; - else if (nnews >= 16384) - news_size = 32767; - else - news_size = 2 * nnews; - news = scalloc(sizeof(*news) * news_size, 1); - if (!nnews) { - mysql_free_result(mysql_res); - return; - } - j = 0; - while ((mysql_row = mysql_fetch_row(mysql_res))) { - news[j].type = atoi(mysql_row[0]); - news[j].num = atoi(mysql_row[1]); - news[j].text = sstrdup(mysql_row[2]); - snprintf(news[j].who, NICKMAX, "%s", mysql_row[3]); - news[j].time = atoi(mysql_row[4]); - j++; - } mysql_free_result(mysql_res); } -void db_mysql_load_exceptions(void) +/* BotServ */ +void db_mysql_bs_add_bot(BotInfo *bi) +{ + char *nick, *user, *host, *rname; + + nick = db_mysql_quote(bi->nick); + user = db_mysql_quote(bi->user); + host = db_mysql_quote(bi->host); + rname = db_mysql_quote(bi->real); + + db_mysql_query("INSERT INTO `anope_bs_core` (`nick`,`user`,`host`,`rname`,`flags`,`created`,`chancount`) VALUES('%s','%s','%s','%s',%d,%d,%d)",nick,user,host,rname,bi->flags, bi->created, bi->chancount); + + free(nick); + free(user); + free(host); + free(rname); +} + +void db_mysql_bs_del_bot(BotInfo *bi) +{ + char *nick, *user, *host, *rname; + + nick = db_mysql_quote(bi->nick); + user = db_mysql_quote(bi->user); + host = db_mysql_quote(bi->host); + rname = db_mysql_quote(bi->real); + + db_mysql_query("DELETE FROM `anope_bs_core` WHERE `nick`='%s' AND `user`='%s' AND `host`='%s' AND `rname`='%s'",nick,user,host,rname); + + free(nick); + free(user); + free(host); + free(rname); +} + +void db_mysql_bs_chg_bot(BotInfo *bi, char *newnick, char *newuser, char *newhost, char *newreal) +{ + char *oldnick, *nick, *user, *host, *real, *sql; + + sql = malloc(MAX_SQL_BUF); + snprintf(sql, MAX_SQL_BUF, "UPDATE `anope_bs_core` SET "); + + oldnick = db_mysql_quote(bi->nick); + + if (!newnick) newnick = bi->nick; + if (!newuser) newuser = bi->user; + if (!newhost) newhost = bi->host; + if (!newreal) newreal = bi->real; + + nick = db_mysql_quote(newnick); + strcat(sql,"`nick`='"); + strcat(sql,nick); + strcat(sql,"',"); + free(nick); + + user = db_mysql_quote(newuser); + strcat(sql,"`user`='"); + strcat(sql,user); + strcat(sql,"',"); + free(user); + + host = db_mysql_quote(newhost); + strcat(sql,"`host`='"); + strcat(sql,host); + strcat(sql,"',"); + free(host); + + real = db_mysql_quote(newreal); + strcat(sql,"`rname`='"); + strcat(sql,real); + strcat(sql,"' "); + free(real); + + strcat(sql,"WHERE `nick`='"); + strcat(sql,oldnick); + strcat(sql,"'"); + db_mysql_query(sql); + free(sql); + free(oldnick); +} + +void db_mysql_bs_chg_bot_chancount(BotInfo *bi) { - char sqlcmd[MAX_SQL_BUF]; - int j; - - if (!do_mysql) - return; - - snprintf(sqlcmd, MAX_SQL_BUF, - "SELECT `mask`,`lim`,`who`,`reason`,`time`,`expires` FROM `anope_os_exceptions`;"); - if (db_mysql_query(sqlcmd)) { - log_perror("Can't create sql query: %s", sqlcmd); - db_mysql_error(MYSQL_WARNING, "query"); - } - mysql_res = mysql_store_result(mysql); - nexceptions = mysql_num_rows(mysql_res); - exceptions = scalloc(sizeof(Exception) * nexceptions, 1); - j = 0; - while ((mysql_row = mysql_fetch_row(mysql_res))) { - exceptions[j].mask = sstrdup(mysql_row[0]); - exceptions[j].limit = atoi(mysql_row[1]); - snprintf(exceptions[j].who, NICKMAX, "%s", mysql_row[2]); - exceptions[j].reason = sstrdup(mysql_row[3]); - exceptions[j].time = atoi(mysql_row[4]); - exceptions[j].expires = atoi(mysql_row[5]); - j++; - } - mysql_free_result(mysql_res); + char *nick; + + nick = db_mysql_quote(bi->nick); + db_mysql_query("UPDATE `anope_bs_core` SET `chancount` = %d WHERE `nick` = '%s'", bi->chancount, nick); + free(nick); } -#define HASH(host) ((tolower((host)[0])&31)<<5 | (tolower((host)[1])&31)) - -void db_mysql_load_os_dbase(void) +void db_mysql_bs_chg_bot_flags(BotInfo *bi) { - char sqlcmd[MAX_SQL_BUF]; - Akill *ak; - SXLine *sx; - HostCache *hc; - int akc, sgc, sqc, szc, j; - - if (!do_mysql) - return; - - snprintf(sqlcmd, MAX_SQL_BUF, - "SELECT `maxusercnt`,`maxusertime`,`akills_count`,`sglines_count`,`sqlines_count`,`szlines_count` FROM `anope_os_core`;"); - if (db_mysql_query(sqlcmd)) { - log_perror("Can't create sql query: %s", sqlcmd); - db_mysql_error(MYSQL_WARNING, "query"); - } - mysql_res = mysql_store_result(mysql); - if ((mysql_row = mysql_fetch_row(mysql_res))) { - maxusercnt = atoi(mysql_row[0]); - maxusertime = atoi(mysql_row[1]); - akc = atoi(mysql_row[2]); - sgc = atoi(mysql_row[3]); - sqc = atoi(mysql_row[4]); - szc = atoi(mysql_row[5]); + char *nick; + + nick = db_mysql_quote(bi->nick); + db_mysql_query("UPDATE `anope_bs_core` SET `flags` = %d WHERE `nick` = '%s'", bi->flags, nick); + free(nick); +} + +/* ChanServ */ +void db_mysql_cs_add_access(ChannelInfo *ci, ChanAccess *access) +{ + char *display, *channel; + + display = db_mysql_quote(access->nc->display); + channel = db_mysql_quote(ci->name); + + /* Check if the entry already exists */ + db_mysql_query("SELECT `ca_id` FROM `anope_cs_access` WHERE `channel` = '%s' AND `display` = '%s'",channel, display); + db_mysql_store_result(); + + if (mysql_num_rows(mysql_res) >= 1) { + db_mysql_query("UPDATE `anope_cs_access` SET `in_use` = 1, `level` = %d, `last_seen` = %d WHERE `channel` = '%s' AND `display` = '%s'",access->level, access->last_seen, channel, display); } else { - maxusercnt = 0; - maxusertime = time(NULL); - akc = sgc = sqc = szc = 0; - } - mysql_free_result(mysql_res); - - snprintf(sqlcmd, MAX_SQL_BUF, - "SELECT `user`,`host`,`xby`,`reason`,`seton`,`expire` FROM `anope_os_akills`;"); - if (db_mysql_query(sqlcmd)) { - log_perror("Can't create sql query: %s", sqlcmd); - db_mysql_error(MYSQL_WARNING, "query"); + db_mysql_query("INSERT INTO `anope_cs_access` (`in_use`,`level`,`display`,`channel`,`last_seen`) VALUES (1, %d, '%s', '%s', %d)",access->level,display,channel,access->last_seen); } - mysql_res = mysql_store_result(mysql); - slist_setcapacity(&akills, akc); - while ((mysql_row = mysql_fetch_row(mysql_res))) { - ak = scalloc(sizeof(Akill), 1); - ak->user = sstrdup(mysql_row[0]); - ak->host = sstrdup(mysql_row[1]); - ak->by = sstrdup(mysql_row[2]); - ak->reason = sstrdup(mysql_row[3]); - ak->seton = atoi(mysql_row[4]); - ak->expires = atoi(mysql_row[5]); - slist_add(&akills, ak); - } - mysql_free_result(mysql_res); - - slist_setcapacity(&sglines, sgc); - slist_setcapacity(&sqlines, sqc); - slist_setcapacity(&szlines, szc); - - snprintf(sqlcmd, MAX_SQL_BUF, - "SELECT `mask`,`xby`,`reason`,`seton`,`expire` FROM `anope_os_sglines`;"); - if (db_mysql_query(sqlcmd)) { - log_perror("Can't create sql statement: %s", sqlcmd); - db_mysql_error(MYSQL_WARNING, "query"); - } - mysql_res = mysql_store_result(mysql); - while ((mysql_row = mysql_fetch_row(mysql_res))) { - sx = scalloc(sizeof(SXLine), 1); - sx->mask = sstrdup(mysql_row[0]); - sx->by = sstrdup(mysql_row[1]); - sx->reason = sstrdup(mysql_row[2]); - sx->seton = atoi(mysql_row[3]); - sx->expires = atoi(mysql_row[4]); - slist_add(&sglines, sx); - } - mysql_free_result(mysql_res); - - snprintf(sqlcmd, MAX_SQL_BUF, - "SELECT `mask`,`xby`,`reason`,`seton`,`expire` FROM `anope_os_sqlines`;"); - if (db_mysql_query(sqlcmd)) { - log_perror("Can't create sql statement: %s", sqlcmd); - db_mysql_error(MYSQL_WARNING, "query"); - } - mysql_res = mysql_store_result(mysql); - while ((mysql_row = mysql_fetch_row(mysql_res))) { - sx = scalloc(sizeof(SXLine), 1); - sx->mask = sstrdup(mysql_row[0]); - sx->by = sstrdup(mysql_row[1]); - sx->reason = sstrdup(mysql_row[2]); - sx->seton = atoi(mysql_row[3]); - sx->expires = atoi(mysql_row[4]); - slist_add(&sqlines, sx); - } - mysql_free_result(mysql_res); - - snprintf(sqlcmd, MAX_SQL_BUF, - "SELECT `mask`,`xby`,`reason`,`seton`,`expire` FROM `anope_os_szlines`;"); - if (db_mysql_query(sqlcmd)) { - log_perror("Can't create sql statement: %s", sqlcmd); - db_mysql_error(MYSQL_WARNING, "query"); - } - mysql_res = mysql_store_result(mysql); - while ((mysql_row = mysql_fetch_row(mysql_res))) { - sx = scalloc(sizeof(SXLine), 1); - sx->mask = sstrdup(mysql_row[0]); - sx->by = sstrdup(mysql_row[1]); - sx->reason = sstrdup(mysql_row[2]); - sx->seton = atoi(mysql_row[3]); - sx->expires = atoi(mysql_row[4]); - slist_add(&szlines, sx); - } - mysql_free_result(mysql_res); - - snprintf(sqlcmd, MAX_SQL_BUF, - "SELECT `mask`,`status`,`used` FROM `anope_os_hcache`"); - if (db_mysql_query(sqlcmd)) { - log_perror("Can't create sql query: %s", sqlcmd); - db_mysql_error(MYSQL_WARNING, "query"); - } - mysql_res = mysql_store_result(mysql); - if (mysql_num_rows(mysql_res) == 0) { - mysql_free_result(mysql_res); - return; - } - while ((mysql_row = mysql_fetch_row(mysql_res))) { - j = HASH(mysql_row[0]); - hc = scalloc(1, sizeof(HostCache)); - hc->host = sstrdup(mysql_row[0]); - hc->status = atoi(mysql_row[1]); - hc->used = atoi(mysql_row[2]); - - hc->prev = NULL; - hc->next = hcache[j]; - if (hc->next) - hc->next->prev = hc; - hcache[j] = hc; - } - mysql_free_result(mysql_res); + + db_mysql_free_res(); + free(channel); + free(display); } -#undef HASH - -void db_mysql_load_cs_dbase(void) +void db_mysql_cs_del_access(ChannelInfo *ci, ChanAccess *access) { - char sqlcmd[MAX_SQL_BUF], *tempstr; - ChannelInfo *ci; - int n_levels, j, m; - MYSQL_RES *res; - MYSQL_ROW row; - - if (!do_mysql) - return; - - snprintf(sqlcmd, MAX_SQL_BUF, - "SELECT `name`,`founder`,`successor`,`founderpass`,`descr`,`url`,`email`,`time_registered`,`last_used`,`last_topic`,`last_topic_setter`,`last_topic_time`,`flags`,`forbidby`,`forbidreason`,`bantype`,`accesscount`,`akickcount`,`mlock_on`,`mlock_off`,`mlock_limit`,`mlock_key`,`mlock_flood`,`mlock_redirect`,`entry_message`,`memomax`,`botnick`,`botflags`,`ttb`,`bwcount`,`capsmin`,`capspercent`,`floodlines`,`floodsecs`,`repeattimes` FROM `anope_cs_info`"); - if (db_mysql_query(sqlcmd)) { - log_perror("Can't create sql query: %s", sqlcmd); - db_mysql_error(MYSQL_WARNING, "query"); - } - mysql_res = mysql_store_result(mysql); - if (mysql_num_rows(mysql_res) == 0) { - mysql_free_result(mysql_res); - return; - } - while ((mysql_row = mysql_fetch_row(mysql_res))) { - ci = scalloc(sizeof(ChannelInfo), 1); - snprintf(ci->name, CHANMAX, "%s", mysql_row[0]); - ci->founder = findcore(mysql_row[1]); - ci->successor = findcore(mysql_row[2]); - snprintf(ci->founderpass, PASSMAX, "%s", mysql_row[3]); - ci->desc = sstrdup(mysql_row[4]); - ci->url = sstrdup(mysql_row[5]); - if (strlen(ci->url) == 0) { - free(ci->url); - ci->url = NULL; - } - ci->email = sstrdup(mysql_row[6]); - if (strlen(ci->email) == 0) { - free(ci->email); - ci->email = NULL; - } - ci->time_registered = atoi(mysql_row[7]); - ci->last_used = atoi(mysql_row[8]); - ci->last_topic = sstrdup(mysql_row[9]); - snprintf(ci->last_topic_setter, NICKMAX, "%s", mysql_row[10]); - ci->last_topic_time = atoi(mysql_row[11]); - ci->flags = atoi(mysql_row[12]); -#ifdef USE_ENCRYPTION - if (!(ci->flags & (CI_ENCRYPTEDPW | CI_VERBOTEN))) { - if (debug) - alog("debug: %s: encrypting password for %s on load", - s_ChanServ, ci->name); - if (encrypt_in_place(ci->founderpass, PASSMAX) < 0) - fatal("%s: load database: Can't encrypt %s password!", - s_ChanServ, ci->name); - ci->flags |= CI_ENCRYPTEDPW; - } -#else - if (ci->flags & CI_ENCRYPTEDPW) { - fatal - ("%s: load database: password for %s encrypted but encryption disabled, aborting", - s_ChanServ, ci->name); - } -#endif - ci->flags &= ~CI_INHABIT; - - ci->forbidby = sstrdup(mysql_row[13]); - ci->forbidreason = sstrdup(mysql_row[14]); - ci->bantype = atoi(mysql_row[15]); + char *display, *channel; - tempstr = db_mysql_quote(ci->name); - snprintf(sqlcmd, MAX_SQL_BUF, - "SELECT `position`,`level` FROM `anope_cs_levels` WHERE `channel` = '%s'", - tempstr); - if (db_mysql_query(sqlcmd)) { - log_perror("Can't create sql query: %s", sqlcmd); - db_mysql_error(MYSQL_WARNING, "query"); - } - res = mysql_store_result(mysql); - n_levels = mysql_num_rows(res); - ci->levels = scalloc(2 * CA_SIZE, 1); - reset_levels(ci); - while ((row = mysql_fetch_row(res))) { - ci->levels[atoi(row[0])] = atoi(row[1]); - } - mysql_free_result(res); - ci->accesscount = atoi(mysql_row[16]); - if (ci->accesscount) { - ci->access = scalloc(ci->accesscount, sizeof(ChanAccess)); - snprintf(sqlcmd, MAX_SQL_BUF, - "SELECT `in_use`,`level`,`display`,`last_seen` FROM `anope_cs_access` WHERE `channel` = '%s'", - tempstr); - if (db_mysql_query(sqlcmd)) { - log_perror("Can't create sql query: %s", sqlcmd); - db_mysql_error(MYSQL_WARNING, "query"); - } - res = mysql_store_result(mysql); - j = 0; - while ((row = mysql_fetch_row(res))) { - ci->access[j].in_use = atoi(row[0]); - if (ci->access[j].in_use) { - ci->access[j].level = atoi(row[1]); - ci->access[j].nc = findcore(row[2]); - if (ci->access[j].nc == NULL) - ci->access[j].in_use = 0; - ci->access[j].last_seen = atoi(row[3]); - } - j++; - } - mysql_free_result(res); - } else { - ci->access = NULL; - } - ci->akickcount = atoi(mysql_row[17]); - if (ci->akickcount) { - ci->akick = scalloc(ci->akickcount, sizeof(AutoKick)); - snprintf(sqlcmd, MAX_SQL_BUF, - "SELECT `flags`,`dmask`,`reason`,`creator`,`addtime` FROM `anope_cs_akicks` WHERE `channel` = '%s'", - tempstr); - if (db_mysql_query(sqlcmd)) { - log_perror("Can't create sql query: %s", sqlcmd); - db_mysql_error(MYSQL_WARNING, "query"); - } - res = mysql_store_result(mysql); - j = 0; - while ((row = mysql_fetch_row(res))) { - ci->akick[j].flags = atoi(row[0]); - if (ci->akick[j].flags & AK_USED) { - if (ci->akick[j].flags & AK_ISNICK) { - ci->akick[j].u.nc = findcore(row[1]); - if (!ci->akick[j].u.nc) - ci->akick[j].flags &= ~AK_USED; - } else { - ci->akick[j].u.mask = sstrdup(row[1]); - } - ci->akick[j].reason = sstrdup(row[2]); - ci->akick[j].creator = sstrdup(row[3]); - ci->akick[j].addtime = atoi(row[4]); - } - j++; - } - mysql_free_result(res); - } else { - ci->akick = NULL; - } - ci->mlock_on = atoi(mysql_row[18]); - ci->mlock_off = atoi(mysql_row[19]); - ci->mlock_limit = atoi(mysql_row[20]); - ci->mlock_key = sstrdup(mysql_row[21]); -#ifdef HAS_FMODE - ci->mlock_flood = sstrdup(mysql_row[22]); -#endif - -#ifdef HAS_LMODE - ci->mlock_redirect = sstrdup(mysql_row[23]); -#endif - ci->memos.memomax = atoi(mysql_row[25]); - snprintf(sqlcmd, MAX_SQL_BUF, - "SELECT `number`,`flags`,`time`,`sender`,`text` FROM `anope_ms_info` WHERE `receiver` = '%s'", - tempstr); - if (db_mysql_query(sqlcmd)) { - log_perror("Can't create sql query: %s", sqlcmd); - db_mysql_error(MYSQL_WARNING, "query"); - } - res = mysql_store_result(mysql); - ci->memos.memocount = mysql_num_rows(res); - if (ci->memos.memocount) { - Memo *memos; - memos = scalloc(sizeof(Memo) * ci->memos.memocount, 1); - ci->memos.memos = memos; - while ((row = mysql_fetch_row(res))) { - memos->number = atoi(row[0]); - memos->flags = atoi(row[1]); - memos->time = atoi(row[2]); - snprintf(memos->sender, NICKMAX, "%s", row[3]); - memos->text = sstrdup(row[4]); - for (m = 0; m < MAX_CMD_HASH; m++) { - memos->moduleData[m] = NULL; - } - memos++; - } - } - mysql_free_result(res); - ci->entry_message = sstrdup(mysql_row[24]); - if (strlen(ci->entry_message) == 0) { - free(ci->entry_message); - ci->entry_message = NULL; - } - ci->c = NULL; - - ci->bi = findbot(mysql_row[26]); - ci->botflags = atoi(mysql_row[27]); - ci->ttb = scalloc(2 * TTB_SIZE, 1); - for (j = 0; j < TTB_SIZE; j++) { - ci->ttb[j] = 0; - } - ci->capsmin = atoi(mysql_row[30]); - ci->capspercent = atoi(mysql_row[31]); - ci->floodlines = atoi(mysql_row[32]); - ci->floodsecs = atoi(mysql_row[33]); - ci->repeattimes = atoi(mysql_row[34]); - - ci->bwcount = atoi(mysql_row[29]); - if (ci->bwcount) { - ci->badwords = scalloc(ci->bwcount, sizeof(BadWord)); - snprintf(sqlcmd, MAX_SQL_BUF, - "SELECT `word`,`type` FROM `anope_cs_badwords` WHERE `channel` = '%s'", - tempstr); - if (db_mysql_query(sqlcmd)) { - log_perror("Can't create sql query: %s", sqlcmd); - db_mysql_error(MYSQL_WARNING, "query"); - } - res = mysql_store_result(mysql); - j = 0; - while ((row = mysql_fetch_row(res))) { - ci->badwords[j].in_use = 1; - if (ci->badwords[j].in_use) { /* I know... but for later */ - ci->badwords[j].word = sstrdup(row[0]); - ci->badwords[j].type = atoi(row[1]); - } - j++; - } - mysql_free_result(res); - } else { - ci->badwords = NULL; - } - alpha_insert_chan(ci); - free(tempstr); - } - mysql_free_result(mysql_res); - - for (j = 0; j < 256; j++) { - ChannelInfo *next; - for (ci = chanlists[j]; ci; ci = next) { - next = ci->next; - if (!(ci->flags & CI_VERBOTEN) && !ci->founder) { - alog("%s: database load: Deleting founderless channel %s", - s_ChanServ, ci->name); - delchan(ci); - } - } - } -} - -void db_mysql_load_ns_req_dbase(void) -{ - char sqlcmd[MAX_SQL_BUF]; - NickRequest *nr; - - if (!do_mysql) - return; - - snprintf(sqlcmd, MAX_SQL_BUF, - "SELECT `nick`,`passcode`,`password`,`email`,`requested`,`active` FROM `anope_ns_request`;"); - if (db_mysql_query(sqlcmd)) { - log_perror("Can't create sql query: %s", sqlcmd); - db_mysql_error(MYSQL_WARNING, "query"); - } - mysql_res = mysql_store_result(mysql); - if (mysql_num_rows(mysql_res) == 0) { - mysql_free_result(mysql_res); - return; - } - while ((mysql_row = mysql_fetch_row(mysql_res))) { - nr = scalloc(1, sizeof(NickRequest)); - nr->nick = sstrdup(mysql_row[0]); - nr->passcode = sstrdup(mysql_row[1]); - nr->password = sstrdup(mysql_row[2]); - nr->email = sstrdup(mysql_row[3]); - nr->requested = atoi(mysql_row[4]); - insert_requestnick(nr); - } - mysql_free_result(mysql_res); -} - -void db_mysql_load_ns_dbase(void) -{ - char sqlcmd[MAX_SQL_BUF], *tmpstr; - NickCore *nc; - NickAlias *na; - MYSQL_RES *res; - MYSQL_ROW row; - int i, j, m; - - if (!do_mysql) - return; - - snprintf(sqlcmd, MAX_SQL_BUF, - "SELECT `display`,`pass`,`email`,`icq`,`url`,`flags`,`language`,`accesscount`,`memocount`,`memomax`,`channelcount`,`channelmax`,`greet`,`active` FROM `anope_ns_core`"); - - if (db_mysql_query(sqlcmd)) { - log_perror("Can't create sql query: %s", sqlcmd); - db_mysql_error(MYSQL_WARNING, "query"); - } - mysql_res = mysql_store_result(mysql); - if (mysql_num_rows(mysql_res) == 0) { - mysql_free_result(mysql_res); - return; - } - - while ((mysql_row = mysql_fetch_row(mysql_res))) { - nc = scalloc(1, sizeof(NickCore)); - - nc->display = sstrdup(mysql_row[0]); - nc->pass = sstrdup(mysql_row[1]); - nc->email = sstrdup(mysql_row[2]); - nc->icq = atoi(mysql_row[3]); - nc->url = sstrdup(mysql_row[4]); - nc->flags = atoi(mysql_row[5]); - nc->language = atoi(mysql_row[6]); - nc->accesscount = atoi(mysql_row[7]); - nc->memos.memocount = atoi(mysql_row[8]); - nc->memos.memomax = atoi(mysql_row[9]); - nc->channelcount = atoi(mysql_row[10]); - nc->channelmax = atoi(mysql_row[11]); - - if (mysql_row[12][0] == '\0') /* check if it's empty */ - nc->greet = NULL; - else - nc->greet = sstrdup(mysql_row[12]); - - if (!NSAllowKillImmed) - nc->flags &= ~NI_KILL_IMMED; - -#ifdef USE_ENCRYPTION - if (nc->pass && !(nc->flags & NI_ENCRYPTEDPW)) { - if (debug) - alog("debug: %s: encrypting password for `%s' on load", - s_NickServ, nc->display); - if (encrypt_in_place(nc->pass, PASSMAX) < 0) - fatal("%s: Can't encrypt `%s' nickname password!", - s_NickServ, nc->display); - - nc->flags |= NI_ENCRYPTEDPW; - } -#else - if (nc->flags & NI_ENCRYPTEDPW) - fatal - ("%s: load database: password for %s encrypted but encryption disabled, aborting", - s_NickServ, nc->display); -#endif - - if (nc->flags & NI_SERVICES_ADMIN) - slist_add(&servadmins, nc); - if (nc->flags & NI_SERVICES_OPER) - slist_add(&servopers, nc); - - if (nc->accesscount) { - char **access; - access = scalloc(sizeof(char *) * nc->accesscount, 1); - nc->access = access; - tmpstr = db_mysql_quote(nc->display); - snprintf(sqlcmd, MAX_SQL_BUF, - "SELECT `access` FROM `anope_ns_access` WHERE `display` = '%s'", - tmpstr); - free(tmpstr); - if (db_mysql_query(sqlcmd)) { - log_perror("Can't create sql query: %s", sqlcmd); - db_mysql_error(MYSQL_WARNING, "query"); - } - res = mysql_store_result(mysql); - while ((row = mysql_fetch_row(res))) { - if (strlen(row[0]) > 0) { - *access = sstrdup(row[0]); - access++; - } - } - mysql_free_result(res); - } - - if (nc->memos.memocount) { - Memo *memos; - memos = scalloc(sizeof(Memo) * nc->memos.memocount, 1); - nc->memos.memos = memos; - tmpstr = db_mysql_quote(nc->display); - snprintf(sqlcmd, MAX_SQL_BUF, - "SELECT `number`,`flags`,`time`,`sender`,`text` FROM `anope_ms_info` WHERE `receiver` = '%s' ORDER BY `number` ASC", - tmpstr); - free(tmpstr); - if (db_mysql_query(sqlcmd)) { - log_perror("Can't create sql query: %s", sqlcmd); - db_mysql_error(MYSQL_WARNING, "query"); - } - res = mysql_store_result(mysql); - while ((row = mysql_fetch_row(res))) { - memos->number = atoi(row[0]); - memos->flags = atoi(row[1]); - memos->time = atoi(row[2]); - snprintf(memos->sender, NICKMAX, "%s", row[3]); - memos->text = sstrdup(row[4]); - for (m = 0; m < MAX_CMD_HASH; m++) { - memos->moduleData[m] = NULL; - } - memos++; - } - mysql_free_result(res); - } - insert_core(nc); - } - mysql_free_result(mysql_res); - - snprintf(sqlcmd, MAX_SQL_BUF, - "SELECT `display`,`nick`,`time_registered`,`last_seen`,`status`,`last_usermask`,`last_realname`,`last_quit` FROM `anope_ns_alias`"); - if (db_mysql_query(sqlcmd)) { - log_perror("Can't create sql query: %s", sqlcmd); - db_mysql_error(MYSQL_WARNING, "query"); - } - mysql_res = mysql_store_result(mysql); - while ((mysql_row = mysql_fetch_row(mysql_res))) { - na = scalloc(1, sizeof(NickAlias)); - na->nick = sstrdup(mysql_row[1]); - - na->last_usermask = sstrdup(mysql_row[5]); - na->last_realname = sstrdup(mysql_row[6]); - na->last_quit = sstrdup(mysql_row[7]); - na->time_registered = atoi(mysql_row[2]); - na->last_seen = atoi(mysql_row[3]); - na->status = atoi(mysql_row[4]); - na->status &= ~NS_TEMPORARY; - tmpstr = sstrdup(mysql_row[0]); - na->nc = findcore(tmpstr); - free(tmpstr); - - if (na->nc) - slist_add(&na->nc->aliases, na); - - if (!(na->status & NS_VERBOTEN)) { - if (!na->last_usermask) - na->last_usermask = sstrdup(""); - if (!na->last_realname) - na->last_realname = sstrdup(""); - } - - if (na->nc) - na->nc->flags &= ~NI_SERVICES_ROOT; - alpha_insert_alias(na); - } - mysql_free_result(mysql_res); - - for (j = 0; j < 1024; j++) { - NickAlias *next; - for (na = nalists[j]; na; na = next) { - next = na->next; - if (!na->nc) { - alog("%s: while loading database: %s has no core! We delete it.", s_NickServ, na->nick); - delnick(na); - continue; - } - for (i = 0; i < RootNumber; i++) { - if (!stricmp(ServicesRoots[i], na->nick)) - na->nc->flags |= NI_SERVICES_ROOT; - } - } - } + display = db_mysql_quote(access->nc->display); + channel = db_mysql_quote(ci->name); + + db_mysql_query("DELETE FROM `anope_cs_access` WHERE `channel` = '%s' AND `display` = '%s'", channel, display); + + free(channel); + free(display); } +#endif /* USE_MYSQL */ diff --git a/src/news.c b/src/news.c index 530a4ae35..a14c69ce9 100644 --- a/src/news.c +++ b/src/news.c @@ -238,25 +238,6 @@ void save_news() #undef SAFE -void save_rdb_news() -{ -#ifdef USE_RDB - int i; - NewsItem *ni; - - if (!rdb_open()) - return; - - rdb_clear_table("anope_os_news"); - for (i = 0; i < nnews; i++) { - ni = &news[i]; - rdb_save_news(ni); - } - - rdb_close(); -#endif -} - /*************************************************************************/ /***************************** News display ******************************/ /*************************************************************************/ diff --git a/src/nickserv.c b/src/nickserv.c index 465f14fa5..fa7fc70c0 100644 --- a/src/nickserv.c +++ b/src/nickserv.c @@ -972,64 +972,6 @@ void save_ns_req_dbase(void) #undef SAFE -void save_ns_rdb_dbase(void) -{ -#ifdef USE_RDB - int i; - NickAlias *na; - NickCore *nc; - - if (!rdb_open()) - return; - - rdb_tag_table("anope_ns_core"); - rdb_tag_table("anope_ns_alias"); - rdb_scrub_table("anope_ms_info", "serv='NICK'"); - rdb_clear_table("anope_ns_access"); - - for (i = 0; i < 1024; i++) { - for (nc = nclists[i]; nc; nc = nc->next) { - rdb_save_ns_core(nc); - - } /* for (nc) */ - } /* for (i) */ - - for (i = 0; i < 1024; i++) { - for (na = nalists[i]; na; na = na->next) { - rdb_save_ns_alias(na); - - } /* for (na) */ - } /* for (i) */ - - rdb_scrub_table("anope_ns_core", "active='0'"); - rdb_scrub_table("anope_ns_alias", "active='0'"); - rdb_close(); -#endif -} - -void save_ns_req_rdb_dbase(void) -{ -#ifdef USE_RDB - int i; - NickRequest *nr; - - if (!rdb_open()) - return; - - rdb_tag_table("anope_ns_request"); - - for (i = 0; i < 1024; i++) { - for (nr = nrlists[i]; nr; nr = nr->next) { - rdb_save_ns_req(nr); - } - } - - rdb_scrub_table("anope_ns_request", "active='0'"); - rdb_close(); -#endif - -} - /*************************************************************************/ /* Check whether a user is on the access list of the nick they're using If @@ -1437,17 +1379,6 @@ static void change_core_display(NickCore * nc, char *newdisplay) alog("%s: changing %s nickname group display to %s", s_NickServ, nc->display, newdisplay); -#ifdef USE_RDB - /* Reflect this change in the database right away. This - * ensures that we know how to deal with this "new" nick - * on the next /OS UPDATE might need it on /NS DROP too... - */ - if (rdb_open()) { - rdb_ns_set_display(newdisplay, nc->display); - rdb_close(); - } -#endif - /* Remove the core from the list */ if (nc->next) nc->next->prev = nc->prev; @@ -1472,9 +1403,6 @@ static void change_core_display(NickCore * nc, char *newdisplay) static int delcore(NickCore * nc) { int i; -#ifdef USE_RDB - static char clause[128]; -#endif /* (Hopefully complete) cleanup */ cs_remove_nick(nc); os_remove_nick(nc); @@ -1490,23 +1418,6 @@ static int delcore(NickCore * nc) /* Log .. */ alog("%s: deleting nickname group %s", s_NickServ, nc->display); -#ifdef USE_RDB - /* Reflect this change in the database right away. */ - if (rdb_open()) { - - snprintf(clause, sizeof(clause), "display='%s'", nc->display); - rdb_scrub_table("anope_ns_access", clause); - rdb_scrub_table("anope_ns_core", clause); - rdb_scrub_table("anope_cs_access", clause); - /* I'm unsure how to clean up the OS ADMIN/OPER list on the db */ - /* I wish the "display" primary key would be the same on all tables */ - snprintf(clause, sizeof(clause), "receiver='%s' AND serv='NICK'", - nc->display); - rdb_scrub_table("anope_ms_info", clause); - rdb_close(); - } -#endif - /* Now we can safely free it. */ free(nc->display); if (nc->pass) @@ -1575,9 +1486,6 @@ int delnickrequest(NickRequest * nr) int delnick(NickAlias * na) { -#ifdef USE_RDB - static char clause[128]; -#endif /* First thing to do: remove any timeout belonging to the nick we're deleting */ clean_ns_timeouts(na); @@ -1621,16 +1529,6 @@ int delnick(NickAlias * na) else nalists[HASH(na->nick)] = na->next; -#ifdef USE_RDB - /* Reflect this change in the database right away. */ - if (rdb_open()) { - - snprintf(clause, sizeof(clause), "nick='%s'", na->nick); - rdb_scrub_table("anope_ns_alias", clause); - rdb_close(); - } -#endif - free(na->nick); if (na->last_usermask) free(na->last_usermask); @@ -2315,16 +2213,6 @@ static int do_group(User * u) u->na = na; na->u = u; -#ifdef USE_RDB - /* Is this really needed? Since this is a new alias it will get - * its unique id on the next update, since it was previously - * deleted by delnick. Must observe... - */ - if (rdb_open()) { - rdb_save_ns_alias(na); - rdb_close(); - } -#endif alog("%s: %s!%s@%s makes %s join group of %s (%s) (e-mail: %s)", s_NickServ, u->nick, u->username, GetHost(u), u->nick, target->nick, target->nc->display, (target->nc->email ? target->nc->email : "none")); notice_lang(s_NickServ, u, NICK_GROUP_JOINED, target->nick); diff --git a/src/operserv.c b/src/operserv.c index d42ab7de1..1042e9c1e 100644 --- a/src/operserv.c +++ b/src/operserv.c @@ -774,19 +774,6 @@ void save_os_dbase(void) /*************************************************************************/ -void save_os_rdb_dbase(void) -{ -#ifdef USE_RDB - if (!rdb_open()) - return; - rdb_save_os_db(maxusercnt, maxusertime, &akills, &sglines, &sqlines, - &szlines, hcache[0]); - rdb_close(); -#endif -} - -/*************************************************************************/ - /* Removes the nick structure from OperServ lists. */ void os_remove_nick(NickCore * nc) @@ -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)); } diff --git a/src/sessions.c b/src/sessions.c index 1620a2e15..192ba3ea9 100644 --- a/src/sessions.c +++ b/src/sessions.c @@ -461,25 +461,6 @@ void save_exceptions() #undef SAFE /*************************************************************************/ - -void save_rdb_exceptions() -{ -#ifdef USE_RDB - int i; - Exception *e; - - if (!rdb_open()) - return; - rdb_clear_table("anope_os_exceptions"); - for (i = 0; i < nexceptions; i++) { - e = &exceptions[i]; - rdb_save_exceptions(e); - } - rdb_close(); -#endif -} - -/*************************************************************************/ /************************ Exception Manipulation *************************/ /*************************************************************************/ |