class Inspec::Resources::AideConf

Attributes

params[R]

Public Class Methods

new(aide_conf_path = nil) click to toggle source
# File lib/inspec/resources/aide_conf.rb, line 30
def initialize(aide_conf_path = nil)
  @conf_path = aide_conf_path || "/etc/aide.conf"
  @content = nil
  @rules = nil
  read_content
end

Public Instance Methods

all_have_rule(rule) click to toggle source
# File lib/inspec/resources/aide_conf.rb, line 37
def all_have_rule(rule)
  # Case when file didn't exist or perms didn't allow an open
  return false if @content.nil?

  lines = @params.reject { |line| line["rules"].include? rule }
  lines.empty?
end
to_s() click to toggle source
# File lib/inspec/resources/aide_conf.rb, line 51
def to_s
  "AIDE Config"
end

Private Instance Methods

filter_comments(data) click to toggle source
# File lib/inspec/resources/aide_conf.rb, line 69
def filter_comments(data)
  content = []
  data.each do |line|
    content_line, = parse_comment_line(line, comment_char: "#", standalone_comments: false)
    content.push(content_line)
  end
  content
end
handle_multi_rule(rule_list, i) click to toggle source
# File lib/inspec/resources/aide_conf.rb, line 136
def handle_multi_rule(rule_list, i)
  # Rules that represent multiple rules (R,L,>)
  r_rules = %w{p i l n u g s m c md5}
  l_rules = %w{p i l n u g}
  grow_log_rules = %w{p l u g i n S}

  case rule_list[i]
  when "R"
    return r_rules
  when "L"
    return l_rules
  when ">"
    return grow_log_rules
  end
  rule_list[i]
end
parse_conf(content) click to toggle source
# File lib/inspec/resources/aide_conf.rb, line 78
def parse_conf(content)
  params = []
  content.each do |line|
    param = parse_line(line)
    unless param["selection_line"].nil?
      params.push(param)
    end
  end
  params
end
parse_line(line) click to toggle source
# File lib/inspec/resources/aide_conf.rb, line 89
def parse_line(line)
  line_and_rules = {}
  # Case when line is a rule line
  if line.include?(" = ")
    parse_rule_line(line)
  # Case when line is a selection line
  elsif line.start_with?("/", "!", "=")
    line_and_rules = parse_selection_line(line)
  end
  line_and_rules
end
parse_rule_line(line) click to toggle source
# File lib/inspec/resources/aide_conf.rb, line 101
def parse_rule_line(line)
  line.gsub!(/\s+/, "")
  rule_line_arr = line.split("=")
  rules_list = rule_line_arr.last.split("+")
  rule_name = rule_line_arr.first
  rules_list.each_index do |i|
    # Cases where rule respresents one or more other rules
    if @rules.key?(rules_list[i])
      rules_list[i] = @rules[rules_list[i]]
    end
    rules_list[i] = handle_multi_rule(rules_list, i)
  end
  @rules[rule_name] = rules_list.flatten
end
parse_selection_line(line) click to toggle source
# File lib/inspec/resources/aide_conf.rb, line 116
def parse_selection_line(line)
  selec_line_arr = line.split(" ")
  selection_line = selec_line_arr.first
  selection_line.chop! if selection_line.end_with?("/")
  rule_list = selec_line_arr.last.split("+")
  rule_list.each_index do |i|
    hash_list = @rules[rule_list[i]]
    # Cases where rule respresents one or more other rules
    unless hash_list.nil?
      rule_list[i] = hash_list
    end
    rule_list[i] = handle_multi_rule(rule_list, i)
  end
  rule_list.flatten!
  {
    "selection_line" => selection_line,
    "rules" => rule_list,
  }
end
read_content() click to toggle source
# File lib/inspec/resources/aide_conf.rb, line 57
def read_content
  return @content unless @content.nil?

  @rules = {}

  raw_conf = read_file_content(@conf_path)

  # If there is a file and it contains content, continue
  @content = filter_comments(raw_conf.lines)
  @params = parse_conf(@content)
end