123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190 |
- # Placed in the Public Domain.
- tid="server config include"
- cat > $OBJ/sshd_config.i << _EOF
- HostKey $OBJ/host.ssh-ed25519
- Match host a
- Banner /aa
- Match host b
- Banner /bb
- Include $OBJ/sshd_config.i.*
- Match host c
- Include $OBJ/sshd_config.i.*
- Banner /cc
- Match host m
- Include $OBJ/sshd_config.i.*
- Match Host d
- Banner /dd
- Match Host e
- Banner /ee
- Include $OBJ/sshd_config.i.*
- Match Host f
- Include $OBJ/sshd_config.i.*
- Banner /ff
- Match Host n
- Include $OBJ/sshd_config.i.*
- _EOF
- cat > $OBJ/sshd_config.i.0 << _EOF
- Match host xxxxxx
- _EOF
- cat > $OBJ/sshd_config.i.1 << _EOF
- Match host a
- Banner /aaa
- Match host b
- Banner /bbb
- Match host c
- Banner /ccc
- Match Host d
- Banner /ddd
- Match Host e
- Banner /eee
- Match Host f
- Banner /fff
- _EOF
- cat > $OBJ/sshd_config.i.2 << _EOF
- Match host a
- Banner /aaaa
- Match host b
- Banner /bbbb
- Match host c
- Banner /cccc
- Match Host d
- Banner /dddd
- Match Host e
- Banner /eeee
- Match Host f
- Banner /ffff
- Match all
- Banner /xxxx
- _EOF
- trial()
- {
- _host="$1"
- _exp="$2"
- _desc="$3"
- test -z "$_desc" && _desc="test match"
- trace "$_desc host=$_host expect=$_exp"
- ${SUDO} ${REAL_SSHD} -f $OBJ/sshd_config.i -T \
- -C "host=$_host,user=test,addr=127.0.0.1" > $OBJ/sshd_config.out ||
- fatal "ssh config parse failed: $_desc host=$_host expect=$_exp"
- _got=$(grep -i '^banner ' $OBJ/sshd_config.out | awk '{print $2}')
- if test "x$_exp" != "x$_got"; then
- fail "$desc_ host $_host include fail: expected $_exp got $_got"
- fi
- }
- trial a /aa
- trial b /bb
- trial c /ccc
- trial d /dd
- trial e /ee
- trial f /fff
- trial m /xxxx
- trial n /xxxx
- trial x none
- # Prepare an included config with an error.
- cat > $OBJ/sshd_config.i.3 << _EOF
- Banner xxxx
- Junk
- _EOF
- trace "disallow invalid config host=a"
- ${SUDO} ${REAL_SSHD} -f $OBJ/sshd_config.i \
- -C "host=a,user=test,addr=127.0.0.1" 2> /dev/null &&
- fail "sshd include allowed invalid config"
- trace "disallow invalid config host=x"
- ${SUDO} ${REAL_SSHD} -f $OBJ/sshd_config.i \
- -C "host=x,user=test,addr=127.0.0.1" 2> /dev/null &&
- fail "sshd include allowed invalid config"
- rm -f $OBJ/sshd_config.i.*
- # Ensure that a missing include is not fatal.
- cat > $OBJ/sshd_config.i << _EOF
- HostKey $OBJ/host.ssh-ed25519
- Include $OBJ/sshd_config.i.*
- Banner /aa
- _EOF
- trial a /aa "missing include non-fatal"
- # Ensure that Match/Host in an included config does not affect parent.
- cat > $OBJ/sshd_config.i.x << _EOF
- Match host x
- _EOF
- trial a /aa "included file does not affect match state"
- # Ensure the empty include directive is not accepted
- cat > $OBJ/sshd_config.i.x << _EOF
- Include
- _EOF
- trace "disallow invalid with no argument"
- ${SUDO} ${REAL_SSHD} -f $OBJ/sshd_config.i.x -T \
- -C "host=x,user=test,addr=127.0.0.1" 2> /dev/null &&
- fail "sshd allowed Include with no argument"
- # Ensure the Include before any Match block works as expected (bug #3122)
- cat > $OBJ/sshd_config.i << _EOF
- Banner /xx
- HostKey $OBJ/host.ssh-ed25519
- Include $OBJ/sshd_config.i.2
- Match host a
- Banner /aaaa
- _EOF
- cat > $OBJ/sshd_config.i.2 << _EOF
- Match host a
- Banner /aa
- _EOF
- trace "Include before match blocks"
- trial a /aa "included file before match blocks is properly evaluated"
- # Port in included file is correctly interpretted (bug #3169)
- cat > $OBJ/sshd_config.i << _EOF
- Include $OBJ/sshd_config.i.2
- Port 7722
- _EOF
- cat > $OBJ/sshd_config.i.2 << _EOF
- HostKey $OBJ/host.ssh-ed25519
- _EOF
- trace "Port after included files"
- ${SUDO} ${REAL_SSHD} -f $OBJ/sshd_config.i -T \
- -C "host=x,user=test,addr=127.0.0.1" > $OBJ/sshd_config.out ||
- fail "failed to parse Port after included files"
- _port=$(grep -i '^port ' $OBJ/sshd_config.out | awk '{print $2}')
- if test "x7722" != "x$_port"; then
- fail "The Port in included file was intertepretted wrongly. Expected 7722, got $_port"
- fi
- # cleanup
- rm -f $OBJ/sshd_config.i $OBJ/sshd_config.i.* $OBJ/sshd_config.out
|