From 5dd3d8d080b56d742de3c4b4782cfcde72c3f16f Mon Sep 17 00:00:00 2001 From: Guilhem Moulin Date: Sat, 28 Apr 2012 02:21:57 +0200 Subject: Updating the library to the new LDAP schema. --- lib/Fripost/Schema/Type/Alias.pm | 39 ++++++++++++++++----------------------- 1 file changed, 16 insertions(+), 23 deletions(-) (limited to 'lib/Fripost/Schema/Type/Alias.pm') 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} -- cgit v1.2.3