diff options
-rw-r--r-- | libc/inet/resolv.c | 23 |
1 files changed, 12 insertions, 11 deletions
diff --git a/libc/inet/resolv.c b/libc/inet/resolv.c index d96b2b79a..87d1cbe8b 100644 --- a/libc/inet/resolv.c +++ b/libc/inet/resolv.c @@ -672,7 +672,7 @@ int __dns_lookup(const char *name, int type, int nscount, char **nsip, int retries = 0; unsigned char * packet = malloc(PACKETSZ); char *dns, *lookup = malloc(MAXDNAME); - int variant = 0; + int variant = -1; struct sockaddr_in sa; #ifdef __UCLIBC_HAS_IPV6__ int v6; @@ -716,13 +716,14 @@ int __dns_lookup(const char *name, int type, int nscount, char **nsip, goto fail; strncpy(lookup,name,MAXDNAME); - BIGLOCK; - if (variant < __searchdomains && strchr(lookup, '.') == NULL) - { - strncat(lookup,".", MAXDNAME); - strncat(lookup,__searchdomain[variant], MAXDNAME); - } - BIGUNLOCK; + if (variant >= 0) { + BIGLOCK; + if (variant < __searchdomains) { + strncat(lookup,".", MAXDNAME); + strncat(lookup,__searchdomain[variant], MAXDNAME); + } + BIGUNLOCK; + } DPRINTF("lookup name: %s\n", lookup); q.dotted = (char *)lookup; q.qtype = type; @@ -866,7 +867,7 @@ int __dns_lookup(const char *name, int type, int nscount, char **nsip, /* if there are other nameservers, give them a go, otherwise return with error */ { - variant = 0; + variant = -1; LOCK; ns = (ns + 1) % nscount; if (ns == 0) @@ -884,7 +885,7 @@ int __dns_lookup(const char *name, int type, int nscount, char **nsip, sdomains=__searchdomains; BIGUNLOCK; - if (variant < ((sdomains - 1) && strchr(lookup, '.') == NULL)) { + if (variant < sdomains - 1) { /* next search */ variant++; } else { @@ -895,7 +896,7 @@ int __dns_lookup(const char *name, int type, int nscount, char **nsip, retries++; UNLOCK; - variant = 0; + variant = -1; } } } |