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.pm20
1 files changed, 13 insertions, 7 deletions
diff --git a/lib/Fripost/Schema/Type/Alias.pm b/lib/Fripost/Schema/Type/Alias.pm
index fa78d6f..7949b4b 100644
--- a/lib/Fripost/Schema/Type/Alias.pm
+++ b/lib/Fripost/Schema/Type/Alias.pm
@@ -14,10 +14,15 @@ our $VERSION = '0.01';
# alias is given, returns all aliases.
# Filters on values of both keys `address' and `goto' (unless they are
# undefined).
+# An extra key `domain' can be given to scope the search on aliases for
+# this domain only.
sub search {
my $self = shift;
- my $base = $self->{_options}->{base_dn};
+ my $base = join ',', ( 'ou=domains'
+ , $self->{_options}->{base_dn} );
+ $base = 'dc='.$_[0]->{domain} .','. $base
+ if defined $_[0]->{domain};
my @filters = ('(ObjectClass=virtualAliases)');
push @filters, '(mailLocalAddress=' .$_[0]->{address}. ')'
@@ -54,15 +59,15 @@ sub add {
"' targetting to itself.\n"
if $alias->{address} eq $alias->{goto};
+ my $domain = (split /\@/, $alias->{address}, 2)[1];
my $base = join ',', ( 'mailTarget='.$alias->{goto}
- , 'dc='. (split /\@/, $alias->{address}, 2)[1]
+ , 'dc='. $domain
, 'ou=domains'
, $self->{_options}->{base_dn} );
- my @attrs = ( mailLocalAddress => $alias->{address}
- , isActive => $alias->{isActive} );
+ my @attrs = ( mailLocalAddress => $alias->{address} );
my $res;
- if ($self->search($alias)->count) {
+ if ($self->search({ goto => $alias->{goto}, domain => $domain })->count) {
$res = $self->{_ldap}->modify( $base, add => [ @attrs ] );
}
else {
@@ -70,8 +75,9 @@ sub add {
attrs => [ mailTarget => $alias->{goto}
, objectClass => [ 'top',
'inetLocalMailRecipient',
- 'virtualAliases' ],
- @attrs
+ 'virtualAliases' ]
+ , @attrs
+ , isActive => $alias->{isActive}
]
);
}