[Exim] Using ldaps:// urls in LDAP queries

Top Page
Delete this message
Reply to this message
Author: Jeffrey C. Ollie
Date:  
To: exim-users
Subject: [Exim] Using ldaps:// urls in LDAP queries
I needed to use ldaps:// urls in LDAP queries since I needed to bind
as a specific user and I didn't want to enable non-anonymous binds
over non-secure connectstion in my LDAP server. It's very specific to
OpenLDAP 2.0.x since I don't have access to other LDAP libraries.

The patch is against v3.30.

Jeff

--- exim-3.30/src/lookups/ldap.c.ldaps    Mon Jun 18 06:03:25 2001
+++ exim-3.30/src/lookups/ldap.c    Mon Jun 25 14:20:46 2001
@@ -132,6 +132,9 @@
 LDAPMessage  *result;
 BerElement   *ber;
 LDAP_CONNECTION *lcp;
+#ifdef LDAP_OPT_X_TLS
+int tls_option;
+#endif


struct timeval timeout;
struct timeval *timeoutptr = NULL;
@@ -219,15 +222,23 @@

 if (lcp == NULL)
   {
-  LDAP *ld = ldap_open(host, (port != 0)? port : LDAP_PORT);
+  LDAP *ld = ldap_init(host, (port != 0)? port : LDAP_PORT);
   if (ld == NULL)
     {
-    *errmsg = string_sprintf("failed to open connection to LDAP server %s:%d "
+    *errmsg = string_sprintf("failed to initialize connection with LDAP server %s:%d "
       "- %s", host, port, strerror(errno));
     goto RETURN_ERROR;
     }


-  DEBUG(9) debug_printf("Opened connection to LDAP server %s:%d\n", host, port);
+  DEBUG(9) debug_printf("Initialized connection with LDAP server %s:%d\n", host, port);
+
+#ifdef LDAP_OPT_X_TLS
+  if(strncmp(ludp->lud_scheme, "ldaps", 5) == 0)
+    tls_option = LDAP_OPT_X_TLS_HARD;
+  else
+    tls_option = LDAP_OPT_X_TLS_TRY;
+  ldap_set_option(ld, LDAP_OPT_X_TLS, (void *)&tls_option);
+#endif


lcp = store_malloc(sizeof(LDAP_CONNECTION));
lcp->host = (host == NULL)? NULL : string_copy_malloc(host);
@@ -579,7 +590,7 @@
that are recognized. They are of the form NAME=VALUE, with the value being
optionally double-quoted. There must still be a space after it, however. */

-while (strncmp(url, "ldap://", 7) != 0)
+ while ((strncmp(url, "ldap://", 7) != 0) && (strncmp(url, "ldaps://", 8) != 0))
{
char *name = url;
while (*url != 0 && *url != '=') url++;