Mercurial > dovecot > core-2.2
changeset 1210:8e6addbf12b3 HEAD
minor ldap fixes
author | Timo Sirainen <tss@iki.fi> |
---|---|
date | Thu, 20 Feb 2003 01:55:40 +0200 |
parents | 539b7336b68a |
children | 6fd1f2e82c9a |
files | src/auth/db-ldap.c src/auth/db-ldap.h src/auth/passdb-ldap.c src/auth/userdb-ldap.c |
diffstat | 4 files changed, 43 insertions(+), 31 deletions(-) [+] |
line wrap: on
line diff
--- a/src/auth/db-ldap.c Thu Feb 20 01:37:23 2003 +0200 +++ b/src/auth/db-ldap.c Thu Feb 20 01:55:40 2003 +0200 @@ -86,7 +86,7 @@ i_fatal("LDAP: Unknown scope option '%s'", str); } -static const char *get_ldap_error(struct ldap_connection *conn) +const char *ldap_get_error(struct ldap_connection *conn) { int ret, err; @@ -116,7 +116,7 @@ msgid = ldap_search(conn->ld, base, scope, filter, attributes, 0); if (msgid == -1) { i_error("LDAP: ldap_search() failed (filter %s): %s", - filter, get_ldap_error(conn)); + filter, ldap_get_error(conn)); request->callback(conn, request, NULL); return; } @@ -132,7 +132,7 @@ LDAPMessage *res; int ret, msgid; - for (;;) { + while (conn->ld != NULL) { memset(&timeout, 0, sizeof(timeout)); ret = ldap_result(conn->ld, LDAP_RES_ANY, 1, &timeout, &res); #ifdef OPENLDAP_ASYNC_WORKAROUND @@ -145,31 +145,22 @@ if (ret <= 0) { if (ret < 0) { i_error("LDAP: ldap_result() failed: %s", - get_ldap_error(conn)); + ldap_get_error(conn)); /* reconnect */ ldap_conn_close(conn); } return; } - ret = ldap_result2error(conn->ld, res, 0); - if (ret != LDAP_SUCCESS) { - i_error("LDAP: ldap_result() failed: %s", - ldap_err2string(ret)); + msgid = ldap_msgid(res); + request = hash_lookup(conn->requests, POINTER_CAST(msgid)); + if (request == NULL) { + i_error("LDAP: Reply with unknown msgid %d", + msgid); } else { - msgid = ldap_msgid(res); - - request = hash_lookup(conn->requests, - POINTER_CAST(msgid)); - if (request != NULL) { - request->callback(conn, request, res); - hash_remove(conn->requests, - POINTER_CAST(msgid)); - i_free(request); - } else { - i_error("LDAP: Reply with unknown msgid %d", - msgid); - } + hash_remove(conn->requests, POINTER_CAST(msgid)); + request->callback(conn, request, res); + i_free(request); } ldap_msgfree(res); @@ -200,14 +191,14 @@ /* NOTE: we use blocking connect, we couldn't do anything anyway until it's done. */ ret = ldap_simple_bind_s(conn->ld, conn->set.dn, conn->set.dnpass); + if (ret == LDAP_SERVER_DOWN) { + i_error("LDAP: Can't connect to server: %s", conn->set.hosts); + return FALSE; + } if (ret != LDAP_SUCCESS) { - if (ret == LDAP_SERVER_DOWN) { - i_error("LDAP: Can't connect to server: %s", - conn->set.hosts); - } else { - i_error("LDAP: ldap_simple_bind_s() failed: %s", - ldap_err2string(ret)); - } + i_error("LDAP: ldap_simple_bind_s() failed (dn %s): %s", + conn->set.dn == NULL ? "(none)" : conn->set.dn, + ldap_get_error(conn)); return FALSE; } @@ -227,11 +218,13 @@ static void ldap_conn_close(struct ldap_connection *conn) { - if (conn->connected) { + hash_clear(conn->requests, FALSE); + + conn->connected = FALSE; + + if (conn->io != NULL) { io_remove(conn->io); conn->io = NULL; - - conn->connected = FALSE; } if (conn->ld != NULL) {
--- a/src/auth/db-ldap.h Thu Feb 20 01:37:23 2003 +0200 +++ b/src/auth/db-ldap.h Thu Feb 20 01:55:40 2003 +0200 @@ -61,5 +61,6 @@ void db_ldap_unref(struct ldap_connection *conn); const char *ldap_escape(const char *str); +const char *ldap_get_error(struct ldap_connection *conn); #endif
--- a/src/auth/passdb-ldap.c Thu Feb 20 01:37:23 2003 +0200 +++ b/src/auth/passdb-ldap.c Thu Feb 20 01:55:40 2003 +0200 @@ -61,6 +61,15 @@ user = auth_request->user; password = NULL; + if (res != NULL) { + ret = ldap_result2error(conn->ld, res, 0); + if (ret != LDAP_SUCCESS) { + i_error("ldap(%s): ldap_search() failed: %s", + user, ldap_err2string(ret)); + res = NULL; + } + } + entry = res == NULL ? NULL : ldap_first_entry(conn->ld, res); if (entry == NULL) { if (res != NULL)
--- a/src/auth/userdb-ldap.c Thu Feb 20 01:37:23 2003 +0200 +++ b/src/auth/userdb-ldap.c Thu Feb 20 01:55:40 2003 +0200 @@ -96,6 +96,15 @@ LDAPMessage *entry; BerElement *ber; char *attr, **vals; + int ret; + + ret = ldap_result2error(conn->ld, res, 0); + if (ret != LDAP_SUCCESS) { + i_error("LDAP: ldap_search() failed: %s", + ldap_err2string(ret)); + urequest->userdb_callback(NULL, request->context); + return; + } entry = res == NULL ? NULL : ldap_first_entry(conn->ld, res); if (entry == NULL) {