1
0
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:
dane dane@31f1291d-b8d6-0310-a050-a5561fc1590b
2004-08-01 02:47:29 +00:00
parent a090c812cf
commit 3422f4a798
15 changed files with 2428 additions and 247 deletions
+90 -1
View File
@@ -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
View File
@@ -58,7 +58,7 @@
# define MYSQL_WARNING 2
# define MYSQL_ERROR 4
#include <mysql.h>
#include "mysql.h"
#include "errmsg.h"
#endif
+22 -9
View File
@@ -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
View File
@@ -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,
+2
View File
@@ -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}}},
+33
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
File diff suppressed because it is too large Load Diff
+19
View File
@@ -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
View File
@@ -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);
+13
View File
@@ -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)
+422 -34
View File
@@ -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
}
+19
View File
@@ -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
View File
@@ -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