X-Git-Url: https://git.octo.it/?p=licom.git;a=blobdiff_plain;f=lib%2FLiCoM%2FGroup.pm;h=79530f11796476a4900183d1268184628225d84a;hp=e828115acd1639698d65898b38dfd2516e428cdd;hb=4c5254efaa25f9fbb401ea66cee3430bcde41bd2;hpb=094b50a6b3c8e7f55c7033217196aa97a9b502ec diff --git a/lib/LiCoM/Group.pm b/lib/LiCoM/Group.pm index e828115..79530f1 100644 --- a/lib/LiCoM/Group.pm +++ b/lib/LiCoM/Group.pm @@ -43,13 +43,41 @@ sub load { my $pkg = shift; my $name = shift; - my $member_dn = _cn_to_dn ($name); + my $obj; + + my $mesg = $Ldap->search + ( + base => get_config ('base_dn'), + filter => "(&(objectClass=groupOfNames)(cn=$name))" + ); + + if ($mesg->is_error ()) + { + warn ("Error while querying LDAP server: " . $mesg->error_text ()); + return (undef); + } + + for ($mesg->entries ()) + { + my $entry = $_; + $obj = new ($pkg, $entry); + last; + } + + return ($obj); +} + +sub load_by_member +{ + my $pkg = shift; + my $cn = shift; + my $dn = _cn_to_dn ($cn); my @retval = (); my $mesg = $Ldap->search ( base => get_config ('base_dn'), - filter => "(&(objectClass=groupOfNames)(|(cn=$name)(member=$member_dn)))" + filter => "(&(objectClass=groupOfNames)(member=$dn))" ); if ($mesg->is_error ()) @@ -67,10 +95,11 @@ sub load return (@retval); } -=item LiCoM::Group-EB (I<$name>, I<$description>, I<@members>) + +=item LiCoM::Group-EB (I<$name>, I<$description>, I<@member_cns>) Creates and returns a new group. At least one member has to be given to meet -LDAP requirements. I<@members> is an array of B-objects. +LDAP requirements. I<@members> is an array of CNs. =cut @@ -81,12 +110,14 @@ sub create ($$$@) my $desc = shift; my @members = @_; my $dn = _cn_to_dn ($name); + my ($ou) = get_config ('base_dn') =~ m/\bou\s*=\s*([^,]+)/i; my $entry = Net::LDAP::Entry->new (); $entry->add (objectClass => [qw(top groupOfNames)]); + $entry->add (ou => $ou); $entry->add (cn => $name); - $entry->add (member => [map { $_->get ('dn') } (@members)]); + $entry->add (member => [map { _cn_to_dn ($_) } (@members)]); $entry->add (description => $desc); $entry->dn ($dn);