t_hostent.sh revision 1.6 1 # $NetBSD: t_hostent.sh,v 1.6 2014/01/09 14:07:31 christos 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
28 n6="sixthavenue.astron.com"
29 a6="2620:106:3003:1f00:3e4a:92ff:fef4:e180"
30 ans6="name=$n6, length=16, addrtype=24, aliases=[] addr_list=[$a6]\n"
31
32 n4="sixthavenue.astron.com"
33 a4="38.117.134.16"
34 ans4="name=$n4, length=4, addrtype=2, aliases=[] addr_list=[$a4]\n"
35
36 l6="localhost"
37 al6="::1"
38 loc6="name=$l6, length=16, addrtype=24, aliases=[localhost. localhost.localdomain.] addr_list=[$al6]\n"
39
40 l4="localhost"
41 al4="127.0.0.1"
42 loc4="name=$l4, length=4, addrtype=2, aliases=[localhost. localhost.localdomain.] addr_list=[$al4]\n"
43
44 dir="$(atf_get_srcdir)"
45 res="-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. Also hijack file system
49 # call to /etc, mapping them to the root file system of the rump
50 # server, so that we can control the contents of /etc/resolv.conf.
51
52 start_dns_server() {
53 export RUMP_SERVER=unix:///tmp/rumpserver
54 rump_server -lrumpdev -lrumpnet -lrumpnet_net -lrumpnet_netinet \
55 -lrumpnet_netinet6 -lrumpnet_local $RUMP_SERVER
56 HIJACK_DNS="LD_PRELOAD=/usr/lib/librumphijack.so RUMPHIJACK='socket=inet:inet6'"
57 eval $HIJACK_DNS ${dir}/h_dns_server $1
58 }
59
60 stop_dns_server() {
61 kill $(cat dns_server_$1.pid)
62 rump.halt
63 }
64
65 atf_test_case gethostbyname4
66 gethostbyname4_head()
67 {
68 atf_set "descr" "Checks gethostbyname2(3) for AF_INET (auto, as determined by nsswitch.conf(5)"
69 }
70 gethostbyname4_body()
71 {
72 start_dns_server 4
73 atf_check -o inline:"$ans4" -x "$HIJACK_DNS ${dir}/h_hostent $res -t auto -4 $n4"
74 stop_dns_server 4
75 }
76
77 atf_test_case gethostbyname6
78 gethostbyname6_head()
79 {
80 atf_set "descr" "Checks gethostbyname2(3) for AF_INET6 (auto, as determined by nsswitch.conf(5)"
81 }
82 gethostbyname6_body()
83 {
84 start_dns_server 4
85 atf_check -o inline:"$ans6" -x "$HIJACK_DNS ${dir}/h_hostent ${res} -t auto -6 $n6"
86 stop_dns_server 4
87 }
88
89 atf_test_case gethostbyaddr4
90 gethostbyaddr4_head()
91 {
92 atf_set "descr" "Checks gethostbyaddr(3) for AF_INET (auto, as determined by nsswitch.conf(5)"
93 }
94 gethostbyaddr4_body()
95 {
96 start_dns_server 4
97 atf_check -o inline:"$ans4" -x "$HIJACK_DNS ${dir}/h_hostent ${res} -t auto -a $a4"
98 stop_dns_server 4
99 }
100
101 atf_test_case gethostbyaddr6
102 gethostbyaddr6_head()
103 {
104 atf_set "descr" "Checks gethostbyaddr(3) for AF_INET6 (auto, as determined by nsswitch.conf(5)"
105 }
106 gethostbyaddr6_body()
107 {
108 start_dns_server 4
109 atf_check -o inline:"$ans6" -x "$HIJACK_DNS ${dir}/h_hostent -t auto -a $a6"
110 stop_dns_server 4
111 }
112
113 atf_test_case hostsbynamelookup4
114 hostsbynamelookup4_head()
115 {
116 atf_set "descr" "Checks /etc/hosts name lookup for AF_INET"
117 }
118 hostsbynamelookup4_body()
119 {
120 atf_check -o inline:"$loc4" -x "${dir}/h_hostent -f ${dir}/hosts -t file -4 $l4"
121 }
122
123 atf_test_case hostsbynamelookup6
124 hostsbynamelookup6_head()
125 {
126 atf_set "descr" "Checks /etc/hosts name lookup for AF_INET6"
127 }
128 hostsbynamelookup6_body()
129 {
130 atf_check -o inline:"$loc6" -x "${dir}/h_hostent -f ${dir}/hosts -t file -6 $l6"
131 }
132
133 atf_test_case hostsbyaddrlookup4
134 hostsbyaddrlookup4_head()
135 {
136 atf_set "descr" "Checks /etc/hosts address lookup for AF_INET"
137 }
138 hostsbyaddrlookup4_body()
139 {
140 atf_check -o inline:"$loc4" -x "${dir}/h_hostent -f ${dir}/hosts -t file -4 -a $al4"
141 }
142
143 atf_test_case hostsbyaddrlookup6
144 hostsbyaddrlookup6_head()
145 {
146 atf_set "descr" "Checks /etc/hosts address lookup for AF_INET6"
147 }
148 hostsbyaddrlookup6_body()
149 {
150 atf_check -o inline:"$loc6" -x "${dir}/h_hostent -f ${dir}/hosts -t file -6 -a $al6"
151 }
152
153 atf_test_case dnsbynamelookup4
154 dnsbynamelookup4_head()
155 {
156 atf_set "descr" "Checks DNS name lookup for AF_INET"
157 }
158 dnsbynamelookup4_body()
159 {
160 start_dns_server 4
161 atf_check -o inline:"$ans4" -x "$HIJACK_DNS ${dir}/h_hostent ${res} -t dns -4 $n4"
162 stop_dns_server 4
163 }
164
165 atf_test_case dnsbynamelookup6
166 dnsbynamelookup6_head()
167 {
168 atf_set "descr" "Checks DNS name lookup for AF_INET6"
169 }
170 dnsbynamelookup6_body()
171 {
172 start_dns_server 4
173 atf_check -o inline:"$ans6" -x "$HIJACK_DNS ${dir}/h_hostent ${res} -t dns -6 $n6"
174 stop_dns_server 4
175 }
176
177 atf_test_case dnsbyaddrlookup4
178 dnsbyaddrlookup4_head()
179 {
180 atf_set "descr" "Checks DNS address lookup for AF_INET"
181 }
182 dnsbyaddrlookup4_body()
183 {
184 start_dns_server 4
185 atf_check -o inline:"$ans4" -x "$HIJACK_DNS ${dir}/h_hostent ${res} -t dns -4 -a $a4"
186 stop_dns_server 4
187 }
188
189 atf_test_case dnsbyaddrlookup6
190 dnsbyaddrlookup6_head()
191 {
192 atf_set "descr" "Checks dns address lookup for AF_INET6"
193 }
194 dnsbyaddrlookup6_body()
195 {
196 start_dns_server 4
197 atf_check -o inline:"$ans6" -x "$HIJACK_DNS ${dir}/h_hostent ${res} -t dns -6 -a $a6"
198 stop_dns_server 4
199 }
200
201 atf_init_test_cases()
202 {
203 atf_add_test_case gethostbyname4
204 atf_add_test_case gethostbyname6
205 atf_add_test_case gethostbyaddr4
206 atf_add_test_case gethostbyaddr6
207
208 atf_add_test_case hostsbynamelookup4
209 atf_add_test_case hostsbynamelookup6
210 atf_add_test_case hostsbyaddrlookup4
211 atf_add_test_case hostsbyaddrlookup6
212
213 atf_add_test_case dnsbynamelookup4
214 atf_add_test_case dnsbynamelookup6
215 atf_add_test_case dnsbyaddrlookup4
216 atf_add_test_case dnsbyaddrlookup6
217 }
218