]> git.ipfire.org Git - thirdparty/openldap.git/commitdiff
ITS#7585 fix ldapi with SASL_NOCANON
authorSumit Bose <sbose@redhat.com>
Tue, 7 May 2013 15:02:57 +0000 (17:02 +0200)
committerQuanah Gibson-Mount <quanah@openldap.org>
Thu, 18 Apr 2019 23:38:13 +0000 (23:38 +0000)
Was using the ldapi socket path as a hostname

libraries/libldap/cyrus.c

index b615a6a03469510a5146e4087f020b3ce4309e0f..f292527de061fed149076046d338498970bbfdfb 100644 (file)
@@ -385,6 +385,8 @@ ldap_int_sasl_bind(
        struct berval   ccred = BER_BVNULL;
        int saslrc, rc;
        unsigned credlen;
+       char my_hostname[HOST_NAME_MAX + 1];
+       int free_saslhost = 0;
 
        Debug( LDAP_DEBUG_TRACE, "ldap_int_sasl_bind: %s\n",
                mechs ? mechs : "<null>", 0, 0 );
@@ -445,14 +447,25 @@ ldap_int_sasl_bind(
 
                        /* If we don't need to canonicalize just use the host
                         * from the LDAP URI.
+                        * Always use the result of gethostname() for LDAPI.
                         */
-                       if ( nocanon )
+                       if (ld->ld_defconn->lconn_server->lud_scheme != NULL &&
+                           strcmp("ldapi", ld->ld_defconn->lconn_server->lud_scheme) == 0) {
+                               rc = gethostname(my_hostname, HOST_NAME_MAX + 1);
+                               if (rc == 0) {
+                                       saslhost = my_hostname;
+                               } else {
+                                       saslhost = "localhost";
+                               }
+                       } else if ( nocanon )
                                saslhost = ld->ld_defconn->lconn_server->lud_host;
-                       else 
+                       else {
                                saslhost = ldap_host_connected_to( ld->ld_defconn->lconn_sb,
                                "localhost" );
+                               free_saslhost = 1;
+                       }
                        rc = ldap_int_sasl_open( ld, ld->ld_defconn, saslhost );
-                       if ( !nocanon )
+                       if ( free_saslhost )
                                LDAP_FREE( saslhost );
                }