Commit 6ce7c0f16552fdf8ee23bb76067893dd3b93355c
Committed by
Georg Hopp
1 parent
cdaf490a
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
Showing
4 changed files
with
35 additions
and
20 deletions
| @@ -18,8 +18,8 @@ class DsAdmin::Model::User | @@ -18,8 +18,8 @@ class DsAdmin::Model::User | ||
| 18 | @shadowlastchange = args[:shadowlastchange] | 18 | @shadowlastchange = args[:shadowlastchange] |
| 19 | end | 19 | end |
| 20 | 20 | ||
| 21 | - def save | 21 | + def pass=(pass) |
| 22 | + @pass = pass | ||
| 22 | @shadowlastchange = (Time::now.to_i/60/60/24).to_s | 23 | @shadowlastchange = (Time::now.to_i/60/60/24).to_s |
| 23 | - super | ||
| 24 | end | 24 | end |
| 25 | end | 25 | end |
| @@ -5,7 +5,7 @@ module DsAdmin::Storage | @@ -5,7 +5,7 @@ module DsAdmin::Storage | ||
| 5 | DsAdmin::Storage.autoload(:Ldap, 'storage/ldap') | 5 | DsAdmin::Storage.autoload(:Ldap, 'storage/ldap') |
| 6 | DsAdmin::Storage.autoload(:Mysql, 'storage/mysql') | 6 | DsAdmin::Storage.autoload(:Mysql, 'storage/mysql') |
| 7 | 7 | ||
| 8 | - attr_accessor :config | 8 | + attr_reader :config |
| 9 | 9 | ||
| 10 | def initialize(config) | 10 | def initialize(config) |
| 11 | @config = config | 11 | @config = config |
| @@ -17,11 +17,21 @@ class DsAdmin::Storage::Config | @@ -17,11 +17,21 @@ class DsAdmin::Storage::Config | ||
| 17 | @config[storage.config_key][@model.config_key][:map] | 17 | @config[storage.config_key][@model.config_key][:map] |
| 18 | end | 18 | end |
| 19 | 19 | ||
| 20 | - def object_class(storage) | ||
| 21 | - @config[storage.config_key][@model.config_key][:objectClass] | ||
| 22 | - end | 20 | + ## |
| 21 | + # replace special patterns within config strings with data | ||
| 22 | + # given by the data hash param. These patterns also allow to send | ||
| 23 | + # a message to the replaces data e.g. for some kind of subtitution. | ||
| 24 | + # | ||
| 25 | + def eval_pattern(pattern, data = {}) | ||
| 26 | + scan_exp = /([^#]*)(#\{(:[^}|]+)(\|([^}]*))?\})?/ | ||
| 27 | + | ||
| 28 | + result = String.new | ||
| 29 | + pattern.scan(scan_exp) do |m| | ||
| 30 | + key = m[2][1..m[2].length].to_sym if m[2] | ||
| 31 | + val = eval('"' + data[key] + '".send ' + m[4]) if data[key] && m[4] | ||
| 23 | 32 | ||
| 24 | - def dn_pat(storage) | ||
| 25 | - @config[storage.config_key][@model.config_key][:dnPat] | 33 | + result += m[0] + (val || "") |
| 34 | + end | ||
| 35 | + result | ||
| 26 | end | 36 | end |
| 27 | end | 37 | end |
| 1 | require 'net/ldap' | 1 | require 'net/ldap' |
| 2 | 2 | ||
| 3 | +## | ||
| 4 | +# some additional ldap specific config handlings. | ||
| 5 | +# | ||
| 6 | +class DsAdmin::Storage::Config | ||
| 7 | + def object_class(storage) | ||
| 8 | + @config[storage.config_key][@model.config_key][:objectClass] | ||
| 9 | + end | ||
| 10 | + | ||
| 11 | + def dn(storage, data) | ||
| 12 | + eval_pattern( | ||
| 13 | + @config[storage.config_key][@model.config_key][:dnPat], | ||
| 14 | + data) + ',' + query(storage)[:base] | ||
| 15 | + end | ||
| 16 | +end | ||
| 17 | + | ||
| 3 | class DsAdmin::Storage::Ldap | 18 | class DsAdmin::Storage::Ldap |
| 4 | include DsAdmin::Storage | 19 | include DsAdmin::Storage |
| 5 | 20 | ||
| @@ -38,18 +53,7 @@ class DsAdmin::Storage::Ldap | @@ -38,18 +53,7 @@ class DsAdmin::Storage::Ldap | ||
| 38 | 53 | ||
| 39 | protected | 54 | protected |
| 40 | def create(data) | 55 | def create(data) |
| 41 | - map = @config.map(self).invert | ||
| 42 | - scan_exp = /(^|, *)([^=]*=)(([^#][^,]*)|#\{([^|}]*)(\|([^}]*))?\})/ | ||
| 43 | - | ||
| 44 | - dn = String.new | ||
| 45 | - @config.dn_pat(self).scan(scan_exp) do |m| | ||
| 46 | - val = m[3] if m[3] | ||
| 47 | - val = data[m[4][1..m[4].length].to_sym] if m[4] | ||
| 48 | - val = eval('"' + val + '".send ' + m[6]) if data && m[6] | ||
| 49 | - | ||
| 50 | - dn += m[0] + m[1] + val | ||
| 51 | - end | ||
| 52 | - dn += ',' + @config.query(self)[:base] | 56 | + dn = @config.dn(self, data) |
| 53 | 57 | ||
| 54 | data.delete(:id) | 58 | data.delete(:id) |
| 55 | 59 | ||
| @@ -79,6 +83,7 @@ class DsAdmin::Storage::Ldap | @@ -79,6 +83,7 @@ class DsAdmin::Storage::Ldap | ||
| 79 | replace.each do |key,value| | 83 | replace.each do |key,value| |
| 80 | if old[:id] =~ /(^|, *)#{key.to_s}=([^, ]+)/ && $2 != value | 84 | if old[:id] =~ /(^|, *)#{key.to_s}=([^, ]+)/ && $2 != value |
| 81 | delete(old[:id]) | 85 | delete(old[:id]) |
| 86 | + puts | ||
| 82 | return create(new) | 87 | return create(new) |
| 83 | end | 88 | end |
| 84 | end | 89 | end |
Please
register
or
login
to post a comment