aboutsummaryrefslogtreecommitdiffstats
path: root/lib/Fripost/Schema/Type/Domain.pm
diff options
context:
space:
mode:
Diffstat (limited to 'lib/Fripost/Schema/Type/Domain.pm')
-rw-r--r--lib/Fripost/Schema/Type/Domain.pm45
1 files changed, 16 insertions, 29 deletions
diff --git a/lib/Fripost/Schema/Type/Domain.pm b/lib/Fripost/Schema/Type/Domain.pm
index 0d2be17..2b803ac 100644
--- a/lib/Fripost/Schema/Type/Domain.pm
+++ b/lib/Fripost/Schema/Type/Domain.pm
@@ -5,6 +5,8 @@ use warnings;
use strict;
use base qw/Net::LDAP/;
+use Fripost::Schema::Utils;
+
our $VERSION = '0.01';
@@ -14,41 +16,31 @@ our $VERSION = '0.01';
# domain is given, returns all domains.
# Filters on values of both keys `domain' and `owner' (unless they are
# undefined).
-# If `owner' is the empty string, serch for non self-managed domains
+# If `owner' is the empty string, search for non self-managed domains
# only.
sub search {
my $self = shift;
+ my $domain = shift;
- my ($base, $owner);
- $base = join ',', ('ou=domains',$self->{_options}->{base_dn});
- $owner = join ',', ( 'uid='.$_[0]->{owner}
- , 'ou=mailboxes'
- , $self->{_options}->{base_dn} )
- if defined $_[0]->{owner};
+ my $owner;
+ $owner = Fripost::Schema::Utils::mkDN ( $self->{_options}, $domain->{owner} )
+ if defined $domain->{owner};
my @filters = ('(ObjectClass=virtualDomain)');
- push @filters, "(dc=" .$_[0]->{domain}. ")" if defined $_[0]->{domain};
- if (defined $_[0]->{owner}) {
- if ($_[0]->{owner} eq '') {
+ push @filters, "(dc=" .$domain->{domain}. ")" if defined $domain->{domain};
+ if (defined $domain->{owner}) {
+ if ($domain->{owner} eq '') {
push @filters, "(!(owner=*))";
}
else {
push @filters, "(owner=" .$owner. ")";
}
}
- my $filter;
- if ($#filters == 0) {
- $filter = $filters[0];
- }
- elsif ($#filters > 0) {
- $filter = "(&" . (join '', @filters) . ")";
- }
-
my $res = $self->{_ldap}->search(
- base => $base,
+ base => $self->{_options}->{base_dn},
scope => 'one',
attrs => [ 'dc', 'owner', 'isActive' ],
- filter => $filter
+ filter => Fripost::Schema::Utils::mkAndFilter( @filters )
);
die "Error: " .$res->error. "\n" if $res->code;
return $res;
@@ -61,13 +53,9 @@ sub add {
my $domain = shift;
my ($base, $owner);
- $base = join ',', ( 'dc='.$domain->{domain}
- , 'ou=domains'
- , $self->{_options}->{base_dn} );
- $owner = join ',', ( 'uid='.$domain->{owner}
- , 'ou=mailboxes'
- , $self->{_options}->{base_dn} )
- if defined $domain->{owner};
+ $base = Fripost::Schema::Utils::mkDN ( $self->{_options}, $domain->{domain} );
+ $owner = Fripost::Schema::Utils::mkDN ( $self->{_options}, $domain->{owner} )
+ if defined $domain->{owner};
my $res;
if ($self->search({ domain => $domain->{domain} })->count) {
@@ -77,8 +65,7 @@ sub add {
$res = $self->{_ldap}->modify( $base, add => [ owner => $owner ] );
}
else {
- my @attrs = ( dc => $domain->{domain},
- , objectClass => [ 'top', 'virtualDomain' ],
+ my @attrs = ( objectClass => 'virtualDomain',
, isActive => $domain->{isActive}
);
push @attrs, (owner => $owner)