aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGuilhem Moulin <guilhem.moulin@fripost.org>2013-01-18 22:40:14 +0100
committerGuilhem Moulin <guilhem.moulin@fripost.org>2013-01-18 22:59:16 +0100
commit145a6fc76882769391e1e9792db868b692bc4538 (patch)
tree02ad9f826d52f80683e357a2cbf02f3d6a269fd9
parent1f35ed5ce38525af78508b46eea67a4f41c74a4a (diff)
Conversion username ↔ DN.
-rw-r--r--lib/Fripost/Schema.pm22
-rw-r--r--lib/Fripost/Schema/Domain.pm8
-rw-r--r--lib/Fripost/Schema/List.pm6
3 files changed, 16 insertions, 20 deletions
diff --git a/lib/Fripost/Schema.pm b/lib/Fripost/Schema.pm
index f7a9d75..b5dcdb6 100644
--- a/lib/Fripost/Schema.pm
+++ b/lib/Fripost/Schema.pm
@@ -47,8 +47,8 @@ sub SASLauth {
my ($l,$d) = split_addr(shift);
my %cfg = @_;
+ return unless defined $cfg{ldap_SASL_mechanism};
my $self = bless {}, $class;
- return $self unless defined $cfg{ldap_SASL_mechanism};
$self->suffix( ldap_explode_dn(@{$cfg{ldap_suffix}}) );
$self->whoami( canonical_dn( {fvu => $l}, {fvd => $d}, @{$self->suffix} ));
@@ -227,23 +227,21 @@ under the same terms as perl itself.
=cut
-sub _dn2email {
+sub _dn2fvu {
my $self = shift;
- my $dn = shift;
- $dn =~ s/^fvd=([^,]+),.*/\@$1/ and return $dn;
- $dn =~ s/^fv(?:u|a|l)=([^,]+),fvd=([^,]+),.*/$1\@$2/
- or die "Wrong usage: of _dn2email: $dn";
- return $dn;
+ my $dn = ldap_explode_dn(shift);
+
+ return '@'. $dn->[0]->{fvd} if exists $dn->[0]->{fvd};
+ return $dn->[0]->{fvu} .'@'. $dn->[1]->{fvd};
}
-sub _email2dn {
+sub _fvu2dn {
my $self = shift;
my $email = shift;
my ($l,$d) = split_addr($email);
- die "Wrong usage: of _email2dn: $email" unless defined $d;
- my $dn = "fvd=$d,".$self->suffix;
- $dn = "fvu=$l,".$dn if $l ne '';
- return $dn;
+ my @dn = ({fvd => $d}, @{$self->suffix});
+ unshift @dn, {fvu => $l} if defined $l and $l ne '';
+ canonical_dn( @dn );
}
1;
diff --git a/lib/Fripost/Schema/Domain.pm b/lib/Fripost/Schema/Domain.pm
index fc80b4c..dc16ae0 100644
--- a/lib/Fripost/Schema/Domain.pm
+++ b/lib/Fripost/Schema/Domain.pm
@@ -103,9 +103,9 @@ sub get {
, catchalls => concat($concat, map { &_email_to_unicode ($_) }
$domain->get_value('fripostOptionalMaildrop'))
, permissions => get_perms($domain, $self->whoami)
- , canCreateAlias => concat($concat, map { &_email_to_unicode ($self->_dn2email($_)) }
+ , canCreateAlias => concat($concat, map { &_email_to_unicode ($self->_dn2fvu($_)) }
$domain->get_value('fripostCanCreateAlias'))
- , canCreateList => concat($concat, map { &_email_to_unicode ($self->_dn2email($_)) }
+ , canCreateList => concat($concat, map { &_email_to_unicode ($self->_dn2fvu($_)) }
$domain->get_value('fripostCanCreateList'))
)
}
@@ -136,10 +136,10 @@ sub replace {
, description => $d->{description}
, fripostOptionalMaildrop => $d->{catchalls}
, fripostCanCreateAlias =>
- [ map $self->_email2dn($_),
+ [ map $self->_fvu2dn($_),
@{$d->{canCreateAlias}} ]
, fripostCanCreateList =>
- [ map $self->_email2dn($_),
+ [ map $self->_fvu2dn($_),
@{$d->{canCreateList}} ]
} );
die $mesg->error."\n" if $mesg->code;
diff --git a/lib/Fripost/Schema/List.pm b/lib/Fripost/Schema/List.pm
index 7753bd1..18eeb29 100644
--- a/lib/Fripost/Schema/List.pm
+++ b/lib/Fripost/Schema/List.pm
@@ -18,7 +18,7 @@ use utf8;
use parent 'Fripost::Schema';
use Fripost::Schema::Util qw/concat explode must_attrs email_valid
- split_addr canonical_dn ldap_explode_dn/;
+ split_addr canonical_dn/;
use Net::IDN::Encode qw/domain_to_ascii email_to_ascii email_to_unicode/;
use Mail::GnuPG;
use MIME::Entity;
@@ -143,9 +143,7 @@ sub add {
# Ask the list manager to create the list now.
- my $whoami = ldap_explode_dn( $self->whoami );
- my $member = email_valid( $whoami->[0]->{fvu} .'@'. $whoami->[1]->{fvd}
- , -exact => 1 );
+ my $member = email_valid( $self->_dn2fvu($self->whoami), -exact => 1);
my $to = email_valid( 'mklist+'.$l->{transport}.'@fripost.org'
, -exact => 1 );