diff options
author | Guilhem Moulin <guilhem.moulin@fripost.org> | 2013-01-18 21:26:31 +0100 |
---|---|---|
committer | Guilhem Moulin <guilhem.moulin@fripost.org> | 2013-01-18 21:26:31 +0100 |
commit | 68484bbbde92a7b5ccb0da16d29afda31aec0370 (patch) | |
tree | 20ea193947bc44d3497da821a674d912f738de02 /lib/Fripost/Schema/Misc.pm | |
parent | 1f365b29f094912fa8f6e9d7fe0348148eb60ccf (diff) |
Be sure to escape filters and DNs.
Diffstat (limited to 'lib/Fripost/Schema/Misc.pm')
-rw-r--r-- | lib/Fripost/Schema/Misc.pm | 20 |
1 files changed, 18 insertions, 2 deletions
diff --git a/lib/Fripost/Schema/Misc.pm b/lib/Fripost/Schema/Misc.pm index 9ae8cdc..aec2618 100644 --- a/lib/Fripost/Schema/Misc.pm +++ b/lib/Fripost/Schema/Misc.pm @@ -14,9 +14,11 @@ use utf8; use Exporter 'import'; our @EXPORT_OK = qw /concat get_perms explode must_attrs email_valid + canonical_dn ldap_explode_dn split_addr/; use Email::Valid; use Net::IDN::Encode; +use Net::LDAP::Util; use Encode; @@ -58,14 +60,17 @@ sub explode { # - p: postmaster sub get_perms { my ($entry, $dn) = @_; + my @dn = @{ldap_explode_dn ($dn)}; + shift @dn; + my $dn2 = canonical_dn (@dn); my $perms = ''; $perms .= 'a' - if grep { $dn eq $_ or (split /,/,$dn,2)[1] eq $_ } + if grep { $dn eq $_ or $dn2 eq $_ } $entry->get_value ('fripostCanCreateAlias'); $perms .= 'l' - if grep { $dn eq $_ or (split /,/,$dn,2)[1] eq $_ } + if grep { $dn eq $_ or $dn2 eq $_ } $entry->get_value ('fripostCanCreateList'); $perms = 'o' @@ -116,6 +121,17 @@ sub email_valid { return $addr; } +sub canonical_dn { + Net::LDAP::Util::canonical_dn(\@_, casefold => 'lower' + , mbcescape => 1 + , reverse => 0 + , separator => ','); +}; + +sub ldap_explode_dn { + Net::LDAP::Util::ldap_explode_dn( join (',', @_), casefold => 'lower' ) +} + sub split_addr { my $addr = shift; my %options = @_; |