lib/resources/mysql_conf.rb in inspec-1.51.15 vs lib/resources/mysql_conf.rb in inspec-1.51.18
- old
+ new
@@ -1,133 +1,133 @@
-# encoding: utf-8
-# copyright: 2015, Vulcano Security GmbH
-# author: Dominik Richter
-
-require 'utils/simpleconfig'
-require 'utils/find_files'
-require 'utils/hash'
-require 'resources/mysql'
-
-module Inspec::Resources
- class MysqlConfEntry
- def initialize(path, params)
- @params = params
- @path = path
- end
-
- def method_missing(name, *_)
- k = name.to_s
- res = @params[k]
- return true if res.nil? && @params.key?(k)
- @params[k]
- end
-
- def to_s
- "MySQL Config entry [#{@path.join(' ')}]"
- end
- end
-
- class MysqlConf < Inspec.resource(1)
- name 'mysql_conf'
- desc 'Use the mysql_conf InSpec audit resource to test the contents of the configuration file for MySQL, typically located at /etc/mysql/my.cnf or /etc/my.cnf.'
- example "
- describe mysql_conf('path') do
- its('setting') { should eq 'value' }
- end
-
- # Test a parameter set within the [mysqld] section
- describe mysql_conf do
- its('mysqld.port') { should cmp 3306 }
- end
-
- # Test a parameter set within the [mariadb] section using array notation
- describe mysql_conf do
- its(['mariadb', 'max-connections']) { should_not be_nil }
- end
- "
-
- include FindFiles
-
- def initialize(conf_path = nil)
- @conf_path = conf_path || inspec.mysql.conf_path
- @files_contents = {}
- @content = nil
- @params = nil
- read_content
- end
-
- def content
- @content ||= read_content
- end
-
- def params(*opts)
- @params || read_content
- res = @params
- opts.each do |opt|
- res = res[opt] unless res.nil?
- end
- MysqlConfEntry.new(opts, res)
- end
-
- def method_missing(name)
- @params || read_content
- @params[name.to_s]
- end
-
- def read_content
- @content = ''
- @params = {}
-
- # skip if the main configuration file doesn't exist
- if !inspec.file(@conf_path).file?
- return skip_resource "Can't find file \"#{@conf_path}\""
- end
- raw_conf = read_file(@conf_path)
- if raw_conf.empty? && !inspec.file(@conf_path).empty?
- return skip_resource("Can't read file \"#{@conf_path}\"")
- end
-
- to_read = [@conf_path]
- until to_read.empty?
- cur_file = to_read[0]
- raw_conf = read_file(cur_file)
- @content += raw_conf
-
- params = SimpleConfig.new(raw_conf).params
- @params = @params.deep_merge(params)
-
- to_read = to_read.drop(1)
- # see if there is more stuff to include
-
- dir = File.dirname(cur_file)
- to_read += include_files(dir, raw_conf).find_all do |fp|
- not @files_contents.key? fp
- end
- end
- #
- @content
- end
-
- def include_files(reldir, conf)
- files = conf.scan(/^!include\s+(.*)\s*/).flatten.compact.map { |x| abs_path(reldir, x) }
- dirs = conf.scan(/^!includedir\s+(.*)\s*/).flatten.compact.map { |x| abs_path(reldir, x) }
- dirs.map do |dir|
- # @TODO: non local glob
- files += find_files(dir, depth: 1, type: 'file')
- end
- files
- end
-
- def abs_path(dir, f)
- return f if f.start_with? '/'
- File.join(dir, f)
- end
-
- def read_file(path)
- @files_contents[path] ||= inspec.file(path).content
- end
-
- def to_s
- 'MySQL Configuration'
- end
- end
-end
+# encoding: utf-8
+# copyright: 2015, Vulcano Security GmbH
+# author: Dominik Richter
+
+require 'utils/simpleconfig'
+require 'utils/find_files'
+require 'utils/hash'
+require 'resources/mysql'
+
+module Inspec::Resources
+ class MysqlConfEntry
+ def initialize(path, params)
+ @params = params
+ @path = path
+ end
+
+ def method_missing(name, *_)
+ k = name.to_s
+ res = @params[k]
+ return true if res.nil? && @params.key?(k)
+ @params[k]
+ end
+
+ def to_s
+ "MySQL Config entry [#{@path.join(' ')}]"
+ end
+ end
+
+ class MysqlConf < Inspec.resource(1)
+ name 'mysql_conf'
+ desc 'Use the mysql_conf InSpec audit resource to test the contents of the configuration file for MySQL, typically located at /etc/mysql/my.cnf or /etc/my.cnf.'
+ example "
+ describe mysql_conf('path') do
+ its('setting') { should eq 'value' }
+ end
+
+ # Test a parameter set within the [mysqld] section
+ describe mysql_conf do
+ its('mysqld.port') { should cmp 3306 }
+ end
+
+ # Test a parameter set within the [mariadb] section using array notation
+ describe mysql_conf do
+ its(['mariadb', 'max-connections']) { should_not be_nil }
+ end
+ "
+
+ include FindFiles
+
+ def initialize(conf_path = nil)
+ @conf_path = conf_path || inspec.mysql.conf_path
+ @files_contents = {}
+ @content = nil
+ @params = nil
+ read_content
+ end
+
+ def content
+ @content ||= read_content
+ end
+
+ def params(*opts)
+ @params || read_content
+ res = @params
+ opts.each do |opt|
+ res = res[opt] unless res.nil?
+ end
+ MysqlConfEntry.new(opts, res)
+ end
+
+ def method_missing(name)
+ @params || read_content
+ @params[name.to_s]
+ end
+
+ def read_content
+ @content = ''
+ @params = {}
+
+ # skip if the main configuration file doesn't exist
+ if !inspec.file(@conf_path).file?
+ return skip_resource "Can't find file \"#{@conf_path}\""
+ end
+ raw_conf = read_file(@conf_path)
+ if raw_conf.empty? && !inspec.file(@conf_path).empty?
+ return skip_resource("Can't read file \"#{@conf_path}\"")
+ end
+
+ to_read = [@conf_path]
+ until to_read.empty?
+ cur_file = to_read[0]
+ raw_conf = read_file(cur_file)
+ @content += raw_conf
+
+ params = SimpleConfig.new(raw_conf).params
+ @params = @params.deep_merge(params)
+
+ to_read = to_read.drop(1)
+ # see if there is more stuff to include
+
+ dir = File.dirname(cur_file)
+ to_read += include_files(dir, raw_conf).find_all do |fp|
+ not @files_contents.key? fp
+ end
+ end
+ #
+ @content
+ end
+
+ def include_files(reldir, conf)
+ files = conf.scan(/^!include\s+(.*)\s*/).flatten.compact.map { |x| abs_path(reldir, x) }
+ dirs = conf.scan(/^!includedir\s+(.*)\s*/).flatten.compact.map { |x| abs_path(reldir, x) }
+ dirs.map do |dir|
+ # @TODO: non local glob
+ files += find_files(dir, depth: 1, type: 'file')
+ end
+ files
+ end
+
+ def abs_path(dir, f)
+ return f if f.start_with? '/'
+ File.join(dir, f)
+ end
+
+ def read_file(path)
+ @files_contents[path] ||= inspec.file(path).content
+ end
+
+ def to_s
+ 'MySQL Configuration'
+ end
+ end
+end