summaryrefslogtreecommitdiff
path: root/src/nickserv.c
diff options
context:
space:
mode:
authordane dane@31f1291d-b8d6-0310-a050-a5561fc1590b <dane dane@31f1291d-b8d6-0310-a050-a5561fc1590b@5417fbe8-f217-4b02-8779-1006273d7864>2004-08-01 02:47:29 +0000
committerdane dane@31f1291d-b8d6-0310-a050-a5561fc1590b <dane dane@31f1291d-b8d6-0310-a050-a5561fc1590b@5417fbe8-f217-4b02-8779-1006273d7864>2004-08-01 02:47:29 +0000
commit3422f4a798f9fdd3b0c1efaeffdbdb8a7e495fdb (patch)
tree11159138cfd8b6b74dd29751e4c1d5b426ba1353 /src/nickserv.c
parenta090c812cf88617ad825485791f7f38764db6ae8 (diff)
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
Diffstat (limited to 'src/nickserv.c')
-rw-r--r--src/nickserv.c112
1 files changed, 112 insertions, 0 deletions
diff --git a/src/nickserv.c b/src/nickserv.c
index fa7fc70c0..465f14fa5 100644
--- a/src/nickserv.c
+++ b/src/nickserv.c
@@ -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);