|
|
|
@ -43,8 +43,7 @@ class SystemDataBackendLdap |
|
|
|
LDAP_LAMBDA_USER = lambda do |entry| |
|
|
|
entry[:cn] = entry[:uid] |
|
|
|
entry[:shadowlastchange] = (Time::now.to_i/60/60/24).to_s |
|
|
|
entry[:shadowmax] = '99999' |
|
|
|
entry[:shadowwarning] = '7' |
|
|
|
entry[:replace] += ['shadowreplace'] if entry[:replace] |
|
|
|
end |
|
|
|
|
|
|
|
LDAP_LAMBDA = { |
|
|
|
@ -64,7 +63,9 @@ class SystemDataBackendLdap |
|
|
|
end |
|
|
|
|
|
|
|
def load!(kind) |
|
|
|
@ldapData[kind] = @ldap.search( |
|
|
|
@ldapData[kind] = Hash.new if ! @ldapData[kind] |
|
|
|
|
|
|
|
@ldapData[kind][:internal] = @ldap.search( |
|
|
|
:base => ldapBase(kind), |
|
|
|
:filter => LDAP_FILTER[kind] |
|
|
|
) |
|
|
|
@ -73,7 +74,7 @@ class SystemDataBackendLdap |
|
|
|
def load(kind) |
|
|
|
load!(kind) if ! @ldapData[kind] |
|
|
|
|
|
|
|
@ldapData[kind].each do |data| |
|
|
|
@ldapData[kind][:external] = @ldapData[kind][:internal].map do |data| |
|
|
|
map = { :dn => :id } |
|
|
|
map.merge!(LDAP_MAP[kind]) if LDAP_MAP[kind] |
|
|
|
|
|
|
|
@ -81,9 +82,10 @@ class SystemDataBackendLdap |
|
|
|
data.each do |key,value| |
|
|
|
ydata.merge!({ map[key] || key => value.size==1?value[0]:value.to_a }) |
|
|
|
end |
|
|
|
ydata |
|
|
|
end if ! @ldapData[kind][:external] |
|
|
|
|
|
|
|
yield ydata |
|
|
|
end |
|
|
|
@ldapData[kind][:external].each{|ydata| yield ydata} |
|
|
|
end |
|
|
|
|
|
|
|
def update(kind, data) |
|
|
|
@ -91,19 +93,27 @@ class SystemDataBackendLdap |
|
|
|
map.merge!(LDAP_MAP[kind].invert) if LDAP_MAP[kind] |
|
|
|
|
|
|
|
entry = Net::LDAP::Entry.new(data[:id]) |
|
|
|
data.delete(:id) |
|
|
|
|
|
|
|
entry[:changetype] = 'add' |
|
|
|
entry[:objectclass] = LDAP_OBJECTCLASS[kind] |
|
|
|
odata = @ldapData[kind][:external].find{|edata| edata[:id] == data[:id]} |
|
|
|
data = data.find_all{|key,value| value != odata[key]} |
|
|
|
data.delete(:id) |
|
|
|
|
|
|
|
replace = Array.new |
|
|
|
data.each do |key,value| |
|
|
|
key = map[key] if map[key] |
|
|
|
replace.push(key.to_s) |
|
|
|
entry[key] = value |
|
|
|
end |
|
|
|
|
|
|
|
LDAP_LAMBDA[kind].call(entry) if LDAP_LAMBDA[kind] |
|
|
|
|
|
|
|
puts entry.to_ldif |
|
|
|
if not replace.empty? |
|
|
|
entry[:changetype] = 'modify' |
|
|
|
entry[:replace] = replace |
|
|
|
LDAP_LAMBDA[kind].call(entry) if LDAP_LAMBDA[kind] |
|
|
|
|
|
|
|
puts entry.to_ldif |
|
|
|
else |
|
|
|
puts 'INFO: no changes' |
|
|
|
end |
|
|
|
end |
|
|
|
|
|
|
|
private |
|
|
|
|