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/User.pm | 36 ++++++++++++++++++++---------------- 1 file changed, 20 insertions(+), 16 deletions(-) (limited to 'lib/Fripost/Schema/Type/User.pm') 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} ] -- cgit v1.2.3