_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
|
# Known hosts files from configs
|
||||||
if [[ ${#config[@]} -gt 0 ]]; then
|
if [[ ${#config[@]} -gt 0 ]]; then
|
||||||
local OIFS=$IFS IFS=$'\n'
|
local OIFS=$IFS IFS=$'\n' j
|
||||||
local -a tmpkh
|
local -a tmpkh
|
||||||
# expand paths (if present) to global and user known hosts files
|
# expand paths (if present) to global and user known hosts files
|
||||||
# TODO(?): try to make known hosts files with more than one consecutive
|
# TODO(?): try to make known hosts files with more than one consecutive
|
||||||
# spaces in their name work (watch out for ~ expansion
|
# spaces in their name work (watch out for ~ expansion
|
||||||
# breakage! Alioth#311595)
|
# 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 ) )
|
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
|
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
|
fi
|
||||||
|
|
||||||
if [[ -z $configfile ]]; then
|
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
|
# With quotes and tilde
|
||||||
UserKnownHostsFile "~/fixtures/_known_hosts_real/known_hosts2"
|
UserKnownHostsFile "~/fixtures/_known_hosts_real/known_hosts2"
|
||||||
# Without quotes, with tilde
|
# Without quotes, with tilde, and another on the same line
|
||||||
UserKnownHostsFile ~/fixtures/_known_hosts_real/known_hosts3
|
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]
|
set hosts [get_hosts -unsorted]
|
||||||
# Hosts `two*' are defined in ./fixtures/_known_hosts_real/known_hosts2
|
# Hosts `two*' are defined in ./fixtures/_known_hosts_real/known_hosts2
|
||||||
# Host `three' is defined in ./fixtures/_known_hosts_real/known_hosts3
|
# 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+"]
|
set hosts [join [bash_sort $hosts] "\\s+"]
|
||||||
# Setup environment
|
# Setup environment
|
||||||
set cmd {OLDHOME=$HOME; HOME=$SRCDIRABS}
|
set cmd {OLDHOME=$HOME; HOME=$SRCDIRABS}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user