Foo
[licom.git] / lib / LiCoM / Group.pm
index e828115..79530f1 100644 (file)
@@ -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-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. I<@members> is an array of B<LiCoM::Person>-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);