]> git.ipfire.org Git - thirdparty/rspamd.git/commitdiff
[Minor] Allow silent addition of the composites from the configuration
authorVsevolod Stakhov <vsevolod@rspamd.com>
Sat, 17 Jun 2023 14:43:12 +0000 (15:43 +0100)
committerVsevolod Stakhov <vsevolod@rspamd.com>
Sat, 17 Jun 2023 14:43:12 +0000 (15:43 +0100)
src/libserver/composites/composites.h
src/libserver/composites/composites_internal.hxx
src/libserver/composites/composites_manager.cxx

index 6ccfbd58f30b9f344384e0d8095a15582ea3f18d..335a5d424382bc6837a1ff693195ac48c257f736 100644 (file)
@@ -48,12 +48,14 @@ gsize rspamd_composites_manager_nelts(void *);
  * @return
  */
 void* rspamd_composites_manager_add_from_ucl(void *,  const char *, const ucl_object_t *);
+void* rspamd_composites_manager_add_from_ucl_silent(void *,  const char *, const ucl_object_t *);
 
 /**
  * Adds a composite from config
  * @return
  */
 void* rspamd_composites_manager_add_from_string(void *, const char *, const char *);
+void* rspamd_composites_manager_add_from_string_silent(void *, const char *, const char *);
 
 #ifdef  __cplusplus
 }
index 570cb4ea9e01cc87a1fef9a3efcdae40771bc395..5b311fc6c067cf8cc5ffef619add86fb444b07f9 100644 (file)
@@ -71,8 +71,8 @@ public:
                return nullptr;
        }
 
-       auto add_composite(std::string_view, const ucl_object_t *) -> rspamd_composite *;
-       auto add_composite(std::string_view name, std::string_view expression) -> rspamd_composite *;
+       auto add_composite(std::string_view, const ucl_object_t *, bool silent_duplicate) -> rspamd_composite *;
+       auto add_composite(std::string_view name, std::string_view expression, bool silent_duplicate) -> rspamd_composite *;
 private:
        ~composites_manager() = default;
        static void composites_manager_dtor(void *ptr) {
index 27fb170b9b5f1834172b555656f5adad17b0e375..bf44910970d50574c438927f459758ffa17cdc12 100644 (file)
@@ -49,7 +49,7 @@ composite_policy_from_str(const std::string_view &inp) -> enum rspamd_composite_
 }
 
 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");
@@ -59,7 +59,13 @@ composites_manager::add_composite(std::string_view composite_name, const ucl_obj
        }
 
        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;
@@ -142,11 +148,23 @@ composites_manager::add_composite(std::string_view composite_name, const ucl_obj
 
 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)) {
@@ -191,11 +209,23 @@ rspamd_composites_manager_nelts(void *ptr)
 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));
 }