_known_hosts_real: Support > 1 files per *KnownHostsFile line (Debian: #650514).
This commit is contained in:
parent
da4956af1f
commit
17c9722733
@ -1425,21 +1425,28 @@ _known_hosts_real()
|
||||
|
||||
# Known hosts files from configs
|
||||
if [[ ${#config[@]} -gt 0 ]]; then
|
||||
local OIFS=$IFS IFS=$'\n'
|
||||
local OIFS=$IFS IFS=$'\n' j
|
||||
local -a tmpkh
|
||||
# expand paths (if present) to global and user known hosts files
|
||||
# TODO(?): try to make known hosts files with more than one consecutive
|
||||
# spaces in their name work (watch out for ~ expansion
|
||||
# breakage! Alioth#311595)
|
||||
tmpkh=( $( awk 'sub("^[ \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]+", "") { print $0 }' "${config[@]}" | sort -u ) )
|
||||
for i in "${tmpkh[@]}"; do
|
||||
# Remove possible quotes
|
||||
i=${i//\"}
|
||||
# Eval/expand possible `~' or `~user'
|
||||
__expand_tilde_by_ref i
|
||||
[[ -r $i ]] && kh+=( "$i" )
|
||||
done
|
||||
IFS=$OIFS
|
||||
for i in "${tmpkh[@]}"; do
|
||||
# First deal with quoted entries...
|
||||
while [[ $i =~ ^([^\"]*)\"([^\"]*)\"(.*)$ ]]; do
|
||||
i=${BASH_REMATCH[1]}${BASH_REMATCH[3]}
|
||||
j=${BASH_REMATCH[2]}
|
||||
__expand_tilde_by_ref j # Eval/expand possible `~' or `~user'
|
||||
[[ -r $j ]] && kh+=( "$j" )
|
||||
done
|
||||
# ...and then the rest.
|
||||
for j in $i; do
|
||||
__expand_tilde_by_ref j # Eval/expand possible `~' or `~user'
|
||||
[[ -r $j ]] && kh+=( "$j" )
|
||||
done
|
||||
done
|
||||
fi
|
||||
|
||||
if [[ -z $configfile ]]; then
|
||||
|
4
test/fixtures/_known_hosts_real/config_tilde
vendored
4
test/fixtures/_known_hosts_real/config_tilde
vendored
@ -1,4 +1,4 @@
|
||||
# With quotes and tilde
|
||||
UserKnownHostsFile "~/fixtures/_known_hosts_real/known_hosts2"
|
||||
# Without quotes, with tilde
|
||||
UserKnownHostsFile ~/fixtures/_known_hosts_real/known_hosts3
|
||||
# Without quotes, with tilde, and another on the same line
|
||||
UserKnownHostsFile ~/fixtures/_known_hosts_real/known_hosts3 fixtures/_known_hosts_real/known_hosts4
|
||||
|
1
test/fixtures/_known_hosts_real/known_hosts4
vendored
Normal file
1
test/fixtures/_known_hosts_real/known_hosts4
vendored
Normal file
@ -0,0 +1 @@
|
||||
four
|
@ -80,7 +80,8 @@ set test "Files starting with tilde (~) should work"
|
||||
set hosts [get_hosts -unsorted]
|
||||
# Hosts `two*' are defined in ./fixtures/_known_hosts_real/known_hosts2
|
||||
# Host `three' is defined in ./fixtures/_known_hosts_real/known_hosts3
|
||||
lappend hosts two two2 two3 two4 three
|
||||
# Host `four' is defined in ./fixtures/_known_hosts_real/known_hosts4
|
||||
lappend hosts two two2 two3 two4 three four
|
||||
set hosts [join [bash_sort $hosts] "\\s+"]
|
||||
# Setup environment
|
||||
set cmd {OLDHOME=$HOME; HOME=$SRCDIRABS}
|
||||
|
Loading…
x
Reference in New Issue
Block a user