Fix expanding quoted tilde in _known_hosts_real.

- Added unit test "Files starting with tilde (~) should work" to
  unit/_known_hosts_real.exp
This commit is contained in:
Freddy Vulto 2009-11-29 14:42:42 +01:00
parent 511b7c7f35
commit a07b5c5ffd
4 changed files with 42 additions and 4 deletions

View File

@ -1266,7 +1266,10 @@ _known_hosts_real()
# breakage! Alioth#311595) # breakage! Alioth#311595)
tmpkh=( $( sed -ne 's/^[ \t]*\([Gg][Ll][Oo][Bb][Aa][Ll]\|[Uu][Ss][Ee][Rr]\)[Kk][Nn][Oo][Ww][Nn][Hh][Oo][Ss][Tt][Ss][Ff][Ii][Ll][Ee]['"$'\t '"']*\(.*\)$/\2/p' "${config[@]}" | sort -u ) ) tmpkh=( $( sed -ne 's/^[ \t]*\([Gg][Ll][Oo][Bb][Aa][Ll]\|[Uu][Ss][Ee][Rr]\)[Kk][Nn][Oo][Ww][Nn][Hh][Oo][Ss][Tt][Ss][Ff][Ii][Ll][Ee]['"$'\t '"']*\(.*\)$/\2/p' "${config[@]}" | sort -u ) )
for i in "${tmpkh[@]}"; do for i in "${tmpkh[@]}"; do
i=$( eval echo "$i" ) # expand ~ # Remove possible quotes
i=${i//\"}
# Eval/expand `~' or `~user', only if first char is tilde (~)
[ "${i:0:1}" = "~" ] && i=$( eval echo "$i" )
[ -r "$i" ] && kh=( "${kh[@]}" "$i" ) [ -r "$i" ] && kh=( "${kh[@]}" "$i" )
done done
IFS=$OIFS IFS=$OIFS

View File

@ -0,0 +1,4 @@
# With quotes and tilde
UserKnownHostsFile "~/fixtures/_known_hosts_real/known_hosts2"
# Without quotes, with tilde
UserKnownHostsFile ~/fixtures/_known_hosts_real/known_hosts3

View File

@ -0,0 +1 @@
three

View File

@ -4,7 +4,10 @@ proc setup {} {
proc teardown {} { proc teardown {} {
assert_env_unmodified {/COMPREPLY=/d} assert_env_unmodified {
/COMPREPLY=/d
/OLDHOME=/d
}
}; # teardown() }; # teardown()
@ -59,8 +62,8 @@ send "$cmd\r"
expect -ex "$cmd\r\n" expect -ex "$cmd\r\n"
expect { expect {
-re "^$hosts\r\n/@$" { pass "$test" } -re "^$hosts\r\n/@$" { pass "$test" }
-re "^$hosts_orig\r\n/@$" { xfail "$test (config file)" } -re "^$hosts_orig\r\n/@$" { fail "$test (config file)" }
-re "^$hosts_config\r\n/@$" { xfail "$test (known hosts file)" } -re "^$hosts_config\r\n/@$" { fail "$test (known hosts file)" }
-re /@ { unresolved "$test at prompt" } -re /@ { unresolved "$test at prompt" }
default { unresolved "$test" } default { unresolved "$test" }
}; # expect }; # expect
@ -69,6 +72,33 @@ expect {
sync_after_int sync_after_int
set test "Files starting with tilde (~) should work"
set hosts [get_hosts]
# Host `two' is defined in ./fixtures/_known_hosts_real/known_hosts2
# Host `three' is defined in ./fixtures/_known_hosts_real/known_hosts3
lappend hosts two three
set hosts [join [lsort -ascii $hosts] "\\s+"]
# Setup environment
set cmd {OLDHOME=$HOME; HOME=$TESTDIR}
send "$cmd\r"
expect -ex "$cmd\r\n/@"
# Call _known_hosts
set cmd {unset COMPREPLY; _known_hosts_real -aF fixtures/_known_hosts_real/config_tilde ''; echo_array COMPREPLY}
send "$cmd\r"
expect -ex "$cmd\r\n"
expect {
-re "^$hosts\r\n/@$" { pass "$test" }
default { unresolved "$test" }
}; # expect
# Teardown environment
set cmd {HOME=$OLDHOME}
send "$cmd\r"
expect -ex "$cmd\r\n/@"
sync_after_int
set test "Empty COMP_KNOWN_HOSTS_WITH_HOSTFILE should omit HOSTFILE" set test "Empty COMP_KNOWN_HOSTS_WITH_HOSTFILE should omit HOSTFILE"
assert_bash_exec "COMP_KNOWN_HOSTS_WITH_HOSTFILE=" assert_bash_exec "COMP_KNOWN_HOSTS_WITH_HOSTFILE="
set hosts [get_hosts_avahi] set hosts [get_hosts_avahi]