Unix-Mgt
view release on metacpan or search on metacpan
lib/Unix/Mgt.pm view on Meta::CPAN
);
}
# change user's group
$success = $user->run_cmd('error-setting-user-group', @args);
$success or return 0;
}
# get gid
$gid = $user->gid();
defined($gid) or return undef;
# get group
$group = Unix::Mgt::Group->get($gid);
# return
if ($opts{'object'})
{ return $group }
else
{ return $group->name }
}
#
# group
#------------------------------------------------------------------------------
#------------------------------------------------------------------------------
# secondary_groups
#
=head2 secondary_groups
C<secondary_groups()> returns an array of the user's secondary groups. Each
element in the array is a Unix::Mgt::Group object.
@groups = $user->secondary_groups();
=cut
sub secondary_groups {
my ($user, %opts) = @_;
my (%groups, @rv);
# TESTING
# println subname(method=>1); ##i
# default options
%opts = (object=>1, %opts);
# loop through all groups
while (my @fields = getgrent()) {
my (%group);
@group{@Unix::Mgt::Group::field_names} = @fields;
# if there are any members, of the group, see if this user is in it
if (my $member_str = $group{'members'}) {
my (%members);
# parse out members
$member_str = crunch($member_str);
@members{split m|\s+|, $member_str} = ();
# if this user is in the membership
if (exists $members{$user->{'name'}})
{ $groups{$group{'name'}} = 1 }
}
}
# build return value
foreach my $key (keys %groups) {
my $group = Unix::Mgt::Group->get($key);
# set as just string if options indicate to do so
if (! $opts{'object'})
{ $group = $group->{'name'} }
# add to return array
push @rv, $group;
}
# return
return @rv;
}
#
# secondary_groups
#------------------------------------------------------------------------------
#------------------------------------------------------------------------------
# groups
#
=head2 groups
C<groups()> returns an array of all of the groups the user is a member of. The
first element in the array will be the user's primary group.
@groups = $user->groups();
=cut
sub groups {
my ($user, %opts) = @_;
my (@rv);
# TESTING
# println subname(method=>1); ##i
# get user's primary group
push @rv, $user->group(%opts);
# add user's secondary groups
push @rv, $user->secondary_groups(%opts);
# return
return @rv;
}
#
# groups
#------------------------------------------------------------------------------
lib/Unix/Mgt.pm view on Meta::CPAN
while (my @fields = getpwent()) {
my (%user);
@user{@Unix::Mgt::User::field_names} = @fields;
# if the user is in the group, add to %members
if ( defined($user{'gid'}) && ($user{'gid'} eq $gid) ) {
$members{$user{'name'}} = 1;
}
}
# build return array of objects
if ($opts{'object'}) {
foreach my $name (keys %members) {
push @rv, Unix::Mgt::User->get($name);
}
}
# else build return array of names
else {
@rv = keys(%members);
}
# return
return @rv;
}
#
# primary_members
#------------------------------------------------------------------------------
#------------------------------------------------------------------------------
# secondary_members
#
=head2 secondary_members
C<secondary_members()> returns an array of users for whom this is a secondary group.
@members = $group->secondary_members();
The elements in the returned array are Unix::Mgt::User objects.
=cut
sub secondary_members {
my ($group, %opts) = @_;
my ($gid, $members_str, %members, @rv);
# TESTING
# println subname(method=>1); ##i
# default options
%opts = (object=>1, %opts);
# get users for whom this is a secondary group
$members_str = $group->entry->{'members'};
defined($members_str) or return ();
# loop through members
NAME_LOOP:
foreach my $name (split m|\s+|s, $members_str) {
if (hascontent $name) {
my $user = Unix::Mgt::User->get($name);
$members{$user->{'name'}} = 1;
}
}
# build return array of objects
if ($opts{'object'}) {
foreach my $name (keys %members) {
push @rv, Unix::Mgt::User->get($name);
}
}
# else build return array of names
else {
@rv = keys(%members);
}
# return
return @rv;
}
#
# secondary_members
#------------------------------------------------------------------------------
#------------------------------------------------------------------------------
# add_member
#
=head2 add_member
C<add_member()> adds a user to the group as a secondary group. The single
param can be a user name, uid, or Unix::Mgt::User object.
$group->add_member('miko');
If the user is already a member of the group then nothing is done and no error
is set.
=cut
sub add_member {
my ($group, $user) = @_;
# TESTING
# println subname(method=>1); ##i
# get user object
if (! ref $user)
{ $user = Unix::Mgt::User->get($user) }
# add user to group
return $user->add_to_group($group);
}
#
# add_member
#------------------------------------------------------------------------------
( run in 0.532 second using v1.01-cache-2.11-cpan-71847e10f99 )