mirror of
https://github.com/anope/anope.git
synced 2026-06-25 05:56:38 +02:00
BUILD : 1.7.4 (295) BUGS : none NOTES : Rolling back previous commit.
git-svn-id: svn://svn.anope.org/anope/trunk@295 31f1291d-b8d6-0310-a050-a5561fc1590b git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@184 5417fbe8-f217-4b02-8779-1006273d7864
This commit is contained in:
parent
a090c812cf
commit
3422f4a798
+90
-1
@@ -16,7 +16,6 @@
|
||||
#define EXTERN_H
|
||||
|
||||
#include "slist.h"
|
||||
#include "rdb.h"
|
||||
|
||||
#define E extern
|
||||
|
||||
@@ -43,6 +42,7 @@ E void botmsgs(User *u, BotInfo *bi, char *buf);
|
||||
E void botchanmsgs(User *u, ChannelInfo *ci, char *buf);
|
||||
E void load_bs_dbase(void);
|
||||
E void save_bs_dbase(void);
|
||||
E void save_bs_rdb_dbase(void);
|
||||
|
||||
E BotInfo *makebot(char *nick);
|
||||
E BotInfo *findbot(char *nick);
|
||||
@@ -101,6 +101,7 @@ E void cs_init(void);
|
||||
E void chanserv(User * u, char *buf);
|
||||
E void load_cs_dbase(void);
|
||||
E void save_cs_dbase(void);
|
||||
E void save_cs_rdb_dbase(void);
|
||||
E void expire_chans(void);
|
||||
E void cs_remove_nick(const NickCore * nc);
|
||||
E void cs_remove_bot(const BotInfo * bi);
|
||||
@@ -228,6 +229,7 @@ E char *desc_HostServ;
|
||||
E char *s_HostServ;
|
||||
E void load_hs_dbase(void);
|
||||
E void save_hs_dbase(void);
|
||||
E void save_hs_rdb_dbase(void);
|
||||
E int do_on_id(User * u);
|
||||
E void delHostCore(char *nick);
|
||||
E void hostserv(User * u, char *buf);
|
||||
@@ -420,6 +422,50 @@ E char *ExceptionDBName;
|
||||
E char *SessionLimitDetailsLoc;
|
||||
E char *SessionLimitExceeded;
|
||||
|
||||
#ifdef USE_RDB
|
||||
E int rdb_init();
|
||||
E int rdb_open();
|
||||
E int rdb_close();
|
||||
E int rdb_tag_table(char *table);
|
||||
E int rdb_tag_table(char *table);
|
||||
E int rdb_clear_table(char *table);
|
||||
E int rdb_scrub_table(char *table, char *clause);
|
||||
E int rdb_direct_query(char *query);
|
||||
E int rdb_ns_set_display(char *newnick, char *oldnick);
|
||||
E int rdb_cs_set_founder(char *channel, char *founder);
|
||||
E int rdb_cs_deluser(char *nick);
|
||||
E int rdb_cs_delchan(ChannelInfo * ci);
|
||||
E void rdb_save_ns_core(NickCore * nc);
|
||||
E void rdb_save_ns_alias(NickAlias * na);
|
||||
E void rdb_save_ns_req(NickRequest * nr);
|
||||
E void rdb_save_cs_info(ChannelInfo * ci);
|
||||
E void rdb_save_bs_core(BotInfo * bi);
|
||||
E void rdb_save_bs_rdb_core(BotInfo * bi);
|
||||
E void rdb_save_hs_core(HostCore * hc);
|
||||
E void rdb_save_os_db(unsigned int maxucnt, unsigned int maxutime,
|
||||
SList * ak, SList * sgl, SList * sql, SList * szl,
|
||||
HostCache * hc);
|
||||
E void rdb_save_news(NewsItem * ni);
|
||||
E void rdb_save_exceptions(Exception * e);
|
||||
E void rdb_load_bs_dbase(void);
|
||||
E void rdb_load_hs_dbase(void);
|
||||
E void rdb_load_ns_dbase(void);
|
||||
E void rdb_load_dbases(void);
|
||||
#endif
|
||||
|
||||
#ifdef USE_MYSQL
|
||||
E char *MysqlHost;
|
||||
E char *MysqlUser;
|
||||
E char *MysqlPass;
|
||||
E char *MysqlName;
|
||||
E int MysqlPort;
|
||||
E char *MysqlSock;
|
||||
E char *MysqlSecure;
|
||||
E int MysqlRetries;
|
||||
E int MysqlRetryGap;
|
||||
E int UseRDB;
|
||||
#endif
|
||||
|
||||
E int read_config(int reload);
|
||||
|
||||
E int DefConLevel;
|
||||
@@ -504,6 +550,10 @@ E int nofork;
|
||||
E int forceload;
|
||||
E int noexpire;
|
||||
|
||||
#ifdef USE_RDB
|
||||
E int do_mysql;
|
||||
#endif
|
||||
|
||||
E int is44;
|
||||
|
||||
E int quitting;
|
||||
@@ -573,6 +623,7 @@ E NewsItem *news;
|
||||
E void get_news_stats(long *nrec, long *memuse);
|
||||
E void load_news(void);
|
||||
E void save_news(void);
|
||||
E void save_rdb_news(void);
|
||||
E void display_news(User * u, int16 type);
|
||||
E int do_logonnews(User * u);
|
||||
E int do_opernews(User * u);
|
||||
@@ -600,6 +651,8 @@ E void load_ns_dbase(void);
|
||||
E void load_ns_req_db(void);
|
||||
E void save_ns_dbase(void);
|
||||
E void save_ns_req_dbase(void);
|
||||
E void save_ns_rdb_dbase(void);
|
||||
E void save_ns_req_rdb_dbase(void);
|
||||
E int validate_user(User * u);
|
||||
E void cancel_user(User * u);
|
||||
E int nick_identified(User * u);
|
||||
@@ -635,6 +688,7 @@ E void operserv(User *u, char *buf);
|
||||
E void os_init(void);
|
||||
E void load_os_dbase(void);
|
||||
E void save_os_dbase(void);
|
||||
E void save_os_rdb_dbase(void);
|
||||
|
||||
E void os_remove_nick(NickCore *nc);
|
||||
E int is_services_root(User *u);
|
||||
@@ -768,6 +822,7 @@ E void del_session(const char *host);
|
||||
|
||||
E void load_exceptions(void);
|
||||
E void save_exceptions(void);
|
||||
E void save_rdb_exceptions(void);
|
||||
E int do_exception(User *u);
|
||||
E void expire_exceptions(void);
|
||||
|
||||
@@ -829,8 +884,42 @@ E void split_usermask(const char *mask, char **nick, char **user,
|
||||
char **host);
|
||||
E char *create_mask(User * u);
|
||||
|
||||
#ifdef USE_MYSQL
|
||||
/**** mysql.c ****/
|
||||
E MYSQL *mysql;
|
||||
E MYSQL_RES *mysql_res;
|
||||
E MYSQL_FIELD *mysql_fields;
|
||||
E MYSQL_ROW mysql_row;
|
||||
|
||||
E int db_mysql_init();
|
||||
E int db_mysql_open();
|
||||
E int db_mysql_close();
|
||||
E int db_mysql_query(char *sql);
|
||||
E char *db_mysql_quote(char *sql);
|
||||
E void db_mysql_save_ns_core(NickCore * nc);
|
||||
E void db_mysql_save_ns_alias(NickAlias * na);
|
||||
E void db_mysql_save_ns_req(NickRequest * nr);
|
||||
E void db_mysql_save_cs_info(ChannelInfo * ci);
|
||||
E void db_mysql_save_os_db(unsigned int maxucnt, unsigned int maxutime,
|
||||
SList * ak, SList * sgl, SList * sql,
|
||||
SList * szl, HostCache * hc);
|
||||
E void db_mysql_save_news(NewsItem * ni);
|
||||
E void db_mysql_save_exceptions(Exception * e);
|
||||
E void db_mysql_save_hs_core(HostCore * hc);
|
||||
E void db_mysql_save_bs_core(BotInfo * bi);
|
||||
E void db_mysql_load_bs_dbase(void);
|
||||
E void db_mysql_load_hs_dbase(void);
|
||||
E void db_mysql_load_ns_dbase(void);
|
||||
E void db_mysql_load_ns_req_dbase(void);
|
||||
E void db_mysql_load_cs_dbase(void);
|
||||
E void db_mysql_load_os_dbase(void);
|
||||
E void db_mysql_load_exceptions(void);
|
||||
E void db_mysql_load_news(void);
|
||||
#endif
|
||||
|
||||
#ifdef USE_ENCRYPTION
|
||||
extern int encrypt_in_place(char *buf, int size);
|
||||
#endif
|
||||
|
||||
|
||||
#endif /* EXTERN_H */
|
||||
|
||||
+1
-1
@@ -58,7 +58,7 @@
|
||||
# define MYSQL_WARNING 2
|
||||
# define MYSQL_ERROR 4
|
||||
|
||||
#include <mysql.h>
|
||||
#include "mysql.h"
|
||||
#include "errmsg.h"
|
||||
#endif
|
||||
|
||||
|
||||
+22
-9
@@ -722,6 +722,28 @@ void save_bs_dbase(void)
|
||||
|
||||
/*************************************************************************/
|
||||
|
||||
void save_bs_rdb_dbase(void)
|
||||
{
|
||||
#ifdef USE_RDB
|
||||
int i;
|
||||
BotInfo *bi;
|
||||
|
||||
if (!rdb_open())
|
||||
return;
|
||||
|
||||
rdb_clear_table("anope_bs_core");
|
||||
|
||||
for (i = 0; i < 256; i++) {
|
||||
for (bi = botlists[i]; bi; bi = bi->next) {
|
||||
rdb_save_bs_core(bi);
|
||||
}
|
||||
}
|
||||
rdb_close();
|
||||
#endif
|
||||
}
|
||||
|
||||
/*************************************************************************/
|
||||
|
||||
/* Inserts a bot in the bot list. I can't be much explicit mh? */
|
||||
|
||||
static void insert_bot(BotInfo * bi)
|
||||
@@ -778,7 +800,6 @@ static void change_bot_nick(BotInfo * bi, char *newnick)
|
||||
static int delbot(BotInfo * bi)
|
||||
{
|
||||
cs_remove_bot(bi);
|
||||
rdb_bs_del_bot(bi);
|
||||
|
||||
if (bi->next)
|
||||
bi->next->prev = bi->prev;
|
||||
@@ -826,7 +847,6 @@ static void unassign(User * u, ChannelInfo * ci)
|
||||
u->nick);
|
||||
}
|
||||
ci->bi->chancount--;
|
||||
rdb_bs_change_bot_chancount(ci->bi);
|
||||
ci->bi = NULL;
|
||||
}
|
||||
|
||||
@@ -1371,8 +1391,6 @@ static int do_bot(User * u)
|
||||
bi->real = sstrdup(real);
|
||||
bi->created = time(NULL);
|
||||
bi->chancount = 0;
|
||||
|
||||
rdb_bs_add_bot(bi);
|
||||
|
||||
/* We check whether user with this nick is online, and kill it if so */
|
||||
EnforceQlinedNick(nick, s_BotServ);
|
||||
@@ -1499,8 +1517,6 @@ static int do_bot(User * u)
|
||||
/* We check whether user with this nick is online, and kill it if so */
|
||||
EnforceQlinedNick(nick, s_BotServ);
|
||||
}
|
||||
|
||||
rdb_bs_change_bot(bi, nick, user, host ,real);
|
||||
|
||||
if (strcmp(nick, bi->nick))
|
||||
change_bot_nick(bi, nick);
|
||||
@@ -1637,7 +1653,6 @@ static int do_assign(User * u)
|
||||
unassign(u, ci);
|
||||
ci->bi = bi;
|
||||
bi->chancount++;
|
||||
rdb_bs_change_bot_chancount(bi);
|
||||
if (ci->c && ci->c->usercount >= BSMinUsers) {
|
||||
bot_join(ci);
|
||||
}
|
||||
@@ -1906,11 +1921,9 @@ static int do_set(User * u)
|
||||
if ((bi = findbot(chan))) {
|
||||
if (!stricmp(value, "ON")) {
|
||||
bi->flags |= BI_PRIVATE;
|
||||
rdb_bs_change_bot_flags(bi);
|
||||
notice_lang(s_BotServ, u, BOT_SET_PRIVATE_ON, bi->nick);
|
||||
} else if (!stricmp(value, "OFF")) {
|
||||
bi->flags &= ~BI_PRIVATE;
|
||||
rdb_bs_change_bot_flags(bi);
|
||||
notice_lang(s_BotServ, u, BOT_SET_PRIVATE_OFF, bi->nick);
|
||||
} else {
|
||||
syntax_error(s_BotServ, u, "SET PRIVATE",
|
||||
|
||||
+47
-3
@@ -1288,6 +1288,35 @@ void save_cs_dbase(void)
|
||||
|
||||
/*************************************************************************/
|
||||
|
||||
void save_cs_rdb_dbase(void)
|
||||
{
|
||||
#ifdef USE_RDB
|
||||
int i;
|
||||
ChannelInfo *ci;
|
||||
|
||||
if (!rdb_open())
|
||||
return;
|
||||
|
||||
rdb_tag_table("anope_cs_info");
|
||||
rdb_scrub_table("anope_ms_info", "serv='CHAN'");
|
||||
rdb_clear_table("anope_cs_access");
|
||||
rdb_clear_table("anope_cs_levels");
|
||||
rdb_clear_table("anope_cs_akicks");
|
||||
rdb_clear_table("anope_cs_badwords");
|
||||
|
||||
for (i = 0; i < 256; i++) {
|
||||
for (ci = chanlists[i]; ci; ci = ci->next) {
|
||||
rdb_save_cs_info(ci);
|
||||
} /* for (chanlists[i]) */
|
||||
} /* for (i) */
|
||||
|
||||
rdb_scrub_table("anope_cs_info", "active='0'");
|
||||
rdb_close();
|
||||
#endif
|
||||
}
|
||||
|
||||
/*************************************************************************/
|
||||
|
||||
/* Check the current modes on a channel; if they conflict with a mode lock,
|
||||
* fix them. */
|
||||
|
||||
@@ -1922,6 +1951,12 @@ void cs_remove_nick(const NickCore * nc)
|
||||
ci->founder = nc2;
|
||||
ci->successor = NULL;
|
||||
nc2->channelcount++;
|
||||
#ifdef USE_RDB
|
||||
if (rdb_open()) {
|
||||
rdb_cs_set_founder(ci->name, nc2->display);
|
||||
rdb_close();
|
||||
}
|
||||
#endif
|
||||
}
|
||||
} else {
|
||||
alog("%s: Deleting channel %s owned by deleted nick %s", s_ChanServ, ci->name, nc->display);
|
||||
@@ -1966,6 +2001,12 @@ void cs_remove_nick(const NickCore * nc)
|
||||
}
|
||||
}
|
||||
}
|
||||
#ifdef USE_RDB
|
||||
if (rdb_open()) {
|
||||
rdb_cs_deluser(nc->display);
|
||||
rdb_close();
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
/*************************************************************************/
|
||||
@@ -2094,6 +2135,12 @@ int delchan(ChannelInfo * ci)
|
||||
}
|
||||
ci->c->ci = NULL;
|
||||
}
|
||||
#ifdef USE_RDB
|
||||
if (rdb_open()) {
|
||||
rdb_cs_delchan(ci);
|
||||
rdb_close();
|
||||
}
|
||||
#endif
|
||||
if (ci->next)
|
||||
ci->next->prev = ci->prev;
|
||||
if (ci->prev)
|
||||
@@ -3841,7 +3888,6 @@ static int access_del(User * u, ChanAccess * access, int *perm, int uacc)
|
||||
(*perm)++;
|
||||
return 0;
|
||||
}
|
||||
rdb_cs_del_access(access);
|
||||
access->nc = NULL;
|
||||
access->in_use = 0;
|
||||
return 1;
|
||||
@@ -3977,7 +4023,6 @@ static int do_access(User * u)
|
||||
return MOD_CONT;
|
||||
}
|
||||
access->level = level;
|
||||
rdb_cs_add_access(ci, access);
|
||||
alog("%s: %s!%s@%s (level %d) set access level %d to %s (group %s) on channel %s", s_ChanServ, u->nick, u->username, GetHost(u), ulev, access->level, na->nick, nc->display, ci->name);
|
||||
notice_lang(s_ChanServ, u, CHAN_ACCESS_LEVEL_CHANGED,
|
||||
access->nc->display, chan, level);
|
||||
@@ -4007,7 +4052,6 @@ static int do_access(User * u)
|
||||
access->in_use = 1;
|
||||
access->level = level;
|
||||
access->last_seen = 0;
|
||||
rdb_cs_add_access(ci, access);
|
||||
|
||||
alog("%s: %s!%s@%s (level %d) set access level %d to %s (group %s) on channel %s", s_ChanServ, u->nick, u->username, GetHost(u), ulev, access->level, na->nick, nc->display, ci->name);
|
||||
notice_lang(s_ChanServ, u, CHAN_ACCESS_ADDED, nc->display,
|
||||
|
||||
@@ -297,6 +297,7 @@ char *MysqlSecure;
|
||||
char *MysqlSock;
|
||||
int MysqlRetries = 0;
|
||||
int MysqlRetryGap = 0;
|
||||
int UseRDB = 0;
|
||||
|
||||
int DefConLevel;
|
||||
int DefCon1;
|
||||
@@ -491,6 +492,7 @@ 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}}},
|
||||
|
||||
@@ -443,11 +443,25 @@ int listOut(User * u)
|
||||
/*************************************************************************/
|
||||
void delHostCore(char *nick)
|
||||
{
|
||||
#ifdef USE_RDB
|
||||
static char clause[128];
|
||||
#endif
|
||||
HostCore *tmp;
|
||||
boolean found = false;
|
||||
tmp = findHostCore(head, nick, &found);
|
||||
if (found) {
|
||||
head = deleteHostCore(head, tmp);
|
||||
|
||||
#ifdef USE_RDB
|
||||
/* Reflect this change in the database right away. */
|
||||
if (rdb_open()) {
|
||||
|
||||
snprintf(clause, sizeof(clause), "nick='%s'", nick);
|
||||
rdb_scrub_table("anope_hs_core", clause);
|
||||
rdb_close();
|
||||
}
|
||||
#endif
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
@@ -609,6 +623,25 @@ void save_hs_dbase(void)
|
||||
|
||||
#undef SAFE
|
||||
|
||||
void save_hs_rdb_dbase(void)
|
||||
{
|
||||
#ifdef USE_RDB
|
||||
HostCore *current;
|
||||
|
||||
if (!rdb_open())
|
||||
return;
|
||||
|
||||
rdb_clear_table("anope_hs_core");
|
||||
|
||||
current = head;
|
||||
while (current != NULL) {
|
||||
rdb_save_hs_core(current);
|
||||
current = current->next;
|
||||
}
|
||||
rdb_close();
|
||||
#endif
|
||||
}
|
||||
|
||||
/*************************************************************************/
|
||||
/* End of Load/Save Functions */
|
||||
/*************************************************************************/
|
||||
|
||||
+28
-6
@@ -607,11 +607,6 @@ int init(int ac, char **av)
|
||||
lang_init();
|
||||
if (debug)
|
||||
alog("debug: Loaded languages");
|
||||
|
||||
/* Initialize remote database support */
|
||||
rdb_init();
|
||||
if (debug)
|
||||
alog("debug: Loaded remote databases");
|
||||
|
||||
/* Initialize subservices */
|
||||
ns_init();
|
||||
@@ -622,6 +617,10 @@ int init(int ac, char **av)
|
||||
hostserv_init();
|
||||
helpserv_init();
|
||||
|
||||
#ifdef USE_RDB
|
||||
rdb_init();
|
||||
#endif
|
||||
|
||||
/* Initialize proxy detection */
|
||||
#ifdef USE_THREADS
|
||||
if (ProxyDetect && !proxy_init()) {
|
||||
@@ -644,6 +643,12 @@ int init(int ac, char **av)
|
||||
#endif
|
||||
|
||||
/* Load up databases */
|
||||
#ifdef USE_RDB
|
||||
if (UseRDB)
|
||||
rdb_load_dbases();
|
||||
/* Need a better way to handle this -dane */
|
||||
if (!UseRDB) {
|
||||
#endif
|
||||
if (!skeleton) {
|
||||
load_ns_dbase();
|
||||
if (debug)
|
||||
@@ -677,8 +682,25 @@ int init(int ac, char **av)
|
||||
if (debug)
|
||||
alog("debug: Loaded PreNick database (9/9)");
|
||||
}
|
||||
#ifdef USE_RDB
|
||||
}
|
||||
#endif
|
||||
alog("Databases loaded");
|
||||
save_databases();
|
||||
|
||||
/* 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
|
||||
/* Make myself known to myself in the serverlist */
|
||||
me_server = new_server(NULL, ServerName, ServerDesc, SERVER_ISME);
|
||||
|
||||
|
||||
+35
-1
@@ -48,6 +48,7 @@ int is44 = 0; /* -is44 */
|
||||
#endif
|
||||
|
||||
#ifdef USE_RDB
|
||||
int do_mysql = 0; /* use mysql ? */
|
||||
#endif
|
||||
|
||||
/* Set to 1 if we are to quit */
|
||||
@@ -153,6 +154,40 @@ void save_databases(void)
|
||||
save_news();
|
||||
waiting = -18;
|
||||
save_exceptions();
|
||||
|
||||
#ifdef USE_RDB
|
||||
if (do_mysql) {
|
||||
if (debug)
|
||||
alog("debug: Saving RDB databases");
|
||||
waiting = -10;
|
||||
if (!skeleton) {
|
||||
waiting = -11;
|
||||
save_ns_rdb_dbase();
|
||||
waiting = -12;
|
||||
save_cs_rdb_dbase();
|
||||
if (PreNickDBName) {
|
||||
save_ns_req_rdb_dbase();
|
||||
waiting = -13;
|
||||
}
|
||||
/* Temporary fix to avoid unwanted timeouts... */
|
||||
send_cmd(ServerName, "PONG %s", ServerName);
|
||||
if (s_BotServ) {
|
||||
waiting = -14;
|
||||
save_bs_rdb_dbase();
|
||||
}
|
||||
if (s_HostServ) {
|
||||
waiting = -15;
|
||||
save_hs_rdb_dbase();
|
||||
}
|
||||
waiting = -16;
|
||||
save_os_rdb_dbase();
|
||||
waiting = -17;
|
||||
save_rdb_news();
|
||||
waiting = -18;
|
||||
save_rdb_exceptions();
|
||||
}
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
/*************************************************************************/
|
||||
@@ -197,7 +232,6 @@ void do_restart_services(void)
|
||||
|
||||
static void services_shutdown(void)
|
||||
{
|
||||
rdb_end();
|
||||
if (!quitmsg)
|
||||
quitmsg = "Terminating, reason unknown";
|
||||
alog("%s", quitmsg);
|
||||
|
||||
+1581
-188
File diff suppressed because it is too large
Load Diff
+19
@@ -238,6 +238,25 @@ void save_news()
|
||||
|
||||
#undef SAFE
|
||||
|
||||
void save_rdb_news()
|
||||
{
|
||||
#ifdef USE_RDB
|
||||
int i;
|
||||
NewsItem *ni;
|
||||
|
||||
if (!rdb_open())
|
||||
return;
|
||||
|
||||
rdb_clear_table("anope_os_news");
|
||||
for (i = 0; i < nnews; i++) {
|
||||
ni = &news[i];
|
||||
rdb_save_news(ni);
|
||||
}
|
||||
|
||||
rdb_close();
|
||||
#endif
|
||||
}
|
||||
|
||||
/*************************************************************************/
|
||||
/***************************** News display ******************************/
|
||||
/*************************************************************************/
|
||||
|
||||
+112
@@ -972,6 +972,64 @@ void save_ns_req_dbase(void)
|
||||
|
||||
#undef SAFE
|
||||
|
||||
void save_ns_rdb_dbase(void)
|
||||
{
|
||||
#ifdef USE_RDB
|
||||
int i;
|
||||
NickAlias *na;
|
||||
NickCore *nc;
|
||||
|
||||
if (!rdb_open())
|
||||
return;
|
||||
|
||||
rdb_tag_table("anope_ns_core");
|
||||
rdb_tag_table("anope_ns_alias");
|
||||
rdb_scrub_table("anope_ms_info", "serv='NICK'");
|
||||
rdb_clear_table("anope_ns_access");
|
||||
|
||||
for (i = 0; i < 1024; i++) {
|
||||
for (nc = nclists[i]; nc; nc = nc->next) {
|
||||
rdb_save_ns_core(nc);
|
||||
|
||||
} /* for (nc) */
|
||||
} /* for (i) */
|
||||
|
||||
for (i = 0; i < 1024; i++) {
|
||||
for (na = nalists[i]; na; na = na->next) {
|
||||
rdb_save_ns_alias(na);
|
||||
|
||||
} /* for (na) */
|
||||
} /* for (i) */
|
||||
|
||||
rdb_scrub_table("anope_ns_core", "active='0'");
|
||||
rdb_scrub_table("anope_ns_alias", "active='0'");
|
||||
rdb_close();
|
||||
#endif
|
||||
}
|
||||
|
||||
void save_ns_req_rdb_dbase(void)
|
||||
{
|
||||
#ifdef USE_RDB
|
||||
int i;
|
||||
NickRequest *nr;
|
||||
|
||||
if (!rdb_open())
|
||||
return;
|
||||
|
||||
rdb_tag_table("anope_ns_request");
|
||||
|
||||
for (i = 0; i < 1024; i++) {
|
||||
for (nr = nrlists[i]; nr; nr = nr->next) {
|
||||
rdb_save_ns_req(nr);
|
||||
}
|
||||
}
|
||||
|
||||
rdb_scrub_table("anope_ns_request", "active='0'");
|
||||
rdb_close();
|
||||
#endif
|
||||
|
||||
}
|
||||
|
||||
/*************************************************************************/
|
||||
|
||||
/* Check whether a user is on the access list of the nick they're using If
|
||||
@@ -1379,6 +1437,17 @@ static void change_core_display(NickCore * nc, char *newdisplay)
|
||||
alog("%s: changing %s nickname group display to %s", s_NickServ,
|
||||
nc->display, newdisplay);
|
||||
|
||||
#ifdef USE_RDB
|
||||
/* Reflect this change in the database right away. This
|
||||
* ensures that we know how to deal with this "new" nick
|
||||
* on the next /OS UPDATE might need it on /NS DROP too...
|
||||
*/
|
||||
if (rdb_open()) {
|
||||
rdb_ns_set_display(newdisplay, nc->display);
|
||||
rdb_close();
|
||||
}
|
||||
#endif
|
||||
|
||||
/* Remove the core from the list */
|
||||
if (nc->next)
|
||||
nc->next->prev = nc->prev;
|
||||
@@ -1403,6 +1472,9 @@ static void change_core_display(NickCore * nc, char *newdisplay)
|
||||
static int delcore(NickCore * nc)
|
||||
{
|
||||
int i;
|
||||
#ifdef USE_RDB
|
||||
static char clause[128];
|
||||
#endif
|
||||
/* (Hopefully complete) cleanup */
|
||||
cs_remove_nick(nc);
|
||||
os_remove_nick(nc);
|
||||
@@ -1418,6 +1490,23 @@ static int delcore(NickCore * nc)
|
||||
/* Log .. */
|
||||
alog("%s: deleting nickname group %s", s_NickServ, nc->display);
|
||||
|
||||
#ifdef USE_RDB
|
||||
/* Reflect this change in the database right away. */
|
||||
if (rdb_open()) {
|
||||
|
||||
snprintf(clause, sizeof(clause), "display='%s'", nc->display);
|
||||
rdb_scrub_table("anope_ns_access", clause);
|
||||
rdb_scrub_table("anope_ns_core", clause);
|
||||
rdb_scrub_table("anope_cs_access", clause);
|
||||
/* I'm unsure how to clean up the OS ADMIN/OPER list on the db */
|
||||
/* I wish the "display" primary key would be the same on all tables */
|
||||
snprintf(clause, sizeof(clause), "receiver='%s' AND serv='NICK'",
|
||||
nc->display);
|
||||
rdb_scrub_table("anope_ms_info", clause);
|
||||
rdb_close();
|
||||
}
|
||||
#endif
|
||||
|
||||
/* Now we can safely free it. */
|
||||
free(nc->display);
|
||||
if (nc->pass)
|
||||
@@ -1486,6 +1575,9 @@ int delnickrequest(NickRequest * nr)
|
||||
|
||||
int delnick(NickAlias * na)
|
||||
{
|
||||
#ifdef USE_RDB
|
||||
static char clause[128];
|
||||
#endif
|
||||
/* First thing to do: remove any timeout belonging to the nick we're deleting */
|
||||
clean_ns_timeouts(na);
|
||||
|
||||
@@ -1529,6 +1621,16 @@ int delnick(NickAlias * na)
|
||||
else
|
||||
nalists[HASH(na->nick)] = na->next;
|
||||
|
||||
#ifdef USE_RDB
|
||||
/* Reflect this change in the database right away. */
|
||||
if (rdb_open()) {
|
||||
|
||||
snprintf(clause, sizeof(clause), "nick='%s'", na->nick);
|
||||
rdb_scrub_table("anope_ns_alias", clause);
|
||||
rdb_close();
|
||||
}
|
||||
#endif
|
||||
|
||||
free(na->nick);
|
||||
if (na->last_usermask)
|
||||
free(na->last_usermask);
|
||||
@@ -2213,6 +2315,16 @@ static int do_group(User * u)
|
||||
u->na = na;
|
||||
na->u = u;
|
||||
|
||||
#ifdef USE_RDB
|
||||
/* Is this really needed? Since this is a new alias it will get
|
||||
* its unique id on the next update, since it was previously
|
||||
* deleted by delnick. Must observe...
|
||||
*/
|
||||
if (rdb_open()) {
|
||||
rdb_save_ns_alias(na);
|
||||
rdb_close();
|
||||
}
|
||||
#endif
|
||||
alog("%s: %s!%s@%s makes %s join group of %s (%s) (e-mail: %s)", s_NickServ, u->nick, u->username, GetHost(u), u->nick, target->nick, target->nc->display, (target->nc->email ? target->nc->email : "none"));
|
||||
notice_lang(s_NickServ, u, NICK_GROUP_JOINED, target->nick);
|
||||
|
||||
|
||||
@@ -774,6 +774,19 @@ void save_os_dbase(void)
|
||||
|
||||
/*************************************************************************/
|
||||
|
||||
void save_os_rdb_dbase(void)
|
||||
{
|
||||
#ifdef USE_RDB
|
||||
if (!rdb_open())
|
||||
return;
|
||||
rdb_save_os_db(maxusercnt, maxusertime, &akills, &sglines, &sqlines,
|
||||
&szlines, hcache[0]);
|
||||
rdb_close();
|
||||
#endif
|
||||
}
|
||||
|
||||
/*************************************************************************/
|
||||
|
||||
/* Removes the nick structure from OperServ lists. */
|
||||
|
||||
void os_remove_nick(NickCore * nc)
|
||||
|
||||
@@ -13,66 +13,454 @@
|
||||
*/
|
||||
#include "services.h"
|
||||
|
||||
/*************************************************************************/
|
||||
|
||||
int rdb_init()
|
||||
{
|
||||
|
||||
#ifdef USE_MYSQL
|
||||
#define RDB_MYSQL(x) x
|
||||
#else
|
||||
#define RDB_MYSQL(x)
|
||||
return db_mysql_init();
|
||||
#endif
|
||||
|
||||
void rdb_init(void)
|
||||
{
|
||||
RDB_MYSQL(db_mysql_init());
|
||||
}
|
||||
|
||||
void rdb_end(void)
|
||||
/*************************************************************************/
|
||||
|
||||
int rdb_open()
|
||||
{
|
||||
RDB_MYSQL(db_mysql_end());
|
||||
|
||||
#ifdef USE_MYSQL
|
||||
return do_mysql; // db_mysql_open();
|
||||
#endif
|
||||
|
||||
}
|
||||
|
||||
/* BotServ */
|
||||
void rdb_bs_add_bot(BotInfo *bi)
|
||||
/*************************************************************************/
|
||||
|
||||
int rdb_close()
|
||||
{
|
||||
RDB_MYSQL(db_mysql_bs_add_bot(bi));
|
||||
|
||||
#ifdef USE_MYSQL
|
||||
return 1; // db_mysql_close();
|
||||
#endif
|
||||
|
||||
}
|
||||
|
||||
void rdb_bs_del_bot(BotInfo *bi)
|
||||
/*************************************************************************/
|
||||
|
||||
int rdb_tag_table(char *table)
|
||||
{
|
||||
RDB_MYSQL(db_mysql_bs_del_bot(bi));
|
||||
static char buf[1024];
|
||||
|
||||
#ifdef USE_MYSQL
|
||||
snprintf(buf, sizeof(buf), "UPDATE %s SET active='0'", table);
|
||||
return db_mysql_query(buf);
|
||||
#endif
|
||||
|
||||
return 0;
|
||||
|
||||
}
|
||||
|
||||
void rdb_bs_change_bot(BotInfo *bi, char *newnick, char *newuser, char *newhost, char *newreal)
|
||||
/*************************************************************************/
|
||||
|
||||
int rdb_clear_table(char *table)
|
||||
{
|
||||
RDB_MYSQL(db_mysql_bs_chg_bot(bi, newnick, newuser, newhost, newreal));
|
||||
static char buf[1024];
|
||||
|
||||
#ifdef USE_MYSQL
|
||||
snprintf(buf, sizeof(buf), "TRUNCATE TABLE %s", table);
|
||||
return db_mysql_query(buf);
|
||||
#endif
|
||||
|
||||
return 0;
|
||||
|
||||
}
|
||||
|
||||
void rdb_bs_change_bot_chancount(BotInfo *bi)
|
||||
/*************************************************************************/
|
||||
|
||||
int rdb_scrub_table(char *table, char *clause)
|
||||
{
|
||||
RDB_MYSQL(db_mysql_bs_chg_bot_chancount(bi));
|
||||
|
||||
static char buf[1024];
|
||||
|
||||
#ifdef USE_MYSQL
|
||||
snprintf(buf, sizeof(buf), "DELETE FROM %s WHERE %s", table, clause);
|
||||
return db_mysql_query(buf);
|
||||
#endif
|
||||
|
||||
return 0;
|
||||
|
||||
}
|
||||
|
||||
void rdb_bs_change_bot_flags(BotInfo *bi)
|
||||
/*************************************************************************/
|
||||
|
||||
int rdb_direct_query(char *query)
|
||||
{
|
||||
RDB_MYSQL(db_mysql_bs_chg_bot_flags(bi));
|
||||
|
||||
#ifdef USE_MYSQL
|
||||
alog("Direct Query: %s", query);
|
||||
return db_mysql_query(query);
|
||||
#endif
|
||||
|
||||
return 0;
|
||||
|
||||
}
|
||||
|
||||
void rdb_cs_add_access(ChannelInfo *ci, ChanAccess *access)
|
||||
/*************************************************************************/
|
||||
|
||||
/* I still don't really like doing it this way, it should really be done
|
||||
* inside mysql.c and not here. So I'll revisit this later
|
||||
*/
|
||||
int rdb_ns_set_display(char *newnick, char *oldnick)
|
||||
{
|
||||
RDB_MYSQL(db_mysql_cs_add_access(ci, access));
|
||||
static char buf[1024];
|
||||
|
||||
#ifdef USE_MYSQL
|
||||
/* Change the display on NS_CORE */
|
||||
snprintf(buf, sizeof(buf),
|
||||
"UPDATE anope_ns_core SET display='%s' WHERE display='%s'",
|
||||
newnick, oldnick);
|
||||
db_mysql_query(buf);
|
||||
|
||||
/* Change the display on NS_ALIAS for all grouped nicks */
|
||||
snprintf(buf, sizeof(buf),
|
||||
"UPDATE anope_ns_alias SET display='%s' WHERE display='%s'",
|
||||
newnick, oldnick);
|
||||
db_mysql_query(buf);
|
||||
|
||||
/* Change the display on ChanServ ACCESS list */
|
||||
snprintf(buf, sizeof(buf),
|
||||
"UPDATE anope_cs_access SET display='%s' WHERE display='%s'",
|
||||
newnick, oldnick);
|
||||
db_mysql_query(buf);
|
||||
|
||||
/* Change the display on ChanServ AKICK list */
|
||||
snprintf(buf, sizeof(buf),
|
||||
"UPDATE anope_cs_access SET creator='%s' WHERE creator='%s'",
|
||||
newnick, oldnick);
|
||||
db_mysql_query(buf);
|
||||
|
||||
/* Change the display on MemoServ sent memos */
|
||||
snprintf(buf, sizeof(buf),
|
||||
"UPDATE anope_ms_info SET sender='%s' WHERE sender='%s'",
|
||||
newnick, oldnick);
|
||||
db_mysql_query(buf);
|
||||
|
||||
/* Change the display on MemoServ received memos */
|
||||
snprintf(buf, sizeof(buf),
|
||||
"UPDATE anope_ms_info SET receiver='%s' WHERE receiver='%s'",
|
||||
newnick, oldnick);
|
||||
db_mysql_query(buf);
|
||||
|
||||
/* Need to do bwords and akills */
|
||||
|
||||
#endif
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
void rdb_cs_del_access(ChanAccess *access)
|
||||
/*************************************************************************/
|
||||
|
||||
int rdb_cs_deluser(char *nick)
|
||||
{
|
||||
ChannelInfo *ci, *found;
|
||||
ChanAccess *caccess;
|
||||
int i, y;
|
||||
/* Need to fetch channel manually since ChanAccess has no member for it */
|
||||
for (i = 0; i < 256; i++) {
|
||||
for (ci = chanlists[i]; ci; ci = ci->next) {
|
||||
for (caccess = ci->access, y = 0; y < ci->accesscount; caccess++, y++) {
|
||||
if (caccess == access) { found = ci; }
|
||||
}
|
||||
}
|
||||
static char buf[1024];
|
||||
|
||||
#ifdef USE_MYSQL
|
||||
snprintf(buf, sizeof(buf),
|
||||
"UPDATE anope_cs_info SET successor=NULL WHERE successor='%s'",
|
||||
nick);
|
||||
db_mysql_query(buf);
|
||||
|
||||
snprintf(buf, sizeof(buf), "display='%s'", nick);
|
||||
rdb_scrub_table("anope_cs_access", buf);
|
||||
snprintf(buf, sizeof(buf), "creator='%s'", nick);
|
||||
rdb_scrub_table("anope_cs_akicks", buf);
|
||||
|
||||
return 1;
|
||||
#endif
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*************************************************************************/
|
||||
|
||||
int rdb_cs_delchan(ChannelInfo * ci)
|
||||
{
|
||||
static char buf[1024];
|
||||
char *channel = ci->name;
|
||||
|
||||
#ifdef USE_MYSQL
|
||||
snprintf(buf, sizeof(buf),
|
||||
"UPDATE anope_cs_info SET successor=NULL WHERE name='%s'",
|
||||
channel);
|
||||
db_mysql_query(buf);
|
||||
|
||||
snprintf(buf, sizeof(buf), "name='%s'", channel);
|
||||
rdb_scrub_table("anope_cs_info", buf);
|
||||
snprintf(buf, sizeof(buf), "receiver='%s' AND serv='CHAN'", channel);
|
||||
rdb_scrub_table("anope_ms_info", buf);
|
||||
snprintf(buf, sizeof(buf), "channel='%s'", channel);
|
||||
rdb_scrub_table("anope_cs_access", buf);
|
||||
rdb_scrub_table("anope_cs_akicks", buf);
|
||||
rdb_scrub_table("anope_cs_levels", buf);
|
||||
rdb_scrub_table("anope_cs_badwords", buf);
|
||||
if (ci->founder) {
|
||||
snprintf(buf, sizeof(buf),
|
||||
"update anope_ns_core set channelcount=channelcount-1 where display='%s'",
|
||||
ci->founder->display);
|
||||
db_mysql_query(buf);
|
||||
}
|
||||
if (!found) return;
|
||||
RDB_MYSQL(db_mysql_cs_del_access(found, access));
|
||||
|
||||
return 1;
|
||||
#endif
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*************************************************************************/
|
||||
|
||||
int rdb_cs_set_founder(char *channel, char *founder)
|
||||
{
|
||||
static char buf[1024];
|
||||
|
||||
#ifdef USE_MYSQL
|
||||
snprintf(buf, sizeof(buf),
|
||||
"UPDATE anope_cs_info SET founder='%s', successor=NULL WHERE name='%s'",
|
||||
founder, channel);
|
||||
db_mysql_query(buf);
|
||||
|
||||
snprintf(buf, sizeof(buf),
|
||||
"UPDATE anope_ns_core SET channelcount=channelcount+1 WHERE display='%s'",
|
||||
founder);
|
||||
db_mysql_query(buf);
|
||||
|
||||
/* Do i need to scrub the access list for this channel ? */
|
||||
snprintf(buf, sizeof(buf), "display='%s' AND channel='%s'", founder,
|
||||
channel);
|
||||
rdb_scrub_table("anope_cs_access", buf);
|
||||
|
||||
return 1;
|
||||
#endif
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*************************************************************************/
|
||||
|
||||
void rdb_save_ns_core(NickCore * nc)
|
||||
{
|
||||
|
||||
#ifdef USE_MYSQL
|
||||
db_mysql_save_ns_core(nc);
|
||||
#endif
|
||||
|
||||
}
|
||||
|
||||
/*************************************************************************/
|
||||
|
||||
void rdb_save_ns_alias(NickAlias * na)
|
||||
{
|
||||
|
||||
#ifdef USE_MYSQL
|
||||
db_mysql_save_ns_alias(na);
|
||||
#endif
|
||||
|
||||
}
|
||||
|
||||
/*************************************************************************/
|
||||
|
||||
void rdb_save_ns_req(NickRequest * nr)
|
||||
{
|
||||
|
||||
#ifdef USE_MYSQL
|
||||
db_mysql_save_ns_req(nr);
|
||||
#endif
|
||||
|
||||
}
|
||||
|
||||
/*************************************************************************/
|
||||
|
||||
void rdb_save_cs_info(ChannelInfo * ci)
|
||||
{
|
||||
|
||||
#ifdef USE_MYSQL
|
||||
db_mysql_save_cs_info(ci);
|
||||
#endif
|
||||
|
||||
}
|
||||
|
||||
/*************************************************************************/
|
||||
|
||||
void rdb_save_bs_core(BotInfo * bi)
|
||||
{
|
||||
|
||||
#ifdef USE_MYSQL
|
||||
db_mysql_save_bs_core(bi);
|
||||
#endif
|
||||
|
||||
}
|
||||
|
||||
/*************************************************************************/
|
||||
|
||||
void rdb_save_hs_core(HostCore * hc)
|
||||
{
|
||||
|
||||
#ifdef USE_MYSQL
|
||||
db_mysql_save_hs_core(hc);
|
||||
#endif
|
||||
|
||||
}
|
||||
|
||||
/*************************************************************************/
|
||||
|
||||
void rdb_save_os_db(unsigned int maxucnt, unsigned int maxutime,
|
||||
SList * ak, SList * sgl, SList * sql, SList * szl,
|
||||
HostCache * hc)
|
||||
{
|
||||
|
||||
#ifdef USE_MYSQL
|
||||
db_mysql_save_os_db(maxusercnt, maxusertime, ak, sgl, sql, szl, hc);
|
||||
#endif
|
||||
|
||||
}
|
||||
|
||||
/*************************************************************************/
|
||||
|
||||
void rdb_save_news(NewsItem * ni)
|
||||
{
|
||||
|
||||
#ifdef USE_MYSQL
|
||||
db_mysql_save_news(ni);
|
||||
#endif
|
||||
|
||||
}
|
||||
|
||||
/*************************************************************************/
|
||||
|
||||
void rdb_load_bs_dbase(void)
|
||||
{
|
||||
|
||||
#ifdef USE_MYSQL
|
||||
db_mysql_load_bs_dbase();
|
||||
#endif
|
||||
|
||||
}
|
||||
|
||||
/*************************************************************************/
|
||||
|
||||
void rdb_load_hs_dbase(void)
|
||||
{
|
||||
|
||||
#ifdef USE_MYSQL
|
||||
db_mysql_load_hs_dbase();
|
||||
#endif
|
||||
|
||||
}
|
||||
|
||||
/*************************************************************************/
|
||||
|
||||
void rdb_load_ns_dbase(void)
|
||||
{
|
||||
|
||||
#ifdef USE_MYSQL
|
||||
db_mysql_load_ns_dbase();
|
||||
#endif
|
||||
}
|
||||
|
||||
/*************************************************************************/
|
||||
|
||||
void rdb_load_news(void)
|
||||
{
|
||||
#ifdef USE_MYSQL
|
||||
db_mysql_load_news();
|
||||
#endif
|
||||
}
|
||||
|
||||
/*************************************************************************/
|
||||
|
||||
void rdb_load_exceptions(void)
|
||||
{
|
||||
#ifdef USE_MYSQL
|
||||
db_mysql_load_exceptions();
|
||||
#endif
|
||||
}
|
||||
|
||||
/*************************************************************************/
|
||||
|
||||
void rdb_load_cs_dbase(void)
|
||||
{
|
||||
#ifdef USE_MYSQL
|
||||
db_mysql_load_cs_dbase();
|
||||
#endif
|
||||
}
|
||||
|
||||
/*************************************************************************/
|
||||
|
||||
void rdb_load_os_dbase(void)
|
||||
{
|
||||
#ifdef USE_MYSQL
|
||||
db_mysql_load_os_dbase();
|
||||
#endif
|
||||
}
|
||||
|
||||
/*************************************************************************/
|
||||
|
||||
void rdb_load_ns_req_dbase(void)
|
||||
{
|
||||
#ifdef USE_MYSQL
|
||||
db_mysql_load_ns_req_dbase();
|
||||
#endif
|
||||
}
|
||||
|
||||
/*************************************************************************/
|
||||
|
||||
void rdb_load_dbases(void)
|
||||
{
|
||||
if (!skeleton) {
|
||||
rdb_load_ns_dbase();
|
||||
if (debug)
|
||||
alog("RDB: Loaded NickServ DataBase (1/8)");
|
||||
if (s_HostServ) {
|
||||
rdb_load_hs_dbase();
|
||||
if (debug)
|
||||
alog("RDB: Loaded HostServ DataBase (2/8)");
|
||||
}
|
||||
if (s_BotServ) {
|
||||
rdb_load_bs_dbase();
|
||||
if (debug)
|
||||
alog("RDB: Loaded BotServ DataBase (3/8)");
|
||||
}
|
||||
rdb_load_cs_dbase();
|
||||
if (debug)
|
||||
alog("RDB: Loaded ChanServ DataBase (4/8)");
|
||||
}
|
||||
rdb_load_os_dbase();
|
||||
if (debug)
|
||||
alog("RDB: Loaded OperServ DataBase (5/8)");
|
||||
rdb_load_news();
|
||||
if (debug)
|
||||
alog("RDB: Loaded News DataBase (6/8)");
|
||||
rdb_load_exceptions();
|
||||
if (debug)
|
||||
alog("RDB: Loaded Exception Database (7/8)");
|
||||
if (PreNickDBName) {
|
||||
rdb_load_ns_req_dbase();
|
||||
if (debug)
|
||||
alog("RDB: Loaded PreNick DataBase (8/8)");
|
||||
} else {
|
||||
if (debug)
|
||||
alog("RDB: No need to load PreNickDB (8/8)");
|
||||
}
|
||||
alog("RDB: All DataBases loaded.");
|
||||
}
|
||||
|
||||
/*************************************************************************/
|
||||
|
||||
void rdb_save_exceptions(Exception * e)
|
||||
{
|
||||
|
||||
#ifdef USE_MYSQL
|
||||
db_mysql_save_exceptions(e);
|
||||
#endif
|
||||
|
||||
}
|
||||
|
||||
@@ -460,6 +460,25 @@ void save_exceptions()
|
||||
|
||||
#undef SAFE
|
||||
|
||||
/*************************************************************************/
|
||||
|
||||
void save_rdb_exceptions()
|
||||
{
|
||||
#ifdef USE_RDB
|
||||
int i;
|
||||
Exception *e;
|
||||
|
||||
if (!rdb_open())
|
||||
return;
|
||||
rdb_clear_table("anope_os_exceptions");
|
||||
for (i = 0; i < nexceptions; i++) {
|
||||
e = &exceptions[i];
|
||||
rdb_save_exceptions(e);
|
||||
}
|
||||
rdb_close();
|
||||
#endif
|
||||
}
|
||||
|
||||
/*************************************************************************/
|
||||
/************************ Exception Manipulation *************************/
|
||||
/*************************************************************************/
|
||||
|
||||
+4
-4
@@ -8,13 +8,13 @@
|
||||
VERSION_MAJOR="1"
|
||||
VERSION_MINOR="7"
|
||||
VERSION_PATCH="4"
|
||||
VERSION_BUILD="294"
|
||||
VERSION_BUILD="295"
|
||||
|
||||
# $Log$
|
||||
#
|
||||
# BUILD : 1.7.4 (294)
|
||||
# BUGS :
|
||||
# NOTES : First import. Current status: anope_bs_core finished for new phase1, anope_cs_access working for cs access add.
|
||||
# BUILD : 1.7.4 (295)
|
||||
# BUGS : none
|
||||
# NOTES : Rolling back previous commit.
|
||||
#
|
||||
# BUILD : 1.7.4 (283)
|
||||
# BUGS : N/A
|
||||
|
||||
Reference in New Issue
Block a user