aboutsummaryrefslogtreecommitdiff
path: root/crypto/openssh/regress/percent.sh
diff options
context:
space:
mode:
Diffstat (limited to 'crypto/openssh/regress/percent.sh')
-rw-r--r--crypto/openssh/regress/percent.sh42
1 files changed, 36 insertions, 6 deletions
diff --git a/crypto/openssh/regress/percent.sh b/crypto/openssh/regress/percent.sh
index 354854f97d55..7ce9e8a1dc30 100644
--- a/crypto/openssh/regress/percent.sh
+++ b/crypto/openssh/regress/percent.sh
@@ -1,4 +1,4 @@
-# $OpenBSD: percent.sh,v 1.17 2023/03/27 03:56:50 dtucker Exp $
+# $OpenBSD: percent.sh,v 1.21 2025/04/08 23:10:46 djm Exp $
# Placed in the Public Domain.
tid="percent expansions"
@@ -29,6 +29,23 @@ trial()
somehost true
got=`cat $OBJ/actual`
;;
+ user|user-l|user-at)
+ if [ "$arg" = '%r' ] || [ "$arg" = '%C' ]; then
+ # User does not support %r, ie itself or %C. Skip test.
+ got="$expect"
+ elif [ "$i" = "user" ]; then
+ got=`${SSH} -F $OBJ/ssh_proxy -o $opt="$arg" -G \
+ remuser@somehost | awk '$1=="'$opt'"{print $2}'`
+ elif [ "$i" = "user-l" ]; then
+ # Also test ssh -l
+ got=`${SSH} -F $OBJ/ssh_proxy -l "$arg" -G \
+ somehost | awk '$1=="'user'"{print $2}'`
+ elif [ "$i" = "user-at" ]; then
+ # Also test user@host
+ got=`${SSH} -F $OBJ/ssh_proxy -G "$arg@somehost" | \
+ awk '$1=="'user'"{print $2}'`
+ fi
+ ;;
userknownhostsfile)
# Move the userknownhosts file to what the expansion says,
# make sure ssh works then put it back.
@@ -51,6 +68,18 @@ trial()
remuser@somehost | awk '$1=="'$opt'"{print $2" "$3}'`
expect="/$expect /$expect"
;;
+ setenv)
+ # First make sure we don't expand variable names.
+ got=`${SSH} -F $OBJ/ssh_proxy -o $opt="$arg=TESTVAL" -G \
+ remuser@somehost | awk '$1=="'$opt'"{print $2}'`
+ if [ "$got" != "$arg=TESTVAL" ]; then
+ fatal "incorrectly expanded setenv variable name"
+ fi
+ # Now check that the value expands as expected.
+ got=`${SSH} -F $OBJ/ssh_proxy -o $opt=TESTVAL="$arg" -G \
+ remuser@somehost | awk '$1=="'$opt'"{print $2}'`
+ got=`echo "$got" | sed 's/^TESTVAL=//'`
+ ;;
*)
got=`${SSH} -F $OBJ/ssh_proxy -o $opt="$arg" -G \
remuser@somehost | awk '$1=="'$opt'"{print $2}'`
@@ -62,7 +91,7 @@ trial()
for i in matchexec localcommand remotecommand controlpath identityagent \
forwardagent localforward remoteforward revokedhostkeys \
- userknownhostsfile; do
+ user user-l user-at setenv userknownhostsfile; do
verbose $tid $i percent
case "$i" in
localcommand|userknownhostsfile)
@@ -77,7 +106,7 @@ for i in matchexec localcommand remotecommand controlpath identityagent \
fi
# Matches implementation in readconf.c:ssh_connection_hash()
if [ ! -z "${OPENSSL_BIN}" ]; then
- HASH=`printf "${HOSTNAME}127.0.0.1${PORT}$REMUSER" |
+ HASH=`printf "${HOSTNAME}127.0.0.1${PORT}${REMUSER}" |
$OPENSSL_BIN sha1 | cut -f2 -d' '`
trial $i '%C' $HASH
fi
@@ -92,8 +121,9 @@ for i in matchexec localcommand remotecommand controlpath identityagent \
trial $i '%r' $REMUSER
trial $i '%u' $USER
# We can't specify a full path outside the regress dir, so skip tests
- # containing %d for UserKnownHostsFile
- if [ "$i" != "userknownhostsfile" ]; then
+ # containing %d for UserKnownHostsFile, and %r can't refer to itself.
+ if [ "$i" != "userknownhostsfile" ] && [ "$i" != "user" ] && \
+ [ "$i" != "user-l" ] && [ "$i" != "user-at" ]; then
trial $i '%d' $HOME
in='%%/%i/%h/%d/%L/%l/%n/%p/%r/%u'
out="%/$USERID/127.0.0.1/$HOME/$HOST/$HOSTNAME/somehost/$PORT/$REMUSER/$USER"
@@ -108,7 +138,7 @@ 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 \
- userknownhostsfile; do
+ user user-l user-at setenv userknownhostsfile; do
verbose $tid $i dollar
FOO=bar
export FOO