X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=libraries%2Flibldap%2Fdnssrv.c;h=55184676df3d468756c33c5c3d788abb1d78a986;hb=959edd88c0dc0ad558d9ebc423996c7a9d0f8cbc;hp=2afee0a100d738ef733cfdceecde0a30dad7d8b0;hpb=29d9fa20a2823c827f098d78f1ea8539d86bf4cf;p=openldap diff --git a/libraries/libldap/dnssrv.c b/libraries/libldap/dnssrv.c index 2afee0a100..55184676df 100644 --- a/libraries/libldap/dnssrv.c +++ b/libraries/libldap/dnssrv.c @@ -1,6 +1,6 @@ /* $OpenLDAP$ */ /* - * Copyright 1998-2000 The OpenLDAP Foundation, All Rights Reserved. + * Copyright 1998-2002 The OpenLDAP Foundation, All Rights Reserved. * COPYING RESTRICTIONS APPLY, see COPYRIGHT file */ @@ -61,12 +61,15 @@ int ldap_dn2domain( return -3; } -#define LDAP_DC "dc=" -#define LDAP_DCOID "0.9.2342.19200300.100.1.25=" if( rdn[1] == NULL ) { + /* + * single-valued RDN + */ char *dc; - /* single RDN */ + +#define LDAP_DC "dc=" +#define LDAP_DCOID "0.9.2342.19200300.100.1.25=" if( strncasecmp( rdn[0], LDAP_DC, sizeof(LDAP_DC)-1 ) == 0 ) @@ -96,7 +99,7 @@ int ldap_dn2domain( ndomain = LDAP_REALLOC( domain, ( domain == NULL ? 0 : strlen(domain) ) - + strlen(dc) + 2 ); + + strlen(dc) + sizeof(".") ); if( ndomain == NULL ) { LDAP_FREE( rdn ); @@ -111,17 +114,28 @@ int ldap_dn2domain( } else { strcat( ndomain, "." ); } + strcat( ndomain, dc ); + domain = ndomain; continue; } } + /* + * multi-valued RDN or fall thru + */ + LDAP_VFREE( rdn ); LDAP_FREE( domain ); domain = NULL; } + if( domain != NULL && *domain == '\0' ) { + LDAP_FREE( domain ); + domain = NULL; + } + *domainp = domain; return 0; } @@ -180,9 +194,8 @@ int ldap_domain2hostlist( LDAP_CONST char *domain, char **list ) { -#ifdef HAVE_RES_SEARCH +#ifdef HAVE_RES_QUERY char *request; - char *dn; char *hostlist = NULL; int rc, len, cur = 0; unsigned char reply[1024]; @@ -197,8 +210,7 @@ int ldap_domain2hostlist( request = LDAP_MALLOC(strlen(domain) + sizeof("_ldap._tcp.")); if (request == NULL) { - rc = LDAP_NO_MEMORY; - goto out; + return LDAP_NO_MEMORY; } sprintf(request, "_ldap._tcp.%s", domain); @@ -206,7 +218,8 @@ int ldap_domain2hostlist( ldap_pvt_thread_mutex_lock(&ldap_int_resolv_mutex); #endif - len = res_search(request, C_IN, T_SRV, reply, sizeof(reply)); + rc = LDAP_UNAVAILABLE; + len = res_query(request, C_IN, T_SRV, reply, sizeof(reply)); if (len >= 0) { unsigned char *p; char host[1024]; @@ -288,5 +301,5 @@ int ldap_domain2hostlist( return rc; #else return LDAP_NOT_SUPPORTED; -#endif /* HAVE_RES_SEARCH */ +#endif /* HAVE_RES_QUERY */ }