aboutsummaryrefslogtreecommitdiffstats
path: root/lib/Fripost/Schema/Misc.pm
diff options
context:
space:
mode:
Diffstat (limited to 'lib/Fripost/Schema/Misc.pm')
-rw-r--r--lib/Fripost/Schema/Misc.pm20
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 = @_;