NAME

Set::Groups - A set of groups.

SYNOPSIS

use Set::Groups ;

# create a set of groups
$groups = new Set::Groups ;

# create a group MyGroup with a single member
$groups->addOwnSingleTo("single1","MyGroup") ;

# add a group member into MyGroup
$groups->addOwnGroupTo("Member1Group","MyGroup") ; 

# add a single members into the previous member group
$groups->addOwnSingleTo("single2","Member1Group") ;

# add a group member into the previous member group
$groups->addOwnGroupTo("Member2Group","Member1Group") ; 

# add a single members into the previous member group
$groups->addOwnSingleTo("single3","Member2Group") ;

# flatten the group MyGroup
@singles = $groups->getSinglesOf("MyGroup") ; 
@groups = $groups->getGroupsOf("MyGroup") ; 
$present = $groups->isSingleOf("single3","MyGroup") ; 
$present = $groups->isGroupOf("Member2Group","MyGroup") ; 

DESCRIPTION

The Groups object implements a set of groups. Each group can own single members and group members. A group can be flattened, i.e. expansed until each of his members is a single one.

CONSTRUCTORS

new

Create a new group set.

my $groups = new Set::Groups

INSTANCE METHODS

setDebug

Set a debug level (0 or 1).

$groups->setDebug(1) ;

Set management

newGroup

Create a new empty group and add it into the set. A group is everything which can be a key of a hash. Returns 1 on success, 0 otherwise.

$groups->newGroup("a_group") ;
$groups->newGroup(1) ;

deleteGroup

Delete a group from the set. Return 1 on success, 0 otherwise.

$groups->deleteGroup("a_group") ;

getGroups

Return the list of the groups present into the set.

@groups = $groups->getGroups() ; 

getCyclicGroups

Return the list of the cyclic groups (i.e. self-contained) present into the set.

@groups = $groups->getGroups() ; 

getAcyclicGroups

Return the list of the acyclic groups (i.e. not self-contained) present into the set.

@groups = $groups->getGroups() ; 

hasGroup

Check if a group is present into the set.

$present = $groups->hasGroup("a_group") ;

Groups management

addOwnSingleTo

Add a single member to a group. A single is everything which can be a key of a hash. If the group doesn't exist in the set, it is created. Return 1 on success, 0 otherwise.

$groups->addOwnSingleTo("single","a_group") ;

addOwnGroupTo

Add a group member to a group. If the embedding group doesn't exist in the set, it is created. If the member group doesn't exist in the set, it is created as an empty group. Return 1 on success, 0 otherwise.

$groups->addOwnGroupTo("group_member","a_group") ;

removeOwnSingleFrom

Remove an own single from a group. Return 1 on success, 0 otherwise.

$groups->removeOwnSingleFrom("single","a_group") ;

removeOwnGroupFrom

Remove a group member from a group. Return 1 on success, 0 otherwise.

$groups->removeOwnGroupFrom("a_member_group","a_group") ;

isAcyclic

Check if a group is acyclic.

$is_acyclic = $groups->isAcyclic("a_group") ;

isOwnSingleOf

Check if a single is an own member of a group.

$present = $groups->isOwnSingleOf("single","a_group") ;

isOwnGroupOf

Check if a group is an own member of a group.

$present = $groups->isOwnGroupOf("a_group_member","a_group") ;

isSingleOf

Check if a single is a (own or not) member of a group.

$present = $groups->isSingleOf("single","an_acyclic_group") ;

Warning - Calling this method with a cyclic group as argument gives a infinite recursion.

isGroupOf

Check if a group is a (own or not) member of a group.

$present = $groups->isGroupOf("a_group_member","an_acyclic_group") ;

Warning - Calling this method with a cyclic group as argument gives a infinite recursion.

getOwnSinglesOf

Return the list of own singles of a group.

@singles = $groups->getOwnSinglesOf("a_group") ;

getOwnGroupsOf

Return the list of own groups of a group.

@groups = $groups->getOwnGroupsOf("a_group") ;

getSinglesOf

Return the list of (own or not) singles of an acyclic group.

@singles = $groups->getSinglesOf("an_acyclic_group") ;

Warning - Calling this method with a cyclic group as argument gives a infinite recursion.

getGroupsOf

Return the list of (own or not) groups of an acyclic group.

@groups = $groups->getGroupsOf("an_acyclic_group") ;

Warning - Calling this method with a cyclic group as argument gives a infinite recursion.

addGroupTo

Deprecated - Replaced by addOwnGroupTo.

addSingleTo

Deprecated - Replaced by addOwnSingleTo.

removeGroupFrom

Deprecated - Replaced by removeOwnGroupFrom.

removeSingleFrom

Deprecated - Replaced by removeOwnSingleFrom.

EXAMPLES

Suppose a group file like :

admin:root,adm
team:piotr,lioudmila,adam,annette,jacquelin
true-users:james,sophie,@team,mohammed
everybody:@admin,operator,@true-users
daemon:apache,smmsp,named,daemon
virtual:nobody,halt,@daemon
all:@everybody,@virtual

where @name means group name, then the following code :

use Set::Groups ;

$groups = new Set::Groups ;
while(<>)
{
  ($group,$members) = /^(\S+):(.*)$/ ;
  @members = split(/,/,$members) ;
  for $member (@members)
  {
    if ($member=~/^@/)
    {
      $member=~s/^@// ;
      $groups->addOwnGroupTo($member,$group) ;
    }
    else
    {
      $groups->addOwnSingleTo($member,$group) ;
    }
  }
}
die "some groups are cyclic" if scalar($groups->getCyclicGroups())>0 ;
print "singles: ",join(', ',$groups->getSinglesOf("all")),"\n" ;
print "groups: ",join(', ',$groups->getGroupsOf("all")),"\n" ;

gives :

singles: apache, sophie, jacquelin, lioudmila, mohammed, smmsp, nobody, adm, annette, operator, james, named, adam, halt, root, daemon, piotr
groups: admin, everybody, team, daemon, true-users, virtual

AUTHOR

Jacquelin Charbonnel, <jacquelin.charbonnel at math.cnrs.fr>

BUGS

Please report any bugs or feature requests to bug-Set-Groups at rt.cpan.org, or through the web interface at http://rt.cpan.org/NoAuth/ReportBug.html?Queue=Set-Groups. I will be notified, and then you'll automatically be notified of progress on your bug as I make changes.

SUPPORT

You can find documentation for this module with the perldoc command.

perldoc Set-Groups

You can also look for information at:

COPYRIGHT & LICENSE

Copyright Jacquelin Charbonnel < jacquelin.charbonnel at math.cnrs.fr >

This software is governed by the CeCILL-C license under French law and abiding by the rules of distribution of free software. You can use, modify and/ or redistribute the software under the terms of the CeCILL-C license as circulated by CEA, CNRS and INRIA at the following URL "http://www.cecill.info".

As a counterpart to the access to the source code and rights to copy, modify and redistribute granted by the license, users are provided only with a limited warranty and the software's author, the holder of the economic rights, and the successive licensors have only limited liability.

In this respect, the user's attention is drawn to the risks associated with loading, using, modifying and/or developing or reproducing the software by the user in light of its specific status of free software, that may mean that it is complicated to manipulate, and that also therefore means that it is reserved for developers and experienced professionals having in-depth computer knowledge. Users are therefore encouraged to load and test the software's suitability as regards their requirements in conditions enabling the security of their systems and/or data to be ensured and, more generally, to use and operate it in the same conditions as regards security.

The fact that you are presently reading this means that you have had knowledge of the CeCILL-C license and that you accept its terms.