commit 1449554: [Fix] #3129 Multiple classifiers on redis working incorrectly
resec
resec0109 at gmail.com
Mon Nov 18 11:49:14 UTC 2019
Author: resec
Date: 2019-11-08 16:05:36 +0800
URL: https://github.com/rspamd/rspamd/commit/14495547dea7e4a0c14cf1507ba7def74b58a4ce
[Fix] #3129 Multiple classifiers on redis working incorrectly
---
src/libstat/backends/redis_backend.c | 20 ++++++++++++++++++--
src/libstat/learn_cache/redis_cache.c | 12 +++++++++++-
2 files changed, 29 insertions(+), 3 deletions(-)
diff --git a/src/libstat/backends/redis_backend.c b/src/libstat/backends/redis_backend.c
index 08edf1a4f..70011a628 100644
--- a/src/libstat/backends/redis_backend.c
+++ b/src/libstat/backends/redis_backend.c
@@ -1425,13 +1425,29 @@ rspamd_redis_parse_classifier_opts (struct redis_stat_ctx *backend,
elt = ucl_object_lookup (obj, "prefix");
if (elt == NULL || ucl_object_type (elt) != UCL_STRING) {
+ gchar *redis_object;
+
/* Default non-users statistics */
if (backend->enable_users || backend->cbref_user != -1) {
- backend->redis_object = REDIS_DEFAULT_USERS_OBJECT;
+ redis_object = REDIS_DEFAULT_USERS_OBJECT;
}
else {
- backend->redis_object = REDIS_DEFAULT_OBJECT;
+ redis_object = REDIS_DEFAULT_OBJECT;
+ }
+
+ /* Prepend classifier name if defined */
+ elt = ucl_object_lookup (obj, "name");
+ if (elt != NULL && ucl_object_type (elt) == UCL_STRING) {
+ const gchar *cl_name = ucl_object_tostring (elt);
+ gchar *temp;
+ temp = g_malloc (strlen (cl_name) + strlen (redis_object) + 2);
+ strcpy (temp, cl_name);
+ strcat (temp, "_");
+ strcat (temp, redis_object);
+ redis_object = temp;
}
+
+ backend->redis_object = redis_object;
}
else {
/* XXX: sanity check */
diff --git a/src/libstat/learn_cache/redis_cache.c b/src/libstat/learn_cache/redis_cache.c
index 0df3783ab..320f422dd 100644
--- a/src/libstat/learn_cache/redis_cache.c
+++ b/src/libstat/learn_cache/redis_cache.c
@@ -292,7 +292,17 @@ rspamd_stat_cache_redis_init (struct rspamd_stat_ctx *ctx,
cache_ctx->redis_object = ucl_object_tostring (obj);
}
else {
- cache_ctx->redis_object = DEFAULT_REDIS_KEY;
+ gchar *cl_name = st->classifier->cfg->name;
+ if (cl_name) {
+ gchar *redis_object;
+ redis_object = g_malloc (strlen (cl_name) + strlen (DEFAULT_REDIS_KEY) + 2);
+ strcpy (redis_object, cl_name);
+ strcat (redis_object, "_");
+ strcat (redis_object, DEFAULT_REDIS_KEY);
+ cache_ctx->redis_object = redis_object;
+ } else {
+ cache_ctx->redis_object = DEFAULT_REDIS_KEY;
+ }
}
cache_ctx->conf_ref = conf_ref;
More information about the Commits
mailing list