client = i_new(struct ldap_client, 1);
client->event = event_create(event);
- int ret = ldap_connection_pool_get(ldap_conn_pool, client, set,
+ int ret = ldap_connection_pool_get(ldap_conn_pool, client, set, set->ssl_set,
&client->list, error_r);
settings_free(set);
if (ret < 0) {
int ldap_connection_pool_get(struct ldap_connection_pool *pool,
struct ldap_client *client,
const struct ldap_client_settings *set,
+ const struct ssl_settings *ssl_set,
struct ldap_connection_list **list_r,
const char **error_r)
{
struct ldap_connection *conn;
for (list = pool->conn_list; list != NULL; list = list->next) {
- if (ldap_connection_have_settings(list->conn, set)) {
+ if (ldap_connection_have_settings(list->conn, set, ssl_set)) {
list->refcount++;
*list_r = list;
return 0;
}
}
- if (ldap_connection_init(client, set, &conn, error_r) < 0)
+ if (ldap_connection_init(client, set, ssl_set, &conn, error_r) < 0)
return -1;
list = i_new(struct ldap_connection_list, 1);
struct ldap_client;
struct ldap_client_settings;
+struct ssl_settings;
struct ldap_connection_list {
struct ldap_connection_list *prev, *next;
int ldap_connection_pool_get(struct ldap_connection_pool *pool,
struct ldap_client *client,
const struct ldap_client_settings *set,
+ const struct ssl_settings *ssl_set,
struct ldap_connection_list **list_r,
const char **error_r);
void ldap_connection_pool_unref(struct ldap_connection_pool *pool,
aqueue_idx(conn->request_queue, i));
timeout_remove(&req->to_abort);
}
+ settings_free(conn->ssl_set);
settings_free(conn->set);
event_unref(&conn->event);
pool_unref(&conn->pool);
}
bool ldap_connection_have_settings(struct ldap_connection *conn,
- const struct ldap_client_settings *set)
+ const struct ldap_client_settings *set,
+ const struct ssl_settings *ssl_set)
{
- const struct ldap_client_settings *conn_set = conn->set;
-
if (!settings_equal(&ldap_client_setting_parser_info,
- conn_set, set, NULL))
+ conn->set, set, NULL))
return FALSE;
if (strstr(set->uris, "ldaps://") == NULL && !set->starttls)
return TRUE;
return settings_equal(&ssl_setting_parser_info,
- conn_set->ssl_set, set->ssl_set, NULL);
+ conn->ssl_set, ssl_set, NULL);
}
int ldap_connection_init(struct ldap_client *client,
const struct ldap_client_settings *set,
+ const struct ssl_settings *ssl_set,
struct ldap_connection **conn_r, const char **error_r)
{
i_assert(set->uris != NULL && set->uris[0] != '\0');
conn->client = client;
pool_ref(set->pool);
+ pool_ref(ssl_set->pool);
conn->set = set;
+ conn->ssl_set = ssl_set;
/* deep copy relevant strings */
if (*set->auth_dn_password != '\0')
{
const struct ssl_iostream_settings *ssl_ioset;
- ssl_client_settings_to_iostream_set(set->ssl_set, &ssl_ioset);
+ ssl_client_settings_to_iostream_set(ssl_set, &ssl_ioset);
/* keep in sync with ldap_connection_have_settings() */
conn->ssl_ioset.min_protocol = p_strdup(pool, ssl_ioset->min_protocol);
settings_free(ssl_ioset);
}
- i_assert(ldap_connection_have_settings(conn, set));
if (ldap_connection_setup(conn, error_r) < 0) {
ldap_connection_deinit(&conn);
BerVarray scred;
const struct ldap_client_settings *set;
+ const struct ssl_settings *ssl_set;
struct ssl_iostream_settings ssl_ioset;
struct aqueue *request_queue;
int ldap_connection_init(struct ldap_client *client,
const struct ldap_client_settings *set,
+ const struct ssl_settings *ssl_set,
struct ldap_connection **conn_r, const char **error_r);
void ldap_connection_deinit(struct ldap_connection **_conn);
void ldap_connection_switch_ioloop(struct ldap_connection *conn);
bool ldap_connection_have_settings(struct ldap_connection *conn,
- const struct ldap_client_settings *set);
+ const struct ldap_client_settings *set,
+ const struct ssl_settings *ssl_set);
void ldap_connection_search_start(struct ldap_connection *conn,
const struct ldap_search_input *input,