]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
mail-crypt-acl: Convert plugin settings to regular settings
authorTimo Sirainen <timo.sirainen@open-xchange.com>
Thu, 17 Aug 2023 17:28:57 +0000 (13:28 -0400)
committerAki Tuomi <aki.tuomi@open-xchange.com>
Wed, 12 Feb 2025 10:34:11 +0000 (12:34 +0200)
src/plugins/mail-crypt/crypt-settings.c
src/plugins/mail-crypt/crypt-settings.h
src/plugins/mail-crypt/doveadm-mail-crypt.c
src/plugins/mail-crypt/mail-crypt-acl-plugin.c
src/plugins/mail-crypt/mail-crypt-common.h

index c611d8bc1d53b776d9dcd61d058a8003afb5b718..7fef5833b941997eaee54d22910550ee5e24179e 100644 (file)
@@ -77,3 +77,26 @@ const struct setting_parser_info crypt_setting_parser_info = {
        .struct_size = sizeof(struct crypt_settings),
        .pool_offset1 = 1 + offsetof(struct crypt_settings, pool),
 };
+
+#undef DEF
+#define DEF(type, name) \
+       SETTING_DEFINE_STRUCT_##type(#name, name, struct crypt_acl_settings)
+static const struct setting_define crypt_acl_setting_defines[] = {
+       DEF(BOOL, crypt_acl_require_secure_key_sharing),
+
+       SETTING_DEFINE_LIST_END
+};
+
+static const struct crypt_acl_settings crypt_acl_default_settings = {
+       .crypt_acl_require_secure_key_sharing = FALSE,
+};
+
+const struct setting_parser_info crypt_acl_setting_parser_info = {
+       .name = "crypt_acl",
+
+       .defines = crypt_acl_setting_defines,
+       .defaults = &crypt_acl_default_settings,
+
+       .struct_size = sizeof(struct crypt_acl_settings),
+       .pool_offset1 = 1 + offsetof(struct crypt_acl_settings, pool),
+};
index 0e9fda046957f3d43b4a5891d73ed73bbdc42b59..9ee57d9dbdb1b6198a9677b46932653c02c47820 100644 (file)
@@ -26,7 +26,13 @@ struct crypt_settings {
        bool crypt_user_key_require_encrypted;
 };
 
+struct crypt_acl_settings {
+       pool_t pool;
+       bool crypt_acl_require_secure_key_sharing;
+};
+
 extern const struct setting_parser_info crypt_setting_parser_info;
 extern const struct setting_parser_info crypt_private_key_setting_parser_info;
+extern const struct setting_parser_info crypt_acl_setting_parser_info;
 
 #endif
index 342063f68e3074e890dc7c24fb513baa1503e036..8231ca6d3edd45ed27d015441a40ed19d67c7d24 100644 (file)
@@ -112,13 +112,19 @@ mcp_update_shared_key(struct mailbox_transaction_context *t,
 {
        const char *error;
        struct mail_user *dest_user;
+       const struct crypt_acl_settings *set;
        struct ioloop_context *cur_ioloop_ctx;
        struct dcrypt_public_key *pkey;
        const char *dest_username;
        int ret = 0;
 
-       bool disallow_insecure =
-               mail_user_plugin_getenv_bool(user, MAIL_CRYPT_ACL_SECURE_SHARE_SETTING);
+       if (settings_get(user->event, &crypt_acl_setting_parser_info, 0,
+                        &set, &error) < 0) {
+               e_error(user->event, "%s", error);
+               return -1;
+       }
+       bool disallow_insecure = set->crypt_acl_require_secure_key_sharing;
+       settings_free(set);
 
        ret = mcp_user_create(user, target_uid, &dest_user, &error);
 
index 1cab807b778ca44f6131142b6eb205c9bc9a44be..8068f45bd1590199b81914d7ab2eb3407f62a2e1 100644 (file)
@@ -7,6 +7,7 @@
 #include "module-dir.h"
 #include "var-expand.h"
 #include "hex-binary.h"
+#include "settings.h"
 #include "mail-namespace.h"
 #include "mail-storage-hooks.h"
 #include "mail-storage-service.h"
@@ -241,6 +242,7 @@ static int mail_crypt_acl_object_update(struct acl_object *aclobj,
        const char *error;
        struct mail_crypt_acl_mailbox_list *mlist =
                MAIL_CRYPT_ACL_LIST_CONTEXT(aclobj->backend->list);
+       const struct crypt_acl_settings *set;
        struct event *event = aclobj->backend->event;
        const char *username;
        struct mail_user *dest_user;
@@ -251,9 +253,13 @@ static int mail_crypt_acl_object_update(struct acl_object *aclobj,
        if (mlist->acl_vprev.object_update(aclobj, update) < 0)
                return -1;
 
-       bool disallow_insecure =
-               mail_user_plugin_getenv_bool(aclobj->backend->list->ns->user,
-                                            MAIL_CRYPT_ACL_SECURE_SHARE_SETTING);
+       if (settings_get(event, &crypt_acl_setting_parser_info, 0,
+                        &set, &error) < 0) {
+               e_error(event, "%s", error);
+               return -1;
+       }
+       bool disallow_insecure = set->crypt_acl_require_secure_key_sharing;
+       settings_free(set);
 
        const char *box_name = mailbox_list_get_vname(aclobj->backend->list,
                                                      aclobj->name);
@@ -333,8 +339,7 @@ static int mail_crypt_acl_object_update(struct acl_object *aclobj,
                if (disallow_insecure) {
                        e_error(event, "mail-crypt-acl-plugin: "
                                "Secure key sharing is enabled -"
-                               "Remove or set plugin { %s = no }",
-                               MAIL_CRYPT_ACL_SECURE_SHARE_SETTING);
+                               "Remove or set crypt_acl_require_secure_key_sharing=no");
                        ret = -1;
                        break;
                }
index 492bee36ff41e62d0e139188d60af78f2b45061d..7cf957f6dc1b87508b939c9b5ba3e788f9be76d6 100644 (file)
@@ -9,7 +9,6 @@
 #define MAIL_CRYPT_ENC_ALGORITHM "aes-256-gcm-sha256"
 #define MAIL_CRYPT_KEY_ID_ALGORITHM "sha256"
 #define MAIL_CRYPT_KEY_ATTRIBUTE_FORMAT DCRYPT_FORMAT_DOVECOT
-#define MAIL_CRYPT_ACL_SECURE_SHARE_SETTING "mail_crypt_acl_require_secure_key_sharing"
 #define MAIL_CRYPT_HASH_BUF_SIZE 128
 #define MAIL_CRYPT_KEY_BUF_SIZE 1024
 #define ACTIVE_KEY_NAME "active"