diff options
author | 2013-06-01 14:34:34 +0000 | |
---|---|---|
committer | 2013-06-01 14:34:34 +0000 | |
commit | 6a7a3d640d39dae50928bded135d5992d31570e3 (patch) | |
tree | 41c24fdd34b567f9bcc10dcfb95016c9625e943f /lib/libc/asr/gethostnamadr_async.c | |
parent | Make 'kill-paragraph' behave like emacs. ok florian@ (diff) | |
download | wireguard-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.c | 24 |
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); |