Class: MiqLinux::Users

Inherits:
Object
  • Object
show all
Defined in:
lib/metadata/linux/LinuxUsers.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(fs) ⇒ Users

Returns a new instance of Users.



10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
# File 'lib/metadata/linux/LinuxUsers.rb', line 10

def initialize(fs)
  @userHash = {}
  @usersByGid = Hash.new { |h, k| h[k] = [] }
  @groups = []

  wtmp = FileWTMP.new(fs)

  fname = "/etc/passwd"
  if fs.fileExists?(fname)
    pfes = nil
    fs.fileOpen(fname) { |fo| pfes = fo.read }
    unless pfes.nil?
      pfes.each_line do |pfe|
        next if pfe =~ /^#/
        fields = pfe.chop.split(':')
        u = MiqHashStruct.new
        u.name       = fields[0]
        u.uid        = fields[2]
        u.gid        = fields[3]
        u.gecos      = fields[4]
        u.dir        = fields[5]
        u.shell      = fields[6] || "NONE"
        u.last_logon = wtmp.last_logon(u.name) unless wtmp.nil?
        u.groups     = []
        @userHash[u.name] = u
        @usersByGid[u.gid] << u
      end
    end
  end

  fname = "/etc/group"
  if fs.fileExists?(fname)
    pfes = nil
    fs.fileOpen(fname) { |fo| pfes = fo.read }
    unless pfes.nil?
      pfes.each_line do |pfe|
        next if pfe =~ /^#/
        fields = pfe.chop.split(':')
        g = MiqHashStruct.new
        g.name  = fields[0]
        g.gid   = fields[2]
        g.ulist = fields[3].split(',') if fields[3]
        g.ulist = [] unless g.ulist
        @usersByGid[g.gid].each { |u| g.ulist << u.name }
        g.ulist.uniq!
        g.ulist.each { |un| @userHash[un].groups << g.name if @userHash[un] }
        @groups << g
      end
    end
  end
  @userHash.each_value { |u| u.groups.uniq! }
end

Instance Attribute Details

#groupsObject (readonly)

Returns the value of attribute groups.



8
9
10
# File 'lib/metadata/linux/LinuxUsers.rb', line 8

def groups
  @groups
end

#userHashObject (readonly)

Returns the value of attribute userHash.



8
9
10
# File 'lib/metadata/linux/LinuxUsers.rb', line 8

def userHash
  @userHash
end

Instance Method Details

#groupsToXml(doc = nil) ⇒ Object



111
112
113
114
115
116
117
118
119
120
121
122
123
# File 'lib/metadata/linux/LinuxUsers.rb', line 111

def groupsToXml(doc = nil)
  doc = MiqXml.createDoc(nil) unless doc

  groups = doc.add_element('groups')
  @groups.each do |g|
    group = groups.add_element('group', {'name' => g.name, 'groupid' => g.gid})

    g.ulist.each do |un|
      group.add_element('member_users', {'name' => un})
    end
  end
  doc
end

#to_sObject



63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
# File 'lib/metadata/linux/LinuxUsers.rb', line 63

def to_s
  str = ''

  @userHash.each_value do |u|
    str += "Login: " + u.name
    str += "\n\tUid: " + u.uid.to_s
    str += "\n\tGid: " + u.gid.to_s
    str += "\n\tHome: " + u.dir
    str += "\n\tShell: " + u.shell
    str += "\n\tGECOS: " + u.gecos
    str += "\n\tGroups: "
    u.groups.each { |gn| str += "\n\t\t#{gn}" }
    str += "\n"
  end

  @groups.each do |g|
    str += "Group Name: " + g.name
    str += "\n\tGid: " + g.gid
    str += "\n\tUsers:"
    g.ulist.each { |un| str += "\n\t\t#{un}" }
    str += "\n"
  end
  (str)
end

#to_xml(doc = nil) ⇒ Object



88
89
90
91
92
93
# File 'lib/metadata/linux/LinuxUsers.rb', line 88

def to_xml(doc = nil)
  doc = MiqXml.createDoc(nil) unless doc
  usersToXml(doc)
  groupsToXml(doc)
  doc
end

#usersToXml(doc = nil) ⇒ Object



95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
# File 'lib/metadata/linux/LinuxUsers.rb', line 95

def usersToXml(doc = nil)
  doc = MiqXml.createDoc(nil) unless doc

  users = doc.add_element('users')
  @userHash.each_value do |u|
    user = users.add_element('user', {'name' => u.name, 'userid' => u.uid, 'homedir' => u.dir})
    user.add_attribute('comment', u.gecos) unless u.gecos.blank?
    user.add_attribute('last_logon', u.last_logon) unless u.last_logon.nil? || u.last_logon.blank?

    u.groups.each do |gn|
      user.add_element('member_of_group', {'name' => gn})
    end
  end
  doc
end