ITS#7585 fix ldapi with SASL_NOCANON

Was using the ldapi socket path as a hostname
This commit is contained in:
Sumit Bose 2013-05-07 17:02:57 +02:00 committed by Howard Chu
parent b227ea50e0
commit 6c5a79be98

View File

@ -389,6 +389,8 @@ ldap_int_sasl_bind(
struct berval ccred = BER_BVNULL; struct berval ccred = BER_BVNULL;
int saslrc, rc; int saslrc, rc;
unsigned credlen; unsigned credlen;
char my_hostname[HOST_NAME_MAX + 1];
int free_saslhost = 0;
Debug1( LDAP_DEBUG_TRACE, "ldap_int_sasl_bind: %s\n", Debug1( LDAP_DEBUG_TRACE, "ldap_int_sasl_bind: %s\n",
mechs ? mechs : "<null>" ); mechs ? mechs : "<null>" );
@ -449,14 +451,25 @@ ldap_int_sasl_bind(
/* If we don't need to canonicalize just use the host /* If we don't need to canonicalize just use the host
* from the LDAP URI. * 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; saslhost = ld->ld_defconn->lconn_server->lud_host;
else else {
saslhost = ldap_host_connected_to( ld->ld_defconn->lconn_sb, saslhost = ldap_host_connected_to( ld->ld_defconn->lconn_sb,
"localhost" ); "localhost" );
free_saslhost = 1;
}
rc = ldap_int_sasl_open( ld, ld->ld_defconn, saslhost ); rc = ldap_int_sasl_open( ld, ld->ld_defconn, saslhost );
if ( !nocanon ) if ( free_saslhost )
LDAP_FREE( saslhost ); LDAP_FREE( saslhost );
} }