}
auto
-composites_manager::add_composite(std::string_view composite_name, const ucl_object_t *obj) -> rspamd_composite *
+composites_manager::add_composite(std::string_view composite_name, const ucl_object_t *obj, bool silent_duplicate) -> rspamd_composite *
{
const auto *val = ucl_object_lookup(obj, "enabled");
}
if (composites.contains(composite_name)) {
- msg_warn_config ("composite %s is redefined", composite_name.data());
+ if (silent_duplicate) {
+ msg_debug_config ("composite %s is redefined", composite_name.data());
+ return nullptr;
+ }
+ else {
+ msg_warn_config ("composite %s is redefined", composite_name.data());
+ }
}
const char *composite_expression = nullptr;
auto
composites_manager::add_composite(std::string_view composite_name,
- std::string_view composite_expression) -> rspamd_composite *
+ std::string_view composite_expression,
+ bool silent_duplicate) -> rspamd_composite *
{
GError *err = nullptr;
rspamd_expression *expr = nullptr;
+ if (composites.contains(composite_name)) {
+ /* Duplicate composite - refuse to add */
+ if (silent_duplicate) {
+ msg_debug_config ("composite %s is redefined", composite_name.data());
+ return nullptr;
+ }
+ else {
+ msg_warn_config ("composite %s is redefined", composite_name.data());
+ }
+ }
+
if (!rspamd_parse_expression(composite_expression.data(),
composite_expression.size(), &composite_expr_subr,
nullptr, cfg->cfg_pool, &err, &expr)) {
void*
rspamd_composites_manager_add_from_ucl(void *cm, const char *sym, const ucl_object_t *obj)
{
- return reinterpret_cast<void *>(COMPOSITE_MANAGER_FROM_PTR(cm)->add_composite(sym, obj));
+ return reinterpret_cast<void *>(COMPOSITE_MANAGER_FROM_PTR(cm)->add_composite(sym, obj, false));
}
void*
rspamd_composites_manager_add_from_string(void *cm, const char *sym, const char *expr)
{
- return reinterpret_cast<void *>(COMPOSITE_MANAGER_FROM_PTR(cm)->add_composite(sym, expr));
+ return reinterpret_cast<void *>(COMPOSITE_MANAGER_FROM_PTR(cm)->add_composite(sym, expr, false));
+}
+
+void*
+rspamd_composites_manager_add_from_ucl_silent(void *cm, const char *sym, const ucl_object_t *obj)
+{
+ return reinterpret_cast<void *>(COMPOSITE_MANAGER_FROM_PTR(cm)->add_composite(sym, obj, true));
+}
+
+void*
+rspamd_composites_manager_add_from_string_silent(void *cm, const char *sym, const char *expr)
+{
+ return reinterpret_cast<void *>(COMPOSITE_MANAGER_FROM_PTR(cm)->add_composite(sym, expr, true));
}