user: More refactoring
This commit is contained in:
parent
0b73e7782c
commit
528df05aea
2 changed files with 89 additions and 111 deletions
|
@ -1,23 +1,22 @@
|
|||
require 'set'
|
||||
require 'uri'
|
||||
require 'ldap'
|
||||
require "set"
|
||||
require "uri"
|
||||
require "ldap"
|
||||
|
||||
basedn = ''
|
||||
conn = ''
|
||||
conn = nil
|
||||
basedn = nil
|
||||
|
||||
File.readlines('/etc/openldap/ldap.conf').each do |line|
|
||||
File.readlines("/etc/openldap/ldap.conf").each do |line|
|
||||
line = line.strip
|
||||
next if line.empty?
|
||||
next if line.start_with?('#')
|
||||
next if line.empty? or line.start_with?("#")
|
||||
line = line.split
|
||||
if line[0] == 'BASE'
|
||||
if line[0] == "BASE"
|
||||
basedn = line[1]
|
||||
elsif line[0] == 'URI'
|
||||
elsif line[0] == "URI"
|
||||
line.shift
|
||||
line.each do |uri|
|
||||
uri = URI.parse(uri)
|
||||
begin
|
||||
if uri.scheme == 'ldaps'
|
||||
if uri.scheme == "ldaps"
|
||||
uri.port = 636 unless uri.port
|
||||
conn = LDAP::SSLConn.new(uri.host, uri.port)
|
||||
else
|
||||
|
@ -33,53 +32,49 @@ File.readlines('/etc/openldap/ldap.conf').each do |line|
|
|||
end
|
||||
end
|
||||
|
||||
groups = {}
|
||||
user_pp = []
|
||||
group_pp = []
|
||||
|
||||
groups = {}
|
||||
filter = "objectClass=posixAccount"
|
||||
attrib = %w(uid gidNumber)
|
||||
conn.search(basedn, LDAP::LDAP_SCOPE_SUBTREE, filter, attrib) do |entry|
|
||||
uid = entry["uid"].first
|
||||
next if uid.include?("$") # skip samba machine accounts
|
||||
|
||||
conn.search(basedn, LDAP::LDAP_SCOPE_SUBTREE,
|
||||
'objectClass=posixAccount', ['uid', 'gidNumber']) do |entry|
|
||||
dn = entry.get_dn
|
||||
uid = entry['uid'][0]
|
||||
|
||||
# skip samba machine accounts
|
||||
next if uid.include?('?')
|
||||
gidnumber = entry["gidNumber"].first
|
||||
|
||||
gids = Set.new
|
||||
|
||||
# find primary group
|
||||
filter = '(&(objectClass=posixGroup)(gidNumber=%s))' % entry['gidNumber'][0]
|
||||
conn.search(basedn, LDAP::LDAP_SCOPE_SUBTREE, filter, ['cn']) do |group|
|
||||
gid = group['cn'][0]
|
||||
filter = "(&(objectClass=posixGroup)(gidNumber=#{gidnumber}))"
|
||||
conn.search(basedn, LDAP::LDAP_SCOPE_SUBTREE, filter, ["cn"]) do |group|
|
||||
gid = group["cn"].first
|
||||
gids << gid
|
||||
groups[gid] = Set.new unless groups.has_key?(gid)
|
||||
groups[gid] << uid
|
||||
end
|
||||
|
||||
# find supplementary groups
|
||||
filter = '(&(objectClass=posixGroup)(|(uniqueMember=%s)(memberUid=%s)))' % [ dn, uid ]
|
||||
conn.search(basedn, LDAP::LDAP_SCOPE_SUBTREE, filter, ['cn']) do |group|
|
||||
gid = group['cn'][0]
|
||||
filter = "(&(objectClass=posixGroup)(|(uniqueMember=#{dn})(memberUid=#{uid})))"
|
||||
conn.search(basedn, LDAP::LDAP_SCOPE_SUBTREE, filter, ["cn"]) do |group|
|
||||
gid = group["cn"].first
|
||||
gids << gid
|
||||
groups[gid] = Set.new unless groups.has_key?(gid)
|
||||
groups[gid] << uid
|
||||
end
|
||||
|
||||
user_pp << "class user::user::%s inherits user::virtual {\n\n" % uid
|
||||
user_pp << " realize(User::Add[\"%s\"])\n" % uid
|
||||
gids.sort.each do |gid|
|
||||
user_pp << " realize(Group[\"%s\"])\n" % gid
|
||||
end
|
||||
user_pp << "class user::user::#{uid} inherits user::virtual {\n\n"
|
||||
user_pp << " realize(User::Add[\"#{uid}\"])\n"
|
||||
gids.sort.each { |gid| user_pp << " realize(Group[\"#{gid}\"])\n" }
|
||||
user_pp << "\n}\n\n"
|
||||
end
|
||||
|
||||
groups.each do |gid, uids|
|
||||
next if uids.length == 1 and uids.include?(gid)
|
||||
group_pp << "class user::group::%s {\n\n" % gid
|
||||
uids.sort.each do |uid|
|
||||
group_pp << " include user::user::%s\n" % uid
|
||||
end
|
||||
uids.sort.each { |uid| group_pp << " include user::user::#{uid}\n" }
|
||||
group_pp << "\n}\n\n"
|
||||
end
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue