From: Aki Tuomi Date: Wed, 19 Feb 2025 09:23:17 +0000 (+0200) Subject: lib-storage: imapc - Check sasl mechanism X-Git-Tag: 2.4.1~122 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=3c03a4ef212f9257896b09cd866a47305bb21dea;p=thirdparty%2Fdovecot%2Fcore.git lib-storage: imapc - Check sasl mechanism --- diff --git a/src/lib-storage/index/imapc/Makefile.am b/src/lib-storage/index/imapc/Makefile.am index f128f6c4ec..5a8c648bdf 100644 --- a/src/lib-storage/index/imapc/Makefile.am +++ b/src/lib-storage/index/imapc/Makefile.am @@ -8,6 +8,7 @@ AM_CPPFLAGS = \ -I$(top_srcdir)/src/lib-mail \ -I$(top_srcdir)/src/lib-imap \ -I$(top_srcdir)/src/lib-imap-client \ + -I$(top_srcdir)/src/lib-sasl/ \ -I$(top_srcdir)/src/lib-index \ -I$(top_srcdir)/src/lib-storage \ -I$(top_srcdir)/src/lib-storage/list \ diff --git a/src/lib-storage/index/imapc/imapc-storage.c b/src/lib-storage/index/imapc/imapc-storage.c index fdd9daf13f..1ec8d99e85 100644 --- a/src/lib-storage/index/imapc/imapc-storage.c +++ b/src/lib-storage/index/imapc/imapc-storage.c @@ -16,6 +16,7 @@ #include "imapc-attribute.h" #include "imapc-settings.h" #include "imapc-storage.h" +#include "dsasl-client.h" #define DNS_CLIENT_SOCKET_NAME "dns-client" @@ -329,10 +330,25 @@ int imapc_storage_client_create(struct mailbox_list *list, it's a bug. */ params.flags |= IMAPC_PARAMETER_CLIENT_DISABLED; - if (*imapc_set->imapc_password == '\0') { - *error_r = "missing imapc_password"; - settings_free(imapc_set); - return -1; + if (!array_is_empty(&imapc_set->imapc_sasl_mechanisms)) { + const char *mech_name; + array_foreach_elem(&imapc_set->imapc_sasl_mechanisms, mech_name) { + const struct dsasl_client_mech *mech = + dsasl_client_mech_find(mech_name); + if (mech == NULL) { + *error_r = + t_strdup_printf("imapc_sasl_mechanism: " + "'%s' is not supported", + mech_name); + settings_free(imapc_set); + return -1; + } else if (dsasl_client_mech_uses_password(mech) && + *imapc_set->imapc_password == '\0') { + *error_r = "Missing imapc_password"; + settings_free(imapc_set); + return -1; + } + } } params.override_dns_client_socket_path = *ns->user->set->base_dir == '\0' ? "" : t_strconcat(ns->user->set->base_dir, "/",