]> granicus.if.org Git - php/commitdiff
ext/ldap: Allow default host from ldap.conf to work.
authorDavid Caldwell <david@galvanix.com>
Thu, 25 May 2017 00:41:12 +0000 (00:41 +0000)
committerCôme Bernigaud <mcmic@php.net>
Tue, 30 May 2017 15:30:32 +0000 (17:30 +0200)
This fixes an regression introduced in
e7af0fe1eb89e40671e86a588aa1b78607b85461. Previously, calling
ldap_connect() with no parameters would pass NULL to ldap_init(),
which causes it to use the default host specified in
/etc/ldap/ldap.conf (on Ubuntu).

When the code changed to use ldap_initialize(), it initialized a uri,
even if there were no parameters passed to ldap_connect(). Because of
this, there's no way to pass a NULL into ldap_initialize(), making it
impossible to use the default uri from ldap.conf.

This commit bypasses the uri creation when there is no host argument,
passing on a NULL to ldap_initialize() which restores the old PHP 5.5
behavior.

ext/ldap/ldap.c

index 6d2de18d614559da8c2cab7eb41fc55d62a8052e..d17719a28526986db88051b7eee8e44467883f68 100644 (file)
@@ -409,7 +409,7 @@ PHP_FUNCTION(ldap_connect)
        {
                int rc = LDAP_SUCCESS;
                char    *url = host;
-               if (!ldap_is_ldap_url(url)) {
+               if (url && !ldap_is_ldap_url(url)) {
                        int     urllen = hostlen + sizeof( "ldap://:65535" );
 
                        if (port <= 0 || port > 65535) {
@@ -419,7 +419,7 @@ PHP_FUNCTION(ldap_connect)
                        }
 
                        url = emalloc(urllen);
-                       snprintf( url, urllen, "ldap://%s:" ZEND_LONG_FMT, host ? host : "", port );
+                       snprintf( url, urllen, "ldap://%s:" ZEND_LONG_FMT, host, port );
                }
 
 #ifdef LDAP_API_FEATURE_X_OPENLDAP