mirror of
https://github.com/anope/anope.git
synced 2026-06-12 19:14:47 +02:00
00be855225
git-svn-id: svn://svn.anope.org/anope/trunk@18 31f1291d-b8d6-0310-a050-a5561fc1590b git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@11 5417fbe8-f217-4b02-8779-1006273d7864
467 lines
10 KiB
C
467 lines
10 KiB
C
/* RDB functions.
|
|
*
|
|
* (C) 2003 Anope Team
|
|
* Contact us at info@anope.org
|
|
*
|
|
* Please read COPYING and README for furhter details.
|
|
*
|
|
* Based on the original code of Epona by Lara.
|
|
* Based on the original code of Services by Andy Church.
|
|
*
|
|
* $Id$
|
|
*
|
|
*/
|
|
#include "services.h"
|
|
|
|
/*************************************************************************/
|
|
|
|
int rdb_init()
|
|
{
|
|
|
|
#ifdef USE_MYSQL
|
|
return db_mysql_init();
|
|
#endif
|
|
|
|
}
|
|
|
|
/*************************************************************************/
|
|
|
|
int rdb_open()
|
|
{
|
|
|
|
#ifdef USE_MYSQL
|
|
return 1; // db_mysql_open();
|
|
#endif
|
|
|
|
}
|
|
|
|
/*************************************************************************/
|
|
|
|
int rdb_close()
|
|
{
|
|
|
|
#ifdef USE_MYSQL
|
|
return 1; // db_mysql_close();
|
|
#endif
|
|
|
|
}
|
|
|
|
/*************************************************************************/
|
|
|
|
int rdb_tag_table(char *table)
|
|
{
|
|
static char buf[1024];
|
|
|
|
#ifdef USE_MYSQL
|
|
snprintf(buf, sizeof(buf), "UPDATE %s SET active='0'", table);
|
|
return db_mysql_query(buf);
|
|
#endif
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
/*************************************************************************/
|
|
|
|
int rdb_clear_table(char *table)
|
|
{
|
|
static char buf[1024];
|
|
|
|
#ifdef USE_MYSQL
|
|
snprintf(buf, sizeof(buf), "TRUNCATE TABLE %s", table);
|
|
return db_mysql_query(buf);
|
|
#endif
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
/*************************************************************************/
|
|
|
|
int rdb_scrub_table(char *table, char *clause)
|
|
{
|
|
|
|
static char buf[1024];
|
|
|
|
#ifdef USE_MYSQL
|
|
snprintf(buf, sizeof(buf), "DELETE FROM %s WHERE %s", table, clause);
|
|
return db_mysql_query(buf);
|
|
#endif
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
/*************************************************************************/
|
|
|
|
int rdb_direct_query(char *query)
|
|
{
|
|
|
|
#ifdef USE_MYSQL
|
|
alog("Direct Query: %s", query);
|
|
return db_mysql_query(query);
|
|
#endif
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
/*************************************************************************/
|
|
|
|
/* I still don't really like doing it this way, it should really be done
|
|
* inside mysql.c and not here. So I'll revisit this later
|
|
*/
|
|
int rdb_ns_set_display(char *newnick, char *oldnick)
|
|
{
|
|
static char buf[1024];
|
|
|
|
#ifdef USE_MYSQL
|
|
/* Change the display on NS_CORE */
|
|
snprintf(buf, sizeof(buf),
|
|
"UPDATE anope_ns_core SET display='%s' WHERE display='%s'",
|
|
newnick, oldnick);
|
|
db_mysql_query(buf);
|
|
|
|
/* Change the display on NS_ALIAS for all grouped nicks */
|
|
snprintf(buf, sizeof(buf),
|
|
"UPDATE anope_ns_alias SET display='%s' WHERE display='%s'",
|
|
newnick, oldnick);
|
|
db_mysql_query(buf);
|
|
|
|
/* Change the display on ChanServ ACCESS list */
|
|
snprintf(buf, sizeof(buf),
|
|
"UPDATE anope_cs_access SET display='%s' WHERE display='%s'",
|
|
newnick, oldnick);
|
|
db_mysql_query(buf);
|
|
|
|
/* Change the display on ChanServ AKICK list */
|
|
snprintf(buf, sizeof(buf),
|
|
"UPDATE anope_cs_access SET creator='%s' WHERE creator='%s'",
|
|
newnick, oldnick);
|
|
db_mysql_query(buf);
|
|
|
|
/* Change the display on MemoServ sent memos */
|
|
snprintf(buf, sizeof(buf),
|
|
"UPDATE anope_ms_info SET sender='%s' WHERE sender='%s'",
|
|
newnick, oldnick);
|
|
db_mysql_query(buf);
|
|
|
|
/* Change the display on MemoServ received memos */
|
|
snprintf(buf, sizeof(buf),
|
|
"UPDATE anope_ms_info SET receiver='%s' WHERE receiver='%s'",
|
|
newnick, oldnick);
|
|
db_mysql_query(buf);
|
|
|
|
/* Need to do bwords and akills */
|
|
|
|
#endif
|
|
|
|
return 0;
|
|
}
|
|
|
|
/*************************************************************************/
|
|
|
|
int rdb_cs_deluser(char *nick)
|
|
{
|
|
static char buf[1024];
|
|
|
|
#ifdef USE_MYSQL
|
|
snprintf(buf, sizeof(buf),
|
|
"UPDATE anope_cs_info SET successor=NULL WHERE successor='%s'",
|
|
nick);
|
|
db_mysql_query(buf);
|
|
|
|
snprintf(buf, sizeof(buf), "display='%s'", nick);
|
|
rdb_scrub_table("anope_cs_access", buf);
|
|
snprintf(buf, sizeof(buf), "creator='%s'", nick);
|
|
rdb_scrub_table("anope_cs_akicks", buf);
|
|
|
|
return 1;
|
|
#endif
|
|
|
|
return 0;
|
|
}
|
|
|
|
/*************************************************************************/
|
|
|
|
int rdb_cs_delchan(ChannelInfo * ci)
|
|
{
|
|
static char buf[1024];
|
|
char *channel = ci->name;
|
|
|
|
#ifdef USE_MYSQL
|
|
snprintf(buf, sizeof(buf),
|
|
"UPDATE anope_cs_info SET successor=NULL WHERE name='%s'",
|
|
channel);
|
|
db_mysql_query(buf);
|
|
|
|
snprintf(buf, sizeof(buf), "name='%s'", channel);
|
|
rdb_scrub_table("anope_cs_info", buf);
|
|
snprintf(buf, sizeof(buf), "receiver='%s' AND serv='CHAN'", channel);
|
|
rdb_scrub_table("anope_ms_info", buf);
|
|
snprintf(buf, sizeof(buf), "channel='%s'", channel);
|
|
rdb_scrub_table("anope_cs_access", buf);
|
|
rdb_scrub_table("anope_cs_akicks", buf);
|
|
rdb_scrub_table("anope_cs_levels", buf);
|
|
rdb_scrub_table("anope_cs_badwords", buf);
|
|
if (ci->founder) {
|
|
snprintf(buf, sizeof(buf),
|
|
"update anope_ns_core set channelcount=channelcount-1 where display='%s'",
|
|
ci->founder->display);
|
|
db_mysql_query(buf);
|
|
}
|
|
|
|
return 1;
|
|
#endif
|
|
|
|
return 0;
|
|
}
|
|
|
|
/*************************************************************************/
|
|
|
|
int rdb_cs_set_founder(char *channel, char *founder)
|
|
{
|
|
static char buf[1024];
|
|
|
|
#ifdef USE_MYSQL
|
|
snprintf(buf, sizeof(buf),
|
|
"UPDATE anope_cs_info SET founder='%s', successor=NULL WHERE name='%s'",
|
|
founder, channel);
|
|
db_mysql_query(buf);
|
|
|
|
snprintf(buf, sizeof(buf),
|
|
"UPDATE anope_ns_core SET channelcount=channelcount+1 WHERE display='%s'",
|
|
founder);
|
|
db_mysql_query(buf);
|
|
|
|
/* Do i need to scrub the access list for this channel ? */
|
|
snprintf(buf, sizeof(buf), "display='%s' AND channel='%s'", founder,
|
|
channel);
|
|
rdb_scrub_table("anope_cs_access", buf);
|
|
|
|
return 1;
|
|
#endif
|
|
|
|
return 0;
|
|
}
|
|
|
|
/*************************************************************************/
|
|
|
|
void rdb_save_ns_core(NickCore * nc)
|
|
{
|
|
|
|
#ifdef USE_MYSQL
|
|
db_mysql_save_ns_core(nc);
|
|
#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
|
|
return db_mysql_load_bs_dbase();
|
|
#endif
|
|
|
|
}
|
|
|
|
/*************************************************************************/
|
|
|
|
void rdb_load_hs_dbase(void)
|
|
{
|
|
|
|
#ifdef USE_MYSQL
|
|
return db_mysql_load_hs_dbase();
|
|
#endif
|
|
|
|
}
|
|
|
|
/*************************************************************************/
|
|
|
|
void rdb_load_ns_dbase(void)
|
|
{
|
|
|
|
#ifdef USE_MYSQL
|
|
return db_mysql_load_ns_dbase();
|
|
#endif
|
|
}
|
|
|
|
/*************************************************************************/
|
|
|
|
void rdb_load_news(void)
|
|
{
|
|
#ifdef USE_MYSQL
|
|
return db_mysql_load_news();
|
|
#endif
|
|
}
|
|
|
|
/*************************************************************************/
|
|
|
|
void rdb_load_exceptions(void)
|
|
{
|
|
#ifdef USE_MYSQL
|
|
return db_mysql_load_exceptions();
|
|
#endif
|
|
}
|
|
|
|
/*************************************************************************/
|
|
|
|
void rdb_load_cs_dbase(void)
|
|
{
|
|
#ifdef USE_MYSQL
|
|
return db_mysql_load_cs_dbase();
|
|
#endif
|
|
}
|
|
|
|
/*************************************************************************/
|
|
|
|
void rdb_load_os_dbase(void)
|
|
{
|
|
#ifdef USE_MYSQL
|
|
return db_mysql_load_os_dbase();
|
|
#endif
|
|
}
|
|
|
|
/*************************************************************************/
|
|
|
|
void rdb_load_ns_req_dbase(void)
|
|
{
|
|
#ifdef USE_MYSQL
|
|
return 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
|
|
|
|
}
|