]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
lib-ldap: add ldap_client_init_auto()
authorMarco Bettini <marco.bettini@open-xchange.com>
Mon, 9 Dec 2024 09:31:23 +0000 (09:31 +0000)
committerAki Tuomi <aki.tuomi@open-xchange.com>
Fri, 17 Jan 2025 08:40:01 +0000 (10:40 +0200)
src/lib-ldap/ldap-client.c
src/lib-ldap/ldap-client.h

index 7642f53881b84028ac9c35f3ed3eb4084d00f8c5..4f4460ed984ce4050777bf7fac47b7ae2aacf4ce 100644 (file)
@@ -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;
index f671e21575015f3975e872b8c0b277f61a72a32c..11f6d2bb21a76d1a0e210a0ff2fd5fd131aa44ab 100644 (file)
@@ -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);