diff options
Diffstat (limited to 'source4/heimdal/lib/krb5/krbhst.c')
-rw-r--r-- | source4/heimdal/lib/krb5/krbhst.c | 17 |
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); } |