]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - crypto/openssh/regress/key-options.sh
Upgrade to OpenSSH 7.7p1.
[FreeBSD/FreeBSD.git] / crypto / openssh / regress / key-options.sh
1 #       $OpenBSD: key-options.sh,v 1.8 2018/03/14 05:35:40 djm Exp $
2 #       Placed in the Public Domain.
3
4 tid="key options"
5
6 origkeys="$OBJ/authkeys_orig"
7 authkeys="$OBJ/authorized_keys_${USER}"
8 cp $authkeys $origkeys
9
10 # Test command= forced command
11 for c in 'command="echo bar"' 'no-pty,command="echo bar"'; do
12         sed "s/.*/$c &/" $origkeys >$authkeys
13         verbose "key option $c"
14         r=`${SSH} -q -F $OBJ/ssh_proxy somehost echo foo`
15         if [ "$r" = "foo" ]; then
16                 fail "key option forced command not restricted"
17         fi
18         if [ "$r" != "bar" ]; then
19                 fail "key option forced command not executed"
20         fi
21 done
22
23 # Test no-pty
24 expect_pty_succeed() {
25         which=$1
26         opts=$2
27         rm -f $OBJ/data
28         sed "s/.*/$opts &/" $origkeys >$authkeys
29         verbose "key option pty $which"
30         ${SSH} -ttq -F $OBJ/ssh_proxy somehost "tty > $OBJ/data; exit 0"
31         if [ $? -ne 0 ] ; then
32                 fail "key option failed $which"
33         else
34                 r=`cat $OBJ/data`
35                 case "$r" in
36                 /dev/*) ;;
37                 *)      fail "key option failed $which (pty $r)" ;;
38                 esac
39         fi
40 }
41 expect_pty_fail() {
42         which=$1
43         opts=$2
44         rm -f $OBJ/data
45         sed "s/.*/$opts &/" $origkeys >$authkeys
46         verbose "key option pty $which"
47         ${SSH} -ttq -F $OBJ/ssh_proxy somehost "tty > $OBJ/data; exit 0"
48         if [ $? -eq 0 ]; then
49                 r=`cat $OBJ/data`
50                 if [ -e "$r" ]; then
51                         fail "key option failed $which (pty $r)"
52                 fi
53                 case "$r" in
54                 /dev/*) fail "key option failed $which (pty $r)" ;;
55                 *)      ;;
56                 esac
57         fi
58 }
59 # First ensure that we can allocate a pty by default.
60 expect_pty_succeed "default" ""
61 expect_pty_fail "no-pty" "no-pty"
62 expect_pty_fail "restrict" "restrict"
63 expect_pty_succeed "restrict,pty" "restrict,pty"
64
65 # Test environment=
66 echo 'PermitUserEnvironment yes' >> $OBJ/sshd_proxy
67 sed 's/.*/environment="FOO=bar" &/' $origkeys >$authkeys
68 verbose "key option environment"
69 r=`${SSH} -q -F $OBJ/ssh_proxy somehost 'echo $FOO'`
70 if [ "$r" != "bar" ]; then
71         fail "key option environment not set"
72 fi
73
74 # Test from= restriction
75 start_sshd
76 for f in 127.0.0.1 '127.0.0.0\/8'; do
77         cat  $origkeys >$authkeys
78         ${SSH} -q -F $OBJ/ssh_proxy somehost true
79         if [ $? -ne 0 ]; then
80                 fail "key option failed without restriction"
81         fi
82
83         sed 's/.*/from="'"$f"'" &/' $origkeys >$authkeys
84         from=`head -1 $authkeys | cut -f1 -d ' '`
85         verbose "key option $from"
86         r=`${SSH} -q -F $OBJ/ssh_proxy somehost 'echo true'`
87         if [ "$r" = "true" ]; then
88                 fail "key option $from not restricted"
89         fi
90
91         r=`${SSH} -q -F $OBJ/ssh_config somehost 'echo true'`
92         if [ "$r" != "true" ]; then
93                 fail "key option $from not allowed but should be"
94         fi
95 done
96
97 check_valid_before() {
98         which=$1
99         opts=$2
100         expect=$3
101         sed "s/.*/$opts &/" $origkeys >$authkeys
102         verbose "key option expiry-time $which"
103         ${SSH} -q -F $OBJ/ssh_proxy somehost true
104         r=$?
105         case "$expect" in
106         fail)   test $r -eq 0 && fail "key option succeeded $which" ;;
107         pass)   test $r -ne 0 && fail "key option failed $which" ;;
108         *)      fatal "unknown expectation $expect" ;;
109         esac
110 }
111 check_valid_before "default"    ""                              "pass"
112 check_valid_before "invalid"    'expiry-time="INVALID"'         "fail"
113 check_valid_before "expired"    'expiry-time="19990101"'        "fail"
114 check_valid_before "valid"      'expiry-time="20380101"'        "pass"
115