=item LiCoM::Group-E<gt>B<load> (I<$cn>)
-Loads and returns the group named I<$cn> or with a member named I<$cn>.
+Loads and returns the group named I<$cn> or all groups with a member named
+I<$cn>.
=cut
{
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 ())
return (@retval);
}
-=item LiCoM::Group-E<gt>B<create> (I<$name>, I<$description>, I<@members>)
+
+=item LiCoM::Group-E<gt>B<create> (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.
+LDAP requirements. I<@members> is an array of CNs.
=cut
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);