From: NurPech Date: Mon, 20 May 2013 01:40:59 +0000 (+0200) Subject: added code for saxdb_read X-Git-Url: http://git.pk910.de/?p=srvx.git;a=commitdiff_plain;h=6a01a339d6cce15400d817a504a6c64d05c8fca7 added code for saxdb_read --- diff --git a/src/spamserv.c b/src/spamserv.c index fadcfa4..9987398 100644 --- a/src/spamserv.c +++ b/src/spamserv.c @@ -2170,11 +2170,31 @@ spamserv_channel_message(struct chanNode *channel, struct userNode *user, char * } } +static int +spamserv_saxdb_read_shitlist(const char *name, void *data, void *extra) +{ + struct record_data *rd = data; + struct chanInfo *chan = extra; + char *badword; + char *triggered, *action; + + if (rd->type == RECDB_OBJECT) { + dict_t obj = GET_RECORD_OBJECT(rd); + /* new style structure */ + badword = database_get_data(obj, KEY_BADWORD_MASK, RECDB_QSTRING); + triggered = database_get_data(obj, KEY_BADWORD_TRIGGERED, RECDB_QSTRING); + action = database_get_data(obj, KEY_BADWORD_ACTION, RECDB_QSTRING); + + add_badword(chan, badword, strtoul(triggered, NULL, 0), strtoul(action, NULL, 0), name); + } + return 0; +} + static int spamserv_saxdb_read(struct dict *database) { dict_iterator_t it, itbad; - struct dict *object; + struct dict *object, *badwords; struct record_data *hir, hirbad; struct chanNode *channel; struct chanInfo *cInfo; @@ -2223,7 +2243,11 @@ spamserv_saxdb_read(struct dict *database) cInfo->suspend_expiry = expiry; cInfo->exceptlevel=exceptlevel; cInfo->badwords = dict_new(); - + str = database_get_data(hir->d.object, KEY_LASTBADWORDID, RECDB_QSTRING); + badwordid = str ? atoi(str) : 0; + cInfo->last_badword_id = badwordid; + if ((badwords = database_get_data(hir->d.object, KEY_BADWORDS, RECDB_OBJECT))) + dict_foreach(object, spamserv_saxdb_read_shitlist, cInfo); } } else @@ -2256,8 +2280,8 @@ spamserv_saxdb_write(struct saxdb_context *ctx) if(cInfo->suspend_expiry) saxdb_write_int(ctx, KEY_EXPIRY, cInfo->suspend_expiry); - saxdb_start_record(ctx, KEY_BADWORDS, 1); saxdb_write_int(ctx, KEY_LASTBADWORDID, cInfo->last_badword_id); + saxdb_start_record(ctx, KEY_BADWORDS, 1); dict_iterator_t itbad; for (itbad = dict_first(cInfo->badwords); itbad; itbad = iter_next(itbad)) { struct badword *badword = iter_data(itbad);