From da988255f5748d6ec3b84296ce4b6d938a44226e Mon Sep 17 00:00:00 2001 From: Timo Sirainen <timo.sirainen@open-xchange.com> Date: Fri, 13 Dec 2024 17:06:42 +0200 Subject: [PATCH] lib-sieve: storage: ldap: Change auth_sasl_mechanisms to boollist --- src/lib-sieve/storage/ldap/sieve-ldap-db.c | 10 ++++++---- .../storage/ldap/sieve-ldap-storage-settings.c | 4 ++-- .../storage/ldap/sieve-ldap-storage-settings.h | 2 +- 3 files changed, 9 insertions(+), 7 deletions(-) diff --git a/src/lib-sieve/storage/ldap/sieve-ldap-db.c b/src/lib-sieve/storage/ldap/sieve-ldap-db.c index fd5942255..aea0d0dd0 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 0e7d611a2..e19970b25 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 3f8d195a1..88fa034df 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; -- GitLab