# encoding: utf-8 # copyright: 2015, Vulcano Security GmbH # license: All rights reserved require 'utils/simpleconfig' class SshConf < Vulcano.resource(1) name 'ssh_config' 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}" read_content end def to_s @type end def content @conf.content end def params(*opts) res = @params opts.each do |opt| res = res[opt] unless res.nil? end res end def method_missing(name) param = @params[name.to_s] # extract first value if we have only one value in array param = param[0] if !param.nil? && param.length == 1 param end private def read_content @conf = vulcano.file(@conf_path) # read the file if !@conf.file? return skip_resource "Can't find file \"#{@conf_path}\"" end if @conf.content.empty? && @conf.size > 0 return skip_resource "Can't read file \"#{@conf_path}\"" end # parse the file @params = SimpleConfig.new(@conf.content, assignment_re: /^\s*(\S+?)\s+(.*?)\s*$/, multiple_values: true ).params end end class SshdConf < SshConf name 'sshd_config' def initialize(path = nil) super(path || '/etc/ssh/sshd_config') end end