summaryrefslogtreecommitdiffstats
path: root/lib/libc
diff options
context:
space:
mode:
authoreric <eric@openbsd.org>2014-03-03 08:37:37 +0000
committereric <eric@openbsd.org>2014-03-03 08:37:37 +0000
commit20f7c2a37c9652a64a2955cc4823c796df35cd83 (patch)
tree79b5e2994ae3ab7ed5e899d8f1256f2487cc741b /lib/libc
parentuse official 5.5 key (diff)
downloadwireguard-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.c26
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;