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