summaryrefslogtreecommitdiffstats
path: root/src/libserver/protocol.c
diff options
context:
space:
mode:
authorVsevolod Stakhov <vsevolod@highsecure.ru>2017-03-22 14:08:26 +0000
committerVsevolod Stakhov <vsevolod@highsecure.ru>2017-03-22 14:08:26 +0000
commit7849cfa0767a48fd6cfbf0b41f5a42c4352a0e87 (patch)
tree6c4911652b9bea8e5fe4f49afd522e78b93b1617 /src/libserver/protocol.c
parent532914ab6ccbff8ab1105e7883d2ea008858bd5a (diff)
downloadrspamd-7849cfa0767a48fd6cfbf0b41f5a42c4352a0e87.tar.gz
rspamd-7849cfa0767a48fd6cfbf0b41f5a42c4352a0e87.zip
[Fix] Preserve order of options in symbols
Diffstat (limited to 'src/libserver/protocol.c')
-rw-r--r--src/libserver/protocol.c13
1 files changed, 10 insertions, 3 deletions
diff --git a/src/libserver/protocol.c b/src/libserver/protocol.c
index dfc590a78..d9e4f9b7b 100644
--- a/src/libserver/protocol.c
+++ b/src/libserver/protocol.c
@@ -26,6 +26,7 @@
#include "worker_private.h"
#include "cryptobox.h"
#include "contrib/zstd/zstd.h"
+#include "contrib/uthash/utlist.h"
#include "lua/lua_common.h"
#include "unix-std.h"
#include <math.h>
@@ -857,8 +858,9 @@ static ucl_object_t *
rspamd_metric_symbol_ucl (struct rspamd_task *task, struct rspamd_metric *m,
struct rspamd_symbol_result *sym)
{
- ucl_object_t *obj = NULL;
+ ucl_object_t *obj = NULL, *ar;
const gchar *description = NULL;
+ struct rspamd_symbol_option *opt;
if (sym->sym != NULL) {
description = sym->sym->description;
@@ -874,8 +876,13 @@ rspamd_metric_symbol_ucl (struct rspamd_task *task, struct rspamd_metric *m,
description), "description", 0, false);
}
if (sym->options != NULL) {
- ucl_object_insert_key (obj, rspamd_str_hash_ucl (sym->options),
- "options", 0, false);
+ ar = ucl_object_typed_new (UCL_ARRAY);
+
+ DL_FOREACH (sym->opts_head, opt) {
+ ucl_array_append (ar, ucl_object_fromstring (opt->option));
+ }
+
+ ucl_object_insert_key (obj, ar, "options", 0, false);
}
return obj;