diff --git a/src/lib-sieve/storage/ldap/sieve-ldap-db.c b/src/lib-sieve/storage/ldap/sieve-ldap-db.c
index fd59422558b6818cbb6641561c13eb1a8ad69435..aea0d0dd092669ea80e2b5ce232ec823bc2537d1 100644
--- a/src/lib-sieve/storage/ldap/sieve-ldap-db.c
+++ b/src/lib-sieve/storage/ldap/sieve-ldap-db.c
@@ -712,7 +712,7 @@ static int db_ldap_set_options(struct ldap_connection *conn)
 #endif
 
 	if (set->ldap_version < 3) {
-		if (set->auth_sasl_mechanisms[0] != '\0') {
+		if (!array_is_empty(&set->auth_sasl_mechanisms)) {
 			e_error(storage->event,
 				"db: ldap_auth_sasl_mechanisms requires ldap_version=3");
 			return -1;
@@ -785,7 +785,7 @@ int sieve_ldap_db_connect(struct ldap_connection *conn)
 #endif
 	}
 
-	if (set->auth_sasl_mechanisms[0]) {
+	if (!array_is_empty(&set->auth_sasl_mechanisms)) {
 #ifdef HAVE_LDAP_SASL
 		struct db_ldap_sasl_bind_context context;
 
@@ -795,10 +795,12 @@ int sieve_ldap_db_connect(struct ldap_connection *conn)
 		context.realm = set->auth_sasl_realm;
 		context.authzid = set->auth_sasl_authz_id;
 
+		const char *mechs = t_array_const_string_join(
+			&set->auth_sasl_mechanisms, " ");
+
 		/* There doesn't seem to be a way to do SASL binding
 		   asynchronously.. */
-		ret = ldap_sasl_interactive_bind_s(conn->ld, NULL,
-						   set->auth_sasl_mechanisms,
+		ret = ldap_sasl_interactive_bind_s(conn->ld, NULL, mechs,
 						   NULL, NULL, LDAP_SASL_QUIET,
 						   sasl_interact, &context);
 		if (db_ldap_connect_finish(conn, ret) < 0)
diff --git a/src/lib-sieve/storage/ldap/sieve-ldap-storage-settings.c b/src/lib-sieve/storage/ldap/sieve-ldap-storage-settings.c
index 0e7d611a2583aa78862bf6c53ac3e792cc2b6cad..e19970b255f9d5f81a3ca5b965d9efa8256cf7cd 100644
--- a/src/lib-sieve/storage/ldap/sieve-ldap-storage-settings.c
+++ b/src/lib-sieve/storage/ldap/sieve-ldap-storage-settings.c
@@ -29,7 +29,7 @@ static const struct setting_define sieve_ldap_setting_defines[] = {
 	DEF(STR, auth_dn),
 	DEF(STR, auth_dn_password),
 	DEF(BOOL, starttls),
-	DEF(STR, auth_sasl_mechanisms),
+	DEF(BOOLLIST, auth_sasl_mechanisms),
 	DEF(STR, auth_sasl_realm),
 	DEF(STR, auth_sasl_authz_id),
 	DEF(STR, tls_ca_cert_file),
@@ -53,7 +53,7 @@ const struct sieve_ldap_settings sieve_ldap_default_settings = {
 	.auth_dn = "",
 	.auth_dn_password = "",
 	.starttls = FALSE,
-	.auth_sasl_mechanisms = "",
+	.auth_sasl_mechanisms = ARRAY_INIT,
 	.auth_sasl_realm = "",
 	.auth_sasl_authz_id = "",
 	.tls_ca_cert_file = "",
diff --git a/src/lib-sieve/storage/ldap/sieve-ldap-storage-settings.h b/src/lib-sieve/storage/ldap/sieve-ldap-storage-settings.h
index 3f8d195a1b2d90b0ed599e1428cf42430a4eb12c..88fa034df79dfcc7acccedbdadb2e66c832d6a63 100644
--- a/src/lib-sieve/storage/ldap/sieve-ldap-storage-settings.h
+++ b/src/lib-sieve/storage/ldap/sieve-ldap-storage-settings.h
@@ -9,7 +9,7 @@ struct sieve_ldap_settings {
 	const char *auth_dn_password;
 
 	bool starttls;
-	const char *auth_sasl_mechanisms;
+	ARRAY_TYPE(const_string) auth_sasl_mechanisms;
 	const char *auth_sasl_realm;
 	const char *auth_sasl_authz_id;