class SshConf
def content
def content read_content end
def initialize(conf_path = nil, type = nil)
def initialize(conf_path = nil, type = nil) @conf_path = conf_path || '/etc/ssh/ssh_config' typename = (@conf_path.include?('sshd') ? 'Server' : 'Client') @type = type || "SSH #{typename} configuration #{conf_path}" end
def method_missing(name)
def method_missing(name) param = read_params[name.to_s] return nil if param.nil? # extract first value if we have only one value in array return param[0] if param.length == 1 param end
def params(*opts)
def params(*opts) opts.inject(read_params) do |res, nxt| res.respond_to?(:key) ? res[nxt] : nil end end
def read_content
def read_content return @content if defined?(@content) file = inspec.file(@conf_path) if !file.file? return skip_resource "Can't find file \"#{@conf_path}\"" end @content = file.content if @content.empty? && file.size > 0 return skip_resource "Can't read file \"#{@conf_path}\"" end @content end
def read_params
def read_params return @params if defined?(@params) return @params = {} if read_content.nil? conf = SimpleConfig.new( read_content, assignment_re: /^\s*(\S+?)\s+(.*?)\s*$/, multiple_values: true, ) @params = conf.params end
def to_s
def to_s 'SSH Configuration' end