]> git.ipfire.org Git - thirdparty/openssh-portable.git/commitdiff
upstream: Add tests for expansions on UserKnownHostsFile.
authordtucker@openbsd.org <dtucker@openbsd.org>
Fri, 17 Jul 2020 03:26:58 +0000 (03:26 +0000)
committerDamien Miller <djm@mindrot.org>
Fri, 17 Jul 2020 03:53:04 +0000 (13:53 +1000)
OpenBSD-Regress-ID: bccf8060306c841bbcceb1392644f906a4d6ca51

regress/percent.sh

index cdcbe183972a711c015810f276ece8341c718a1e..f569f82c26d3cdbcd37d01491388e74130013fee 100644 (file)
@@ -1,4 +1,4 @@
-#      $OpenBSD: percent.sh,v 1.7 2020/05/29 04:32:26 dtucker Exp $
+#      $OpenBSD: percent.sh,v 1.8 2020/07/17 03:26:58 dtucker Exp $
 #      Placed in the Public Domain.
 
 tid="percent expansions"
@@ -25,12 +25,21 @@ trial()
 
        trace "test $opt=$arg $expect"
        rm -f $OBJ/actual
+       got=""
        case "$opt" in
        localcommand)
                ${SSH} -F $OBJ/ssh_proxy -o $opt="echo '$arg' >$OBJ/actual" \
                    somehost true
                got=`cat $OBJ/actual`
                ;;
+       userknownhostsfile)
+               # Move the userknownhosts file to what the expansion says,
+               # make sure ssh works then put it back.
+               mv "$OBJ/known_hosts" "$OBJ/$expect"
+               ${SSH} -F $OBJ/ssh_proxy -o $opt="$OBJ/$arg" somehost true && \
+                       got="$expect"
+               mv "$OBJ/$expect" "$OBJ/known_hosts"
+               ;;
        matchexec)
                (cat $OBJ/ssh_proxy && \
                 echo "Match Exec \"echo '$arg' >$OBJ/actual\"") \
@@ -55,13 +64,18 @@ trial()
 }
 
 for i in matchexec localcommand remotecommand controlpath identityagent \
-    forwardagent localforward remoteforward; do
+    forwardagent localforward remoteforward userknownhostsfile; do
        verbose $tid $i percent
-       if [ "$i" = "localcommand" ]; then
-               REMUSER=$USER
+       case "$i" in
+       localcommand|userknownhostsfile)
+               # Any test that's going to actually make a connection needs
+               # to use the real username.
+               REMUSER=$USER ;;
+       *)
+               REMUSER=remuser ;;
+       esac
+       if [ "$i" = "$localcommand" ]; then
                trial $i '%T' NONE
-       else
-               REMUSER=remuser
        fi
        # Matches implementation in readconf.c:ssh_connection_hash()
        HASH=`printf "${HOSTNAME}127.0.0.1${PORT}$REMUSER" |
@@ -70,20 +84,25 @@ for i in matchexec localcommand remotecommand controlpath identityagent \
        trial $i '%C' $HASH
        trial $i '%i' $USERID
        trial $i '%h' 127.0.0.1
-       trial $i '%d' $HOME
        trial $i '%L' $HOST
        trial $i '%l' $HOSTNAME
        trial $i '%n' somehost
        trial $i '%p' $PORT
        trial $i '%r' $REMUSER
        trial $i '%u' $USER
-       trial $i '%%/%C/%i/%h/%d/%L/%l/%n/%p/%r/%u' \
-           "%/$HASH/$USERID/127.0.0.1/$HOME/$HOST/$HOSTNAME/somehost/$PORT/$REMUSER/$USER"
+       # We can't specify a full path outside the regress dir, so skip tests
+       # containing %d for UserKnownHostsFile
+       if [ "$i" != "userknownhostsfile" ]; then
+               trial $i '%d' $HOME
+               trial $i '%%/%C/%i/%h/%d/%L/%l/%n/%p/%r/%u' \
+                   "%/$HASH/$USERID/127.0.0.1/$HOME/$HOST/$HOSTNAME/somehost/$PORT/$REMUSER/$USER"
+       fi
 done
 
 # Subset of above since we don't expand shell-style variables on anything that
 # runs a command because the shell will expand those.
-for i in controlpath identityagent forwardagent localforward remoteforward; do
+for i in controlpath identityagent forwardagent localforward remoteforward \
+    userknownhostsfile; do
        verbose $tid $i dollar
        FOO=bar
        export FOO