Mercurial > dovecot > original-hg > dovecot-1.2
changeset 4751:aadf124d273f HEAD
Fixes
author | Timo Sirainen <tss@iki.fi> |
---|---|
date | Sat, 04 Nov 2006 22:55:16 +0200 |
parents | c02b31f07299 |
children | e2493679cd0a |
files | src/auth/db-ldap.c |
diffstat | 1 files changed, 26 insertions(+), 19 deletions(-) [+] |
line wrap: on
line diff
--- a/src/auth/db-ldap.c Sat Nov 04 22:22:31 2006 +0200 +++ b/src/auth/db-ldap.c Sat Nov 04 22:55:16 2006 +0200 @@ -147,24 +147,26 @@ return; } - if (conn->last_auth_bind) { - /* switch back to the default dn before doing the search - request. */ - if (db_ldap_bind(conn) < 0) { + if (conn->connected) { + if (conn->last_auth_bind) { + /* switch back to the default dn before doing the + search request. */ + if (db_ldap_bind(conn) < 0) { + request->callback(conn, request, NULL); + return; + } + } + + msgid = ldap_search(conn->ld, request->base, scope, + request->filter, request->attributes, 0); + if (msgid == -1) { + i_error("LDAP: ldap_search() failed (filter %s): %s", + request->filter, ldap_get_error(conn)); request->callback(conn, request, NULL); return; } } - msgid = ldap_search(conn->ld, request->base, scope, - request->filter, request->attributes, 0); - if (msgid == -1) { - i_error("LDAP: ldap_search() failed (filter %s): %s", - request->filter, ldap_get_error(conn)); - request->callback(conn, request, NULL); - return; - } - hash_insert(conn->requests, POINTER_CAST(msgid), request); } @@ -320,10 +322,12 @@ return -1; } - conn->connected = TRUE; + if (!conn->connected) { + conn->connected = TRUE; - /* in case there are requests waiting, retry them */ - ldap_conn_retry_requests(conn); + /* in case there are requests waiting, retry them */ + ldap_conn_retry_requests(conn); + } return 0; } @@ -342,7 +346,10 @@ } ret = ldap_result2error(conn->ld, res, FALSE); - (void)db_ldap_connect_finish(conn, ret); + if (db_ldap_connect_finish(conn, ret) < 0) { + /* lost connection, close it */ + ldap_conn_close(conn, TRUE); + } } static int db_ldap_bind(struct ldap_connection *conn) @@ -350,8 +357,6 @@ struct ldap_request *ldap_request; int msgid; - conn->connecting = TRUE; - ldap_request = i_new(struct ldap_request, 1); ldap_request->callback = db_ldap_bind_callback; ldap_request->context = conn; @@ -364,6 +369,8 @@ i_free(ldap_request); return -1; } + + conn->connecting = TRUE; hash_insert(conn->requests, POINTER_CAST(msgid), ldap_request); /* we're binding back to the original DN, not doing an