From: Marco Bettini Date: Mon, 9 Dec 2024 09:31:23 +0000 (+0000) Subject: lib-ldap: add ldap_client_init_auto() X-Git-Tag: 2.4.0~138 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=d3e76dca8a9400a8ddf04d6ba4f650bceb25bb1b;p=thirdparty%2Fdovecot%2Fcore.git lib-ldap: add ldap_client_init_auto() --- diff --git a/src/lib-ldap/ldap-client.c b/src/lib-ldap/ldap-client.c index 7642f53881..4f4460ed98 100644 --- a/src/lib-ldap/ldap-client.c +++ b/src/lib-ldap/ldap-client.c @@ -3,6 +3,7 @@ #include "lib.h" #include "ldap-connection-pool.h" #include "ldap-private.h" +#include "settings.h" /* Max number of ldap-connections that can be created. For now this is unlimited since we're assuming our callers aren't calling us with many @@ -35,6 +36,31 @@ int ldap_client_init(const struct ldap_client_settings *set, return 0; } +int ldap_client_init_auto(struct event *event, struct ldap_client **client_r, + const char **error_r) +{ + const struct ldap_client_settings *set; + struct ldap_client *client; + + if (ldap_client_settings_get(event, &set, error_r) < 0) + return -1; + + if (ldap_conn_pool == NULL) + ldap_conn_pool = ldap_connection_pool_init(LDAP_CONN_POOL_MAX_CONNECTIONS); + + client = i_new(struct ldap_client, 1); + client->event = event_create(event); + int ret = ldap_connection_pool_get(ldap_conn_pool, client, set, + &client->list, error_r); + settings_free(set); + if (ret < 0) { + i_free(client); + return -1; + } + *client_r = client; + return 0; +} + void ldap_client_deinit(struct ldap_client **_client) { struct ldap_client *client = *_client; diff --git a/src/lib-ldap/ldap-client.h b/src/lib-ldap/ldap-client.h index f671e21575..11f6d2bb21 100644 --- a/src/lib-ldap/ldap-client.h +++ b/src/lib-ldap/ldap-client.h @@ -41,6 +41,8 @@ struct ldap_compare_input { failed with the given settings. */ int ldap_client_init(const struct ldap_client_settings *set, struct ldap_client **client_r, const char **error_r); +int ldap_client_init_auto(struct event *event, struct ldap_client **client_r, + const char **error_r); void ldap_client_deinit(struct ldap_client **client); void ldap_client_switch_ioloop(struct ldap_client *client);