summaryrefslogtreecommitdiffstats
path: root/lib/libc/asr/gethostnamadr_async.c
diff options
context:
space:
mode:
authoreric <eric@openbsd.org>2013-06-01 14:34:34 +0000
committereric <eric@openbsd.org>2013-06-01 14:34:34 +0000
commit6a7a3d640d39dae50928bded135d5992d31570e3 (patch)
tree41c24fdd34b567f9bcc10dcfb95016c9625e943f /lib/libc/asr/gethostnamadr_async.c
parentMake 'kill-paragraph' behave like emacs. ok florian@ (diff)
downloadwireguard-openbsd-6a7a3d640d39dae50928bded135d5992d31570e3.tar.xz
wireguard-openbsd-6a7a3d640d39dae50928bded135d5992d31570e3.zip
Make hostaliases work for gethostbyname() and getaddrinfo() when
looking into /etc/hosts. Remove the alias check from the search domain iteration. Instead, take a shortcut to res_query_async_ctx() in res_search_async_ctx().
Diffstat (limited to 'lib/libc/asr/gethostnamadr_async.c')
-rw-r--r--lib/libc/asr/gethostnamadr_async.c24
1 files changed, 16 insertions, 8 deletions
diff --git a/lib/libc/asr/gethostnamadr_async.c b/lib/libc/asr/gethostnamadr_async.c
index 2dd251382bf..9dcbbe55b3e 100644
--- a/lib/libc/asr/gethostnamadr_async.c
+++ b/lib/libc/asr/gethostnamadr_async.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: gethostnamadr_async.c,v 1.19 2013/04/30 12:02:39 eric Exp $ */
+/* $OpenBSD: gethostnamadr_async.c,v 1.20 2013/06/01 14:34:34 eric Exp $ */
/*
* Copyright (c) 2012 Eric Faurot <eric@openbsd.org>
*
@@ -148,7 +148,7 @@ gethostnamadr_async_run(struct async *as, struct async_res *ar)
struct hostent_ext *h;
int r, type, saved_errno;
FILE *f;
- char dname[MAXDNAME], *data, addr[16], *c;
+ char name[MAXDNAME], *data, addr[16], *c;
next:
switch (as->as_state) {
@@ -220,9 +220,9 @@ gethostnamadr_async_run(struct async *as, struct async_res *ar)
} else {
addr_as_fqdn(as->as.hostnamadr.addr,
as->as.hostnamadr.family,
- dname, sizeof(dname));
+ name, sizeof(name));
as->as.hostnamadr.subq = res_query_async_ctx(
- dname, C_IN, T_PTR, as->as_ctx);
+ name, C_IN, T_PTR, as->as_ctx);
}
if (as->as.hostnamadr.subq == NULL) {
@@ -242,8 +242,12 @@ gethostnamadr_async_run(struct async *as, struct async_res *ar)
if ((f = fopen(as->as_ctx->ac_hostfile, "r")) == NULL)
break;
- if (as->as_type == ASR_GETHOSTBYNAME)
- data = as->as.hostnamadr.name;
+ if (as->as_type == ASR_GETHOSTBYNAME) {
+ data = asr_hostalias(as->as_ctx,
+ as->as.hostnamadr.name, name, sizeof(name));
+ if (data == NULL)
+ data = as->as.hostnamadr.name;
+ }
else
data = as->as.hostnamadr.addr;
@@ -272,8 +276,12 @@ gethostnamadr_async_run(struct async *as, struct async_res *ar)
/* IPv4 only */
if (as->as.hostnamadr.family != AF_INET)
break;
- if (as->as_type == ASR_GETHOSTBYNAME)
- data = as->as.hostnamadr.name;
+ if (as->as_type == ASR_GETHOSTBYNAME) {
+ data = asr_hostalias(as->as_ctx,
+ as->as.hostnamadr.name, name, sizeof(name));
+ if (data == NULL)
+ data = as->as.hostnamadr.name;
+ }
else
data = as->as.hostnamadr.addr;
h = _yp_gethostnamadr(as->as_type, data);