Commit c31be4f4e1bfe957d538bf952e12304a6a5fe8d1

Authored by Georg GH. Hopp
Committed by Georg Hopp
1 parent 14471a2f

another small change to eval_patter. I will keep those two evals as i actually d…

…on't see any security impact and performance is good enough
@@ -58,7 +58,7 @@ @@ -58,7 +58,7 @@
58 - 'organizationalRole' 58 - 'organizationalRole'
59 - 'MailAlias' 59 - 'MailAlias'
60 60
61 - :dnPat: "cn=#{:user},o=#{:mail|:sub, /.*@/, ''}" 61 + :dnPat: "cn=#{:user},o=#{:mail|/.*@/, ''}"
62 62
63 :map: 63 :map:
64 :cn: :user 64 :cn: :user
@@ -72,7 +72,7 @@ @@ -72,7 +72,7 @@
72 - 'person' 72 - 'person'
73 - 'MailAlias' 73 - 'MailAlias'
74 74
75 - :dnPat: "mail=#{:mail},o=#{:mail|:sub, /.*@/, ''}" 75 + :dnPat: "mail=#{:mail},o=#{:mail|/.*@/, ''}"
76 76
77 :map: 77 :map:
78 :sn: :surname 78 :sn: :surname
@@ -87,7 +87,7 @@ @@ -87,7 +87,7 @@
87 - 'person' 87 - 'person'
88 - 'MailAccount' 88 - 'MailAccount'
89 89
90 - :dnPat: "mail=#{:mail},o=#{:mail|:sub, /.*@/, ''}" 90 + :dnPat: "mail=#{:mail},o=#{:mail|/.*@/, ''}"
91 91
92 :map: 92 :map:
93 :homedirectory: :home 93 :homedirectory: :home
@@ -19,30 +19,24 @@ class DsAdmin::Storage::Config @@ -19,30 +19,24 @@ class DsAdmin::Storage::Config
19 19
20 ## 20 ##
21 # replace special patterns within config strings with data 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 actual substituted data to do any kind of  
24 - # conversion to it. 22 + # given by the data hash param. These patterns also allow to
  23 + # substitute part of the data giving the argument for a
  24 + # String#sub call after a | to it.
25 # 25 #
26 # actually this is used within the handling of the ldap specific 26 # actually this is used within the handling of the ldap specific
27 # :dnPat config parameter to generate the dn entry for a given model 27 # :dnPat config parameter to generate the dn entry for a given model
28 # Data (create or replace) 28 # Data (create or replace)
29 # 29 #
30 - # TODO: I would like to get rid of the eval statements but i don't know  
31 - # a better way to build the correct objects from the config strings  
32 - #  
33 def eval_pattern(pattern, data = {}) 30 def eval_pattern(pattern, data = {})
34 scan_exp = /([^#]*)(#\{(:[^}|]+)(\|([^}]*))?\})?/ 31 scan_exp = /([^#]*)(#\{(:[^}|]+)(\|([^}]*))?\})?/
35 32
36 result = String.new 33 result = String.new
37 pattern.scan(scan_exp) do |m| 34 pattern.scan(scan_exp) do |m|
38 - key = (eval m[2]) if m[2]  
39 - val = data[key] if data[key] 35 + key = eval m[2] if m[2]
  36 + msg = eval '[:sub, ' + m[4] + ']' if m[4]
40 37
41 - args = m[4].split(',').map do |arg|  
42 - eval arg.strip  
43 - end if m[4]  
44 -  
45 - val = val.send *args if args 38 + val = data[key] if data[key]
  39 + val = val.send *msg if msg
46 40
47 result += m[0] + (val || "") 41 result += m[0] + (val || "")
48 end 42 end
Please register or login to post a comment