class Inspec::Resources::Shadow

Attributes

params[R]

Public Class Methods

new(path = "/etc/shadow", opts = {}) click to toggle source
# File lib/inspec/resources/shadow.rb, line 38
def initialize(path = "/etc/shadow", opts = {})
  @opts = opts
  @path = path || "/etc/shadow"
  @filters = @opts[:filters] || ""
end

Public Instance Methods

expiry_date(query = nil) click to toggle source
# File lib/inspec/resources/shadow.rb, line 102
def expiry_date(query = nil)
  Inspec.deprecate(:properties_shadow, "The shadow `expiry_date` property is deprecated. Please use `expiry_dates` instead.")
  query.nil? ? where.expiry_dates : where("expiry_date" => query)
end
filter(query = {}) click to toggle source
# File lib/inspec/resources/shadow.rb, line 64
def filter(query = {})
  return self if query.nil? || query.empty?

  res = set_params
  filters = ""
  query.each do |attr, condition|
    condition = condition.to_s if condition.is_a? Integer
    filters += " #{attr} = #{condition.inspect}"
    res = res.find_all do |line|
      case line[attr.to_s]
      when condition
        true
      else
        false
      end
    end
  end
  content = res.map { |x| x.values.join(":") }.join("\n")
  Shadow.new(@path, content: content, filters: @filters + filters)
end
last_change(query = nil) click to toggle source
# File lib/inspec/resources/shadow.rb, line 97
def last_change(query = nil)
  Inspec.deprecate(:properties_shadow, "The shadow `last_change` property is deprecated. Please use `last_changes` instead.")
  query.nil? ? where.last_changes : where("last_change" => query)
end
lines() click to toggle source
# File lib/inspec/resources/shadow.rb, line 107
def lines
  Inspec.deprecate(:properties_shadow, "The shadow `lines` property is deprecated.")
  shadow_content.to_s.split("\n")
end
password(query = nil) click to toggle source
# File lib/inspec/resources/shadow.rb, line 92
def password(query = nil)
  Inspec.deprecate(:properties_shadow, "The shadow `password` property is deprecated. Please use `passwords` instead.")
  query.nil? ? where.passwords : where("password" => query)
end
to_s() click to toggle source
# File lib/inspec/resources/shadow.rb, line 112
def to_s
  f = @filters.empty? ? "" : " with" + @filters
  "#{@path}#{f}"
end
user(query = nil) click to toggle source

Next 4 are deprecated methods. We define them here so we can emit a deprecation message. They are also defined on the Table, above.

# File lib/inspec/resources/shadow.rb, line 87
def user(query = nil)
  Inspec.deprecate(:properties_shadow, "The shadow `user` property is deprecated. Please use `users` instead.")
  query.nil? ? where.users : where("user" => query)
end

Private Instance Methods

map_data(id) click to toggle source
# File lib/inspec/resources/shadow.rb, line 127
def map_data(id)
  set_params.collect { |x| x[id] }
end
parse_shadow_line(line) click to toggle source

Parse a line of /etc/shadow

@param [String] line a line of /etc/shadow @return [Hash] Map of entries in this line

# File lib/inspec/resources/shadow.rb, line 135
def parse_shadow_line(line)
  x = line.split(":")
  {
    "user" => x.at(0),
    "password" => x.at(1),
    "last_change" => x.at(2),
    "min_days" => x.at(3),
    "max_days" => x.at(4),
    "warn_days" => x.at(5),
    "inactive_days" => x.at(6),
    "expiry_date" => x.at(7),
    "reserved" => x.at(8),
  }
end
set_params() click to toggle source
# File lib/inspec/resources/shadow.rb, line 123
def set_params
  @params ||= Array(shadow_content.to_s.split("\n")).map { |l| parse_shadow_line(l) }
end
shadow_content() click to toggle source
# File lib/inspec/resources/shadow.rb, line 119
def shadow_content
  @opts[:content] || read_file_content(@path, allow_empty: true)
end