blob: 2fc39ce45b8a80d2e42c4ff20850a53585a7d0d6 [file] [log] [blame]
dtucker@openbsd.orgd4219022016-05-03 15:30:46 +00001# $OpenBSD: cfginclude.sh,v 1.2 2016/05/03 15:30:46 dtucker Exp $
djm@openbsd.org35f22da2016-04-15 00:31:10 +00002# Placed in the Public Domain.
3
4tid="config include"
5
dtucker@openbsd.orgd4219022016-05-03 15:30:46 +00006# to appease StrictModes
7umask 022
8
djm@openbsd.org35f22da2016-04-15 00:31:10 +00009cat > $OBJ/ssh_config.i << _EOF
10Match host a
11 Hostname aa
12
13Match host b
14 Hostname bb
15 Include $OBJ/ssh_config.i.*
16
17Match host c
18 Include $OBJ/ssh_config.i.*
19 Hostname cc
20
21Match host m
22 Include $OBJ/ssh_config.i.*
23
24Host d
25 Hostname dd
26
27Host e
28 Hostname ee
29 Include $OBJ/ssh_config.i.*
30
31Host f
32 Include $OBJ/ssh_config.i.*
33 Hostname ff
34
35Host n
36 Include $OBJ/ssh_config.i.*
37_EOF
38
39cat > $OBJ/ssh_config.i.0 << _EOF
40Match host xxxxxx
41_EOF
42
43cat > $OBJ/ssh_config.i.1 << _EOF
44Match host a
45 Hostname aaa
46
47Match host b
48 Hostname bbb
49
50Match host c
51 Hostname ccc
52
53Host d
54 Hostname ddd
55
56Host e
57 Hostname eee
58
59Host f
60 Hostname fff
61_EOF
62
63cat > $OBJ/ssh_config.i.2 << _EOF
64Match host a
65 Hostname aaaa
66
67Match host b
68 Hostname bbbb
69
70Match host c
71 Hostname cccc
72
73Host d
74 Hostname dddd
75
76Host e
77 Hostname eeee
78
79Host f
80 Hostname ffff
81
82Match all
83 Hostname xxxx
84_EOF
85
86trial() {
87 _host="$1"
88 _exp="$2"
89 ${REAL_SSH} -F $OBJ/ssh_config.i -G "$_host" > $OBJ/ssh_config.out ||
90 fatal "ssh config parse failed"
91 _got=`grep -i '^hostname ' $OBJ/ssh_config.out | awk '{print $2}'`
92 if test "x$_exp" != "x$_got" ; then
93 fail "host $_host include fail: expected $_exp got $_got"
94 fi
95}
96
97trial a aa
98trial b bb
99trial c ccc
100trial d dd
101trial e ee
102trial f fff
103trial m xxxx
104trial n xxxx
105trial x x
106
107# Prepare an included config with an error.
108
109cat > $OBJ/ssh_config.i.3 << _EOF
110Hostname xxxx
111 Junk
112_EOF
113
114${REAL_SSH} -F $OBJ/ssh_config.i -G a 2>/dev/null && \
115 fail "ssh include allowed invalid config"
116
117${REAL_SSH} -F $OBJ/ssh_config.i -G x 2>/dev/null && \
118 fail "ssh include allowed invalid config"
119
120rm -f $OBJ/ssh_config.i.*
121
122# Ensure that a missing include is not fatal.
123cat > $OBJ/ssh_config.i << _EOF
124Include $OBJ/ssh_config.i.*
125Hostname aa
126_EOF
127
128trial a aa
129
130# Ensure that Match/Host in an included config does not affect parent.
131cat > $OBJ/ssh_config.i.x << _EOF
132Match host x
133_EOF
134
135trial a aa
136
137cat > $OBJ/ssh_config.i.x << _EOF
138Host x
139_EOF
140
141trial a aa
142
143# cleanup
144rm -f $OBJ/ssh_config.i $OBJ/ssh_config.i.* $OBJ/ssh_config.out
dtucker@openbsd.orgd4219022016-05-03 15:30:46 +0000145# $OpenBSD: cfginclude.sh,v 1.2 2016/05/03 15:30:46 dtucker Exp $
djm@openbsd.org35f22da2016-04-15 00:31:10 +0000146# Placed in the Public Domain.
147
148tid="config include"
149
150cat > $OBJ/ssh_config.i << _EOF
151Match host a
152 Hostname aa
153
154Match host b
155 Hostname bb
156 Include $OBJ/ssh_config.i.*
157
158Match host c
159 Include $OBJ/ssh_config.i.*
160 Hostname cc
161
162Match host m
163 Include $OBJ/ssh_config.i.*
164
165Host d
166 Hostname dd
167
168Host e
169 Hostname ee
170 Include $OBJ/ssh_config.i.*
171
172Host f
173 Include $OBJ/ssh_config.i.*
174 Hostname ff
175
176Host n
177 Include $OBJ/ssh_config.i.*
178_EOF
179
180cat > $OBJ/ssh_config.i.0 << _EOF
181Match host xxxxxx
182_EOF
183
184cat > $OBJ/ssh_config.i.1 << _EOF
185Match host a
186 Hostname aaa
187
188Match host b
189 Hostname bbb
190
191Match host c
192 Hostname ccc
193
194Host d
195 Hostname ddd
196
197Host e
198 Hostname eee
199
200Host f
201 Hostname fff
202_EOF
203
204cat > $OBJ/ssh_config.i.2 << _EOF
205Match host a
206 Hostname aaaa
207
208Match host b
209 Hostname bbbb
210
211Match host c
212 Hostname cccc
213
214Host d
215 Hostname dddd
216
217Host e
218 Hostname eeee
219
220Host f
221 Hostname ffff
222
223Match all
224 Hostname xxxx
225_EOF
226
227trial() {
228 _host="$1"
229 _exp="$2"
230 ${REAL_SSH} -F $OBJ/ssh_config.i -G "$_host" > $OBJ/ssh_config.out ||
231 fatal "ssh config parse failed"
232 _got=`grep -i '^hostname ' $OBJ/ssh_config.out | awk '{print $2}'`
233 if test "x$_exp" != "x$_got" ; then
234 fail "host $_host include fail: expected $_exp got $_got"
235 fi
236}
237
238trial a aa
239trial b bb
240trial c ccc
241trial d dd
242trial e ee
243trial f fff
244trial m xxxx
245trial n xxxx
246trial x x
247
248# Prepare an included config with an error.
249
250cat > $OBJ/ssh_config.i.3 << _EOF
251Hostname xxxx
252 Junk
253_EOF
254
255${REAL_SSH} -F $OBJ/ssh_config.i -G a 2>/dev/null && \
256 fail "ssh include allowed invalid config"
257
258${REAL_SSH} -F $OBJ/ssh_config.i -G x 2>/dev/null && \
259 fail "ssh include allowed invalid config"
260
261rm -f $OBJ/ssh_config.i.*
262
263# Ensure that a missing include is not fatal.
264cat > $OBJ/ssh_config.i << _EOF
265Include $OBJ/ssh_config.i.*
266Hostname aa
267_EOF
268
269trial a aa
270
271# Ensure that Match/Host in an included config does not affect parent.
272cat > $OBJ/ssh_config.i.x << _EOF
273Match host x
274_EOF
275
276trial a aa
277
278cat > $OBJ/ssh_config.i.x << _EOF
279Host x
280_EOF
281
282trial a aa
283
284# Ensure that recursive includes are bounded.
285cat > $OBJ/ssh_config.i << _EOF
286Include $OBJ/ssh_config.i
287_EOF
288
289${REAL_SSH} -F $OBJ/ssh_config.i -G a 2>/dev/null && \
290 fail "ssh include allowed infinite recursion?" # or hang...
291
292# cleanup
293rm -f $OBJ/ssh_config.i $OBJ/ssh_config.i.* $OBJ/ssh_config.out