]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
lib-storage, global: Add mail_user.protocol and mail_storage_service_input.protocol
authorTimo Sirainen <timo.sirainen@open-xchange.com>
Mon, 26 Jun 2023 09:04:21 +0000 (12:04 +0300)
committerAki Tuomi <aki.tuomi@open-xchange.com>
Wed, 12 Feb 2025 10:34:09 +0000 (12:34 +0200)
It defaults to same as service, but can be overridden.

src/lib-imap-urlauth/imap-urlauth.c
src/lib-storage/index/shared/shared-storage.c
src/lib-storage/mail-storage-service.c
src/lib-storage/mail-storage-service.h
src/lib-storage/mail-user.c
src/lib-storage/mail-user.h
src/plugins/mail-crypt/doveadm-mail-crypt.c
src/plugins/mail-crypt/mail-crypt-acl-plugin.c

index 4b2387f525e37e50b477e1c35316c7a6389604f5..5a45e20304f1f5ab76167e11ed0a291b4eb66a94 100644 (file)
@@ -277,7 +277,7 @@ imap_urlauth_verify_url_userid(struct imap_urlauth_context *uctx,
                return 1;
 
        i_zero(&info);
-       info.protocol = user->service;
+       info.protocol = user->protocol;
        if (user->conn.local_ip != NULL)
                info.local_ip = *user->conn.local_ip;
        if (user->conn.remote_ip != NULL)
index 0804758416dc3c49c76e516cb2d338030e49562c..6ddafd4f872f6b1e6bf83c20968639da29125757 100644 (file)
@@ -265,6 +265,7 @@ int shared_storage_get_namespace(struct mail_namespace **_ns,
        const struct mail_storage_service_input input = {
                .event_parent = event_get_parent(service_user_event),
                .service = user->service,
+               .protocol = user->protocol,
                .username = userdomain,
                .set_instance = service_user_set_instance,
                .session_id = user->session_id,
index 5c4c270453a2cf6d01b70e807d273103869331dc..d9d80206ba64445d1dd714bc6dbd07c9039b4f17 100644 (file)
@@ -235,8 +235,15 @@ service_auth_userdb_lookup(struct mail_storage_service_ctx *ctx,
        int ret;
 
        i_zero(&info);
-       info.protocol = input->service != NULL ? input->service :
-               ctx->service->name;
+       /* If protocol was explicitly provided, use it. Otherwise, fallback to
+          using service name as the protocol. Outside a few special cases
+          (e.g. imap-urlauth-worker) the service and protocol are the same. */
+       if (input->protocol != NULL)
+               info.protocol = input->protocol;
+       else if (input->service != NULL)
+               info.protocol = input->service;
+       else
+               info.protocol = ctx->service->name;
        info.local_ip = input->local_ip;
        info.remote_ip = input->remote_ip;
        info.local_port = input->local_port;
@@ -327,6 +334,8 @@ get_var_expand_table(struct master_service *service,
 
        const char *service_name = input->service != NULL ?
                                   input->service : service->name;
+       const char *protocol = input->protocol != NULL ?
+               input->protocol : service_name;
        const char *hostname = user != NULL ?
                user->user_set->hostname : my_hostname;
        const char *local_port = "";
@@ -592,6 +601,9 @@ mail_storage_service_init_post(struct mail_storage_service_ctx *ctx,
        mail_user->gid = priv->gid == (gid_t)-1 ? getegid() : priv->gid;
        mail_user->anonymous = user->anonymous;
        mail_user->admin = user->admin;
+       mail_user->protocol = user->input.protocol != NULL ?
+               p_strdup(mail_user->pool, user->input.protocol) :
+               mail_user->service;
        mail_user->auth_mech = p_strdup(mail_user->pool, user->auth_mech);
        mail_user->auth_token = p_strdup(mail_user->pool, user->auth_token);
        mail_user->auth_user = p_strdup(mail_user->pool, user->auth_user);
index ebe5c6c11f4c085e025c188f346e7874139788df..11e877fada795e5a26ccc4e0c412f5167b41d001 100644 (file)
@@ -38,7 +38,10 @@ enum mail_storage_service_flags {
 struct mail_storage_service_input {
        struct event *event_parent;
 
+       /* service name - NULL defaults to master_service_get_name() */
        const char *service;
+       /* protocol name - defaults to service name */
+       const char *protocol;
        const char *username;
        /* If set, use this string as the session ID */
        const char *session_id;
index c0f5873f9184ad4cdc6bde15353efb2ab00a73e4..3e15ca0e122d9c7b29dd5c6e7fbb60bbd73fbb4f 100644 (file)
@@ -436,7 +436,7 @@ static int mail_user_userdb_lookup_home(struct mail_user *user)
        i_assert(!user->home_looked_up);
 
        i_zero(&info);
-       info.protocol = user->service;
+       info.protocol = user->protocol;
        if (user->conn.local_ip != NULL)
                info.local_ip = *user->conn.local_ip;
        if (user->conn.remote_ip != NULL)
@@ -738,6 +738,7 @@ struct mail_user *mail_user_dup(struct mail_user *user)
        user2->gid = user->gid;
        user2->anonymous = user->anonymous;
        user2->admin = user->admin;
+       user2->protocol = p_strdup(user2->pool, user->protocol);
        user2->auth_mech = p_strdup(user2->pool, user->auth_mech);
        user2->auth_token = p_strdup(user2->pool, user->auth_token);
        user2->auth_user = p_strdup(user2->pool, user->auth_user);
index 9937a3eb428367bed1ad7f4aca82ba1b4166d0c8..30b3a2998484d47acb810684b9732dbbb622b236 100644 (file)
@@ -44,6 +44,7 @@ struct mail_user {
        uid_t uid;
        gid_t gid;
        const char *service;
+       const char *protocol;
        const char *session_id;
        struct mail_user_connection_data conn;
        const char *auth_mech, *auth_token, *auth_user;
index 81d77cfcb0b2fd6e69826532716f14b67c272f5f..9b48873eb4264db9167358347bd16b429c428a73 100644 (file)
@@ -89,6 +89,7 @@ mcp_user_create(struct mail_user *user, const char *dest_username,
 
        i_zero(&input);
        input.service = old_input->service;
+       input.protocol = old_input->protocol;
        input.username = dest_username;
        input.session_id_prefix = user->session_id;
        input.flags_override_add = MAIL_STORAGE_SERVICE_FLAG_NO_PLUGINS |
index 51e08e733eaf2246686039b2a1a910f6a259af52..1cab807b778ca44f6131142b6eb205c9bc9a44be 100644 (file)
@@ -158,6 +158,7 @@ mail_crypt_acl_user_create(struct mail_user *user, const char *dest_username,
 
        i_zero(&input);
        input.service = old_input->service;
+       input.protocol = old_input->protocol;
        input.username = dest_username;
        input.session_id_prefix = user->session_id;
        input.flags_override_add = MAIL_STORAGE_SERVICE_FLAG_NO_PLUGINS |