summaryrefslogtreecommitdiffstats
path: root/src/libstat/backends/sqlite3_backend.c
diff options
context:
space:
mode:
authorVsevolod Stakhov <vsevolod@highsecure.ru>2015-08-12 15:34:58 +0100
committerVsevolod Stakhov <vsevolod@highsecure.ru>2015-08-12 15:34:58 +0100
commitcdef5507e20992b5fe08e3655620e6690d887dc7 (patch)
treed5a9c5f1d40a107b0bba88aebaafb26655ddebc5 /src/libstat/backends/sqlite3_backend.c
parentc5cbc5af2699a17d2a6cf254ab79244d8061cd26 (diff)
downloadrspamd-cdef5507e20992b5fe08e3655620e6690d887dc7.tar.gz
rspamd-cdef5507e20992b5fe08e3655620e6690d887dc7.zip
Add configured `per_user` and `per_language` knobs for sqlite3.
Diffstat (limited to 'src/libstat/backends/sqlite3_backend.c')
-rw-r--r--src/libstat/backends/sqlite3_backend.c40
1 files changed, 33 insertions, 7 deletions
diff --git a/src/libstat/backends/sqlite3_backend.c b/src/libstat/backends/sqlite3_backend.c
index b87e05bde..836fe18d5 100644
--- a/src/libstat/backends/sqlite3_backend.c
+++ b/src/libstat/backends/sqlite3_backend.c
@@ -38,12 +38,12 @@ struct rspamd_stat_sqlite3_db {
gchar *fname;
GArray *prstmt;
gboolean in_transaction;
+ gboolean enable_users;
+ gboolean enable_languages;
};
struct rspamd_stat_sqlite3_ctx {
GHashTable *files;
- gboolean enable_users;
- gboolean enable_languages;
};
struct rspamd_stat_sqlite3_rt {
@@ -443,7 +443,7 @@ rspamd_sqlite3_init (struct rspamd_stat_ctx *ctx,
struct rspamd_classifier_config *clf;
struct rspamd_statfile_config *stf;
GList *cur, *curst;
- const ucl_object_t *filenameo;
+ const ucl_object_t *filenameo, *lang_enabled, *users_enabled;
const gchar *filename;
struct rspamd_stat_sqlite3_db *bk;
GError *err = NULL;
@@ -489,6 +489,24 @@ rspamd_sqlite3_init (struct rspamd_stat_ctx *ctx,
err = NULL;
}
+ users_enabled = ucl_object_find_any_key (clf->opts, "per_user",
+ "users_enabled", NULL);
+ if (users_enabled != NULL) {
+ bk->enable_users = ucl_object_toboolean (users_enabled);
+ }
+ else {
+ bk->enable_users = FALSE;
+ }
+
+ lang_enabled = ucl_object_find_any_key (clf->opts,
+ "per_language", "languages_enabled", NULL);
+ if (lang_enabled != NULL) {
+ bk->enable_languages = ucl_object_toboolean (lang_enabled);
+ }
+ else {
+ bk->enable_languages = FALSE;
+ }
+
ctx->statfiles ++;
curst = curst->next;
@@ -583,22 +601,30 @@ rspamd_sqlite3_process_token (struct rspamd_task *task, struct token_node_s *tok
}
if (rt->user_id == -1) {
- rt->user_id = rspamd_sqlite3_get_user (bk, task, FALSE);
+ if (bk->enable_users) {
+ rt->user_id = rspamd_sqlite3_get_user (bk, task, FALSE);
+ }
+ else {
+ rt->user_id = 0;
+ }
}
if (rt->lang_id == -1) {
- rt->lang_id = rspamd_sqlite3_get_language (bk, task, FALSE);
+ if (bk->enable_languages) {
+ rt->lang_id = rspamd_sqlite3_get_language (bk, task, FALSE);
+ }
+ else {
+ rt->lang_id = 0;
+ }
}
memcpy (&idx, tok->data, sizeof (idx));
- /* TODO: language and user support */
if (rspamd_sqlite3_run_prstmt (bk->sqlite, bk->prstmt,
RSPAMD_STAT_BACKEND_GET_TOKEN,
idx, rt->user_id, rt->lang_id, &iv) == SQLITE_OK) {
res->value = iv;
- /* TODO: purge empty values */
if (iv == 0) {
return FALSE;
}