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:
AnnoCPAN: Annotated CPAN documentation
CPAN Ratings
RT: CPAN's request tracker
Search CPAN
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.