Browse Source

further improvements on database updates and some fixes

master
Georg Hopp 15 years ago
committed by Georg Hopp
parent
commit
85d6aac8c8
  1. 4
      Site.rb
  2. 34
      SystemDataBackendLdap.rb
  3. 14
      User.rb
  4. 26
      test_dummy.rb

4
Site.rb

@ -1,9 +1,11 @@
require 'SystemData'
class Site < SystemData
attr_accessor :name, :mailAccounts, :mailAliases
attr_accessor :name
def initialize(args = {})
super(args)
@name = args[:name]
end
end

34
SystemDataBackendLdap.rb

@ -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

14
User.rb

@ -6,11 +6,13 @@ class User < SystemData
def initialize(args = {})
super(args)
@name = args[:name]
@pass = args[:pass]
@uid = args[:uid]
@gid = args[:gid]
@shell = args[:shell]
@home = args[:home]
@name = args[:name]
@pass = args[:pass]
@uid = args[:uid]
@gid = args[:gid]
@shell = args[:shell]
@home = args[:home]
@shadowmax = args[:shadowmax]
@shadowwarning = args[:shadowwarning]
end
end

26
test_dummy.rb

@ -46,8 +46,30 @@ end
puts
backend.userByName('georg').save
georg = backend.userByName('georg')
georg.save
puts
backend.groupByName('wheel').save
georg.uid = 1001
georg.save
puts
wheel = backend.groupByName('wheel')
wheel.save
puts
wheel.gid = 100
wheel.save
puts
site = backend.siteByName('kommandozeilenchef.de')
site.save
puts
site.name = 'wumbaba.de'
site.save
Loading…
Cancel
Save