[dovecot-cvs] dovecot/src/auth db-ldap.c,1.11,1.12 db-ldap.h,1.8,1.9 passdb-ldap.c,1.6,1.7 userdb-ldap.c,1.9,1.10
cras at procontrol.fi
cras at procontrol.fi
Thu Feb 20 01:55:42 EET 2003
Update of /home/cvs/dovecot/src/auth
In directory danu:/tmp/cvs-serv27451/auth
Modified Files:
db-ldap.c db-ldap.h passdb-ldap.c userdb-ldap.c
Log Message:
minor ldap fixes
Index: db-ldap.c
===================================================================
RCS file: /home/cvs/dovecot/src/auth/db-ldap.c,v
retrieving revision 1.11
retrieving revision 1.12
diff -u -d -r1.11 -r1.12
--- db-ldap.c 18 Feb 2003 19:11:26 -0000 1.11
+++ db-ldap.c 19 Feb 2003 23:55:40 -0000 1.12
@@ -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) {
Index: db-ldap.h
===================================================================
RCS file: /home/cvs/dovecot/src/auth/db-ldap.h,v
retrieving revision 1.8
retrieving revision 1.9
diff -u -d -r1.8 -r1.9
--- db-ldap.h 18 Feb 2003 19:11:26 -0000 1.8
+++ db-ldap.h 19 Feb 2003 23:55:40 -0000 1.9
@@ -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
Index: passdb-ldap.c
===================================================================
RCS file: /home/cvs/dovecot/src/auth/passdb-ldap.c,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -d -r1.6 -r1.7
--- passdb-ldap.c 18 Feb 2003 19:24:44 -0000 1.6
+++ passdb-ldap.c 19 Feb 2003 23:55:40 -0000 1.7
@@ -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)
Index: userdb-ldap.c
===================================================================
RCS file: /home/cvs/dovecot/src/auth/userdb-ldap.c,v
retrieving revision 1.9
retrieving revision 1.10
diff -u -d -r1.9 -r1.10
--- userdb-ldap.c 18 Feb 2003 19:11:26 -0000 1.9
+++ userdb-ldap.c 19 Feb 2003 23:55:40 -0000 1.10
@@ -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) {
More information about the dovecot-cvs
mailing list