From: Sumit Bose Date: Tue, 7 May 2013 15:02:57 +0000 (+0200) Subject: ITS#7585 fix ldapi with SASL_NOCANON X-Git-Tag: OPENLDAP_REL_ENG_2_4_48~93 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=f2ae471ad272b6351b4cab859706f64878041b1e;p=thirdparty%2Fopenldap.git ITS#7585 fix ldapi with SASL_NOCANON Was using the ldapi socket path as a hostname --- diff --git a/libraries/libldap/cyrus.c b/libraries/libldap/cyrus.c index b615a6a034..f292527de0 100644 --- a/libraries/libldap/cyrus.c +++ b/libraries/libldap/cyrus.c @@ -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 : "", 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 ); }