1313010Sdes#	$OpenBSD: cfginclude.sh,v 1.2 2016/05/03 15:30:46 dtucker Exp $
2313010Sdes#	Placed in the Public Domain.
3313010Sdes
4313010Sdestid="config include"
5313010Sdes
6313010Sdes# to appease StrictModes
7313010Sdesumask 022
8313010Sdes
9313010Sdescat > $OBJ/ssh_config.i << _EOF
10313010SdesMatch host a
11313010Sdes	Hostname aa
12313010Sdes
13313010SdesMatch host b
14313010Sdes	Hostname bb
15313010Sdes	Include $OBJ/ssh_config.i.*
16313010Sdes
17313010SdesMatch host c
18313010Sdes	Include $OBJ/ssh_config.i.*
19313010Sdes	Hostname cc
20313010Sdes
21313010SdesMatch host m
22313010Sdes	Include $OBJ/ssh_config.i.*
23313010Sdes
24313010SdesHost d
25313010Sdes	Hostname dd
26313010Sdes
27313010SdesHost e
28313010Sdes	Hostname ee
29313010Sdes	Include $OBJ/ssh_config.i.*
30313010Sdes
31313010SdesHost f
32313010Sdes	Include $OBJ/ssh_config.i.*
33313010Sdes	Hostname ff
34313010Sdes
35313010SdesHost n
36313010Sdes	Include $OBJ/ssh_config.i.*
37313010Sdes_EOF
38313010Sdes
39313010Sdescat > $OBJ/ssh_config.i.0 << _EOF
40313010SdesMatch host xxxxxx
41313010Sdes_EOF
42313010Sdes
43313010Sdescat > $OBJ/ssh_config.i.1 << _EOF
44313010SdesMatch host a
45313010Sdes	Hostname aaa
46313010Sdes
47313010SdesMatch host b
48313010Sdes	Hostname bbb
49313010Sdes
50313010SdesMatch host c
51313010Sdes	Hostname ccc
52313010Sdes
53313010SdesHost d
54313010Sdes	Hostname ddd
55313010Sdes
56313010SdesHost e
57313010Sdes	Hostname eee
58313010Sdes
59313010SdesHost f
60313010Sdes	Hostname fff
61313010Sdes_EOF
62313010Sdes
63313010Sdescat > $OBJ/ssh_config.i.2 << _EOF
64313010SdesMatch host a
65313010Sdes	Hostname aaaa
66313010Sdes
67313010SdesMatch host b
68313010Sdes	Hostname bbbb
69313010Sdes
70313010SdesMatch host c
71313010Sdes	Hostname cccc
72313010Sdes
73313010SdesHost d
74313010Sdes	Hostname dddd
75313010Sdes
76313010SdesHost e
77313010Sdes	Hostname eeee
78313010Sdes
79313010SdesHost f
80313010Sdes	Hostname ffff
81313010Sdes
82313010SdesMatch all
83313010Sdes	Hostname xxxx
84313010Sdes_EOF
85313010Sdes
86313010Sdestrial() {
87313010Sdes	_host="$1"
88313010Sdes	_exp="$2"
89313010Sdes	${REAL_SSH} -F $OBJ/ssh_config.i -G "$_host" > $OBJ/ssh_config.out ||
90313010Sdes		fatal "ssh config parse failed"
91313010Sdes	_got=`grep -i '^hostname ' $OBJ/ssh_config.out | awk '{print $2}'`
92313010Sdes	if test "x$_exp" != "x$_got" ; then
93313010Sdes		fail "host $_host include fail: expected $_exp got $_got"
94313010Sdes	fi
95313010Sdes}
96313010Sdes
97313010Sdestrial a aa
98313010Sdestrial b bb
99313010Sdestrial c ccc
100313010Sdestrial d dd
101313010Sdestrial e ee
102313010Sdestrial f fff
103313010Sdestrial m xxxx
104313010Sdestrial n xxxx
105313010Sdestrial x x
106313010Sdes
107313010Sdes# Prepare an included config with an error.
108313010Sdes
109313010Sdescat > $OBJ/ssh_config.i.3 << _EOF
110313010SdesHostname xxxx
111313010Sdes	Junk
112313010Sdes_EOF
113313010Sdes
114313010Sdes${REAL_SSH} -F $OBJ/ssh_config.i -G a 2>/dev/null && \
115313010Sdes	fail "ssh include allowed invalid config"
116313010Sdes
117313010Sdes${REAL_SSH} -F $OBJ/ssh_config.i -G x 2>/dev/null && \
118313010Sdes	fail "ssh include allowed invalid config"
119313010Sdes
120313010Sdesrm -f $OBJ/ssh_config.i.*
121313010Sdes
122313010Sdes# Ensure that a missing include is not fatal.
123313010Sdescat > $OBJ/ssh_config.i << _EOF
124313010SdesInclude $OBJ/ssh_config.i.*
125313010SdesHostname aa
126313010Sdes_EOF
127313010Sdes
128313010Sdestrial a aa
129313010Sdes
130313010Sdes# Ensure that Match/Host in an included config does not affect parent.
131313010Sdescat > $OBJ/ssh_config.i.x << _EOF
132313010SdesMatch host x
133313010Sdes_EOF
134313010Sdes
135313010Sdestrial a aa
136313010Sdes
137313010Sdescat > $OBJ/ssh_config.i.x << _EOF
138313010SdesHost x
139313010Sdes_EOF
140313010Sdes
141313010Sdestrial a aa
142313010Sdes
143313010Sdes# cleanup
144313010Sdesrm -f $OBJ/ssh_config.i $OBJ/ssh_config.i.* $OBJ/ssh_config.out
145313010Sdes#	$OpenBSD: cfginclude.sh,v 1.2 2016/05/03 15:30:46 dtucker Exp $
146313010Sdes#	Placed in the Public Domain.
147313010Sdes
148313010Sdestid="config include"
149313010Sdes
150313010Sdescat > $OBJ/ssh_config.i << _EOF
151313010SdesMatch host a
152313010Sdes	Hostname aa
153313010Sdes
154313010SdesMatch host b
155313010Sdes	Hostname bb
156313010Sdes	Include $OBJ/ssh_config.i.*
157313010Sdes
158313010SdesMatch host c
159313010Sdes	Include $OBJ/ssh_config.i.*
160313010Sdes	Hostname cc
161313010Sdes
162313010SdesMatch host m
163313010Sdes	Include $OBJ/ssh_config.i.*
164313010Sdes
165313010SdesHost d
166313010Sdes	Hostname dd
167313010Sdes
168313010SdesHost e
169313010Sdes	Hostname ee
170313010Sdes	Include $OBJ/ssh_config.i.*
171313010Sdes
172313010SdesHost f
173313010Sdes	Include $OBJ/ssh_config.i.*
174313010Sdes	Hostname ff
175313010Sdes
176313010SdesHost n
177313010Sdes	Include $OBJ/ssh_config.i.*
178313010Sdes_EOF
179313010Sdes
180313010Sdescat > $OBJ/ssh_config.i.0 << _EOF
181313010SdesMatch host xxxxxx
182313010Sdes_EOF
183313010Sdes
184313010Sdescat > $OBJ/ssh_config.i.1 << _EOF
185313010SdesMatch host a
186313010Sdes	Hostname aaa
187313010Sdes
188313010SdesMatch host b
189313010Sdes	Hostname bbb
190313010Sdes
191313010SdesMatch host c
192313010Sdes	Hostname ccc
193313010Sdes
194313010SdesHost d
195313010Sdes	Hostname ddd
196313010Sdes
197313010SdesHost e
198313010Sdes	Hostname eee
199313010Sdes
200313010SdesHost f
201313010Sdes	Hostname fff
202313010Sdes_EOF
203313010Sdes
204313010Sdescat > $OBJ/ssh_config.i.2 << _EOF
205313010SdesMatch host a
206313010Sdes	Hostname aaaa
207313010Sdes
208313010SdesMatch host b
209313010Sdes	Hostname bbbb
210313010Sdes
211313010SdesMatch host c
212313010Sdes	Hostname cccc
213313010Sdes
214313010SdesHost d
215313010Sdes	Hostname dddd
216313010Sdes
217313010SdesHost e
218313010Sdes	Hostname eeee
219313010Sdes
220313010SdesHost f
221313010Sdes	Hostname ffff
222313010Sdes
223313010SdesMatch all
224313010Sdes	Hostname xxxx
225313010Sdes_EOF
226313010Sdes
227313010Sdestrial() {
228313010Sdes	_host="$1"
229313010Sdes	_exp="$2"
230313010Sdes	${REAL_SSH} -F $OBJ/ssh_config.i -G "$_host" > $OBJ/ssh_config.out ||
231313010Sdes		fatal "ssh config parse failed"
232313010Sdes	_got=`grep -i '^hostname ' $OBJ/ssh_config.out | awk '{print $2}'`
233313010Sdes	if test "x$_exp" != "x$_got" ; then
234313010Sdes		fail "host $_host include fail: expected $_exp got $_got"
235313010Sdes	fi
236313010Sdes}
237313010Sdes
238313010Sdestrial a aa
239313010Sdestrial b bb
240313010Sdestrial c ccc
241313010Sdestrial d dd
242313010Sdestrial e ee
243313010Sdestrial f fff
244313010Sdestrial m xxxx
245313010Sdestrial n xxxx
246313010Sdestrial x x
247313010Sdes
248313010Sdes# Prepare an included config with an error.
249313010Sdes
250313010Sdescat > $OBJ/ssh_config.i.3 << _EOF
251313010SdesHostname xxxx
252313010Sdes	Junk
253313010Sdes_EOF
254313010Sdes
255313010Sdes${REAL_SSH} -F $OBJ/ssh_config.i -G a 2>/dev/null && \
256313010Sdes	fail "ssh include allowed invalid config"
257313010Sdes
258313010Sdes${REAL_SSH} -F $OBJ/ssh_config.i -G x 2>/dev/null && \
259313010Sdes	fail "ssh include allowed invalid config"
260313010Sdes
261313010Sdesrm -f $OBJ/ssh_config.i.*
262313010Sdes
263313010Sdes# Ensure that a missing include is not fatal.
264313010Sdescat > $OBJ/ssh_config.i << _EOF
265313010SdesInclude $OBJ/ssh_config.i.*
266313010SdesHostname aa
267313010Sdes_EOF
268313010Sdes
269313010Sdestrial a aa
270313010Sdes
271313010Sdes# Ensure that Match/Host in an included config does not affect parent.
272313010Sdescat > $OBJ/ssh_config.i.x << _EOF
273313010SdesMatch host x
274313010Sdes_EOF
275313010Sdes
276313010Sdestrial a aa
277313010Sdes
278313010Sdescat > $OBJ/ssh_config.i.x << _EOF
279313010SdesHost x
280313010Sdes_EOF
281313010Sdes
282313010Sdestrial a aa
283313010Sdes
284313010Sdes# Ensure that recursive includes are bounded.
285313010Sdescat > $OBJ/ssh_config.i << _EOF
286313010SdesInclude $OBJ/ssh_config.i
287313010Sdes_EOF
288313010Sdes
289313010Sdes${REAL_SSH} -F $OBJ/ssh_config.i -G a 2>/dev/null && \
290313010Sdes	fail "ssh include allowed infinite recursion?" # or hang...
291313010Sdes
292313010Sdes# cleanup
293313010Sdesrm -f $OBJ/ssh_config.i $OBJ/ssh_config.i.* $OBJ/ssh_config.out
294