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