From 05a7c92c9b11e35ffe95126e2cf5737b6f269fd9 Mon Sep 17 00:00:00 2001 From: Vsevolod Stakhov Date: Mon, 20 Jul 2026 11:15:30 +0100 Subject: [PATCH] [Feature] Configdump: show symcache flags in --symbol-details Add a `flags` array (fine, empty, explicit_disable, explicit_enable, ignore_passthrough, nostat, idempotent, mime, trivial, skip, composite, ghost, coro) to the per-symbol details, so it is possible to check whether a symbol requires explicit enabling; structural types are already covered by the `type` field. --- src/libserver/symcache/symcache_c.cxx | 28 +++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/src/libserver/symcache/symcache_c.cxx b/src/libserver/symcache/symcache_c.cxx index 6460d01781..2ac0f36f89 100644 --- a/src/libserver/symcache/symcache_c.cxx +++ b/src/libserver/symcache/symcache_c.cxx @@ -394,6 +394,34 @@ void rspamd_symcache_get_symbol_details(struct rspamd_symcache *cache, ucl_object_insert_key(this_sym_ucl, ucl_object_fromstring(sym->get_type_str()), "type", strlen("type"), false); + + /* Modifier flags; structural types are already covered by `type` */ + static constexpr const std::pair flag_names[] = { + {SYMBOL_TYPE_FINE, "fine"}, + {SYMBOL_TYPE_EMPTY, "empty"}, + {SYMBOL_TYPE_EXPLICIT_DISABLE, "explicit_disable"}, + {SYMBOL_TYPE_EXPLICIT_ENABLE, "explicit_enable"}, + {SYMBOL_TYPE_IGNORE_PASSTHROUGH, "ignore_passthrough"}, + {SYMBOL_TYPE_NOSTAT, "nostat"}, + {SYMBOL_TYPE_IDEMPOTENT, "idempotent"}, + {SYMBOL_TYPE_MIME_ONLY, "mime"}, + {SYMBOL_TYPE_TRIVIAL, "trivial"}, + {SYMBOL_TYPE_SKIPPED, "skip"}, + {SYMBOL_TYPE_COMPOSITE, "composite"}, + {SYMBOL_TYPE_GHOST, "ghost"}, + {SYMBOL_TYPE_USE_CORO, "coro"}, + }; + + auto *flags_ucl = ucl_object_typed_new(UCL_ARRAY); + + for (const auto &[flag, name]: flag_names) { + if (sym->get_flags() & flag) { + ucl_array_append(flags_ucl, ucl_object_fromstring(name)); + } + } + + ucl_object_insert_key(this_sym_ucl, flags_ucl, + "flags", strlen("flags"), false); } } -- 2.47.3