summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/Makefile16
-rw-r--r--src/botserv.c34
-rw-r--r--src/chanserv.c94
-rw-r--r--src/config.c2
-rw-r--r--src/core/ns_group.c10
-rw-r--r--src/hostserv.c48
-rw-r--r--src/init.c116
-rw-r--r--src/main.c59
-rw-r--r--src/makefile.win324
-rw-r--r--src/mypasql.c122
-rw-r--r--src/mysql.c1890
-rw-r--r--src/news.c31
-rw-r--r--src/nickserv.c164
-rw-r--r--src/operserv.c65
-rw-r--r--src/rdb.c496
-rw-r--r--src/sessions.c29
16 files changed, 48 insertions, 3132 deletions
diff --git a/src/Makefile b/src/Makefile
index 3d7122c5f..ccd6a3be2 100644
--- a/src/Makefile
+++ b/src/Makefile
@@ -1,15 +1,11 @@
-MYSQL_OBJ = $(MYSQL:.c=.o)
-RDB_OBJ = $(RDB:.c=.o)
OBJS = actions.o base64.o bots.o botserv.o channels.o chanserv.o commands.o compat.o \
config.o datafiles.o encrypt.o events.o hashcomp.o helpserv.o hostserv.o init.o ircd.o language.o log.o mail.o main.o \
memory.o memoserv.o messages.o misc.o modules.o news.o nickserv.o operserv.o \
- process.o send.o servers.o sessions.o slist.o sockutil.o timeout.o users.o \
- $(RDB_OBJ) $(MYSQL_OBJ)
+ process.o send.o servers.o sessions.o slist.o sockutil.o timeout.o users.o
SRCS = actions.c base64.c bots.cpp botserv.c channels.c chanserv.c commands.c compat.c \
- config.c datafiles.c encrypt.c events.c hashcomp.c helpserv.c hostserv.c init.c ircd.c language.c log.c mail.c main.c \
+ config.c datafiles.c encrypt.c events.c hashcomp.cpp helpserv.c hostserv.c init.c ircd.c language.c log.c mail.c main.c \
memory.c memoserv.c messages.c misc.c modules.c news.c nickserv.c operserv.c \
- process.c send.c servers.c sessions.c s sockutil.c timeout.c users.c \
- $(RDB) $(MYSQL)
+ process.c send.c servers.c sessions.c s sockutil.c timeout.c users.c
INCLUDES = ../include/commands.h ../include/defs.h ../include/language.h \
../include/pseudo.h ../include/sysconf.h ../include/config.h \
@@ -21,8 +17,8 @@ MAKEARGS = 'CFLAGS=${CFLAGS}' 'CC=${CC}' 'ANOPELIBS=${ANOPELIBS}' \
'LDFLAGS=${LDFLAGS}' 'BINDEST=${BINDEST}' 'INSTALL=${INSTALL}' \
'INCLUDEDIR=${INCLUDEDIR}' 'RM=${RM}' 'CP=${CP}' \
'TOUCH=${TOUCH}' 'SHELL=${SHELL}' 'DATDEST=${DATDEST}' \
- 'RUNGROUP=${RUNGROUP}' 'MODULE_PATH=${MODULE_PATH}' 'MYSQL=${MYSQL}'\
- 'RDB=${RDB}' 'SHARED=${SHARED}' 'MODULEFLAGS=${MODULEFLAGS}'
+ 'RUNGROUP=${RUNGROUP}' 'MODULE_PATH=${MODULE_PATH}' \
+ 'SHARED=${SHARED}' 'MODULEFLAGS=${MODULEFLAGS}'
.c.o:
@../run-cc.pl $(CC) $(CFLAGS) -I../include/ -c $<
@@ -76,8 +72,6 @@ sockutil.o: sockutil.c $(INCLUDES)
timeout.o: timeout.c $(INCLUDES)
users.o: users.c $(INCLUDES)
vsnprintf.o: vsnprintf.c $(INCLUDES)
-mysql.o: mysql.c $(INCLUDES)
-rdb.o: rdb.c $(INCLUDES)
mod_version: mod_version.c $(INCLUDES)
@../run-cc.pl $(CC) $(CDEFS) $(CFLAGS) $(MODULEFLAGS) -I../include/ -c mod_version.c
diff --git a/src/botserv.c b/src/botserv.c
index b1507b2e8..2aeca8249 100644
--- a/src/botserv.c
+++ b/src/botserv.c
@@ -531,40 +531,6 @@ void save_bs_dbase(void)
/*************************************************************************/
-void save_bs_rdb_dbase(void)
-{
-#ifdef USE_RDB
- int i;
- BotInfo *bi;
-
- if (!rdb_open())
- return;
-
- if (rdb_tag_table("anope_bs_core") == 0) {
- alog("Unable to tag table 'anope_bs_core' - BotServ RDB save failed.");
- rdb_close();
- return;
- }
-
- for (i = 0; i < 256; i++) {
- for (bi = botlists[i]; bi; bi = bi->next) {
- if (rdb_save_bs_core(bi) == 0) {
- alog("Unable to save BotInfo for %s - BotServ RDB save failed.", bi->nick);
- rdb_close();
- return;
- }
- }
- }
-
- if (rdb_clean_table("anope_bs_core") == 0)
- alog("Unable to clean table 'anope_bs_core' - BotServ RDB save failed.");
-
- rdb_close();
-#endif
-}
-
-/*************************************************************************/
-
/* Inserts a bot in the bot list. I can't be much explicit mh? */
void insert_bot(BotInfo * bi)
diff --git a/src/chanserv.c b/src/chanserv.c
index 598982cd9..c20c39265 100644
--- a/src/chanserv.c
+++ b/src/chanserv.c
@@ -756,100 +756,6 @@ void save_cs_dbase(void)
/*************************************************************************/
-void save_cs_rdb_dbase(void)
-{
-#ifdef USE_RDB
- int i;
- ChannelInfo *ci;
-
- if (!rdb_open())
- return;
-
- if (rdb_tag_table("anope_cs_info") == 0) {
- alog("Unable to tag table 'anope_cs_info' - ChanServ RDB save failed.");
- rdb_close();
- return;
- }
- if (rdb_tag_table("anope_cs_access") == 0) {
- alog("Unable to tag table 'anope_cs_access' - ChanServ RDB save failed.");
- rdb_close();
- return;
- }
- if (rdb_tag_table("anope_cs_levels") == 0) {
- alog("Unable to tag table 'anope_cs_levels' - ChanServ RDB save failed.");
- rdb_close();
- return;
- }
- if (rdb_tag_table("anope_cs_akicks") == 0) {
- alog("Unable to tag table 'anope_cs_akicks' - ChanServ RDB save failed.");
- rdb_close();
- return;
- }
- if (rdb_tag_table("anope_cs_badwords") == 0) {
- alog("Unable to tag table 'anope_cs_badwords' - ChanServ RDB save failed.");
- rdb_close();
- return;
- }
- if (rdb_tag_table("anope_cs_ttb") == 0) {
- alog("Unable to tag table 'anope_cs_ttb' - ChanServ RDB save failed.");
- rdb_close();
- return;
- }
- if (rdb_tag_table_where("anope_ms_info", "serv='CHAN'") == 0) {
- alog("Unable to tag table 'anope_ms_info' - ChanServ RDB save failed.");
- rdb_close();
- return;
- }
-
- for (i = 0; i < 256; i++) {
- for (ci = chanlists[i]; ci; ci = ci->next) {
- if (rdb_save_cs_info(ci) == 0) {
- alog("Unable to save ChanInfo for %s - ChanServ RDB save failed.", ci->name);
- rdb_close();
- return;
- }
- } /* for (chanlists[i]) */
- } /* for (i) */
-
- if (rdb_clean_table("anope_cs_info") == 0) {
- alog("Unable to clean table 'anope_cs_info' - ChanServ RDB save failed.");
- rdb_close();
- return;
- }
- if (rdb_clean_table("anope_cs_access") == 0) {
- alog("Unable to clean table 'anope_cs_access' - ChanServ RDB save failed.");
- rdb_close();
- return;
- }
- if (rdb_clean_table("anope_cs_levels") == 0) {
- alog("Unable to clean table 'anope_cs_levels' - ChanServ RDB save failed.");
- rdb_close();
- return;
- }
- if (rdb_clean_table("anope_cs_akicks") == 0) {
- alog("Unable to clean table 'anope_cs_akicks' - ChanServ RDB save failed.");
- rdb_close();
- return;
- }
- if (rdb_clean_table("anope_cs_badwords") == 0) {
- alog("Unable to clean table 'anope_cs_badwords' - ChanServ RDB save failed.");
- rdb_close();
- return;
- }
- if (rdb_clean_table("anope_cs_ttb") == 0) {
- alog("Unable to clean table 'anope_cs_ttb' - ChanServ RDB save failed.");
- rdb_close();
- return;
- }
- if (rdb_clean_table_where("anope_ms_info", "serv='CHAN'") == 0)
- alog("Unable to clean table 'anope_ms_info' - ChanServ RDB save failed.");
-
- rdb_close();
-#endif
-}
-
-/*************************************************************************/
-
/* Check the current modes on a channel; if they conflict with a mode lock,
* fix them.
*
diff --git a/src/config.c b/src/config.c
index 73ac09cb3..bd76ffcb1 100644
--- a/src/config.c
+++ b/src/config.c
@@ -277,7 +277,6 @@ char *MysqlSecure;
char *MysqlSock;
int MysqlRetries = 0;
int MysqlRetryGap = 0;
-int UseRDB = 0;
int DefConLevel;
static std::string DefCon1;
@@ -1316,7 +1315,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/core/ns_group.c b/src/core/ns_group.c
index 29e5d44f4..4a31eb988 100644
--- a/src/core/ns_group.c
+++ b/src/core/ns_group.c
@@ -213,16 +213,6 @@ 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
send_event(EVENT_GROUP, 1, u->nick);
alog("%s: %s!%s@%s makes %s join group of %s (%s) (e-mail: %s)", s_NickServ, u->nick, u->username, u->host, 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/hostserv.c b/src/hostserv.c
index cdf43889c..52dfbc0d9 100644
--- a/src/hostserv.c
+++ b/src/hostserv.c
@@ -314,28 +314,11 @@ char *getvIdent(char *nick)
/*************************************************************************/
void delHostCore(char *nick)
{
-#ifdef USE_RDB
- static char clause[128];
- char *q_nick;
-#endif
HostCore *tmp;
bool 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()) {
- q_nick = rdb_quote(nick);
- snprintf(clause, sizeof(clause), "nick='%s'", q_nick);
- if (rdb_scrub_table("anope_hs_core", clause) == 0)
- alog("Unable to scrub table 'anope_hs_core' - HostServ RDB update failed.");
- rdb_close();
- free(q_nick);
- }
-#endif
-
}
}
@@ -497,37 +480,6 @@ void save_hs_dbase(void)
#undef SAFE
-void save_hs_rdb_dbase(void)
-{
-#ifdef USE_RDB
- HostCore *current;
-
- if (!rdb_open())
- return;
-
- if (rdb_tag_table("anope_hs_core") == 0) {
- alog("Unable to tag table 'anope_hs_core' - HostServ RDB save failed.");
- rdb_close();
- return;
- }
-
- current = head;
- while (current != NULL) {
- if (rdb_save_hs_core(current) == 0) {
- alog("Unable to save HostCore for %s - HostServ RDB save failed.", current->nick);
- rdb_close();
- return;
- }
- current = current->next;
- }
-
- if (rdb_clean_table("anope_hs_core") == 0)
- alog("Unable to clean table 'anope_hs_core' - HostServ RDB save failed.");
-
- rdb_close();
-#endif
-}
-
/*************************************************************************/
/* End of Load/Save Functions */
/*************************************************************************/
diff --git a/src/init.c b/src/init.c
index 38f7b0c7d..6ba89f052 100644
--- a/src/init.c
+++ b/src/init.c
@@ -528,20 +528,6 @@ int init_secondary(int ac, char **av)
hostserv_init();
helpserv_init();
-#ifdef USE_RDB
- if (!rdb_init()) {
- if (UseRDB) {
- UseRDB = 0;
- alog("Error: Disabling UseRDB due to errors with SQL");
- }
- } else {
- if (MysqlSecure && UseRDB) {
- UseRDB = 0;
- alog("Error: MySQL password are encrypted using method in MysqlSecure disabling UseRDB");
- }
- }
-#endif
-
/* load any custom modules */
modules_init();
@@ -550,56 +536,47 @@ int init_secondary(int ac, char **av)
add_entropy_userkeys();
/* Load up databases */
-#ifdef USE_RDB
- if (UseRDB)
- rdb_load_dbases();
- /* Need a better way to handle this -dane */
- if (!UseRDB) {
-#endif
- load_ns_dbase();
- if (debug)
- alog("debug: Loaded %s database (1/%d)", s_NickServ,
- (PreNickDBName ? 8 : 7));
- if (s_HostServ) {
- load_hs_dbase();
- if (debug)
- alog("debug: Loaded %s database (2/%d)", s_HostServ,
- (PreNickDBName ? 8 : 7));
- } else if (debug) {
- alog("debug: HostServ database (2/%d) not loaded because HostServ is disabled", (PreNickDBName ? 8 : 7));
- }
- if (s_BotServ) {
- load_bs_dbase();
- if (debug)
- alog("debug: Loaded %s database (3/%d)", s_BotServ,
- (PreNickDBName ? 8 : 7));
- } else if (debug) {
- alog("debug: BotServ database (3/%d) not loaded because BotServ is disabled", (PreNickDBName ? 8 : 7));
- }
- load_cs_dbase();
- if (debug)
- alog("debug: Loaded %s database (4/%d)", s_ChanServ,
- (PreNickDBName ? 8 : 7));
- load_os_dbase();
- if (debug)
- alog("debug: Loaded %s database (5/%d)", s_OperServ,
- (PreNickDBName ? 8 : 7));
- load_news();
- if (debug)
- alog("debug: Loaded news database (6/%d)",
- (PreNickDBName ? 8 : 7));
- load_exceptions();
- if (debug)
- alog("debug: Loaded exception database (7/%d)",
- (PreNickDBName ? 8 : 7));
- if (PreNickDBName) {
- load_ns_req_db();
- if (debug)
- alog("debug: Loaded PreNick database (8/8)");
- }
-#ifdef USE_RDB
- }
-#endif
+ load_ns_dbase();
+ if (debug)
+ alog("debug: Loaded %s database (1/%d)", s_NickServ,
+ (PreNickDBName ? 8 : 7));
+ if (s_HostServ) {
+ load_hs_dbase();
+ if (debug)
+ alog("debug: Loaded %s database (2/%d)", s_HostServ,
+ (PreNickDBName ? 8 : 7));
+ } else if (debug) {
+ alog("debug: HostServ database (2/%d) not loaded because HostServ is disabled", (PreNickDBName ? 8 : 7));
+ }
+ if (s_BotServ) {
+ load_bs_dbase();
+ if (debug)
+ alog("debug: Loaded %s database (3/%d)", s_BotServ,
+ (PreNickDBName ? 8 : 7));
+ } else if (debug) {
+ alog("debug: BotServ database (3/%d) not loaded because BotServ is disabled", (PreNickDBName ? 8 : 7));
+ }
+ load_cs_dbase();
+ if (debug)
+ alog("debug: Loaded %s database (4/%d)", s_ChanServ,
+ (PreNickDBName ? 8 : 7));
+ load_os_dbase();
+ if (debug)
+ alog("debug: Loaded %s database (5/%d)", s_OperServ,
+ (PreNickDBName ? 8 : 7));
+ load_news();
+ if (debug)
+ alog("debug: Loaded news database (6/%d)",
+ (PreNickDBName ? 8 : 7));
+ load_exceptions();
+ if (debug)
+ alog("debug: Loaded exception database (7/%d)",
+ (PreNickDBName ? 8 : 7));
+ if (PreNickDBName) {
+ load_ns_req_db();
+ if (debug)
+ alog("debug: Loaded PreNick database (8/8)");
+ }
alog("Databases loaded");
@@ -626,19 +603,8 @@ int init_secondary(int ac, char **av)
}
/* 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
send_event(EVENT_CONNECT, 1, EVENT_START);
/* Connect to the remote server */
diff --git a/src/main.c b/src/main.c
index d70e936ba..ab658e090 100644
--- a/src/main.c
+++ b/src/main.c
@@ -49,10 +49,6 @@ int protocoldebug = 0; /* -protocoldebug */
char *binary_dir; /* Used to store base path for win32 restart */
#endif
-#ifdef USE_RDB
-int do_mysql = 0; /* use mysql ? */
-#endif
-
/* Set to 1 if we are to quit */
int quitting = 0;
@@ -165,61 +161,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;
- waiting = -11;
- save_ns_rdb_dbase();
- /* We send these PONG's when we're not syncing to avoid timeouts.
- * If we send them during the sync, we fuck something up there and
- * break the syncing process, resulting in lost (literally lost)
- * data. -GD
- * This used is_sync(serv_uplink) to check for sync states. There's
- * only a minor error with this: serv_uplink doesn't exist during
- * the first save. So now we check for serv_uplink only; if it
- * exists we're safe. -GD
- */
- if (serv_uplink)
- ircdproto->SendPong(ServerName, ServerName);
- waiting = -12;
- save_cs_rdb_dbase();
- if (serv_uplink)
- ircdproto->SendPong(ServerName, ServerName);
- if (PreNickDBName) {
- save_ns_req_rdb_dbase();
- if (serv_uplink)
- ircdproto->SendPong(ServerName, ServerName);
- waiting = -13;
- }
- if (s_BotServ) {
- waiting = -14;
- save_bs_rdb_dbase();
- if (serv_uplink)
- ircdproto->SendPong(ServerName, ServerName);
- }
- if (s_HostServ) {
- waiting = -15;
- save_hs_rdb_dbase();
- if (serv_uplink)
- ircdproto->SendPong(ServerName, ServerName);
- }
- waiting = -16;
- save_os_rdb_dbase();
- if (serv_uplink)
- ircdproto->SendPong(ServerName, ServerName);
- waiting = -17;
- save_rdb_news();
- if (serv_uplink)
- ircdproto->SendPong(ServerName, ServerName);
- waiting = -18;
- save_rdb_exceptions();
- if (serv_uplink)
- ircdproto->SendPong(ServerName, ServerName);
- }
-#endif
waiting = -20;
send_event(EVENT_DB_SAVING, 1, EVENT_STOP);
}
diff --git a/src/makefile.win32 b/src/makefile.win32
index 09f05acbe..39799a25a 100644
--- a/src/makefile.win32
+++ b/src/makefile.win32
@@ -22,13 +22,13 @@ OBJS = actions.obj base64.obj bots.obj botserv.obj channels.obj chanserv.obj co
init.obj ircd.obj language.obj list.obj log.obj mail.obj main.obj memory.obj \
memoserv.obj messages.obj misc.obj modules.obj mod_version.obj news.obj nickserv.obj operserv.obj \
process.obj send.obj servers.obj sessions.obj slist.obj sockutil.obj \
- timeout.obj users.obj $(RDB_O) $(MYSQL_O)
+ timeout.obj users.obj
SRCS = actions.c base64.c botserv.c bots.cpp channels.c chanserv.c commands.c compat.c \
config.c datafiles.c encrypt.c events.c helpserv.c hostserv.c init.c ircd.c \
language.c list.c log.c mail.c main.c memory.c memoserv.c messages.c misc.c \
modules.c mod_version.c news.c nickserv.c operserv.c process.c send.c servers.obj sessions.c \
- slist.c sockutil.c timeout.c users.c $(RDB_C) $(MYSQL_C)
+ slist.c sockutil.c timeout.c users.c
###########################################################################
diff --git a/src/mypasql.c b/src/mypasql.c
deleted file mode 100644
index a66850c84..000000000
--- a/src/mypasql.c
+++ /dev/null
@@ -1,122 +0,0 @@
-#include <winsock.h>
-#include <stdio.h>
-#include <mysql.h>
-
-MYSQL *mysql;
-MYSQL_RES *result = NULL;
-MYSQL_ROW row;
-
-int __stdcall mysql_Connect(char *server, char *user, char *pass)
-{
- mysql = mysql_init(NULL);
- return (int) mysql_real_connect(mysql, server, user, pass, NULL, 0,
- NULL, 0);
-}
-
-int __stdcall mysql_SelectDb(char *db)
-{
- return (int) mysql_select_db(mysql, db);
-}
-
-const char *__stdcall mysql_Error()
-{
- return mysql_error(mysql);
-}
-
-int __stdcall mysql_Query(char *query)
-{
- if (result) {
- mysql_free_result(result);
- result = NULL;
- }
- return (int) mysql_real_query(mysql, query, strlen(query));
-}
-
-int __stdcall mysql_NumRows()
-{
- if (!result)
- result = mysql_store_result(mysql);
- return mysql_num_rows(result);
-}
-
-char *strip(char *str)
-{
- char *c;
- if ((c = strrchr(str, '\n')))
- *c = 0;
- if ((c = strrchr(str, '\r')))
- *c = 0;
- return str;
-}
-
-void add_line(char **buf, char *line)
-{
- int oldlen;
- char *tmp;
-
- if (*buf != NULL) {
- oldlen = strlen(*buf);
- tmp = malloc(oldlen + 1);
- strcpy(tmp, *buf);
- *buf = realloc(*buf, oldlen + strlen(line) + 1);
- strcpy(*buf, tmp);
- strcat(*buf, line);
- free(tmp);
- } else
- *buf = strdup(line);
-}
-
-int __stdcall mysql_LoadFromFile(char *file)
-{
- FILE *fd = fopen(file, "r");
- char line[1024];
- char *query = NULL;
-
-
- if (!fd)
- return 0;
- while (fgets(line, 1024, fd)) {
- int len;
- strip(line);
- len = strlen(line);
- if (!*line || (*line == '-' && *(line + 1) == '-'))
- continue;
- else if (line[len - 1] == ';') { /* End of a query */
- line[len - 1] = 0;
- add_line(&query, line);
- if (mysql_real_query(mysql, query, strlen(query))) {
- free(query);
- return 0;
- }
- free(query);
- query = NULL;
- }
-
- else
- add_line(&query, line);
- }
- return 1;
-}
-
-int __stdcall mysql_NumFields()
-{
- if (!result)
- result = mysql_store_result(mysql);
- return mysql_num_fields(result);
-}
-
-int __stdcall mysql_FetchRow()
-{
- if (!result)
- result = mysql_store_result(mysql);
- row = mysql_fetch_row(result);
- return (int) row;
-}
-
-char *__stdcall mysql_FetchField(int i)
-{
- if (i >= mysql_num_fields(result))
- return NULL;
- else
- return row[i];
-}
diff --git a/src/mysql.c b/src/mysql.c
deleted file mode 100644
index db67980f4..000000000
--- a/src/mysql.c
+++ /dev/null
@@ -1,1890 +0,0 @@
-
-/* MySQL functions.
- *
- * (C) 2003-2008 Anope Team
- * Contact us at info@anope.org
- *
- * Please read COPYING and README for further details.
- *
- * Based on the original code of Epona by Lara.
- * Based on the original code of Services by Andy Church.
- *
- * $Id$
- *
- */
-#include "services.h"
-
-/*************************************************************************/
-
-/* 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 */
-
-int mysql_is_connected = 0; /* Are we currently connected? */
-
-/*************************************************************************/
-
-/* Throw a mysql error into the logs. If severity is MYSQL_ERROR, we
- * also exit Anope...
- */
-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);
- }
-
-}
-
-/*************************************************************************/
-
-/* Initialize the MySQL code */
-int db_mysql_init()
-{
-
- /* If the host is not defined, assume we don't want MySQL */
- if (!MysqlHost) {
- do_mysql = 0;
- alog("MySQL: has been disabled.");
- return 0;
- } else {
- do_mysql = 1;
- alog("MySQL: has been enabled.");
- alog("MySQL: client version %s.", mysql_get_client_info());
- }
-
- /* The following configuration options are required.
- * If missing disable MySQL to avoid any problems.
- */
-
- if ((do_mysql) && (!MysqlName || !MysqlUser)) {
- do_mysql = 0;
- alog("MySQL Error: Set all required configuration options.");
- return 0;
- }
-
- if (!db_mysql_open()) {
- do_mysql = 0;
- return 0;
- }
-
- return 1;
-}
-
-/*************************************************************************/
-
-/* Open a connection to the mysql database. Return 0 on failure, or
- * 1 on success. If this succeeds, we're guaranteed of a working
- * mysql connection (unless something unexpected happens ofcourse...)
- */
-int db_mysql_open()
-{
- /* If MySQL is disabled, return 0 */
- if (!do_mysql)
- return 0;
-
- /* If we are reported to be connected, ping MySQL to see if we really are
- * still connected. (yes mysql_ping() returns 0 on success)
- */
- if (mysql_is_connected && !mysql_ping(mysql))
- return 1;
-
- mysql_is_connected = 0;
-
- mysql = mysql_init(NULL);
- if (mysql == NULL) {
- db_mysql_error(MYSQL_WARNING, "Unable to create mysql object");
- return 0;
- }
-
- if (!MysqlPort)
- MysqlPort = MYSQL_DEFAULT_PORT;
-
- if (!mysql_real_connect(mysql, MysqlHost, MysqlUser, MysqlPass, MysqlName, MysqlPort, MysqlSock, 0)) {
- log_perror("MySQL Error: Cant connect to MySQL: %s\n", mysql_error(mysql));
- return 0;
- }
-
- mysql_is_connected = 1;
-
- return 1;
-
-}
-
-
-/*************************************************************************/
-
-/* Perform a MySQL query. Return 1 if the query succeeded and 0 if the
- * query failed. Before returning failure, re-try the query a few times
- * and die if it still fails.
- */
-int db_mysql_query(char *sql)
-{
- int lcv;
-
- if (!do_mysql)
- return 0;
-
- if (debug)
- alog("debug: MySQL: %s", sql);
-
- /* Try as many times as configured in MysqlRetries */
- for (lcv = 0; lcv < MysqlRetries; lcv++) {
- if (db_mysql_open() && (mysql_query(mysql, sql) == 0))
- return 1;
-
- /* If we get here, we could not run the query */
- log_perror("Unable to run query: %s\n", mysql_error(mysql));
-
- /* Wait for MysqlRetryGap seconds and try again */
- sleep(MysqlRetryGap);
- }
-
- /* Unable to run the query even after MysqlRetries tries */
- db_mysql_error(MYSQL_WARNING, "query");
-
- return 0;
-
-}
-
-/*************************************************************************/
-
-/* Quote a string to be safely included in a query. The result of this
- * function is allocated; it MUST be freed by the caller.
- */
-char *db_mysql_quote(char *sql)
-{
- int slen;
- char *quoted;
-
-
- if (!sql)
- return sstrdup("");
-
- slen = strlen(sql);
- quoted = (char*)malloc((1 + (slen * 2)) * sizeof(char));
-
- mysql_real_escape_string(mysql, quoted, sql, slen);
-
- return quoted;
-
-}
-
-/*************************************************************************/
-
-/* Close the MySQL database connection. */
-int db_mysql_close()
-{
- mysql_close(mysql);
-
- mysql_is_connected = 0;
-
- return 1;
-}
-
-/*************************************************************************/
-
-/* Try to execute a query and issue a warning when failed. Return 1 on
- * success and 0 on failure.
- */
-int db_mysql_try(const char *fmt, ...)
-{
- va_list args;
- static char sql[MAX_SQL_BUF];
-
- va_start(args, fmt);
- vsnprintf(sql, MAX_SQL_BUF, fmt, args);
- va_end(args);
-
- if (!db_mysql_query(sql)) {
- log_perror("Can't create sql query: %s", sql);
- db_mysql_error(MYSQL_WARNING, "query");
- return 0;
- }
-
- return 1;
-}
-
-/*************************************************************************/
-
-/* Return a string to insert into a SQL query. The string will, once
- * evaluated by MySQL, result in a the given pass encoded in the encryption
- * type selected for MysqlSecure
- *
- * This should be removed since Rob properly did encryption modules... -GD
- */
-char *db_mysql_secure(char *pass)
-{
- char epass[BUFSIZE];
- char tmp_pass[PASSMAX];
-
- /* Initialize the buffer. Bug #86 */
- memset(epass, '\0', BUFSIZE);
- memset(tmp_pass, '\0', PASSMAX);
-
- /* We couldnt decrypt the pass... */
- if (enc_decrypt(pass, tmp_pass, PASSMAX - 1) != 1) {
- snprintf(epass, sizeof(epass), "'%s'", pass);
- } else { /* if we could decrypt the pass */
- if (!pass) {
- snprintf(epass, sizeof(epass), "''");
- } else if ((!MysqlSecure) || (strcmp(MysqlSecure, "") == 0)) {
- snprintf(epass, sizeof(epass), "'%s'", tmp_pass);
- } else if (strcmp(MysqlSecure, "des") == 0) {
- snprintf(epass, sizeof(epass), "ENCRYPT('%s')", tmp_pass);
- } else if (strcmp(MysqlSecure, "md5") == 0) {
- snprintf(epass, sizeof(epass), "MD5('%s')", tmp_pass);
- } else if (strcmp(MysqlSecure, "sha") == 0) {
- snprintf(epass, sizeof(epass), "SHA('%s')", tmp_pass);
- } else {
- snprintf(epass, sizeof(epass), "ENCODE('%s','%s')", tmp_pass,
- MysqlSecure);
- }
- }
- return sstrdup(epass);
-}
-
-/*************************************************************************/
-
-/*
- * NickServ Specific Secion
- */
-
-/*************************************************************************/
-
-/* Save the given NickRequest into the database
- * Return 1 on success, 0 on failure
- * These tables are tagged and will be cleaned:
- * - anope_ns_request
- */
-int db_mysql_save_ns_req(NickRequest * nr)
-{
- int ret;
- char *q_nick, *q_passcode, *q_password, *q_email;
-
- q_nick = db_mysql_quote(nr->nick);
- q_passcode = db_mysql_quote(nr->passcode);
- q_password = db_mysql_quote(nr->password);
- q_email = db_mysql_quote(nr->email);
-
- ret = db_mysql_try("UPDATE anope_ns_request "
- "SET passcode = '%s', password = '%s', email = '%s', requested = %d, active = 1 "
- "WHERE nick = '%s'",
- q_passcode, q_password, q_email, (int) nr->requested,
- q_nick);
-
- if (ret && (mysql_affected_rows(mysql) == 0)) {
- ret = db_mysql_try("INSERT DELAYED INTO anope_ns_request "
- "(nick, passcode, password, email, requested, active) "
- "VALUES ('%s', '%s', '%s', '%s', %d, 1)",
- q_nick, q_passcode, q_password, q_email,
- (int) nr->requested);
- }
-
- free(q_nick);
- free(q_passcode);
- free(q_password);
- free(q_email);
-
- return ret;
-}
-
-/*************************************************************************/
-
-/* Save the given NickCore into the database
- * Also save the access list and memo's for this user
- * Return 1 on success, 0 on failure
- * These tables are tagged and will be cleaned:
- * - anope_ns_core
- * - anope_ns_alias
- * - anope_ns_access
- * - anope_ms_info (serv='NICK')
- */
-int db_mysql_save_ns_core(NickCore * nc)
-{
- int ret;
- int i;
- char *q_display, *q_pass, *epass, *q_email, *q_greet, *q_url,
- *q_access, *q_sender, *q_text;
-
- q_display = db_mysql_quote(nc->display);
- q_pass = db_mysql_quote(nc->pass);
- q_email = db_mysql_quote(nc->email);
- q_greet = db_mysql_quote(nc->greet);
- q_url = db_mysql_quote(nc->url);
-
- epass = db_mysql_secure(q_pass);
- free(q_pass);
-
- /* Let's take care of the core itself */
- /* Update the existing records */
- ret = db_mysql_try("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, active = 1 "
- "WHERE display = '%s'",
- epass, q_email, q_greet, nc->icq, q_url, nc->flags,
- nc->language, nc->accesscount, nc->memos.memocount,
- nc->memos.memomax, nc->channelcount,
- q_display);
-
- /* Our previous UPDATE affected no rows, therefore this is a new record */
- if (ret && (mysql_affected_rows(mysql) == 0)) {
- ret = db_mysql_try("INSERT DELAYED INTO anope_ns_core "
- "(display, pass, email, greet, icq, url, flags, language, accesscount, memocount, memomax, channelcount, active) "
- "VALUES ('%s', %s, '%s', '%s', %d, '%s', %d, %d, %d, %d, %d, %d, %d, 1)",
- q_display, epass, q_email, q_greet, nc->icq, q_url,
- nc->flags, nc->language, nc->accesscount,
- nc->memos.memocount, nc->memos.memomax,
- nc->channelcount);
- }
-
- /* Now let's do the access */
- for (i = 0; ret && (i < nc->accesscount); i++) {
- q_access = db_mysql_quote(nc->access[i]);
-
- ret = db_mysql_try("UPDATE anope_ns_access "
- "SET access = '%s' "
- "WHERE display = '%s'",
- q_access, q_display);
-
- if (ret && (mysql_affected_rows(mysql) == 0)) {
- ret = db_mysql_try("INSERT DELAYED INTO anope_ns_access "
- "(display, access) "
- "VALUES ('%s','%s')",
- q_display, q_access);
- }
-
- free(q_access);
- }
-
- /* Memos */
- for (i = 0; ret && (i < nc->memos.memocount); i++) {
- q_sender = db_mysql_quote(nc->memos.memos[i].sender);
- q_text = db_mysql_quote(nc->memos.memos[i].text);
-
- ret = db_mysql_try("UPDATE anope_ms_info "
- "SET receiver = '%s', number = %d, flags = %d, time = %d, sender = '%s', text = '%s', active = 1 "
- "WHERE nm_id = %d AND serv = 'NICK'",
- q_display, nc->memos.memos[i].number,
- nc->memos.memos[i].flags,
- (int) nc->memos.memos[i].time, q_sender, q_text,
- nc->memos.memos[i].id);
-
- if (ret && (mysql_affected_rows(mysql) == 0)) {
- ret = db_mysql_try("INSERT INTO anope_ms_info "
- "(receiver, number, flags, time, sender, text, serv, active) "
- "VALUES ('%s', %d, %d, %d, '%s', '%s', 'NICK', 1)",
- q_display, nc->memos.memos[i].number,
- nc->memos.memos[i].flags,
- (int) nc->memos.memos[i].time, q_sender,
- q_text);
-
- /* This is to make sure we can UPDATE memos instead of TRUNCATE
- * the table each time and then INSERT them all again. Ideally
- * everything in core would have it's dbase-id stored, but that's
- * something for phase 3. -GD
- */
- if (ret)
- nc->memos.memos[i].id = mysql_insert_id(mysql);
- }
-
- free(q_sender);
- free(q_text);
- }
-
- free(q_display);
- free(epass);
- free(q_email);
- free(q_greet);
- free(q_url);
-
- return ret;
-}
-
-
-/*************************************************************************/
-
-/* Save the given NickAlias into the database
- * Return 1 on success, 0 on failure
- * These tables are tagged and will be cleaned:
- * - anope_ns_core
- * - anope_ns_alias
- * - anope_ns_access
- * - anope_ms_info (serv='NICK')
- */
-int db_mysql_save_ns_alias(NickAlias * na)
-{
- int ret;
- char *q_nick, *q_lastmask, *q_lastrname, *q_lastquit, *q_display;
-
- q_nick = db_mysql_quote(na->nick);
- q_lastmask = db_mysql_quote(na->last_usermask);
- q_lastrname = db_mysql_quote(na->last_realname);
- q_lastquit = db_mysql_quote(na->last_quit);
- q_display = db_mysql_quote(na->nc->display);
-
- ret = db_mysql_try("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'",
- q_lastmask, q_lastrname, q_lastquit,
- (int) na->time_registered, (int) na->last_seen,
- (int) na->status, q_display, q_nick);
-
- /* Our previous UPDATE affected no rows, therefore this is a new record */
- if (ret && (mysql_affected_rows(mysql) == 0)) {
- ret = db_mysql_try("INSERT DELAYED 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)",
- q_nick, q_lastmask, q_lastrname, q_lastquit,
- (int) na->time_registered, (int) na->last_seen,
- (int) na->status, q_display);
- }
-
- free(q_nick);
- free(q_lastmask);
- free(q_lastrname);
- free(q_lastquit);
- free(q_display);
-
- return ret;
-}
-
-/*************************************************************************/
-
-/*
- * ChanServ Specific Secion
- */
-
-/*************************************************************************/
-
-/* Save the given ChannelInfo into the database
- * Also save the access list, levels, akicks, badwords, ttb, and memo's for this channel
- * Return 1 on success, 0 on failure
- * These tables are tagged and will be cleaned:
- * - anope_cs_info
- * - anope_cs_access
- * - anope_cs_levels
- * - anope_cs_akicks
- * - anope_cs_badwords
- * - anope_cs_ttb
- * - anope_ms_info (serv='CHAN')
- */
-int db_mysql_save_cs_info(ChannelInfo * ci)
-{
- int ret;
- int i;
- char *q_name;
- char *q_founder;
- char *q_successor;
- char *q_pass;
- char *e_pass;
- char *q_desc;
- char *q_url;
- char *q_email;
- char *q_lasttopic;
- char *q_lasttopicsetter;
- char *q_forbidby;
- char *q_forbidreason;
- char *q_mlock_key;
- char *q_mlock_flood;
- char *q_mlock_redirect;
- char *q_entrymsg;
- char *q_botnick;
- char *q_sender;
- char *q_text;
- char *q_accessdisp;
- char *q_akickdisp;
- char *q_akickreason;
- char *q_akickcreator;
- char *q_badwords;
-
- q_name = db_mysql_quote(ci->name);
- if (ci->founder) {
- q_founder = db_mysql_quote(ci->founder->display);
- } else {
- q_founder = db_mysql_quote("");
- }
- if (ci->successor) {
- q_successor = db_mysql_quote(ci->successor->display);
- } else {
- q_successor = db_mysql_quote("");
- }
- q_pass = db_mysql_quote(ci->founderpass);
- q_desc = db_mysql_quote(ci->desc);
- q_url = db_mysql_quote(ci->url);
- q_email = db_mysql_quote(ci->email);
- q_lasttopic = db_mysql_quote(ci->last_topic);
- q_lasttopicsetter = db_mysql_quote(ci->last_topic_setter);
- q_forbidby = db_mysql_quote(ci->forbidby);
- q_forbidreason = db_mysql_quote(ci->forbidreason);
- q_mlock_key = db_mysql_quote(ci->mlock_key);
- q_mlock_flood = db_mysql_quote(ci->mlock_flood);
- q_mlock_redirect = db_mysql_quote(ci->mlock_redirect);
- q_entrymsg = db_mysql_quote(ci->entry_message);
- if (ci->bi) {
- q_botnick = db_mysql_quote(ci->bi->nick);
- } else {
- q_botnick = db_mysql_quote("");
- }
-
- e_pass = db_mysql_secure(q_pass);
- free(q_pass);
-
- /* Let's take care of the core itself */
- ret = db_mysql_try("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, "
- " bwcount = %d, capsmin = %d, capspercent = %d, floodlines = %d, floodsecs = %d, repeattimes = %d, active = 1 "
- "WHERE name = '%s'",
- q_founder, q_successor, e_pass, q_desc, q_url, q_email,
- (int) ci->time_registered, (int) ci->last_used,
- q_lasttopic, q_lasttopicsetter,
- (int) ci->last_topic_time, (int) ci->flags, q_forbidby,
- q_forbidreason, (int) ci->bantype,
- (int) ci->accesscount, (int) ci->akickcount,
- (int) ci->mlock_on, (int) ci->mlock_off,
- (int) ci->mlock_limit, q_mlock_key, q_mlock_flood,
- q_mlock_redirect, q_entrymsg, (int) ci->memos.memomax,
- q_botnick, (int) ci->botflags, (int) ci->bwcount,
- (int) ci->capsmin, (int) ci->capspercent,
- (int) ci->floodlines, (int) ci->floodsecs,
- (int) ci->repeattimes, q_name);
-
- /* Our previous UPDATE affected no rows, therefore this is a new record */
- if (ret && (mysql_affected_rows(mysql) == 0)) {
- ret = db_mysql_try("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)",
- q_name, q_founder, q_successor, e_pass, q_desc,
- q_url, q_email, (int) ci->time_registered,
- (int) ci->last_used, q_lasttopic,
- q_lasttopicsetter, (int) ci->last_topic_time,
- (int) ci->flags, q_forbidby, q_forbidreason,
- (int) ci->bantype, (int) ci->accesscount,
- (int) ci->akickcount, (int) ci->mlock_on,
- (int) ci->mlock_off, (int) ci->mlock_limit,
- q_mlock_key, q_mlock_flood, q_mlock_redirect,
- q_entrymsg, q_botnick, (int) ci->botflags,
- (int) ci->bwcount, (int) ci->capsmin,
- (int) ci->capspercent, (int) ci->floodlines,
- (int) ci->floodsecs, (int) ci->repeattimes);
- }
-
- /* Memos */
- for (i = 0; ret && (i < ci->memos.memocount); i++) {
- q_sender = db_mysql_quote(ci->memos.memos[i].sender);
- q_text = db_mysql_quote(ci->memos.memos[i].text);
-
- ret = db_mysql_try("UPDATE anope_ms_info "
- "SET receiver = '%s', number = %d, flags = %d, time = %d, sender = '%s', text = '%s', active = 1 "
- "WHERE nm_id = %d AND serv = 'CHAN'",
- q_name, ci->memos.memos[i].number,
- ci->memos.memos[i].flags,
- (int) ci->memos.memos[i].time, q_sender, q_text,
- ci->memos.memos[i].id);
-
- if (ret && (mysql_affected_rows(mysql) == 0)) {
- ret = db_mysql_try("INSERT INTO anope_ms_info "
- "(receiver, number,flags, time, sender, text, serv, active) "
- "VALUES ('%s', %d, %d, %d, '%s', '%s', 'CHAN', 1)",
- q_name, ci->memos.memos[i].number,
- ci->memos.memos[i].flags,
- (int) ci->memos.memos[i].time, q_sender,
- q_text);
-
- /* See comment at db_mysql_save_ns_core */
- if (ret)
- ci->memos.memos[i].id = mysql_insert_id(mysql);
- }
-
- free(q_sender);
- free(q_text);
- }
-
- /* Access */
- for (i = 0; ret && (i < ci->accesscount); i++) {
- if (ci->access[i].in_use) {
- q_accessdisp = db_mysql_quote(ci->access[i].nc->display);
-
- ret = db_mysql_try("UPDATE anope_cs_access "
- "SET in_use = %d, level = %d, last_seen = %d, active = 1 "
- "WHERE channel = '%s' AND display = '%s'",
- (int) ci->access[i].in_use,
- (int) ci->access[i].level,
- (int) ci->access[i].last_seen,
- q_name, q_accessdisp);
-
- if (ret && (mysql_affected_rows(mysql) == 0)) {
- ret = db_mysql_try("INSERT DELAYED INTO anope_cs_access "
- "(channel, display, in_use, level, last_seen, active) "
- "VALUES ('%s', '%s', %d, %d, %d, 1)",
- q_name, q_accessdisp,
- (int) ci->access[i].in_use,
- (int) ci->access[i].level,
- (int) ci->access[i].last_seen);
- }
-
- free(q_accessdisp);
- }
- }
-
- /* Levels */
- for (i = 0; ret && (i < CA_SIZE); i++) {
- ret = db_mysql_try("UPDATE anope_cs_levels "
- "SET level = %d, active = 1 "
- "WHERE channel = '%s' AND position = %d",
- (int) ci->levels[i], q_name, i);
-
- if (ret && (mysql_affected_rows(mysql) == 0)) {
- ret = db_mysql_try("INSERT DELAYED INTO anope_cs_levels "
- "(channel, position, level, active) "
- "VALUES ('%s', %d, %d, 1)",
- q_name, i, (int) ci->levels[i]);
- }
- }
-
- /* Akicks */
- for (i = 0; ret && (i < ci->akickcount); i++) {
- if (ci->akick[i].flags & AK_USED) {
- if (ci->akick[i].flags & AK_ISNICK)
- q_akickdisp = db_mysql_quote(ci->akick[i].u.nc->display);
- else
- q_akickdisp = db_mysql_quote(ci->akick[i].u.mask);
-
- q_akickreason = db_mysql_quote(ci->akick[i].reason);
- q_akickcreator = db_mysql_quote(ci->akick[i].creator);
- } else {
- q_akickdisp = "";
- q_akickreason = "";
- q_akickcreator = "";
- }
-
- ret = db_mysql_try("UPDATE anope_cs_akicks "
- "SET flags = %d, reason = '%s', creator = '%s', addtime = %d, active = 1 "
- "WHERE channel = '%s' AND dmask = '%s'",
- (int) ci->akick[i].flags, q_akickreason,
- q_akickcreator, (ci->akick[i].flags & AK_USED ?
- (int) ci->akick[i].addtime : 0),
- q_name, q_akickdisp);
-
- if (ret && (mysql_affected_rows(mysql) == 0)) {
- ret = db_mysql_try("INSERT DELAYED INTO anope_cs_akicks "
- "(channel, dmask, flags, reason, creator, addtime, active) "
- "VALUES ('%s', '%s', %d, '%s', '%s', %d, 1)",
- q_name, q_akickdisp, (int) ci->akick[i].flags,
- q_akickreason, q_akickcreator,
- (ci->akick[i].flags & AK_USED ?
- (int) ci->akick[i].addtime : 0));
- }
-
- if (ci->akick[i].flags & AK_USED) {
- free(q_akickdisp);
- free(q_akickreason);
- free(q_akickcreator);
- }
- }
-
- /* Bad Words */
- for (i = 0; ret && (i < ci->bwcount); i++) {
- if (ci->badwords[i].in_use) {
- q_badwords = db_mysql_quote(ci->badwords[i].word);
-
- ret = db_mysql_try("UPDATE anope_cs_badwords "
- "SET type = %d, active = 1 "
- "WHERE channel = '%s' AND word = '%s'",
- (int) ci->badwords[i].type, q_name,
- q_badwords);
-
- if (ret && (mysql_affected_rows(mysql) == 0)) {
- ret = db_mysql_try("INSERT DELAYED INTO anope_cs_badwords "
- "(channel, word, type, active) "
- "VALUES ('%s', '%s', %d, 1)",
- q_name, q_badwords,
- (int) ci->badwords[i].type);
- }
-
- free(q_badwords);
- }
- }
-
- /* TTB's */
- for (i = 0; ret && (i < TTB_SIZE); i++) {
- ret = db_mysql_try("UPDATE anope_cs_ttb "
- "SET value = %d, active = 1 "
- "WHERE channel = '%s' AND ttb_id = %d",
- ci->ttb[i], q_name, i);
-
- if (ret && (mysql_affected_rows(mysql) == 0)) {
- ret = db_mysql_try("INSERT DELAYED INTO anope_cs_ttb "
- "(channel, ttb_id, value, active) "
- "VALUES ('%s', %d, %d, 1)",
- q_name, i, ci->ttb[i]);
- }
- }
-
- free(q_name);
- free(q_founder);
- free(q_successor);
- free(e_pass);
- free(q_desc);
- free(q_url);
- free(q_email);
- free(q_lasttopic);
- free(q_lasttopicsetter);
- free(q_mlock_key);
- free(q_mlock_flood);
- free(q_mlock_redirect);
- free(q_entrymsg);
- free(q_botnick);
- free(q_forbidby);
- free(q_forbidreason);
-
- return ret;
-}
-
-/*************************************************************************/
-
-
-/*
- * OperServ Specific Section
- */
-
-/*************************************************************************/
-
-/* Save the OperServ database into MySQL
- * Return 1 on success, 0 on failure
- * These tables are tagged and will be cleaned:
- * - anope_os_akills
- * - anope_os_sglines
- * - anope_os_sqlines
- * - anope_os_szlines
- * These tables are emptied:
- * - anope_os_core
- */
-
-int db_mysql_save_os_db(unsigned int maxucnt, unsigned int maxutime,
- SList * ak, SList * sgl, SList * sql, SList * szl)
-{
- int ret;
- int i;
- Akill *akl;
- SXLine *sl;
- char *q_user;
- char *q_host;
- char *q_mask;
- char *q_by;
- char *q_reason;
-
-
- /* First save the core info */
- ret = db_mysql_try("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);
-
- /* Next save all AKILLs */
- for (i = 0; ret && (i < ak->count); i++) {
- akl = (Akill*)ak->list[i];
- q_user = db_mysql_quote(akl->user);
- q_host = db_mysql_quote(akl->host);
- q_by = db_mysql_quote(akl->by);
- q_reason = db_mysql_quote(akl->reason);
-
- ret = db_mysql_try("UPDATE anope_os_akills "
- "SET xby = '%s', reason = '%s', seton = %d, expire = %d, active = 1 "
- "WHERE user = '%s' AND host = '%s'",
- q_by, q_reason, (int) akl->seton,
- (int) akl->expires, q_user, q_host);
-
- if (ret && (mysql_affected_rows(mysql) == 0)) {
- ret = db_mysql_try("INSERT DELAYED INTO anope_os_akills "
- "(user, host, xby, reason, seton, expire, active) "
- "VALUES ('%s', '%s', '%s', '%s', %d, %d, 1)",
- q_user, q_host, q_by, q_reason,
- (int) akl->seton, (int) akl->expires);
- }
-
- free(q_user);
- free(q_host);
- free(q_by);
- free(q_reason);
- }
-
- /* Time to save the SGLINEs */
- for (i = 0; ret && (i < sgl->count); i++) {
- sl = (SXLine*)sgl->list[i];
- q_mask = db_mysql_quote(sl->mask);
- q_by = db_mysql_quote(sl->by);
- q_reason = db_mysql_quote(sl->reason);
-
- ret = db_mysql_try("UPDATE anope_os_sglines "
- "SET xby = '%s', reason = '%s', seton = %d, expire = %d, active = 1 "
- "WHERE mask = '%s'",
- q_by, q_reason, (int) sl->seton, (int) sl->expires,
- q_mask);
-
- if (ret && (mysql_affected_rows(mysql) == 0)) {
- ret = db_mysql_try("INSERT DELAYED INTO anope_os_sglines "
- "(mask, xby, reason, seton, expire, active) "
- "VALUES ('%s', '%s', '%s', %d, %d, 1)",
- q_mask, q_by, q_reason, (int) sl->seton,
- (int) sl->expires);
- }
-
- free(q_mask);
- free(q_by);
- free(q_reason);
- }
-
- /* Save the SQLINEs */
- for (i = 0; ret && (i < sql->count); i++) {
- sl = (SXLine*)sql->list[i];
-
- q_mask = db_mysql_quote(sl->mask);
- q_by = db_mysql_quote(sl->by);
- q_reason = db_mysql_quote(sl->reason);
-
- ret = db_mysql_try("UPDATE anope_os_sqlines "
- "SET xby = '%s', reason = '%s', seton = %d, expire = %d, active = 1 "
- "WHERE mask = '%s'",
- q_by, q_reason, (int) sl->seton, (int) sl->expires,
- q_mask);
-
- if (ret && (mysql_affected_rows(mysql) == 0)) {
- ret = db_mysql_try("INSERT DELAYED INTO anope_os_sqlines "
- "(mask, xby, reason, seton, expire, active) "
- "VALUES ('%s', '%s', '%s', %d, %d, 1)",
- q_mask, q_by, q_reason, (int) sl->seton,
- (int) sl->expires);
- }
-
- free(q_mask);
- free(q_by);
- free(q_reason);
- }
-
- /* Now save the SZLINEs */
- for (i = 0; ret && (i < szl->count); i++) {
- sl = (SXLine*)szl->list[i];
-
- q_mask = db_mysql_quote(sl->mask);
- q_by = db_mysql_quote(sl->by);
- q_reason = db_mysql_quote(sl->reason);
-
- ret = db_mysql_try("UPDATE anope_os_szlines "
- "SET xby = '%s', reason = '%s', seton = %d, expire = %d, active = 1 "
- "WHERE mask = '%s'",
- q_by, q_reason, (int) sl->seton, (int) sl->expires,
- q_mask);
-
- if (ret && (mysql_affected_rows(mysql) == 0)) {
- ret = db_mysql_try("INSERT DELAYED INTO anope_os_szlines "
- "(mask, xby, reason, seton, expire, active) "
- "VALUES ('%s', '%s', '%s', %d, %d, 1)",
- q_mask, q_by, q_reason, (int) sl->seton,
- (int) sl->expires);
- }
-
- free(q_mask);
- free(q_by);
- free(q_reason);
- }
-
- return ret;
-}
-
-/*************************************************************************/
-
-/* Save the given NewsItem
- * These tables are tagged and will be cleaned:
- * - anope_os_news
- */
-int db_mysql_save_news(NewsItem * ni)
-{
- int ret;
- char *q_text;
- char *q_who;
-
- q_text = db_mysql_quote(ni->text);
- q_who = db_mysql_quote(ni->who);
-
- ret = db_mysql_try("UPDATE anope_os_news "
- "SET ntext = '%s', who = '%s', active = 1 "
- "WHERE type = %d AND num = %d AND `time` = %d",
- q_text, q_who, ni->type, ni->num, (int) ni->time);
-
- if (ret && (mysql_affected_rows(mysql) == 0)) {
- ret = db_mysql_try("INSERT DELAYED INTO anope_os_news "
- "(type, num, ntext, who, `time`, active) "
- "VALUES (%d, %d, '%s', '%s', %d, 1)",
- ni->type, ni->num, q_text, q_who, (int) ni->time);
- }
-
- free(q_text);
- free(q_who);
-
- return ret;
-}
-
-/*************************************************************************/
-
-/* Save the given Exception
- * These tables are tagged and will be cleaned:
- * - anope_os_exceptions
- */
-
-int db_mysql_save_exceptions(Exception * e)
-{
- int ret;
- char *q_mask;
- char *q_who;
- char *q_reason;
-
- q_mask = db_mysql_quote(e->mask);
- q_who = db_mysql_quote(e->who);
- q_reason = db_mysql_quote(e->reason);
-
- ret = db_mysql_try("UPDATE anope_os_exceptions "
- "SET lim = %d, who = '%s', reason = '%s', `time` = %d, expires = %d, active = 1 "
- "WHERE mask = '%s'",
- e->limit, q_who, q_reason, (int) e->time,
- (int) e->expires, q_mask);
-
- if (ret && (mysql_affected_rows(mysql)) == 0) {
- ret = db_mysql_try("INSERT DELAYED INTO anope_os_exceptions "
- "(mask, lim, who, reason, `time`, expires, active) "
- "VALUES ('%s', %d, '%s', '%s', %d, %d, 1)",
- q_mask, e->limit, q_who, q_reason, (int) e->time,
- (int) e->expires);
- }
-
- free(q_mask);
- free(q_who);
- free(q_reason);
-
- return ret;
-}
-
-/*************************************************************************/
-
-
-/*
- * HostServ Specific Section
- */
-
-/*************************************************************************/
-
-/* Save the given HostCore
- * These tables are tagged and will be cleaned:
- * - anope_hs_core
- */
-
-int db_mysql_save_hs_core(HostCore * hc)
-{
- int ret;
- char *q_nick;
- char *q_ident;
- char *q_host;
- char *q_creator;
-
- q_nick = db_mysql_quote(hc->nick);
- q_ident = db_mysql_quote(hc->vIdent);
- q_host = db_mysql_quote(hc->vHost);
- q_creator = db_mysql_quote(hc->creator);
-
- ret = db_mysql_try("UPDATE anope_hs_core "
- "SET vident = '%s', vhost = '%s', creator = '%s', `time` = %d, active = 1 "
- "WHERE nick = '%s'",
- q_ident, q_host, q_creator, (int) hc->time, q_nick);
-
- if (ret && (mysql_affected_rows(mysql) == 0)) {
- ret = db_mysql_try("INSERT DELAYED INTO anope_hs_core "
- "(nick, vident, vhost, creator, `time`, active) "
- "VALUES ('%s', '%s', '%s', '%s', %d, 1)",
- q_nick, q_ident, q_host, q_creator,
- (int) hc->time);
- }
-
- free(q_nick);
- free(q_ident);
- free(q_host);
- free(q_creator);
-
- return ret;
-}
-
-/*************************************************************************/
-
-/*
- * BotServ Specific Section
- */
-
-/*************************************************************************/
-
-int db_mysql_save_bs_core(BotInfo * bi)
-{
- int ret;
- char *q_nick;
- char *q_user;
- char *q_host;
- char *q_real;
-
- q_nick = db_mysql_quote(bi->nick);
- q_user = db_mysql_quote(bi->user);
- q_host = db_mysql_quote(bi->host);
- q_real = db_mysql_quote(bi->real);
-
- ret = db_mysql_try("UPDATE anope_bs_core "
- "SET user = '%s', host = '%s', rname = '%s', flags = %d, created = %d, chancount = %d, active = 1 "
- "WHERE nick = '%s'",
- q_user, q_host, q_real, bi->flags, (int) bi->created,
- bi->chancount, q_nick);
-
- if (ret && (mysql_affected_rows(mysql) == 0)) {
- ret = db_mysql_try("INSERT DELAYED INTO anope_bs_core "
- "(nick, user, host, rname, flags, created, chancount, active) "
- "VALUES ('%s', '%s', '%s', '%s', %d, %d, %d, 1)",
- q_nick, q_user, q_host, q_real, bi->flags,
- (int) bi->created, bi->chancount);
- }
-
- free(q_nick);
- free(q_user);
- free(q_host);
- free(q_real);
-
- return ret;
-}
-
-/*************************************************************************/
-/*************************************************************************/
-
-/* Some loading code! */
-
-/*************************************************************************/
-/*************************************************************************/
-
-int db_mysql_load_bs_dbase(void)
-{
- int ret;
- BotInfo *bi;
-
- if (!do_mysql)
- return 0;
-
- ret = db_mysql_try("SELECT nick, user, host, rname, flags, created "
- "FROM anope_bs_core "
- "WHERE active = 1");
-
- if (!ret)
- return 0;
-
- mysql_res = mysql_use_result(mysql);
-
- while ((mysql_row = mysql_fetch_row(mysql_res))) {
- bi = new BotInfo(mysql_row[0]);
- bi->user = sstrdup(mysql_row[1]);
- bi->host = sstrdup(mysql_row[2]);
- bi->real = sstrdup(mysql_row[3]);
- bi->flags = strtol(mysql_row[4], (char **) NULL, 10);
- bi->created = strtol(mysql_row[5], (char **) NULL, 10);
- bi->chancount = strtol(mysql_row[6], (char **) NULL, 10);
- }
-
- mysql_free_result(mysql_res);
-
- return 1;
-}
-
-int db_mysql_load_hs_dbase(void)
-{
- int ret;
- int32 time;
-
- if (!do_mysql)
- return 0;
-
- ret = db_mysql_try("SELECT nick, vident, vhost, creator, `time` "
- "FROM anope_hs_core "
- "WHERE active = 1");
-
- if (!ret)
- return 0;
-
- mysql_res = mysql_use_result(mysql);
-
- while ((mysql_row = mysql_fetch_row(mysql_res))) {
- time = strtol(mysql_row[4], (char **) NULL, 10);
- addHostCore(mysql_row[0], mysql_row[1], mysql_row[2], mysql_row[3],
- time);
- }
-
- mysql_free_result(mysql_res);
-
- return 1;
-}
-
-int db_mysql_load_news(void)
-{
- int ret;
- int i;
-
- if (!do_mysql)
- return 0;
-
- ret = db_mysql_try("SELECT type, num, ntext, who, `time` "
- "FROM anope_os_news "
- "WHERE active = 1");
-
- if (!ret)
- return 0;
-
- mysql_res = mysql_store_result(mysql);
-
- nnews = mysql_num_rows(mysql_res);
- if (nnews < 8) /* 2^3 */
- news_size = 16; /* 2^4 */
- else if (nnews >= 16384) /* 2^14 */
- news_size = 32767; /* 2^15 - 1 */
- else
- news_size = 2 * nnews;
-
- news = (NewsItem*)scalloc(news_size, sizeof(*news));
-
- i = 0;
- while ((mysql_row = mysql_fetch_row(mysql_res))) {
- news[i].type = strtol(mysql_row[0], (char **) NULL, 10);
- news[i].num = strtol(mysql_row[1], (char **) NULL, 10);
- news[i].text = sstrdup(mysql_row[2]);
- snprintf(news[i].who, NICKMAX, "%s", mysql_row[3]);
- news[i].time = strtol(mysql_row[4], (char **) NULL, 10);
- i++;
- }
-
- mysql_free_result(mysql_res);
-
- return 1;
-}
-
-int db_mysql_load_exceptions(void)
-{
- int ret;
- int i;
-
- if (!do_mysql)
- return 0;
-
- ret = db_mysql_try("SELECT mask, lim, who, reason, `time`, expires "
- "FROM anope_os_exceptions "
- "WHERE active = 1");
-
- if (!ret)
- return 0;
-
- mysql_res = mysql_store_result(mysql);
- nexceptions = mysql_num_rows(mysql_res);
- exceptions = (Exception*)scalloc(nexceptions, sizeof(Exception));
-
- i = 0;
- while ((mysql_row = mysql_fetch_row(mysql_res))) {
- exceptions[i].mask = sstrdup(mysql_row[0]);
- exceptions[i].limit = strtol(mysql_row[1], (char **) NULL, 10);
- snprintf(exceptions[i].who, NICKMAX, "%s", mysql_row[2]);
- exceptions[i].reason = sstrdup(mysql_row[3]);
- exceptions[i].time = strtol(mysql_row[4], (char **) NULL, 10);
- exceptions[i].expires = strtol(mysql_row[5], (char **) NULL, 10);
- i++;
- }
-
- mysql_free_result(mysql_res);
-
- return 1;
-}
-
-int db_mysql_load_os_dbase(void)
-{
- int ret;
- Akill *ak;
- SXLine *sl;
- int akc, sglc, sqlc, szlc;
-
- if (!do_mysql)
- return 0;
-
- ret = db_mysql_try("SELECT maxusercnt, maxusertime, akills_count, sglines_count, sqlines_count, szlines_count "
- "FROM anope_os_core");
-
- if (!ret)
- return 0;
-
- mysql_res = mysql_use_result(mysql);
-
- if ((mysql_row = mysql_fetch_row(mysql_res))) {
- maxusercnt = strtol(mysql_row[0], (char **) NULL, 10);
- maxusertime = strtol(mysql_row[1], (char **) NULL, 10);
- /* I'm not too happy with the idea of storing thse counts in a field
- * instead of just using mysql_num_rows on the actual tables when
- * filling the data. For now this will do, but it's bound to give
- * problems sooner or later... (it probably does if you are looking
- * at this) -GD
- */
- akc = strtol(mysql_row[2], (char **) NULL, 10);
- sglc = strtol(mysql_row[3], (char **) NULL, 10);
- sqlc = strtol(mysql_row[4], (char **) NULL, 10);
- szlc = strtol(mysql_row[5], (char **) NULL, 10);
- } else {
- maxusercnt = 0;
- maxusertime = time(NULL);
- akc = 0;
- sglc = 0;
- sqlc = 0;
- szlc = 0;
- }
-
- mysql_free_result(mysql_res);
-
-
- /* Load the AKILLs */
-
- ret = db_mysql_try("SELECT user, host, xby, reason, seton, expire "
- "FROM anope_os_akills "
- "WHERE active = 1");
-
- if (!ret)
- return 0;
-
- mysql_res = mysql_use_result(mysql);
- slist_setcapacity(&akills, akc);
-
- while ((mysql_row = mysql_fetch_row(mysql_res))) {
- ak = (Akill*)scalloc(1, sizeof(Akill));
- 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 = strtol(mysql_row[4], (char **) NULL, 10);
- ak->expires = strtol(mysql_row[5], (char **) NULL, 10);
- slist_add(&akills, ak);
- }
-
- mysql_free_result(mysql_res);
-
-
- /* Load the SGLINEs */
-
- ret = db_mysql_try("SELECT mask, xby, reason, seton, expire "
- "FROM anope_os_sglines "
- "WHERE active = 1");
-
- if (!ret)
- return 0;
-
- mysql_res = mysql_use_result(mysql);
- slist_setcapacity(&sglines, sglc);
-
- while ((mysql_row = mysql_fetch_row(mysql_res))) {
- sl = (SXLine*)scalloc(1, sizeof(SXLine));
- sl->mask = sstrdup(mysql_row[0]);
- sl->by = sstrdup(mysql_row[1]);
- sl->reason = sstrdup(mysql_row[2]);
- sl->seton = strtol(mysql_row[3], (char **) NULL, 10);
- sl->expires = strtol(mysql_row[4], (char **) NULL, 10);
- slist_add(&sglines, sl);
- }
-
- mysql_free_result(mysql_res);
-
-
- /* Load the SQLINEs */
-
- ret = db_mysql_try("SELECT mask, xby, reason, seton, expire "
- "FROM anope_os_sqlines "
- "WHERE active = 1");
-
- if (!ret)
- return 0;
-
- mysql_res = mysql_use_result(mysql);
- slist_setcapacity(&sqlines, sqlc);
-
- while ((mysql_row = mysql_fetch_row(mysql_res))) {
- sl = (SXLine*)scalloc(1, sizeof(SXLine));
- sl->mask = sstrdup(mysql_row[0]);
- sl->by = sstrdup(mysql_row[1]);
- sl->reason = sstrdup(mysql_row[2]);
- sl->seton = strtol(mysql_row[3], (char **) NULL, 10);
- sl->expires = strtol(mysql_row[4], (char **) NULL, 10);
- slist_add(&sqlines, sl);
- }
-
- mysql_free_result(mysql_res);
-
-
- /* Load the SZLINEs */
-
- ret = db_mysql_try("SELECT mask, xby, reason, seton, expire "
- "FROM anope_os_szlines "
- "WHERE active = 1");
-
- if (!ret)
- return 0;
-
- mysql_res = mysql_use_result(mysql);
- slist_setcapacity(&szlines, szlc);
-
- while ((mysql_row = mysql_fetch_row(mysql_res))) {
- sl = (SXLine*)scalloc(1, sizeof(SXLine));
- sl->mask = sstrdup(mysql_row[0]);
- sl->by = sstrdup(mysql_row[1]);
- sl->reason = sstrdup(mysql_row[2]);
- sl->seton = strtol(mysql_row[3], (char **) NULL, 10);
- sl->expires = strtol(mysql_row[4], (char **) NULL, 10);
- slist_add(&szlines, sl);
- }
-
- mysql_free_result(mysql_res);
-
- return 1;
-}
-
-int db_mysql_load_cs_dbase(void)
-{
- int ret;
- char *q_name;
- ChannelInfo *ci;
- int i;
- MYSQL_RES *res;
- MYSQL_ROW row;
-
- if (!do_mysql)
- return 0;
-
- ret = db_mysql_try("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, bwcount, capsmin, capspercent, floodlines, "
- " floodsecs, repeattimes "
- "FROM anope_cs_info "
- "WHERE active = 1");
-
- if (!ret)
- return 0;
-
- /* I'd really like to use mysql_use_result here, but it'd tie up with
- * all the queries being run inside each iteration... -GD
- */
- mysql_res = mysql_store_result(mysql);
-
- while (ret && (mysql_row = mysql_fetch_row(mysql_res))) {
- ci = (ChannelInfo*)scalloc(1, sizeof(ChannelInfo));
-
- /* Name, founder, successor, password */
- snprintf(ci->name, CHANMAX, "%s", mysql_row[0]);
- ci->founder = findcore(mysql_row[1]);
- if (mysql_row[2] && *(mysql_row[2]))
- ci->successor = findcore(mysql_row[2]);
- else
- ci->successor = NULL;
- snprintf(ci->founderpass, PASSMAX, "%s", mysql_row[3]);
-
- /* Description, URL, email -- scalloc() initializes to 0/NULL */
- ci->desc = sstrdup(mysql_row[4]);
- if (mysql_row[5] && *(mysql_row[5]))
- ci->url = sstrdup(mysql_row[5]);
- if (mysql_row[6] && *(mysql_row[6]))
- ci->email = sstrdup(mysql_row[6]);
-
- /* Time registered, last used, last topic, last topic setter + time */
- ci->time_registered = strtol(mysql_row[7], (char **) NULL, 10);
- ci->last_used = strtol(mysql_row[8], (char **) NULL, 10);
- ci->last_topic = sstrdup(mysql_row[9]);
- snprintf(ci->last_topic_setter, NICKMAX, "%s", mysql_row[10]);
- ci->last_topic_time = strtol(mysql_row[11], (char **) NULL, 10);
-
- /* Flags, forbidden by, forbid reason, bantype
- * NOTE: CI_INHABIT will be disabled in flags!!
- */
- ci->flags =
- strtol(mysql_row[12], (char **) NULL, 10) & ~CI_INHABIT;
- ci->forbidby = sstrdup(mysql_row[13]);
- ci->forbidreason = sstrdup(mysql_row[14]);
- ci->bantype = strtol(mysql_row[15], (char **) NULL, 10);
-
- /* Accesscount, akickcount */
- ci->accesscount = strtol(mysql_row[16], (char **) NULL, 10);
- ci->akickcount = strtol(mysql_row[17], (char **) NULL, 10);
-
- /* Mlock: on, off, limit, key, flood, redirect */
- ci->mlock_on = strtol(mysql_row[18], (char **) NULL, 10);
- ci->mlock_off = strtol(mysql_row[19], (char **) NULL, 10);
- ci->mlock_limit = strtol(mysql_row[20], (char **) NULL, 10);
- ci->mlock_key = sstrdup(mysql_row[21]);
- ci->mlock_flood = sstrdup(mysql_row[22]);
- ci->mlock_redirect = sstrdup(mysql_row[23]);
-
- /* MemoMax, entrymessage, botinfo, botflags, badwordcount */
- ci->memos.memomax = strtol(mysql_row[25], (char **) NULL, 10);
- if (mysql_row[24] && *(mysql_row[24]))
- ci->entry_message = sstrdup(mysql_row[24]);
- ci->bi = findbot(mysql_row[26]);
- ci->botflags = strtol(mysql_row[27], (char **) NULL, 10);
- ci->bwcount = strtol(mysql_row[28], (char **) NULL, 10);
-
- /* Capsmin, capspercent, floodlines, floodsecs, repeattimes */
- ci->capsmin = strtol(mysql_row[29], (char **) NULL, 10);
- ci->capspercent = strtol(mysql_row[30], (char **) NULL, 10);
- ci->floodlines = strtol(mysql_row[31], (char **) NULL, 10);
- ci->floodsecs = strtol(mysql_row[32], (char **) NULL, 10);
- ci->repeattimes = strtol(mysql_row[33], (char **) NULL, 10);
-
-
- /* Get info from other tables; we'll need the channel name */
- q_name = db_mysql_quote(ci->name);
-
- /* Get the LEVELS list */
- ret = db_mysql_try("SELECT position, level "
- "FROM anope_cs_levels "
- "WHERE channel = '%s' AND active = 1",
- q_name);
-
- if (ret) {
- res = mysql_use_result(mysql);
- ci->levels = (int16*)scalloc(CA_SIZE, sizeof(*ci->levels));
- reset_levels(ci);
-
- while ((row = mysql_fetch_row(res))) {
- i = strtol(row[0], (char **) NULL, 10);
- ci->levels[i] = strtol(row[1], (char **) NULL, 10);
- }
-
- mysql_free_result(res);
- }
-
- /* Get the channel ACCESS list */
- if (ret && (ci->accesscount > 0)) {
- ci->access = (ChanAccess*)scalloc(ci->accesscount, sizeof(ChanAccess));
-
- ret = db_mysql_try("SELECT level, display, last_seen "
- "FROM anope_cs_access "
- "WHERE channel = '%s' AND in_use = 1 AND active = 1",
- q_name);
-
- if (ret) {
- res = mysql_store_result(mysql);
-
- i = 0;
- while ((row = mysql_fetch_row(res))) {
- ci->access[i].in_use = 1;
- ci->access[i].level = strtol(row[0], (char **) NULL, 10);
- ci->access[i].nc = findcore(row[1]);
- if (!(ci->access[i].nc))
- ci->access[i].in_use = 0;
- ci->access[i].last_seen =
- strtol(row[2], (char **) NULL, 10);
- i++;
- }
-
- mysql_free_result(res);
- }
- }
-
- /* Get the channel AKICK list */
- if (ret && (ci->akickcount > 0)) {
- ci->akick = (AutoKick*)scalloc(ci->akickcount, sizeof(AutoKick));
-
- ret = db_mysql_try("SELECT flags, dmask, reason, creator, addtime "
- "FROM anope_cs_akicks "
- "WHERE channel = '%s' AND active = 1 AND (flags & %d) <> 0",
- q_name, AK_USED);
-
- if (ret) {
- res = mysql_use_result(mysql);
-
- i = 0;
- while ((row = mysql_fetch_row(res))) {
- ci->akick[i].flags = strtol(row[0], (char **) NULL, 10);
- if (ci->akick[i].flags & AK_ISNICK) {
- ci->akick[i].u.nc = findcore(row[1]);
- if (!(ci->akick[i].u.nc))
- ci->akick[i].flags &= ~AK_USED;
- } else {
- ci->akick[i].u.mask = sstrdup(row[1]);
- }
- ci->akick[i].reason = sstrdup(row[2]);
- ci->akick[i].creator = sstrdup(row[3]);
- ci->akick[i].addtime = strtol(row[4], (char **) NULL, 10);
- i++;
- }
-
- mysql_free_result(res);
- }
- }
-
- if (ret) {
- /* Get the channel memos */
- ret = db_mysql_try("SELECT nm_id, number, flags, time, sender, text "
- "FROM anope_ms_info "
- "WHERE receiver = '%s' AND serv = 'CHAN' AND active = 1",
- q_name);
-
- if (ret) {
- res = mysql_store_result(mysql);
- ci->memos.memocount = mysql_num_rows(res);
-
- if (ci->memos.memocount > 0) {
- Memo *memos;
-
- memos = (Memo*)scalloc(ci->memos.memocount, sizeof(Memo));
- ci->memos.memos = memos;
-
- i = 0;
- while ((row = mysql_fetch_row(res))) {
- memos[i].id = strtol(row[0], (char **) NULL, 10);
- memos[i].number = strtol(row[1], (char **) NULL, 10);
- memos[i].flags = strtol(row[2], (char **) NULL, 10);
- memos[i].time = strtol(row[3], (char **) NULL, 10);
- snprintf(memos[i].sender, NICKMAX, "%s", row[4]);
- memos[i].text = sstrdup(row[5]);
- i++;
- }
- }
-
- mysql_free_result(res);
- }
- }
-
- /* Get the TTB data */
- if (ret) {
- ci->ttb = (int16*)scalloc(TTB_SIZE, sizeof(*ci->ttb));
-
- ret = db_mysql_try("SELECT ttb_id, value "
- "FROM anope_cs_ttb "
- "WHERE channel = '%s' AND active = 1",
- q_name);
-
- if (ret) {
- res = mysql_use_result(mysql);
-
- while ((row = mysql_fetch_row(res))) {
- i = strtol(row[0], (char **) NULL, 10);
- /* Should we do a sanity check on the value of i? -GD */
- ci->ttb[i] = strtol(row[1], (char **) NULL, 10);
- }
-
- mysql_free_result(res);
- }
- }
-
- /* Get the badwords */
- if (ret && (ci->bwcount > 0)) {
- ci->badwords = (BadWord*)scalloc(ci->bwcount, sizeof(BadWord));
-
- ret = db_mysql_try("SELECT word, type "
- "FROM anope_cs_badwords "
- "WHERE channel = '%s' AND active = 1",
- q_name);
-
- if (ret) {
- res = mysql_use_result(mysql);
-
- i = 0;
- while ((row = mysql_fetch_row(res))) {
- ci->badwords[i].in_use = 1;
- ci->badwords[i].word = sstrdup(row[0]);
- ci->badwords[i].type = strtol(row[1], (char **) NULL, 10);
- i++;
- }
-
- mysql_free_result(res);
- }
- }
-
- /* YAY! all done; free q_name and insert the channel */
- free(q_name);
- alpha_insert_chan(ci);
- }
-
- mysql_free_result(mysql_res);
-
- /* Check to be sure that all channels still have a founder. If not,
- * delete them. This code seems to be required in the old mysql code
- * so i'll leave it in just to be sure. I also wonder why they didn't
- * do that check up above immediately when it was known there was no
- * founder... -GD
- */
- for (i = 0; i < 256; i++) {
- ChannelInfo *next;
- for (ci = chanlists[i]; 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);
- }
- }
- }
-
- return ret;
-}
-
-int db_mysql_load_ns_req_dbase(void)
-{
- int ret;
- NickRequest *nr;
-
- if (!do_mysql)
- return 0;
-
- ret = db_mysql_try("SELECT nick, passcode, password, email, requested "
- "FROM anope_ns_request "
- "WHERE active = 1");
-
- if (ret) {
- mysql_res = mysql_use_result(mysql);
-
- while ((mysql_row = mysql_fetch_row(mysql_res))) {
- nr = (NickRequest*)scalloc(1, sizeof(NickRequest));
-
- nr->nick = sstrdup(mysql_row[0]);
- nr->passcode = sstrdup(mysql_row[1]);
- snprintf(nr->password, PASSMAX, "%s", mysql_row[2]);
- nr->email = sstrdup(mysql_row[3]);
- nr->requested = strtol(mysql_row[4], (char **) NULL, 10);
-
- insert_requestnick(nr);
- }
-
- mysql_free_result(mysql_res);
- }
-
- return ret;
-}
-
-int db_mysql_load_ns_dbase(void)
-{
- int ret;
- char *q_display;
- NickCore *nc;
- NickAlias *na;
- MYSQL_RES *res;
- MYSQL_ROW row;
- int i;
-
- if (!do_mysql)
- return 0;
-
- ret = db_mysql_try("SELECT display, pass, email, icq, url, flags, language, accesscount, memocount, memomax, channelcount, greet "
- "FROM anope_ns_core "
- "WHERE active = 1");
-
- if (!ret)
- return 0;
-
- /* I'd really like to use mysql_use_result here, but it'd tie up with
- * all the queries being run inside each iteration... -GD
- */
- mysql_res = mysql_store_result(mysql);
-
- while (ret && (mysql_row = mysql_fetch_row(mysql_res))) {
- nc = (NickCore*)scalloc(1, sizeof(NickCore));
-
- /* Display, password, email, ICQ, URL, flags */
- nc->display = sstrdup(mysql_row[0]);
- snprintf(nc->pass, PASSMAX, "%s", mysql_row[1]);
- nc->email = sstrdup(mysql_row[2]);
- nc->icq = strtol(mysql_row[3], (char **) NULL, 10);
- nc->url = sstrdup(mysql_row[4]);
- nc->flags = strtol(mysql_row[5], (char **) NULL, 10);
-
- /* Language, accesscount, memocount, memomax */
- nc->language = strtol(mysql_row[6], (char **) NULL, 10);
- nc->accesscount = strtol(mysql_row[7], (char **) NULL, 10);
- nc->memos.memocount = strtol(mysql_row[8], (char **) NULL, 10);
- nc->memos.memomax = strtol(mysql_row[9], (char **) NULL, 10);
-
- /* Channelcount, greet */
- nc->channelcount = strtol(mysql_row[10], (char **) NULL, 10);
- if (mysql_row[12] && *(mysql_row[12]))
- nc->greet = sstrdup(mysql_row[12]);
-
- /* Don't allow KILL_IMMED if the config doesn't allow it */
- if (!NSAllowKillImmed)
- nc->flags &= ~NI_KILL_IMMED;
-
- /* Check if the current user is important enough to be added to
- * services admin or services oper lists
- */
- if (nc->flags & NI_SERVICES_ADMIN)
- slist_add(&servadmins, nc);
- if (nc->flags & NI_SERVICES_OPER)
- slist_add(&servopers, nc);
-
- /* Unset the SERVICES_ROOT flag; we will set it again later if this
- * user is really a services root (checked per NickAlias) -GD
- */
- nc->flags &= ~NI_SERVICES_ROOT;
-
- /* Get info from other tables; we'll need the display */
- q_display = db_mysql_quote(nc->display);
-
- /* Fill the accesslist */
- if (ret && (nc->accesscount > 0)) {
- nc->access = (char**)scalloc(nc->accesscount, sizeof(char *));
-
- ret = db_mysql_try("SELECT access "
- "FROM anope_ns_access "
- "WHERE display = '%s' AND active = 1",
- q_display);
-
- if (ret) {
- res = mysql_use_result(mysql);
-
- i = 0;
- while ((row = mysql_fetch_row(res))) {
- if (row[0] && *(row[0])) {
- nc->access[i] = sstrdup(row[0]);
- i++;
- }
- }
-
- mysql_free_result(res);
- }
- }
-
- /* Load the memos */
- if (ret && (nc->memos.memocount > 0)) {
- nc->memos.memos = (Memo*)scalloc(nc->memos.memocount, sizeof(Memo));
-
- ret = db_mysql_try("SELECT nm_id, number, flags, time, sender, text "
- "FROM anope_ms_info "
- "WHERE receiver = '%s' AND active = 1 AND serv = 'NICK' "
- "ORDER BY number ASC",
- q_display);
-
- if (ret) {
- res = mysql_use_result(mysql);
-
- i = 0;
- while ((row = mysql_fetch_row(res))) {
- nc->memos.memos[i].id = strtol(row[0], (char **) NULL, 10);
- nc->memos.memos[i].number = strtol(row[1], (char **) NULL, 10);
- nc->memos.memos[i].flags = strtol(row[2], (char **) NULL, 10);
- nc->memos.memos[i].time = strtol(row[3], (char **) NULL, 10);
- snprintf(nc->memos.memos[i].sender, NICKMAX, "%s", row[4]);
- nc->memos.memos[i].text = sstrdup(row[5]);
-
- i++;
- }
-
- mysql_free_result(res);
- }
- }
-
- /* Done with the core; insert it */
- insert_core(nc);
- }
-
- mysql_free_result(mysql_res);
-
- if (!ret)
- return 0;
-
- /* Load the nickaliases */
- ret = db_mysql_try("SELECT nick, display, time_registered, last_seen, status, last_usermask, last_realname, last_quit "
- "FROM anope_ns_alias "
- "WHERE active = 1");
-
- if (!ret)
- return 0;
-
- mysql_res = mysql_use_result(mysql);
-
- while ((mysql_row = mysql_fetch_row(mysql_res))) {
- /* First make sure this NickAlias has a NickCore; else we don't even
- * bother adding it to the aliases at all...
- */
- NickCore *nc;
-
- if (!(nc = findcore(mysql_row[1])))
- continue;
-
- na = (NickAlias*)scalloc(1, sizeof(NickAlias));
-
- /* nick, time_registered, last_seen, status
- * NOTE: remove NS_TEMPORARY from status on load
- */
- na->nick = sstrdup(mysql_row[0]);
- na->nc = nc;
- na->time_registered = strtol(mysql_row[2], (char **) NULL, 10);
- na->last_seen = strtol(mysql_row[3], (char **) NULL, 10);
- na->status =
- strtol(mysql_row[4], (char **) NULL, 10) & ~NS_TEMPORARY;
-
- /* last_usermask, last_realname, last_quit */
- na->last_usermask = sstrdup(mysql_row[5]);
- na->last_realname = sstrdup(mysql_row[6]);
- na->last_quit = sstrdup(mysql_row[7]);
-
- /* Assign to the nickcore aliases */
- slist_add(&na->nc->aliases, na);
-
- /* Check if this user is a services root */
- for (i = 0; i < RootNumber; i++) {
- if (stricmp(ServicesRoots[i], na->nick) == 0)
- na->nc->flags |= NI_SERVICES_ROOT;
- }
-
- /* Last, but not least: insert the alias! */
- alpha_insert_alias(na);
- }
-
- mysql_free_result(mysql_res);
-
- return ret;
-}
-
-/* get random mysql number for the generator */
-unsigned int mysql_rand(void)
-{
- unsigned int num = 0;
-
- if (!do_mysql)
- return 0;
-
- db_mysql_try("SELECT RAND()");
-
- mysql_res = mysql_store_result(mysql);
-
- if (!(mysql_row = mysql_fetch_row(mysql_res))) {
- mysql_free_result(mysql_res);
- return 0;
- }
-
- num = UserKey3 * strtol(mysql_row[0], (char **) NULL, 10);
-
- mysql_free_result(mysql_res);
-
- return num;
-}
diff --git a/src/news.c b/src/news.c
index 3fffee433..0d0cc2518 100644
--- a/src/news.c
+++ b/src/news.c
@@ -232,37 +232,6 @@ void save_news()
#undef SAFE
-void save_rdb_news()
-{
-#ifdef USE_RDB
- int i;
- NewsItem *ni;
-
- if (!rdb_open())
- return;
-
- if (rdb_tag_table("anope_os_news") == 0) {
- alog("Unable to tag table 'anope_os_news' - News RDB save failed.");
- return;
- }
-
- for (i = 0; i < nnews; i++) {
- ni = &news[i];
- if (rdb_save_news(ni) == 0) {
- alog("Unable to save NewsItem %d - News RDB save failed.", ni->num);
- return;
- }
- }
-
- if (rdb_clean_table("anope_os_news") == 0) {
- alog("Unable to clean table 'anope_os_news' - News RDB save failed.");
- return;
- }
-
- rdb_close();
-#endif
-}
-
/*************************************************************************/
/***************************** News display ******************************/
/*************************************************************************/
diff --git a/src/nickserv.c b/src/nickserv.c
index 695bd86e8..efb803393 100644
--- a/src/nickserv.c
+++ b/src/nickserv.c
@@ -751,113 +751,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;
-
- if (rdb_tag_table("anope_ns_core") == 0) {
- alog("Unable to tag 'anope_ns_core' - NickServ RDB save failed.");
- rdb_close();
- return;
- }
- if (rdb_tag_table("anope_ns_alias") == 0) {
- alog("Unable to tag 'anope_ns_alias' - NickServ RDB save failed.");
- rdb_close();
- return;
- }
- if (rdb_tag_table("anope_ns_access") == 0) {
- alog("Unable to tag 'anope_ns_access' - NickServ RDB save failed.");
- rdb_close();
- return;
- }
- if (rdb_tag_table_where("anope_ms_info", "serv='NICK'") == 0) {
- alog("Unable to tag 'anope_ms_info' - NickServ RDB save failed.");
- rdb_close();
- return;
- }
-
- for (i = 0; i < 1024; i++) {
- for (nc = nclists[i]; nc; nc = nc->next) {
- if (rdb_save_ns_core(nc) == 0) {
- alog("Unable to save NickCore for '%s' - NickServ RDB save failed.", nc->display);
- rdb_close();
- return;
- }
- } /* for (nc) */
- } /* for (i) */
-
- for (i = 0; i < 1024; i++) {
- for (na = nalists[i]; na; na = na->next) {
- if (rdb_save_ns_alias(na) == 0) {
- alog("Unable to save NickAlias for '%s' - NickServ RDB save failed.", na->nick);
- rdb_close();
- return;
- }
- } /* for (na) */
- } /* for (i) */
-
- if (rdb_clean_table("anope_ns_core") == 0) {
- alog("Unable to clean table 'anope_ns_core' - NickServ RDB save failed.");
- rdb_close();
- return;
- }
- if (rdb_clean_table("anope_ns_alias") == 0) {
- alog("Unable to clean table 'anope_ns_alias' - NickServ RDB save failed.");
- rdb_close();
- return;
- }
- if (rdb_clean_table("anope_ns_access") == 0) {
- alog("Unable to clean table 'anope_ns_access' - NickServ RDB save failed.");
- rdb_close();
- return;
- }
- if (rdb_clean_table_where("anope_ms_info", "serv='NICK'") == 0)
- alog("Unable to clean table 'anope_ms_info' - NickServ RDB save failed.");
-
- rdb_close();
-#endif
-}
-
-void save_ns_req_rdb_dbase(void)
-{
-#ifdef USE_RDB
- int i;
- NickRequest *nr;
-
- if (!rdb_open())
- return;
-
- if (rdb_tag_table("anope_ns_request") == 0) {
- alog("Unable to tag table 'anope_ns_request' - NickServ Request RDB save failed.");
- rdb_close();
- return;
- }
-
- for (i = 0; i < 1024; i++) {
- for (nr = nrlists[i]; nr; nr = nr->next) {
- if (rdb_save_ns_req(nr) == 0) {
- /* Something went wrong - abort saving */
- alog("Unable to save NickRequest (nick '%s') - NickServ Request RDB save failed.", nr->nick);
- rdb_close();
- return;
- }
- }
- }
-
- if (rdb_clean_table("anope_ns_request") == 0)
- alog("Unable to clean table 'anope_ns_request' - NickServ Request RDB save failed.");
-
- rdb_close();
-#endif
-
-}
-
/*************************************************************************/
/* Check whether a user is on the access list of the nick they're using If
@@ -1303,19 +1196,6 @@ 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()) {
- if (rdb_ns_set_display(newdisplay, nc->display) == 0) {
- alog("Unable to update display for %s - Nick Display RDB update failed.", nc->display);
- }
- rdb_close();
- }
-#endif
-
/* Remove the core from the list */
if (nc->next)
nc->next->prev = nc->prev;
@@ -1340,10 +1220,6 @@ void change_core_display(NickCore * nc, char *newdisplay)
static int delcore(NickCore * nc)
{
int i;
-#ifdef USE_RDB
- static char clause[128];
- char *q_display;
-#endif
/* (Hopefully complete) cleanup */
cs_remove_nick(nc);
os_remove_nick(nc);
@@ -1359,30 +1235,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()) {
- q_display = rdb_quote(nc->display);
- snprintf(clause, sizeof(clause), "display='%s'", q_display);
- if (rdb_scrub_table("anope_ns_access", clause) == 0)
- alog("Unable to scrub table 'anope_ns_access' - RDB update failed.");
- else if (rdb_scrub_table("anope_ns_core", clause) == 0)
- alog("Unable to scrub table 'anope_ns_core' - RDB update failed.");
- else if (rdb_scrub_table("anope_cs_access", clause) == 0)
- alog("Unable to scrub table 'anope_cs_access' - RDB update failed.");
- else {
- /* 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'", q_display);
- if (rdb_scrub_table("anope_ms_info", clause) == 0)
- alog("Unable to scrub table 'anope_ms_info' - RDB update failed.");
- }
- rdb_close();
- free(q_display);
- }
-#endif
-
/* Now we can safely free it. */
free(nc->display);
@@ -1447,10 +1299,6 @@ int delnickrequest(NickRequest * nr)
int delnick(NickAlias * na)
{
-#ifdef USE_RDB
- static char clause[128];
- char *q_nick;
-#endif
/* First thing to do: remove any timeout belonging to the nick we're deleting */
clean_ns_timeouts(na);
@@ -1490,18 +1338,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()) {
- q_nick = rdb_quote(na->nick);
- snprintf(clause, sizeof(clause), "nick='%s'", q_nick);
- if (rdb_scrub_table("anope_ns_alias", clause) == 0)
- alog("Unable to scrub table 'anope_ns_alias' - RDB update failed");
- rdb_close();
- free(q_nick);
- }
-#endif
-
free(na->nick);
if (na->last_usermask)
free(na->last_usermask);
diff --git a/src/operserv.c b/src/operserv.c
index 50e3e078c..c39790418 100644
--- a/src/operserv.c
+++ b/src/operserv.c
@@ -497,71 +497,6 @@ void save_os_dbase(void)
/*************************************************************************/
-void save_os_rdb_dbase(void)
-{
-#ifdef USE_RDB
- if (!rdb_open())
- return;
-
- if (rdb_tag_table("anope_os_akills") == 0) {
- alog("Unable to tag table 'anope_os_akills' - OperServ RDB save failed.");
- rdb_close();
- return;
- }
- if (rdb_tag_table("anope_os_sglines") == 0) {
- alog("Unable to tag table 'anope_os_sglines' - OperServ RDB save failed.");
- rdb_close();
- return;
- }
- if (rdb_tag_table("anope_os_sqlines") == 0) {
- alog("Unable to tag table 'anope_os_sqlines' - OperServ RDB save failed.");
- rdb_close();
- return;
- }
- if (rdb_tag_table("anope_os_szlines") == 0) {
- alog("Unable to tag table 'anope_os_szlines' - OperServ RDB save failed.");
- rdb_close();
- return;
- }
- /* We empty anope_os_core as required */
- if (rdb_empty_table("anope_os_core") == 0) {
- alog("Unable to empty table 'anope_os_core' - OperServ RDB save failed");
- rdb_close();
- return;
- }
-
- if (rdb_save_os_db
- (maxusercnt, maxusertime, &akills, &sglines, &sqlines,
- &szlines) == 0) {
- alog("Unable to save OperServ data - OperServ RDB save failed");
- rdb_close();
- return;
- }
-
- if (rdb_clean_table("anope_os_akills") == 0) {
- alog("Unable to clean table 'anope_os_akills' - OperServ RDB save failed.");
- rdb_close();
- return;
- }
- if (rdb_clean_table("anope_os_sglines") == 0) {
- alog("Unable to clean table 'anope_os_sglines' - OperServ RDB save failed.");
- rdb_close();
- return;
- }
- if (rdb_clean_table("anope_os_sqlines") == 0) {
- alog("Unable to clean table 'anope_os_sqlines' - OperServ RDB save failed.");
- rdb_close();
- return;
- }
- if (rdb_clean_table("anope_os_szlines") == 0)
- alog("Unable to clean table 'anope_os_szlines' - OperServ RDB save failed.");
-
- rdb_close();
-#endif
-}
-
-/*************************************************************************/
-
/* Removes the nick structure from OperServ lists. */
void os_remove_nick(NickCore * nc)
diff --git a/src/rdb.c b/src/rdb.c
deleted file mode 100644
index 09b2aacf4..000000000
--- a/src/rdb.c
+++ /dev/null
@@ -1,496 +0,0 @@
-/* RDB functions.
- *
- * (C) 2003-2008 Anope Team
- * Contact us at info@anope.org
- *
- * Please read COPYING and README for further details.
- *
- * Based on the original code of Epona by Lara.
- * Based on the original code of Services by Andy Church.
- *
- * $Id$
- *
- */
-#include "services.h"
-
-/*************************************************************************/
-
-/* Initialize the current RDB database engine */
-int rdb_init()
-{
-
-#ifdef USE_MYSQL
- return db_mysql_init();
-#endif
-
- return 0;
-}
-
-/*************************************************************************/
-
-/* Check if RDB can be used to load/save data */
-int rdb_open()
-{
-
-#ifdef USE_MYSQL
- return db_mysql_open(); /* db_mysql_open(); */
-#endif
-
- return 0;
-}
-
-/*************************************************************************/
-
-/* Strictly spoken this should close the database. However, it's not too
- * efficient to close it every time after a write or so, so we just
- * pretend we closed it while in reality it's still open.
- */
-int rdb_close()
-{
-
-#ifdef USE_MYSQL
- return 1; /* db_mysql_close(); */
-#endif
-
- return 1;
-}
-
-/*************************************************************************/
-
-/* Quote the string to be used in inclused for the current RDB database */
-char *rdb_quote(char *str)
-{
-#ifdef USE_MYSQL
- return db_mysql_quote(str);
-#endif
-
- return sstrdup(str);
-}
-
-/*************************************************************************/
-
-/* Tag a table by setting the 'active' field to 0 for all rows. After an
- * update, all rows with active still 0 will be deleted; this is done to
- * easily delete old entries from the database.
- */
-int rdb_tag_table(const char* table)
-{
-#ifdef USE_MYSQL
- return db_mysql_try("UPDATE %s SET active = 0", table);
-#endif
-
- return 0;
-
-}
-
-/* Be sure to quote all user input in the clause! */
-int rdb_tag_table_where(const char* table, const char* clause)
-{
-#ifdef USE_MYSQL
- return db_mysql_try("UPDATE %s SET active = 0 WHERE %s", table,
- clause);
-#endif
-
- return 0;
-
-}
-
-/*************************************************************************/
-
-/* Empty an entire database table */
-int rdb_empty_table(const char* table)
-{
-#ifdef USE_MYSQL
- return db_mysql_try("TRUNCATE TABLE %s", table);
-#endif
-
- return 0;
-
-}
-
-/*************************************************************************/
-
-/* Clean up a table with 'dirty' records (active = 0) */
-int rdb_clean_table(const char* table)
-{
-#ifdef USE_MYSQL
- return db_mysql_try("DELETE FROM %s WHERE active = 0", table);
-#endif
-
- return 0;
-}
-
-/* Be sure to quote user input in the clause! */
-int rdb_clean_table_where(const char* table, const char* clause)
-{
-#ifdef USE_MYSQL
- return db_mysql_try("DELETE FROM %s WHERE active = 0 AND (%s)", table,
- clause);
-#endif
-
- return 0;
-}
-
-/*************************************************************************/
-
-/* Delete specific records from a table. The clause is MySQL syntax, and
- * should be all quoted up nicely in the calling code.
- */
-int rdb_scrub_table(const char* table, const char* clause)
-{
-#ifdef USE_MYSQL
- return db_mysql_try("DELETE FROM %s WHERE %s", table, clause);
-#endif
-
- return 0;
-
-}
-
-/*************************************************************************/
-
-/* Execute a direct MySQL query. Do NOT forget to quote all user input!
- * NOTE: this ideally shouldn't be used, but that's probably a phase3 utopia
- */
-int rdb_direct_query(char *query)
-{
-
-#ifdef USE_MYSQL
- alog("Direct Query: %s", query);
- return db_mysql_query(query);
-#endif
-
- return 0;
-
-}
-
-/*************************************************************************/
-
-/* Update the needed tables when someone changes their display.
- * The original author didn't even like this (claimed it should be in
- * mysql.c), and i do agree muchly.
- */
-int rdb_ns_set_display(char *newnick, char *oldnick)
-{
- int ret = 0;
- char *q_newnick;
- char *q_oldnick;
-
- q_newnick = rdb_quote(newnick);
- q_oldnick = rdb_quote(oldnick);
-
-#ifdef USE_MYSQL
- /* Change the display on NS_CORE */
- ret =
- db_mysql_try
- ("UPDATE anope_ns_core SET display = '%s' WHERE display = '%s'",
- q_newnick, q_oldnick);
-
- /* Change the display on NS_ALIAS for all grouped nicks */
- if (ret)
- ret =
- db_mysql_try
- ("UPDATE anope_ns_alias SET display='%s' WHERE display='%s'",
- q_newnick, q_oldnick);
-
- /* Change the display on ChanServ ACCESS list */
- if (ret)
- ret =
- db_mysql_try
- ("UPDATE anope_cs_access SET display='%s' WHERE display='%s'",
- q_newnick, q_oldnick);
-
- /* Change the display on ChanServ AKICK list */
- if (ret)
- ret =
- db_mysql_try
- ("UPDATE anope_cs_akicks SET creator='%s' WHERE creator='%s'",
- q_newnick, q_oldnick);
-
- /* Change the display on MemoServ sent memos -- is it required? */
- if (ret)
- ret =
- db_mysql_try
- ("UPDATE anope_ms_info SET sender='%s' WHERE sender='%s'",
- q_newnick, q_oldnick);
-
- /* Change the display on MemoServ received memos -- is it required? */
- if (ret)
- ret =
- db_mysql_try
- ("UPDATE anope_ms_info SET receiver='%s' WHERE receiver='%s'",
- q_newnick, q_oldnick);
-
- /* Change the akills set on the person's nick */
- if (ret)
- ret =
- db_mysql_try
- ("UPDATE anope_cs_akicks SET dmask='%s' WHERE dmask='%s' AND flags & %d",
- q_newnick, q_oldnick, AK_ISNICK);
-
- /* Change the display on NickServ ACCESS list */
- if (ret)
- ret =
- db_mysql_try
- ("UPDATE anope_ns_access SET display='%s' WHERE display='%s'",
- q_newnick, q_oldnick);
-
- /* No need to update anope_cs_info here as it is updated when we
- * save the database.
- *
- * anope_hs_core is per nick, not per display; a changed display
- * won't change anything there
- */
-
-#endif
-
- free(q_newnick);
- free(q_oldnick);
-
- return ret;
-}
-
-/*************************************************************************/
-
-int rdb_save_ns_core(NickCore * nc)
-{
-
-#ifdef USE_MYSQL
- return db_mysql_save_ns_core(nc);
-#endif
-
- return 0;
-}
-
-/*************************************************************************/
-
-int rdb_save_ns_alias(NickAlias * na)
-{
-
-#ifdef USE_MYSQL
- return db_mysql_save_ns_alias(na);
-#endif
-
- return 0;
-}
-
-/*************************************************************************/
-
-int rdb_save_ns_req(NickRequest * nr)
-{
-
-#ifdef USE_MYSQL
- return db_mysql_save_ns_req(nr);
-#endif
-
- return 0;
-}
-
-/*************************************************************************/
-
-int rdb_save_cs_info(ChannelInfo * ci)
-{
-
-#ifdef USE_MYSQL
- return db_mysql_save_cs_info(ci);
-#endif
-
- return 0;
-}
-
-/*************************************************************************/
-
-int rdb_save_bs_core(BotInfo * bi)
-{
-
-#ifdef USE_MYSQL
- return db_mysql_save_bs_core(bi);
-#endif
-
- return 0;
-}
-
-/*************************************************************************/
-
-int rdb_save_hs_core(HostCore * hc)
-{
-
-#ifdef USE_MYSQL
- return db_mysql_save_hs_core(hc);
-#endif
-
- return 0;
-}
-
-/*************************************************************************/
-
-int rdb_save_os_db(unsigned int maxucnt, unsigned int maxutime,
- SList * ak, SList * sgl, SList * sql, SList * szl)
-{
-
-#ifdef USE_MYSQL
- return db_mysql_save_os_db(maxusercnt, maxusertime, ak, sgl, sql, szl);
-#endif
-
- return 0;
-}
-
-/*************************************************************************/
-
-int rdb_save_news(NewsItem * ni)
-{
-
-#ifdef USE_MYSQL
- return db_mysql_save_news(ni);
-#endif
-
- return 0;
-}
-
-/*************************************************************************/
-
-int rdb_load_bs_dbase(void)
-{
-
-#ifdef USE_MYSQL
- return db_mysql_load_bs_dbase();
-#endif
-
- return 0;
-}
-
-/*************************************************************************/
-
-int rdb_load_hs_dbase(void)
-{
-
-#ifdef USE_MYSQL
- return db_mysql_load_hs_dbase();
-#endif
-
- return 0;
-}
-
-/*************************************************************************/
-
-int rdb_load_ns_dbase(void)
-{
-
-#ifdef USE_MYSQL
- return db_mysql_load_ns_dbase();
-#endif
-
- return 0;
-}
-
-/*************************************************************************/
-
-int rdb_load_news(void)
-{
-
-#ifdef USE_MYSQL
- return db_mysql_load_news();
-#endif
-
- return 0;
-}
-
-/*************************************************************************/
-
-int rdb_load_exceptions(void)
-{
-
-#ifdef USE_MYSQL
- return db_mysql_load_exceptions();
-#endif
-
- return 0;
-}
-
-/*************************************************************************/
-
-int rdb_load_cs_dbase(void)
-{
-
-#ifdef USE_MYSQL
- return db_mysql_load_cs_dbase();
-#endif
-
- return 0;
-}
-
-/*************************************************************************/
-
-int rdb_load_os_dbase(void)
-{
-
-#ifdef USE_MYSQL
- return db_mysql_load_os_dbase();
-#endif
-
- return 0;
-}
-
-/*************************************************************************/
-
-int rdb_load_ns_req_dbase(void)
-{
-
-#ifdef USE_MYSQL
- return db_mysql_load_ns_req_dbase();
-#endif
-
- return 0;
-}
-
-/*************************************************************************/
-
-#define LOAD_DBASE(num, name, func) {\
- if (!func) {\
- alog("RDB unable to load %s database (%d/8) !!!", name, num);\
- return 0;\
- }\
- if (debug)\
- alog("debug: RDB Loaded %s DataBase (%d/8)", name, num);\
-}
-
-int rdb_load_dbases(void)
-{
- LOAD_DBASE(1, "NickServ", rdb_load_ns_dbase());
-
- if (s_HostServ) {
- LOAD_DBASE(2, "HostServ", rdb_load_hs_dbase());
- }
-
- if (s_BotServ) {
- LOAD_DBASE(3, "BotServ", rdb_load_bs_dbase());
- }
-
- LOAD_DBASE(4, "ChanServ", rdb_load_cs_dbase());
- LOAD_DBASE(5, "OperServ", rdb_load_os_dbase());
- LOAD_DBASE(6, "News", rdb_load_news());
- LOAD_DBASE(7, "Exception", rdb_load_exceptions());
-
- if (PreNickDBName) {
- LOAD_DBASE(8, "PreNick", rdb_load_ns_req_dbase());
- } else if (debug) {
- alog("debug: RDB No need to load PreNickDB (8/8)");
- }
-
- alog("RDB: All DataBases loaded.");
-
- return 0;
-}
-
-/*************************************************************************/
-
-int rdb_save_exceptions(Exception * e)
-{
-
-#ifdef USE_MYSQL
- return db_mysql_save_exceptions(e);
-#endif
-
- return 0;
-}
-
-/* EOF */
diff --git a/src/sessions.c b/src/sessions.c
index b0fee9b0c..11a802d74 100644
--- a/src/sessions.c
+++ b/src/sessions.c
@@ -475,35 +475,6 @@ void save_exceptions()
#undef SAFE
/*************************************************************************/
-
-void save_rdb_exceptions()
-{
-#ifdef USE_RDB
- int i;
- Exception *e;
-
- if (!rdb_open())
- return;
- if (rdb_tag_table("anope_os_exceptions") == 0) {
- alog("Unable to tag table 'anope_os_exceptions' - Exception RDB save failed.");
- return;
- }
- for (i = 0; i < nexceptions; i++) {
- e = &exceptions[i];
- if (rdb_save_exceptions(e) == 0) {
- alog("Unable to save Exception '%s' - Exception RDB save failed.", e->mask);
- return;
- }
- }
- if (rdb_clean_table("anope_os_exceptions") == 0) {
- alog("Unable to clean table 'anope_os_exceptions' - Exception RDB save failed.");
- return;
- }
- rdb_close();
-#endif
-}
-
-/*************************************************************************/
/************************ Exception Manipulation *************************/
/*************************************************************************/