From: Timo Sirainen Date: Mon, 26 Jun 2023 09:04:21 +0000 (+0300) Subject: lib-storage, global: Add mail_user.protocol and mail_storage_service_input.protocol X-Git-Tag: 2.4.1~1538 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=a284eeb96f8f0e4ea6b6ee509a39b4ebbea07a48;p=thirdparty%2Fdovecot%2Fcore.git lib-storage, global: Add mail_user.protocol and mail_storage_service_input.protocol It defaults to same as service, but can be overridden. --- diff --git a/src/lib-imap-urlauth/imap-urlauth.c b/src/lib-imap-urlauth/imap-urlauth.c index 4b2387f525..5a45e20304 100644 --- a/src/lib-imap-urlauth/imap-urlauth.c +++ b/src/lib-imap-urlauth/imap-urlauth.c @@ -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) diff --git a/src/lib-storage/index/shared/shared-storage.c b/src/lib-storage/index/shared/shared-storage.c index 0804758416..6ddafd4f87 100644 --- a/src/lib-storage/index/shared/shared-storage.c +++ b/src/lib-storage/index/shared/shared-storage.c @@ -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, diff --git a/src/lib-storage/mail-storage-service.c b/src/lib-storage/mail-storage-service.c index 5c4c270453..d9d80206ba 100644 --- a/src/lib-storage/mail-storage-service.c +++ b/src/lib-storage/mail-storage-service.c @@ -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); diff --git a/src/lib-storage/mail-storage-service.h b/src/lib-storage/mail-storage-service.h index ebe5c6c11f..11e877fada 100644 --- a/src/lib-storage/mail-storage-service.h +++ b/src/lib-storage/mail-storage-service.h @@ -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; diff --git a/src/lib-storage/mail-user.c b/src/lib-storage/mail-user.c index c0f5873f91..3e15ca0e12 100644 --- a/src/lib-storage/mail-user.c +++ b/src/lib-storage/mail-user.c @@ -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); diff --git a/src/lib-storage/mail-user.h b/src/lib-storage/mail-user.h index 9937a3eb42..30b3a29984 100644 --- a/src/lib-storage/mail-user.h +++ b/src/lib-storage/mail-user.h @@ -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; diff --git a/src/plugins/mail-crypt/doveadm-mail-crypt.c b/src/plugins/mail-crypt/doveadm-mail-crypt.c index 81d77cfcb0..9b48873eb4 100644 --- a/src/plugins/mail-crypt/doveadm-mail-crypt.c +++ b/src/plugins/mail-crypt/doveadm-mail-crypt.c @@ -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 | diff --git a/src/plugins/mail-crypt/mail-crypt-acl-plugin.c b/src/plugins/mail-crypt/mail-crypt-acl-plugin.c index 51e08e733e..1cab807b77 100644 --- a/src/plugins/mail-crypt/mail-crypt-acl-plugin.c +++ b/src/plugins/mail-crypt/mail-crypt-acl-plugin.c @@ -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 |