class Inspec::Resources::EtcGroup
def gids(filter = nil)
def gids(filter = nil) (filter || @entries)&.map { |x| x['gid'] } end
def groups(filter = nil)
def groups(filter = nil) (filter || @entries)&.map { |x| x['name'] } end
def initialize(path = nil)
def initialize(path = nil) @path = path || '/etc/group' @entries = parse_group(@path) end
def parse_group(path)
def parse_group(path) @content = read_file_content(path, allow_empty: true) # iterate over each line and filter comments @content.split("\n").each_with_object([]) do |line, lines| grp_info = parse_group_line(line) lines.push(grp_info) if !grp_info.nil? && !grp_info.empty? end end
def parse_group_line(line)
def parse_group_line(line) opts = { comment_char: '#', standalone_comments: false, } line, _idx_nl = parse_comment_line(line, opts) x = line.split(':') # abort if we have an empty or comment line return nil if x.empty? # map data { 'name' => x.at(0), # Name of the group. 'password' => x.at(1), # Group's encrypted password. 'gid' => convert_to_i(x.at(2)), # The group's decimal ID. 'members' => x.at(3), # Group members. } end
def to_s
def to_s '/etc/group' end
def users(filter = nil)
def users(filter = nil) entries = filter || @entries return nil if entries.nil? # filter the user entry res = entries.map { |x| x['members'].split(',') if !x.nil? && !x['members'].nil? }.flatten # filter nil elements res.reject { |x| x.nil? || x.empty? } end
def where(conditions = {})
def where(conditions = {}) return if conditions.empty? fields = { name: 'name', group_name: 'name', password: 'password', gid: 'gid', group_id: 'gid', users: 'members', members: 'members', } res = entries unless res.nil? conditions.each do |k, v| idx = fields[k.to_sym] next if idx.nil? res = res.select { |x| x[idx].to_s == v.to_s } end end EtcGroupView.new(self, res) end