Commit c31be4f4e1bfe957d538bf952e12304a6a5fe8d1
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
Showing
2 changed files
with
10 additions
and
16 deletions
@@ -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