summaryrefslogtreecommitdiffstats
path: root/source4/heimdal/lib/krb5/krbhst.c
diff options
context:
space:
mode:
Diffstat (limited to 'source4/heimdal/lib/krb5/krbhst.c')
-rw-r--r--source4/heimdal/lib/krb5/krbhst.c17
1 files changed, 16 insertions, 1 deletions
diff --git a/source4/heimdal/lib/krb5/krbhst.c b/source4/heimdal/lib/krb5/krbhst.c
index 3bb00d287d..4da3af2e82 100644
--- a/source4/heimdal/lib/krb5/krbhst.c
+++ b/source4/heimdal/lib/krb5/krbhst.c
@@ -370,9 +370,24 @@ krb5_krbhst_get_addrinfo(krb5_context context, krb5_krbhst_info *host,
int ret;
if (host->ai == NULL) {
+ char *hostname_dot = NULL;
make_hints(&hints, host->proto);
snprintf (portstr, sizeof(portstr), "%d", host->port);
- ret = getaddrinfo(host->hostname, portstr, &hints, &host->ai);
+ if (strchr(host->hostname, '.') &&
+ host->hostname[strlen(host->hostname)-1] != '.') {
+ /* avoid expansion of search domains from resolv.conf
+ - these can be very slow if the DNS server is not up
+ for the searched domain */
+ hostname_dot = malloc(strlen(host->hostname)+2);
+ if (hostname_dot) {
+ strcpy(hostname_dot, host->hostname);
+ hostname_dot[strlen(host->hostname)] = '.';
+ hostname_dot[strlen(host->hostname)+1] = 0;
+ }
+ }
+ ret = getaddrinfo(hostname_dot?hostname_dot:host->hostname, portstr, &hints, &host->ai);
+ if (hostname_dot)
+ free(hostname_dot);
if (ret)
return krb5_eai_to_heim_errno(ret, errno);
}