LDAP: fix taint-check in server list walk. Bug 2646
authorJeremy Harris <jgh146exb@wizmail.org>
Fri, 30 Oct 2020 13:58:01 +0000 (13:58 +0000)
committerJeremy Harris <jgh146exb@wizmail.org>
Fri, 30 Oct 2020 13:58:01 +0000 (13:58 +0000)
    (cherry picked from commit 51b611aa81d7ee01243b196abc34a0e2eabd293c)

doc/doc-txt/ChangeLog
src/src/lookups/ldap.c
test/confs/9001

index ec1b033045766af0a2674b44718399956624d317..9924fca5c1dee308453abf004aa3be1c75a11ba7 100644 (file)
@@ -102,6 +102,11 @@ JH/22 Bug 2265: Force SNI usage for smtp transport DANE'd connections, to be
 JH/23 Logging: with the +tls_sni log_selector, do not wrap the received SNI
       in quotes.
 
+JH/26 Bug 2646: fix a memory usage issue in ldap lookups.  Previously, when more
+      than one server was defined and depending on the platform memory layout
+      details, an internal consistency trap could be hit while walking the list
+      of servers.
+
 
 Exim version 4.94
 -----------------
index ef550a08dcb3cc376954b05274ed66d289a91391..34908a351990d1fec684f86f4c5ed3ef81c49b29 100644 (file)
@@ -1093,7 +1093,6 @@ uschar *password = NULL;
 uschar *local_servers = NULL;
 uschar *server;
 const uschar *list;
-uschar buffer[512];
 
 while (isspace(*url)) url++;
 
@@ -1254,7 +1253,7 @@ if (!eldap_default_servers && !local_servers  || p[3] != '/')
 /* Loop through the default servers until OK or FAIL. Use local_servers list
  * if defined in the lookup, otherwise use the global default list */
 list = !local_servers ? eldap_default_servers : local_servers;
-while ((server = string_nextinlist(&list, &sep, buffer, sizeof(buffer))))
+while ((server = string_nextinlist(&list, &sep, NULL, 0)))
   {
   int rc;
   int port = 0;
index a1f4ba3ebd9c9bbc093cbe07b3f9459260c8521d..ba5a1687f6366f10a56d5b7df04d048c7f24af39 100644 (file)
@@ -18,7 +18,7 @@ r0:
 
 r1:
   driver = redirect
-  data = ${lookup ldap user="cn=xxx,o=yyy,c=UK" pass="secret" \
+  data = ${lookup ldap {USER="cn=xxx,o=yyy,c=UK" PASS="secret" \
          ldap:///o=zzz,c=UK,?sn?sub?(cn=foo)}}