Browse Source

cleanups and small changes

- move ldap specific config handling int storage/ldap.rb
- update shadowlastchange only if the users password changes (actually
  not sure that this is the correct behaviour.)
- change config accessor in storage to config reader
- create a generic eval_pattern method in SdAdmin::Storage::Config
master
Georg Hopp 15 years ago
committed by Georg Hopp
parent
commit
6ce7c0f165
  1. 4
      app/model/user.rb
  2. 2
      app/storage.rb
  3. 20
      app/storage/config.rb
  4. 29
      app/storage/ldap.rb

4
app/model/user.rb

@ -18,8 +18,8 @@ class DsAdmin::Model::User
@shadowlastchange = args[:shadowlastchange] @shadowlastchange = args[:shadowlastchange]
end end
def save
def pass=(pass)
@pass = pass
@shadowlastchange = (Time::now.to_i/60/60/24).to_s @shadowlastchange = (Time::now.to_i/60/60/24).to_s
super
end end
end end

2
app/storage.rb

@ -5,7 +5,7 @@ module DsAdmin::Storage
DsAdmin::Storage.autoload(:Ldap, 'storage/ldap') DsAdmin::Storage.autoload(:Ldap, 'storage/ldap')
DsAdmin::Storage.autoload(:Mysql, 'storage/mysql') DsAdmin::Storage.autoload(:Mysql, 'storage/mysql')
attr_accessor :config
attr_reader :config
def initialize(config) def initialize(config)
@config = config @config = config

20
app/storage/config.rb

@ -17,11 +17,21 @@ class DsAdmin::Storage::Config
@config[storage.config_key][@model.config_key][:map] @config[storage.config_key][@model.config_key][:map]
end end
def object_class(storage)
@config[storage.config_key][@model.config_key][:objectClass]
end
##
# replace special patterns within config strings with data
# given by the data hash param. These patterns also allow to send
# a message to the replaces data e.g. for some kind of subtitution.
#
def eval_pattern(pattern, data = {})
scan_exp = /([^#]*)(#\{(:[^}|]+)(\|([^}]*))?\})?/
result = String.new
pattern.scan(scan_exp) do |m|
key = m[2][1..m[2].length].to_sym if m[2]
val = eval('"' + data[key] + '".send ' + m[4]) if data[key] && m[4]
def dn_pat(storage)
@config[storage.config_key][@model.config_key][:dnPat]
result += m[0] + (val || "")
end
result
end end
end end

29
app/storage/ldap.rb

@ -1,5 +1,20 @@
require 'net/ldap' require 'net/ldap'
##
# some additional ldap specific config handlings.
#
class DsAdmin::Storage::Config
def object_class(storage)
@config[storage.config_key][@model.config_key][:objectClass]
end
def dn(storage, data)
eval_pattern(
@config[storage.config_key][@model.config_key][:dnPat],
data) + ',' + query(storage)[:base]
end
end
class DsAdmin::Storage::Ldap class DsAdmin::Storage::Ldap
include DsAdmin::Storage include DsAdmin::Storage
@ -38,18 +53,7 @@ class DsAdmin::Storage::Ldap
protected protected
def create(data) def create(data)
map = @config.map(self).invert
scan_exp = /(^|, *)([^=]*=)(([^#][^,]*)|#\{([^|}]*)(\|([^}]*))?\})/
dn = String.new
@config.dn_pat(self).scan(scan_exp) do |m|
val = m[3] if m[3]
val = data[m[4][1..m[4].length].to_sym] if m[4]
val = eval('"' + val + '".send ' + m[6]) if data && m[6]
dn += m[0] + m[1] + val
end
dn += ',' + @config.query(self)[:base]
dn = @config.dn(self, data)
data.delete(:id) data.delete(:id)
@ -79,6 +83,7 @@ class DsAdmin::Storage::Ldap
replace.each do |key,value| replace.each do |key,value|
if old[:id] =~ /(^|, *)#{key.to_s}=([^, ]+)/ && $2 != value if old[:id] =~ /(^|, *)#{key.to_s}=([^, ]+)/ && $2 != value
delete(old[:id]) delete(old[:id])
puts
return create(new) return create(new)
end end
end end

Loading…
Cancel
Save