1*19261079SEd Maste# $OpenBSD: cfginclude.sh,v 1.3 2021/06/08 06:52:43 djm Exp $ 2076ad2f8SDag-Erling Smørgrav# Placed in the Public Domain. 3076ad2f8SDag-Erling Smørgrav 4076ad2f8SDag-Erling Smørgravtid="config include" 5076ad2f8SDag-Erling Smørgrav 6076ad2f8SDag-Erling Smørgrav# to appease StrictModes 7076ad2f8SDag-Erling Smørgravumask 022 8076ad2f8SDag-Erling Smørgrav 9076ad2f8SDag-Erling Smørgravcat > $OBJ/ssh_config.i << _EOF 10076ad2f8SDag-Erling SmørgravMatch host a 11076ad2f8SDag-Erling Smørgrav Hostname aa 12076ad2f8SDag-Erling Smørgrav 13*19261079SEd MasteMatch host b # comment 14076ad2f8SDag-Erling Smørgrav Hostname bb 15076ad2f8SDag-Erling Smørgrav Include $OBJ/ssh_config.i.* 16076ad2f8SDag-Erling Smørgrav 17076ad2f8SDag-Erling SmørgravMatch host c 18076ad2f8SDag-Erling Smørgrav Include $OBJ/ssh_config.i.* 19076ad2f8SDag-Erling Smørgrav Hostname cc 20076ad2f8SDag-Erling Smørgrav 21076ad2f8SDag-Erling SmørgravMatch host m 22*19261079SEd Maste Include $OBJ/ssh_config.i.* # comment 23076ad2f8SDag-Erling Smørgrav 24076ad2f8SDag-Erling SmørgravHost d 25*19261079SEd Maste Hostname dd # comment 26076ad2f8SDag-Erling Smørgrav 27076ad2f8SDag-Erling SmørgravHost e 28076ad2f8SDag-Erling Smørgrav Hostname ee 29076ad2f8SDag-Erling Smørgrav Include $OBJ/ssh_config.i.* 30076ad2f8SDag-Erling Smørgrav 31076ad2f8SDag-Erling SmørgravHost f 32076ad2f8SDag-Erling Smørgrav Include $OBJ/ssh_config.i.* 33076ad2f8SDag-Erling Smørgrav Hostname ff 34076ad2f8SDag-Erling Smørgrav 35076ad2f8SDag-Erling SmørgravHost n 36076ad2f8SDag-Erling Smørgrav Include $OBJ/ssh_config.i.* 37076ad2f8SDag-Erling Smørgrav_EOF 38076ad2f8SDag-Erling Smørgrav 39076ad2f8SDag-Erling Smørgravcat > $OBJ/ssh_config.i.0 << _EOF 40076ad2f8SDag-Erling SmørgravMatch host xxxxxx 41076ad2f8SDag-Erling Smørgrav_EOF 42076ad2f8SDag-Erling Smørgrav 43076ad2f8SDag-Erling Smørgravcat > $OBJ/ssh_config.i.1 << _EOF 44076ad2f8SDag-Erling SmørgravMatch host a 45076ad2f8SDag-Erling Smørgrav Hostname aaa 46076ad2f8SDag-Erling Smørgrav 47076ad2f8SDag-Erling SmørgravMatch host b 48076ad2f8SDag-Erling Smørgrav Hostname bbb 49076ad2f8SDag-Erling Smørgrav 50*19261079SEd MasteMatch host c # comment 51076ad2f8SDag-Erling Smørgrav Hostname ccc 52076ad2f8SDag-Erling Smørgrav 53*19261079SEd MasteHost d # comment 54076ad2f8SDag-Erling Smørgrav Hostname ddd 55076ad2f8SDag-Erling Smørgrav 56076ad2f8SDag-Erling SmørgravHost e 57076ad2f8SDag-Erling Smørgrav Hostname eee 58076ad2f8SDag-Erling Smørgrav 59076ad2f8SDag-Erling SmørgravHost f 60*19261079SEd Maste Hostname fff # comment 61076ad2f8SDag-Erling Smørgrav_EOF 62076ad2f8SDag-Erling Smørgrav 63076ad2f8SDag-Erling Smørgravcat > $OBJ/ssh_config.i.2 << _EOF 64076ad2f8SDag-Erling SmørgravMatch host a 65076ad2f8SDag-Erling Smørgrav Hostname aaaa 66076ad2f8SDag-Erling Smørgrav 67076ad2f8SDag-Erling SmørgravMatch host b 68076ad2f8SDag-Erling Smørgrav Hostname bbbb 69076ad2f8SDag-Erling Smørgrav 70076ad2f8SDag-Erling SmørgravMatch host c 71076ad2f8SDag-Erling Smørgrav Hostname cccc 72076ad2f8SDag-Erling Smørgrav 73076ad2f8SDag-Erling SmørgravHost d 74076ad2f8SDag-Erling Smørgrav Hostname dddd 75076ad2f8SDag-Erling Smørgrav 76076ad2f8SDag-Erling SmørgravHost e 77076ad2f8SDag-Erling Smørgrav Hostname eeee 78076ad2f8SDag-Erling Smørgrav 79076ad2f8SDag-Erling SmørgravHost f 80076ad2f8SDag-Erling Smørgrav Hostname ffff 81076ad2f8SDag-Erling Smørgrav 82076ad2f8SDag-Erling SmørgravMatch all 83076ad2f8SDag-Erling Smørgrav Hostname xxxx 84076ad2f8SDag-Erling Smørgrav_EOF 85076ad2f8SDag-Erling Smørgrav 86076ad2f8SDag-Erling Smørgravtrial() { 87076ad2f8SDag-Erling Smørgrav _host="$1" 88076ad2f8SDag-Erling Smørgrav _exp="$2" 89076ad2f8SDag-Erling Smørgrav ${REAL_SSH} -F $OBJ/ssh_config.i -G "$_host" > $OBJ/ssh_config.out || 90076ad2f8SDag-Erling Smørgrav fatal "ssh config parse failed" 91076ad2f8SDag-Erling Smørgrav _got=`grep -i '^hostname ' $OBJ/ssh_config.out | awk '{print $2}'` 92076ad2f8SDag-Erling Smørgrav if test "x$_exp" != "x$_got" ; then 93076ad2f8SDag-Erling Smørgrav fail "host $_host include fail: expected $_exp got $_got" 94076ad2f8SDag-Erling Smørgrav fi 95076ad2f8SDag-Erling Smørgrav} 96076ad2f8SDag-Erling Smørgrav 97076ad2f8SDag-Erling Smørgravtrial a aa 98076ad2f8SDag-Erling Smørgravtrial b bb 99076ad2f8SDag-Erling Smørgravtrial c ccc 100076ad2f8SDag-Erling Smørgravtrial d dd 101076ad2f8SDag-Erling Smørgravtrial e ee 102076ad2f8SDag-Erling Smørgravtrial f fff 103076ad2f8SDag-Erling Smørgravtrial m xxxx 104076ad2f8SDag-Erling Smørgravtrial n xxxx 105076ad2f8SDag-Erling Smørgravtrial x x 106076ad2f8SDag-Erling Smørgrav 107076ad2f8SDag-Erling Smørgrav# Prepare an included config with an error. 108076ad2f8SDag-Erling Smørgrav 109076ad2f8SDag-Erling Smørgravcat > $OBJ/ssh_config.i.3 << _EOF 110076ad2f8SDag-Erling SmørgravHostname xxxx 111076ad2f8SDag-Erling Smørgrav Junk 112076ad2f8SDag-Erling Smørgrav_EOF 113076ad2f8SDag-Erling Smørgrav 114076ad2f8SDag-Erling Smørgrav${REAL_SSH} -F $OBJ/ssh_config.i -G a 2>/dev/null && \ 115076ad2f8SDag-Erling Smørgrav fail "ssh include allowed invalid config" 116076ad2f8SDag-Erling Smørgrav 117076ad2f8SDag-Erling Smørgrav${REAL_SSH} -F $OBJ/ssh_config.i -G x 2>/dev/null && \ 118076ad2f8SDag-Erling Smørgrav fail "ssh include allowed invalid config" 119076ad2f8SDag-Erling Smørgrav 120076ad2f8SDag-Erling Smørgravrm -f $OBJ/ssh_config.i.* 121076ad2f8SDag-Erling Smørgrav 122076ad2f8SDag-Erling Smørgrav# Ensure that a missing include is not fatal. 123076ad2f8SDag-Erling Smørgravcat > $OBJ/ssh_config.i << _EOF 124076ad2f8SDag-Erling SmørgravInclude $OBJ/ssh_config.i.* 125076ad2f8SDag-Erling SmørgravHostname aa 126076ad2f8SDag-Erling Smørgrav_EOF 127076ad2f8SDag-Erling Smørgrav 128076ad2f8SDag-Erling Smørgravtrial a aa 129076ad2f8SDag-Erling Smørgrav 130076ad2f8SDag-Erling Smørgrav# Ensure that Match/Host in an included config does not affect parent. 131076ad2f8SDag-Erling Smørgravcat > $OBJ/ssh_config.i.x << _EOF 132076ad2f8SDag-Erling SmørgravMatch host x 133076ad2f8SDag-Erling Smørgrav_EOF 134076ad2f8SDag-Erling Smørgrav 135076ad2f8SDag-Erling Smørgravtrial a aa 136076ad2f8SDag-Erling Smørgrav 137076ad2f8SDag-Erling Smørgravcat > $OBJ/ssh_config.i.x << _EOF 138076ad2f8SDag-Erling SmørgravHost x 139076ad2f8SDag-Erling Smørgrav_EOF 140076ad2f8SDag-Erling Smørgrav 141076ad2f8SDag-Erling Smørgravtrial a aa 142076ad2f8SDag-Erling Smørgrav 143076ad2f8SDag-Erling Smørgrav# cleanup 144076ad2f8SDag-Erling Smørgravrm -f $OBJ/ssh_config.i $OBJ/ssh_config.i.* $OBJ/ssh_config.out 145*19261079SEd Maste# $OpenBSD: cfginclude.sh,v 1.3 2021/06/08 06:52:43 djm Exp $ 146076ad2f8SDag-Erling Smørgrav# Placed in the Public Domain. 147076ad2f8SDag-Erling Smørgrav 148076ad2f8SDag-Erling Smørgravtid="config include" 149076ad2f8SDag-Erling Smørgrav 150076ad2f8SDag-Erling Smørgravcat > $OBJ/ssh_config.i << _EOF 151076ad2f8SDag-Erling SmørgravMatch host a 152076ad2f8SDag-Erling Smørgrav Hostname aa 153076ad2f8SDag-Erling Smørgrav 154076ad2f8SDag-Erling SmørgravMatch host b 155076ad2f8SDag-Erling Smørgrav Hostname bb 156076ad2f8SDag-Erling Smørgrav Include $OBJ/ssh_config.i.* 157076ad2f8SDag-Erling Smørgrav 158076ad2f8SDag-Erling SmørgravMatch host c 159076ad2f8SDag-Erling Smørgrav Include $OBJ/ssh_config.i.* 160076ad2f8SDag-Erling Smørgrav Hostname cc 161076ad2f8SDag-Erling Smørgrav 162076ad2f8SDag-Erling SmørgravMatch host m 163076ad2f8SDag-Erling Smørgrav Include $OBJ/ssh_config.i.* 164076ad2f8SDag-Erling Smørgrav 165076ad2f8SDag-Erling SmørgravHost d 166076ad2f8SDag-Erling Smørgrav Hostname dd 167076ad2f8SDag-Erling Smørgrav 168076ad2f8SDag-Erling SmørgravHost e 169076ad2f8SDag-Erling Smørgrav Hostname ee 170076ad2f8SDag-Erling Smørgrav Include $OBJ/ssh_config.i.* 171076ad2f8SDag-Erling Smørgrav 172076ad2f8SDag-Erling SmørgravHost f 173076ad2f8SDag-Erling Smørgrav Include $OBJ/ssh_config.i.* 174076ad2f8SDag-Erling Smørgrav Hostname ff 175076ad2f8SDag-Erling Smørgrav 176076ad2f8SDag-Erling SmørgravHost n 177076ad2f8SDag-Erling Smørgrav Include $OBJ/ssh_config.i.* 178076ad2f8SDag-Erling Smørgrav_EOF 179076ad2f8SDag-Erling Smørgrav 180076ad2f8SDag-Erling Smørgravcat > $OBJ/ssh_config.i.0 << _EOF 181076ad2f8SDag-Erling SmørgravMatch host xxxxxx 182076ad2f8SDag-Erling Smørgrav_EOF 183076ad2f8SDag-Erling Smørgrav 184076ad2f8SDag-Erling Smørgravcat > $OBJ/ssh_config.i.1 << _EOF 185076ad2f8SDag-Erling SmørgravMatch host a 186076ad2f8SDag-Erling Smørgrav Hostname aaa 187076ad2f8SDag-Erling Smørgrav 188*19261079SEd MasteMatch host b # comment 189076ad2f8SDag-Erling Smørgrav Hostname bbb 190076ad2f8SDag-Erling Smørgrav 191076ad2f8SDag-Erling SmørgravMatch host c 192*19261079SEd Maste Hostname ccc # comment 193076ad2f8SDag-Erling Smørgrav 194076ad2f8SDag-Erling SmørgravHost d 195076ad2f8SDag-Erling Smørgrav Hostname ddd 196076ad2f8SDag-Erling Smørgrav 197076ad2f8SDag-Erling SmørgravHost e 198076ad2f8SDag-Erling Smørgrav Hostname eee 199076ad2f8SDag-Erling Smørgrav 200076ad2f8SDag-Erling SmørgravHost f 201076ad2f8SDag-Erling Smørgrav Hostname fff 202076ad2f8SDag-Erling Smørgrav_EOF 203076ad2f8SDag-Erling Smørgrav 204076ad2f8SDag-Erling Smørgravcat > $OBJ/ssh_config.i.2 << _EOF 205076ad2f8SDag-Erling SmørgravMatch host a 206076ad2f8SDag-Erling Smørgrav Hostname aaaa 207076ad2f8SDag-Erling Smørgrav 208076ad2f8SDag-Erling SmørgravMatch host b 209076ad2f8SDag-Erling Smørgrav Hostname bbbb 210076ad2f8SDag-Erling Smørgrav 211076ad2f8SDag-Erling SmørgravMatch host c 212076ad2f8SDag-Erling Smørgrav Hostname cccc 213076ad2f8SDag-Erling Smørgrav 214076ad2f8SDag-Erling SmørgravHost d 215076ad2f8SDag-Erling Smørgrav Hostname dddd 216076ad2f8SDag-Erling Smørgrav 217076ad2f8SDag-Erling SmørgravHost e 218076ad2f8SDag-Erling Smørgrav Hostname eeee 219076ad2f8SDag-Erling Smørgrav 220076ad2f8SDag-Erling SmørgravHost f 221076ad2f8SDag-Erling Smørgrav Hostname ffff 222076ad2f8SDag-Erling Smørgrav 223*19261079SEd MasteMatch all # comment 224*19261079SEd Maste Hostname xxxx # comment 225076ad2f8SDag-Erling Smørgrav_EOF 226076ad2f8SDag-Erling Smørgrav 227076ad2f8SDag-Erling Smørgravtrial() { 228076ad2f8SDag-Erling Smørgrav _host="$1" 229076ad2f8SDag-Erling Smørgrav _exp="$2" 230076ad2f8SDag-Erling Smørgrav ${REAL_SSH} -F $OBJ/ssh_config.i -G "$_host" > $OBJ/ssh_config.out || 231076ad2f8SDag-Erling Smørgrav fatal "ssh config parse failed" 232076ad2f8SDag-Erling Smørgrav _got=`grep -i '^hostname ' $OBJ/ssh_config.out | awk '{print $2}'` 233076ad2f8SDag-Erling Smørgrav if test "x$_exp" != "x$_got" ; then 234076ad2f8SDag-Erling Smørgrav fail "host $_host include fail: expected $_exp got $_got" 235076ad2f8SDag-Erling Smørgrav fi 236076ad2f8SDag-Erling Smørgrav} 237076ad2f8SDag-Erling Smørgrav 238076ad2f8SDag-Erling Smørgravtrial a aa 239076ad2f8SDag-Erling Smørgravtrial b bb 240076ad2f8SDag-Erling Smørgravtrial c ccc 241076ad2f8SDag-Erling Smørgravtrial d dd 242076ad2f8SDag-Erling Smørgravtrial e ee 243076ad2f8SDag-Erling Smørgravtrial f fff 244076ad2f8SDag-Erling Smørgravtrial m xxxx 245076ad2f8SDag-Erling Smørgravtrial n xxxx 246076ad2f8SDag-Erling Smørgravtrial x x 247076ad2f8SDag-Erling Smørgrav 248076ad2f8SDag-Erling Smørgrav# Prepare an included config with an error. 249076ad2f8SDag-Erling Smørgrav 250076ad2f8SDag-Erling Smørgravcat > $OBJ/ssh_config.i.3 << _EOF 251076ad2f8SDag-Erling SmørgravHostname xxxx 252076ad2f8SDag-Erling Smørgrav Junk 253076ad2f8SDag-Erling Smørgrav_EOF 254076ad2f8SDag-Erling Smørgrav 255076ad2f8SDag-Erling Smørgrav${REAL_SSH} -F $OBJ/ssh_config.i -G a 2>/dev/null && \ 256076ad2f8SDag-Erling Smørgrav fail "ssh include allowed invalid config" 257076ad2f8SDag-Erling Smørgrav 258076ad2f8SDag-Erling Smørgrav${REAL_SSH} -F $OBJ/ssh_config.i -G x 2>/dev/null && \ 259076ad2f8SDag-Erling Smørgrav fail "ssh include allowed invalid config" 260076ad2f8SDag-Erling Smørgrav 261076ad2f8SDag-Erling Smørgravrm -f $OBJ/ssh_config.i.* 262076ad2f8SDag-Erling Smørgrav 263076ad2f8SDag-Erling Smørgrav# Ensure that a missing include is not fatal. 264076ad2f8SDag-Erling Smørgravcat > $OBJ/ssh_config.i << _EOF 265076ad2f8SDag-Erling SmørgravInclude $OBJ/ssh_config.i.* 266076ad2f8SDag-Erling SmørgravHostname aa 267076ad2f8SDag-Erling Smørgrav_EOF 268076ad2f8SDag-Erling Smørgrav 269076ad2f8SDag-Erling Smørgravtrial a aa 270076ad2f8SDag-Erling Smørgrav 271076ad2f8SDag-Erling Smørgrav# Ensure that Match/Host in an included config does not affect parent. 272076ad2f8SDag-Erling Smørgravcat > $OBJ/ssh_config.i.x << _EOF 273076ad2f8SDag-Erling SmørgravMatch host x 274076ad2f8SDag-Erling Smørgrav_EOF 275076ad2f8SDag-Erling Smørgrav 276076ad2f8SDag-Erling Smørgravtrial a aa 277076ad2f8SDag-Erling Smørgrav 278076ad2f8SDag-Erling Smørgravcat > $OBJ/ssh_config.i.x << _EOF 279076ad2f8SDag-Erling SmørgravHost x 280076ad2f8SDag-Erling Smørgrav_EOF 281076ad2f8SDag-Erling Smørgrav 282076ad2f8SDag-Erling Smørgravtrial a aa 283076ad2f8SDag-Erling Smørgrav 284076ad2f8SDag-Erling Smørgrav# Ensure that recursive includes are bounded. 285076ad2f8SDag-Erling Smørgravcat > $OBJ/ssh_config.i << _EOF 286076ad2f8SDag-Erling SmørgravInclude $OBJ/ssh_config.i 287076ad2f8SDag-Erling Smørgrav_EOF 288076ad2f8SDag-Erling Smørgrav 289076ad2f8SDag-Erling Smørgrav${REAL_SSH} -F $OBJ/ssh_config.i -G a 2>/dev/null && \ 290076ad2f8SDag-Erling Smørgrav fail "ssh include allowed infinite recursion?" # or hang... 291076ad2f8SDag-Erling Smørgrav 292076ad2f8SDag-Erling Smørgrav# cleanup 293076ad2f8SDag-Erling Smørgravrm -f $OBJ/ssh_config.i $OBJ/ssh_config.i.* $OBJ/ssh_config.out 294