CfgTie
view release on metacpan or search on metacpan
lib/CfgTie/TieGroup.pm view on Meta::CPAN
#See if the caller wants us to pass
if (defined $CodeRef && !&$CodeRef($U)) {next;}
$A{$I} = CfgTie::Cfgfile::trx(
"<a href=\"group/$I\">$I</a>",
join(', ',
map {"<a href=\"user/$_\">$_</a>"} (sort @{$U->{'members'}}))
);
}
my $Us;
foreach my $I (sort keys %A) {$Us.=$A{$I};}
CfgTie::Cfgfile::table('Groups', $Us, 2);
}
package CfgTie::TieGroup_id;
sub status
{
# the information for the /etc/group file
stat '/etc/group';
}
sub TIEHASH
{
my $self = shift;
my $node = {};
return bless $node, $self;
}
sub FIRSTKEY
{
my $self = shift;
#Rewind outselves to the beginning.
setgrent;
&NEXTKEY($self);
}
sub NEXTKEY
{
my $self = shift;
#Get the next group id in the database.
# Get the information from the system and store it for later
my @x = getgrent;
if (! scalar @x) {return;}
tie %{$CfgTie::TieGroup_rec'by_name{$x[0]}}, 'CfgTie::TieGroup_rec',@x;
return $x[2]; #Corresponds to the id
}
sub EXISTS
{
my ($self,$id) = @_;
if (!defined $id) {return 0;}
if (exists $CfgTie::TieGroup_rec'by_id{$id}) {return 1;}
# Get the information from the system and store it for later
my @x = getgrgid $id;
if (! scalar @x) {return 0;}
tie %{$CfgTie::TieGroup_rec'by_name{$x[0]}}, 'CfgTie::TieGroup_rec',@x;
$CfgTie::TieGroup_rec'by_id{$id} = $CfgTie::TieGroup_rec'by_name{$x[0]};
return 1;
}
sub FETCH
{
my ($self,$id) = @_;
#check out our cache first
if (EXISTS($self,$id))
{return $CfgTie::TieGroup_rec'by_id{$id};}
return undef;
}
#Bug creating groups is not supported yet.
sub STORE
{
my ($self,$key,$val) = @_;
# groupadd or groupmod, depending
}
#Bug need to consider how vigorously we delete things -r ? /var/mail/me, etc
sub DELETE
{
my ($self,$id) = @_;
if (!exists $CfgTie::TieGroup_rec'by_id{$id})
{
#Try to look up the group id
&FETCH($self,$id);
}
if (exists $CfgTie::TieGroup_rec'by_id{$id})
{
#Basically delete the group now.
CfgTie::filever::system("$CfgTie::TieGroup_rec'groupdel ".
$CfgTie::TieGroup_rec'by_id{$id}->{Name});
#Remove it from out cache
delete $CfgTie::TieGroup_rec'by_id{$id};
}
}
package CfgTie::TieGroup_rec;
# A package used by both group_id and group to retain record information about
# a person. This is the only way to access groupmod.
#Two hashes are used for look up
# $by_name{$name}
# $by_id{$id}
use CfgTie::TieUser;
my %Users;
( run in 0.579 second using v1.01-cache-2.11-cpan-364913b4093 )