diff options
author | 2014-03-03 08:37:37 +0000 | |
---|---|---|
committer | 2014-03-03 08:37:37 +0000 | |
commit | 20f7c2a37c9652a64a2955cc4823c796df35cd83 (patch) | |
tree | 79b5e2994ae3ab7ed5e899d8f1256f2487cc741b /lib/libc | |
parent | use official 5.5 key (diff) | |
download | wireguard-openbsd-20f7c2a37c9652a64a2955cc4823c796df35cd83.tar.xz wireguard-openbsd-20f7c2a37c9652a64a2955cc4823c796df35cd83.zip |
fix support for HOSTALIASES.
reported by tedu@
ok tedu@ deraadt@
Diffstat (limited to 'lib/libc')
-rw-r--r-- | lib/libc/asr/getaddrinfo_async.c | 26 |
1 files changed, 12 insertions, 14 deletions
diff --git a/lib/libc/asr/getaddrinfo_async.c b/lib/libc/asr/getaddrinfo_async.c index f04489e73e9..ac696a21e55 100644 --- a/lib/libc/asr/getaddrinfo_async.c +++ b/lib/libc/asr/getaddrinfo_async.c @@ -1,4 +1,4 @@ -/* $OpenBSD: getaddrinfo_async.c,v 1.22 2014/02/26 20:50:24 deraadt Exp $ */ +/* $OpenBSD: getaddrinfo_async.c,v 1.23 2014/03/03 08:37:37 eric Exp $ */ /* * Copyright (c) 2012 Eric Faurot <eric@openbsd.org> * @@ -82,14 +82,19 @@ getaddrinfo_async(const char *hostname, const char *servname, { struct asr_ctx *ac; struct async *as; + char alias[MAXDNAME]; ac = asr_use_resolver(asr); if ((as = asr_async_new(ac, ASR_GETADDRINFO)) == NULL) goto abort; /* errno set */ as->as_run = getaddrinfo_async_run; - if (hostname && (as->as.ai.hostname = strdup(hostname)) == NULL) - goto abort; /* errno set */ + if (hostname) { + if (asr_hostalias(ac, hostname, alias, sizeof(alias))) + hostname = alias; + if ((as->as.ai.hostname = strdup(hostname)) == NULL) + goto abort; /* errno set */ + } if (servname && (as->as.ai.servname = strdup(servname)) == NULL) goto abort; /* errno set */ if (hints) @@ -115,7 +120,7 @@ getaddrinfo_async_run(struct async *as, struct async_res *ar) static char *domain = NULL; char *res; int len; - char alias[MAXDNAME], *name; + char *name; #endif char fqdn[MAXDNAME]; const char *str; @@ -388,10 +393,7 @@ getaddrinfo_async_run(struct async *as, struct async_res *ar) family = (as->as.ai.hints.ai_family == AF_UNSPEC) ? AS_FAMILY(as) : as->as.ai.hints.ai_family; - name = asr_hostalias(as->as_ctx, as->as.ai.hostname, - alias, sizeof(alias)); - if (name == NULL) - name = as->as.ai.hostname; + name = as->as.ai.hostname; /* XXX * ipnodes.byname could also contain IPv4 address @@ -706,7 +708,7 @@ addrinfo_add(struct async *as, const struct sockaddr *sa, const char *cname) static int addrinfo_from_file(struct async *as, int family, FILE *f) { - char *tokens[MAXTOKEN], buf[MAXDNAME], *name, *c; + char *tokens[MAXTOKEN], *c; int n, i; union { struct sockaddr sa; @@ -714,17 +716,13 @@ addrinfo_from_file(struct async *as, int family, FILE *f) struct sockaddr_in6 sain6; } u; - name = asr_hostalias(as->as_ctx, as->as.ai.hostname, buf, sizeof(buf)); - if (name == NULL) - name = as->as.ai.hostname; - for (;;) { n = asr_parse_namedb_line(f, tokens, MAXTOKEN); if (n == -1) break; /* ignore errors reading the file */ for (i = 1; i < n; i++) { - if (strcasecmp(name, tokens[i])) + if (strcasecmp(as->as.ai.hostname, tokens[i])) continue; if (asr_sockaddr_from_str(&u.sa, family, tokens[0]) == -1) continue; |