def load(path, host, settings={})
file = File.expand_path(path)
return settings unless File.readable?(file)
globals = {}
matched_host = nil
multi_host = []
seen_host = false
IO.foreach(file) do |line|
next if line =~ /^\s*(?:#.*)?$/
if line =~ /^\s*(\S+)\s*=(.*)$/
key, value = $1, $2
else
key, value = line.strip.split(/\s+/, 2)
end
next if value.nil?
key.downcase!
value = $1 if value =~ /^"(.*)"$/
value = case value.strip
when /^\d+$/ then value.to_i
when /^no$/i then false
when /^yes$/i then true
else value
end
if key == 'host'
multi_host = value.to_s.split(/\s+/)
matched_host = multi_host.select { |h| host =~ pattern2regex(h) }.first
seen_host = true
elsif !seen_host
if key == 'identityfile'
(globals[key] ||= []) << value
else
globals[key] = value unless settings.key?(key)
end
elsif !matched_host.nil?
if key == 'identityfile'
(settings[key] ||= []) << value
else
settings[key] = value unless settings.key?(key)
end
end
end
settings = globals.merge(settings) if globals
return settings
end