ph10 2004/12/21 12:00:59 GMT
Modified files:
exim-doc/doc-txt ChangeLog
exim-src ACKNOWLEDGMENTS
exim-src/src/lookups ldap.c
exim-test-orig/AutoTest/stderr 901
Log:
Alex Miller's patch for LDAP_RES_SEARCH_REFERENCE.
Revision Changes Path
1.52 +11 -0 exim/exim-doc/doc-txt/ChangeLog
1.10 +2 -1 exim/exim-src/ACKNOWLEDGMENTS
1.5 +13 -8 exim/exim-src/src/lookups/ldap.c
1.3 +11 -0 exim/exim-test-orig/AutoTest/stderr/901
Index: ChangeLog
===================================================================
RCS file: /home/cvs/exim/exim-doc/doc-txt/ChangeLog,v
retrieving revision 1.51
retrieving revision 1.52
diff -u -r1.51 -r1.52
--- ChangeLog 21 Dec 2004 11:28:38 -0000 1.51
+++ ChangeLog 21 Dec 2004 12:00:59 -0000 1.52
@@ -1,4 +1,4 @@
-$Cambridge: exim/exim-doc/doc-txt/ChangeLog,v 1.51 2004/12/21 11:28:38 ph10 Exp $
+$Cambridge: exim/exim-doc/doc-txt/ChangeLog,v 1.52 2004/12/21 12:00:59 ph10 Exp $
Change log file for Exim from version 4.21
-------------------------------------------
@@ -222,6 +222,17 @@
the queue_time_overall log selector is set), a one-byte patch to exigrep
was needed to allow it to recognize "Completed" as not the last thing in
the line.
+
+54. The LDAP lookup was not handling a return of LDAP_RES_SEARCH_REFERENCE. A
+ patch that reportedly fixes this has been added. I am not expert enough to
+ create a test for it. This is what the patch creator wrote:
+
+ "I found a little strange behaviour of ldap code when working with
+ Windows 2003 AD Domain, where users was placed in more than one
+ Organization Units. When I tried to give exim partial DN, the exit code
+ of ldap_search was unknown to exim because of LDAP_RES_SEARCH_REFERENCE.
+ But simultaneously result of request was absolutely normal ldap result,
+ so I produce this patch..."
Exim version 4.43
Index: ACKNOWLEDGMENTS
===================================================================
RCS file: /home/cvs/exim/exim-src/ACKNOWLEDGMENTS,v
retrieving revision 1.9
retrieving revision 1.10
diff -u -r1.9 -r1.10
--- ACKNOWLEDGMENTS 20 Dec 2004 15:24:28 -0000 1.9
+++ ACKNOWLEDGMENTS 21 Dec 2004 12:00:59 -0000 1.10
@@ -1,4 +1,4 @@
-$Cambridge: exim/exim-src/ACKNOWLEDGMENTS,v 1.9 2004/12/20 15:24:28 ph10 Exp $
+$Cambridge: exim/exim-src/ACKNOWLEDGMENTS,v 1.10 2004/12/21 12:00:59 ph10 Exp $
EXIM ACKNOWLEDGEMENTS
@@ -20,7 +20,7 @@
Philip Hazel
Lists created: 20 November 2002
-Last updated: 20 December 2004
+Last updated: 21 December 2004
THE OLD LIST
@@ -172,6 +172,7 @@
Andreas Metzler Patch for message_id_header_domain
Suggested patch for multi-config files in scripts bug
Alex Miller Suggested readline() patch
+ Patch for LDAP_RES_SEARCH_REFERENCE handling
Andreas Mueller Patch for logging uncompleted SMTP transactions
Pete Naylor Patch for LDAP TCP connect timeout setting
Marcin Owsiany Diagnosis of a tricky timeout failure bug
Index: ldap.c
===================================================================
RCS file: /home/cvs/exim/exim-src/src/lookups/ldap.c,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -r1.4 -r1.5
--- ldap.c 17 Nov 2004 16:31:45 -0000 1.4
+++ ldap.c 21 Dec 2004 12:00:59 -0000 1.5
@@ -1,4 +1,4 @@
-/* $Cambridge: exim/exim-src/src/lookups/ldap.c,v 1.4 2004/11/17 16:31:45 ph10 Exp $ */
+/* $Cambridge: exim/exim-src/src/lookups/ldap.c,v 1.5 2004/12/21 12:00:59 ph10 Exp $ */
/*************************************************
* Exim - an Internet mail transport agent *
@@ -167,7 +167,7 @@
int attr_count = 0;
int error_yield = DEFER;
int msgid;
-int rc;
+int rc, ldap_rc, ldap_parse_rc;
int port;
int ptr = 0;
int rescount = 0;
@@ -779,10 +779,10 @@
}
/* A return code that isn't -1 doesn't necessarily mean there were no problems
-with the search. The message must be an LDAP_RES_SEARCH_RESULT or else it's
-something we can't handle. */
+with the search. The message must be an LDAP_RES_SEARCH_RESULT or
+LDAP_RES_SEARCH_REFERENCE or else it's something we can't handle. */
-if (rc != LDAP_RES_SEARCH_RESULT)
+if (rc != LDAP_RES_SEARCH_RESULT && rc != LDAP_RES_SEARCH_REFERENCE)
{
*errmsg = string_sprintf("ldap_result returned unexpected code %d", rc);
goto RETURN_ERROR;
@@ -791,11 +791,16 @@
/* We have a result message from the server. This doesn't yet mean all is well.
We need to parse the message to find out exactly what's happened. */
- #if defined LDAP_LIB_SOLARIS || defined LDAP_LIB_OPENLDAP2
- if (ldap_parse_result(lcp->ld, result, &rc, CSS &matched, CSS &error2, NULL,
- NULL, 0) < 0)
+#if defined LDAP_LIB_SOLARIS || defined LDAP_LIB_OPENLDAP2
+ ldap_rc = rc;
+ ldap_parse_rc = ldap_parse_result(lcp->ld, result, &rc, CSS &matched,
+ CSS &error2, NULL, NULL, 0);
+ DEBUG(D_lookup) debug_printf("ldap_parse_result: %d\n", ldap_parse_rc);
+ if (ldap_parse_rc < 0 &&
+ (ldap_parse_rc != LDAP_NO_RESULTS_RETURNED ||
+ ldap_rc != LDAP_RES_SEARCH_REFERENCE))
{
- *errmsg = US"ldap_parse_result failed";
+ *errmsg = string_sprintf("ldap_parse_result failed %d", ldap_parse_rc);
goto RETURN_ERROR;
}
error1 = US ldap_err2string(rc);
Index: 901
===================================================================
RCS file: /home/cvs/exim/exim-test-orig/AutoTest/stderr/901,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- 901 10 Nov 2004 14:15:20 -0000 1.2
+++ 901 21 Dec 2004 12:00:59 -0000 1.3
@@ -51,6 +51,7 @@
LDAP entry loop
LDAP attr loop sn:Hazel
search ended by ldap_result yielding 101
+ldap_parse_result: 0
ldap_parse_result yielded 0: Success
LDAP search: returning: Hazel
lookup yielded: Hazel
@@ -73,6 +74,7 @@
LDAP entry loop
LDAP attr loop sn:Hazel
search ended by ldap_result yielding 101
+ldap_parse_result: 0
ldap_parse_result yielded 0: Success
LDAP search: returning: Hazel
lookup yielded: Hazel
@@ -102,6 +104,7 @@
LDAP entry loop
LDAP attr loop sn:Hazel
search ended by ldap_result yielding 101
+ldap_parse_result: 0
ldap_parse_result yielded 0: Success
LDAP search: returning: Hazel
lookup yielded: Hazel
@@ -122,6 +125,7 @@
LDAP entry loop
LDAP attr loop sn:Hazel
search ended by ldap_result yielding 101
+ldap_parse_result: 0
ldap_parse_result yielded 0: Success
LDAP search: returning: Hazel
lookup yielded: Hazel
@@ -145,6 +149,7 @@
LDAP entry loop
LDAP attr loop sn:Hazel
search ended by ldap_result yielding 101
+ldap_parse_result: 0
ldap_parse_result yielded 0: Success
LDAP search: returning: Hazel
lookup yielded: Hazel
@@ -165,6 +170,7 @@
LDAP entry loop
LDAP attr loop sn:Hazel
search ended by ldap_result yielding 101
+ldap_parse_result: 0
ldap_parse_result yielded 0: Success
LDAP search: returning: Hazel
lookup yielded: Hazel
@@ -198,6 +204,7 @@
LDAP entry loop
LDAP attr loop sn:Hazel
search ended by ldap_result yielding 101
+ldap_parse_result: 0
ldap_parse_result yielded 0: Success
LDAP search: returning: Hazel
lookup yielded: Hazel
@@ -220,6 +227,7 @@
LDAP entry loop
LDAP attr loop sn:Hazel
search ended by ldap_result yielding 101
+ldap_parse_result: 0
ldap_parse_result yielded 0: Success
LDAP search: returning: Hazel
lookup yielded: Hazel
@@ -251,6 +259,7 @@
LDAP entry loop
LDAP attr loop sn:Hazel
search ended by ldap_result yielding 101
+ldap_parse_result: 0
ldap_parse_result yielded 0: Success
LDAP search: returning: Hazel
lookup yielded: Hazel
@@ -271,6 +280,7 @@
LDAP entry loop
LDAP attr loop sn:Hazel
search ended by ldap_result yielding 101
+ldap_parse_result: 0
ldap_parse_result yielded 0: Success
LDAP search: returning: Hazel
lookup yielded: Hazel
@@ -291,6 +301,7 @@
LDAP entry loop
LDAP attr loop sn:Hazel
search ended by ldap_result yielding 101
+ldap_parse_result: 0
ldap_parse_result yielded 0: Success
LDAP search: returning: Hazel
lookup yielded: Hazel