aboutsummaryrefslogtreecommitdiffstats
path: root/lib/Fripost/Schema/Type/Alias.pm
diff options
context:
space:
mode:
Diffstat (limited to 'lib/Fripost/Schema/Type/Alias.pm')
-rw-r--r--lib/Fripost/Schema/Type/Alias.pm39
1 files changed, 16 insertions, 23 deletions
diff --git a/lib/Fripost/Schema/Type/Alias.pm b/lib/Fripost/Schema/Type/Alias.pm
index 7949b4b..5ee334d 100644
--- a/lib/Fripost/Schema/Type/Alias.pm
+++ b/lib/Fripost/Schema/Type/Alias.pm
@@ -18,31 +18,27 @@ our $VERSION = '0.01';
# this domain only.
sub search {
my $self = shift;
+ my $alias = shift;
- my $base = join ',', ( 'ou=domains'
- , $self->{_options}->{base_dn} );
- $base = 'dc='.$_[0]->{domain} .','. $base
- if defined $_[0]->{domain};
+ my ($username, $domain);
+ ($username, $domain) = split /\@/, $alias->{address}, 2
+ if defined $alias->{address};
+
+ my $base = $self->{_options}->{base_dn};
+ $base = join ',', ( 'dc='.$domain, $base )
+ if defined $domain;
my @filters = ('(ObjectClass=virtualAliases)');
- push @filters, '(mailLocalAddress=' .$_[0]->{address}. ')'
- if defined $_[0]->{address};
- push @filters, '(mailTarget=' .$_[0]->{goto}. ')'
- if defined $_[0]->{goto};
-
- my $filter;
- if ($#filters == 0 ) {
- $filter = $filters[0];
- }
- elsif ($#filters > 0) {
- $filter = '(&' . (join '', @filters) . ')';
- }
+ push @filters, '(mailLocalAddress=' .$username. ')'
+ if defined $username;
+ push @filters, '(mailTarget=' .$alias->{goto}. ')'
+ if defined $alias->{goto};
my $res = $self->{_ldap}->search(
base => $base,
scope => 'subtree',
attrs => [ 'mailLocalAddress', 'mailTarget', 'isActive' ],
- filter => $filter
+ filter => Fripost::Schema::Utils::mkAndFilter( @filters )
);
die "Error: " .$res->error. "\n" if $res->code;
@@ -59,22 +55,19 @@ sub add {
"' targetting to itself.\n"
if $alias->{address} eq $alias->{goto};
- my $domain = (split /\@/, $alias->{address}, 2)[1];
+ my ($username, $domain) = split /\@/, $alias->{address}, 2;
my $base = join ',', ( 'mailTarget='.$alias->{goto}
, 'dc='. $domain
- , 'ou=domains'
, $self->{_options}->{base_dn} );
- my @attrs = ( mailLocalAddress => $alias->{address} );
+ my @attrs = ( mailLocalAddress => $username );
my $res;
if ($self->search({ goto => $alias->{goto}, domain => $domain })->count) {
$res = $self->{_ldap}->modify( $base, add => [ @attrs ] );
}
else {
$res = $self->{_ldap}->add( $base,
- attrs => [ mailTarget => $alias->{goto}
- , objectClass => [ 'top',
- 'inetLocalMailRecipient',
+ attrs => [ objectClass => [ 'inetLocalMailRecipient',
'virtualAliases' ]
, @attrs
, isActive => $alias->{isActive}