diff options
Diffstat (limited to 'lib/Fripost/Schema/Local.pm')
-rw-r--r-- | lib/Fripost/Schema/Local.pm | 20 |
1 files changed, 11 insertions, 9 deletions
diff --git a/lib/Fripost/Schema/Local.pm b/lib/Fripost/Schema/Local.pm index 79c5420..64dd622 100644 --- a/lib/Fripost/Schema/Local.pm +++ b/lib/Fripost/Schema/Local.pm @@ -18,13 +18,14 @@ use utf8; use parent 'Fripost::Schema'; use Fripost::Schema::Misc 'concat'; +use Net::IDN::Encode qw/email_to_ascii email_to_unicode/; =head1 METHODS =over 4 -=item B<get> (I<local>,I<domain>, I<OPTIONS>) +=item B<get> (I<local>, I<OPTIONS>) Returns a hash with all the (visible) attributes for the given entry. An additional 'type' attribute gives the type of *the* found entry @@ -34,11 +35,11 @@ additional 'type' attribute gives the type of *the* found entry sub get { my $self = shift; - my $l = shift; - my $d = shift; + my $loc = shift; my %options = @_; my $concat = $options{'-concat'}; + my ($l,$d) = split /\@/, email_to_ascii($loc), 2; my $locals = $self->ldap->search( base => "fvd=$d,".$self->suffix, scope => 'one', @@ -67,19 +68,21 @@ sub get { unless (defined $local) { die $options{'-die'}."\n" if defined $options{'-die'}; - die "No such such entry ‘".$l.'@'.$d."‘.\n"; + die "No such such entry ‘".$loc."‘.\n"; } my %ret; if ($local->dn =~ /^fvu=/) { $ret{type} = 'mailbox'; $ret{user} = $local->get_value('fvu'); - $ret{forwards} = concat($concat, $local->get_value('fripostOptionalMaildrop')) + $ret{forwards} = concat($concat, map { email_to_unicode($_) } + $local->get_value('fripostOptionalMaildrop')) } elsif ($local->dn =~ /^fva=/) { $ret{type} = 'alias'; $ret{alias} = $local->get_value('fva'); - $ret{maildrop} = concat($concat, $local->get_value('fripostMaildrop')) + $ret{maildrop} = concat($concat, map { email_to_unicode($_) } + $local->get_value('fripostMaildrop')) } elsif ($local->dn =~ /^fvl=/) { $ret{type} = 'list'; @@ -92,7 +95,7 @@ sub get { } -=item B<exists> (I<local>,I<domain>, I<OPTIONS>) +=item B<exists> (I<local>, I<OPTIONS>) Returns 1 if the given I<local>@I<domain> exists, and 0 otherwise. The authenticated user needs to have search access to the 'entry' @@ -102,8 +105,7 @@ attribute. sub exists { my $self = shift; - my $l = shift; - my $d = shift; + my ($l,$d) = split /\@/, email_to_ascii(shift), 2; my %options = @_; # We may not have read access to the list commands |