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