aboutsummaryrefslogtreecommitdiffstats
path: root/lib/Fripost/Schema/Type/User.pm
diff options
context:
space:
mode:
Diffstat (limited to 'lib/Fripost/Schema/Type/User.pm')
-rw-r--r--lib/Fripost/Schema/Type/User.pm36
1 files changed, 20 insertions, 16 deletions
diff --git a/lib/Fripost/Schema/Type/User.pm b/lib/Fripost/Schema/Type/User.pm
index b21c2e1..f5b6ce2 100644
--- a/lib/Fripost/Schema/Type/User.pm
+++ b/lib/Fripost/Schema/Type/User.pm
@@ -5,6 +5,8 @@ use warnings;
use strict;
use base qw/Net::LDAP/;
+use Fripost::Schema::Utils;
+
our $VERSION = '0.01';
@@ -12,20 +14,26 @@ our $VERSION = '0.01';
# Search a user, and return the corresponding entries if found. If no
# user is given, returns all users.
-# Filters on the value of the key `uid' only (unless it is undefined).
+# If the user has no domain part, returns matching users for any
+# domains.
sub search {
my $self = shift;
-
- my $base = join ',', ('ou=mailboxes',$self->{_options}->{base_dn});
+ my $user = shift;
+ my ($username, $domain) = split /\@/, $user->{username}, 2;
+
+ my $base = $self->{_options}->{base_dn};
+ $base = join ',', ( 'dc='.$domain, $base )
+ if defined $domain;
+
my $filter = "(ObjectClass=virtualMailbox)";
- $filter = "(&" .$filter. "(uid=" .$_[0]->{username}. ")" .")"
- if defined $_[0]->{username};
+ $filter = "(&" .$filter. "(uid=" .$username. ")" .")"
+ if defined $username;
my $res = $self->{_ldap}->search(
base => $base,
- scope => 'one',
- attrs => [ 'uid', 'gn' , 'sn', 'maildir', 'isActive' ],
+ scope => 'sub',
+ attrs => [ 'uid', 'gn' , 'sn', 'isActive' ],
filter => $filter
);
die "Error: " .$res->error. "\n" if $res->code;
@@ -38,15 +46,12 @@ sub add {
my $self = shift;
my $user = shift;
- my $base = join ',', ( 'uid=' .$user->{username}
- , 'ou=mailboxes'
- , $self->{_options}->{base_dn} );
+ my $base = Fripost::Schema::Utils::mkDN ( $self->{_options}
+ , $user->{username} );
my $res = $self->{_ldap}->add( $base,
- attrs => [ uid => $user->{username},
- objectClass => [ 'top', 'virtualMailbox' ],
+ attrs => [ objectClass => 'virtualMailbox',
userPassword => $user->{userPassword},
- maildir => $user->{maildir},
isActive => $user->{isActive}
]
);
@@ -60,9 +65,8 @@ sub passwd {
my $self = shift;
my $user = shift;
- my $base = join ',', ( 'uid=' .$user->{username}
- , 'ou=mailboxes'
- , $self->{_options}->{base_dn} );
+ my $base = Fripost::Schema::Utils::mkDN ( $self->{_options}
+ , $user->{username} );
my $res = $self->{_ldap}->modify( $base,
replace => [ userPassword => $user->{userPassword} ]