1# $NetBSD: t_hostent.sh,v 1.10 2014/01/13 11:08:14 gson Exp $
2#
3# Copyright (c) 2008 The NetBSD Foundation, Inc.
4# All rights reserved.
5#
6# Redistribution and use in source and binary forms, with or without
7# modification, are permitted provided that the following conditions
8# are met:
9# 1. Redistributions of source code must retain the above copyright
10#    notice, this list of conditions and the following disclaimer.
11# 2. Redistributions in binary form must reproduce the above copyright
12#    notice, this list of conditions and the following disclaimer in the
13#    documentation and/or other materials provided with the distribution.
14#
15# THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
16# ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
17# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
18# PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
19# BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
20# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
21# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
22# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
23# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
24# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
25# POSSIBILITY OF SUCH DAMAGE.
26#
27
28n6="sixthavenue.astron.com"
29a6="2620:106:3003:1f00:3e4a:92ff:fef4:e180"
30ans6="name=$n6, length=16, addrtype=24, aliases=[] addr_list=[$a6]\n"
31
32n4="sixthavenue.astron.com"
33a4="38.117.134.16"
34ans4="name=$n4, length=4, addrtype=2, aliases=[] addr_list=[$a4]\n"
35
36l6="localhost"
37al6="::1"
38loc6="name=$l6, length=16, addrtype=24, aliases=[localhost. localhost.localdomain.] addr_list=[$al6]\n"
39
40l4="localhost"
41al4="127.0.0.1"
42loc4="name=$l4, length=4, addrtype=2, aliases=[localhost. localhost.localdomain.] addr_list=[$al4]\n"
43
44dir="$(atf_get_srcdir)"
45res="-r ${dir}/resolv.conf"
46
47# Hijack DNS traffic using a single rump server instance and a DNS
48# server listening on its loopback address.
49
50start_dns_server() {
51	export RUMP_SERVER=unix:///tmp/rumpserver
52	rump_server -lrumpdev -lrumpnet -lrumpnet_net -lrumpnet_netinet \
53	    -lrumpnet_netinet6 -lrumpnet_local $RUMP_SERVER
54	HIJACK_DNS="LD_PRELOAD=/usr/lib/librumphijack.so RUMPHIJACK='socket=inet:inet6'"
55	eval $HIJACK_DNS ${dir}/h_dns_server $1
56}
57
58stop_dns_server() {
59	export RUMP_SERVER=unix:///tmp/rumpserver
60	kill $(cat dns_server_$1.pid)
61	rump.halt
62}
63
64atf_test_case gethostbyname4 cleanup
65gethostbyname4_head()
66{
67	atf_set "descr" "Checks gethostbyname2(3) for AF_INET (auto, as determined by nsswitch.conf(5)"
68}
69gethostbyname4_body()
70{
71	start_dns_server 4
72	atf_check -o inline:"$ans4" -x "$HIJACK_DNS ${dir}/h_hostent ${res} -t auto -4 $n4"
73}
74gethostbyname4_cleanup()
75{
76	stop_dns_server 4
77}
78
79atf_test_case gethostbyname6 cleanup cleanup
80gethostbyname6_head()
81{
82	atf_set "descr" "Checks gethostbyname2(3) for AF_INET6 (auto, as determined by nsswitch.conf(5)"
83}
84gethostbyname6_body()
85{
86	start_dns_server 4
87	atf_check -o inline:"$ans6" -x "$HIJACK_DNS ${dir}/h_hostent ${res} -t auto -6 $n6"
88}
89gethostbyname6_cleanup()
90{
91	stop_dns_server 4
92}
93
94atf_test_case gethostbyaddr4 cleanup
95gethostbyaddr4_head()
96{
97	atf_set "descr" "Checks gethostbyaddr(3) for AF_INET (auto, as determined by nsswitch.conf(5)"
98}
99gethostbyaddr4_body()
100{
101	start_dns_server 4
102        atf_check -o inline:"$ans4" -x "$HIJACK_DNS ${dir}/h_hostent ${res} -t auto -a $a4"
103}
104gethostbyaddr4_cleanup()
105{
106	stop_dns_server 4
107}
108
109atf_test_case gethostbyaddr6 cleanup
110gethostbyaddr6_head()
111{
112	atf_set "descr" "Checks gethostbyaddr(3) for AF_INET6 (auto, as determined by nsswitch.conf(5)"
113}
114gethostbyaddr6_body()
115{
116	start_dns_server 4
117	atf_check -o inline:"$ans6" -x "$HIJACK_DNS ${dir}/h_hostent ${res} -t auto -a $a6"
118}
119gethostbyaddr6_cleanup()
120{
121	stop_dns_server 4
122}
123
124atf_test_case hostsbynamelookup4
125hostsbynamelookup4_head()
126{
127	atf_set "descr" "Checks /etc/hosts name lookup for AF_INET"
128}
129hostsbynamelookup4_body()
130{
131	atf_check -o inline:"$loc4" -x "${dir}/h_hostent -f ${dir}/hosts -t file -4 $l4"
132}
133
134atf_test_case hostsbynamelookup6
135hostsbynamelookup6_head()
136{
137	atf_set "descr" "Checks /etc/hosts name lookup for AF_INET6"
138}
139hostsbynamelookup6_body()
140{
141	atf_check -o inline:"$loc6" -x "${dir}/h_hostent -f ${dir}/hosts -t file -6 $l6"
142}
143
144atf_test_case hostsbyaddrlookup4
145hostsbyaddrlookup4_head()
146{
147	atf_set "descr" "Checks /etc/hosts address lookup for AF_INET"
148}
149hostsbyaddrlookup4_body()
150{
151	atf_check -o inline:"$loc4" -x "${dir}/h_hostent -f ${dir}/hosts -t file -4 -a $al4"
152}
153
154atf_test_case hostsbyaddrlookup6
155hostsbyaddrlookup6_head()
156{
157	atf_set "descr" "Checks /etc/hosts address lookup for AF_INET6"
158}
159hostsbyaddrlookup6_body()
160{
161	atf_check -o inline:"$loc6" -x "${dir}/h_hostent -f ${dir}/hosts -t file -6 -a $al6"
162}
163
164atf_test_case dnsbynamelookup4 cleanup
165dnsbynamelookup4_head()
166{
167	atf_set "descr" "Checks DNS name lookup for AF_INET"
168}
169dnsbynamelookup4_body()
170{
171	start_dns_server 4
172	atf_check -o inline:"$ans4" -x "$HIJACK_DNS ${dir}/h_hostent ${res} -t dns -4 $n4"
173}
174dnsbynamelookup4_cleanup()
175{
176	stop_dns_server 4
177}
178
179atf_test_case dnsbynamelookup6 cleanup
180dnsbynamelookup6_head()
181{
182	atf_set "descr" "Checks DNS name lookup for AF_INET6"
183}
184dnsbynamelookup6_body()
185{
186	start_dns_server 4
187	atf_check -o inline:"$ans6" -x "$HIJACK_DNS ${dir}/h_hostent ${res} -t dns -6 $n6"
188}
189dnsbynamelookup6_cleanup()
190{
191	stop_dns_server 4
192}
193
194atf_test_case dnsbyaddrlookup4 cleanup
195dnsbyaddrlookup4_head()
196{
197	atf_set "descr" "Checks DNS address lookup for AF_INET"
198}
199dnsbyaddrlookup4_body()
200{
201	start_dns_server 4
202	atf_check -o inline:"$ans4" -x "$HIJACK_DNS ${dir}/h_hostent ${res} -t dns -4 -a $a4"
203}
204dnsbyaddrlookup4_cleanup()
205{
206	stop_dns_server 4
207}
208
209atf_test_case dnsbyaddrlookup6 cleanup
210dnsbyaddrlookup6_head()
211{
212	atf_set "descr" "Checks dns address lookup for AF_INET6"
213}
214dnsbyaddrlookup6_body()
215{
216	start_dns_server 4
217	atf_check -o inline:"$ans6" -x "$HIJACK_DNS ${dir}/h_hostent ${res} -t dns -6 -a $a6"
218}
219dnsbyaddrlookup6_cleanup()
220{
221	stop_dns_server 4
222}
223
224atf_init_test_cases()
225{
226	atf_add_test_case gethostbyname4
227	atf_add_test_case gethostbyname6
228	atf_add_test_case gethostbyaddr4
229	atf_add_test_case gethostbyaddr6
230
231	atf_add_test_case hostsbynamelookup4
232	atf_add_test_case hostsbynamelookup6
233	atf_add_test_case hostsbyaddrlookup4
234	atf_add_test_case hostsbyaddrlookup6
235
236	atf_add_test_case dnsbynamelookup4
237	atf_add_test_case dnsbynamelookup6
238	atf_add_test_case dnsbyaddrlookup4
239	atf_add_test_case dnsbyaddrlookup6
240}
241