App-Slaughter
view release on metacpan or search on metacpan
lib/Slaughter/API/generic.pm view on Meta::CPAN
The permissions bits to set for the file. B<NOTE> if this doesn't start with a leading
"0" then it will be passed through the "oct" function - this allows you to use the
obvious construct :
=for example begin
Mode => "755"
=for example end
=back
=cut
sub SetPermissions
{
my (%params) = (@_);
my $file = $params{ 'File' } || return;
my $group = $params{ 'Group' } || undef;
my $owner = $params{ 'Owner' } || undef;
my $mode = $params{ 'Mode' } || undef;
# file missing is an error
return (-1) if ( !-e $file );
# Numeric values
my $uid = undef;
my $gid = undef;
# invalid user?
if ( defined($owner) )
{
$uid = getpwnam($owner);
return -2 if ( !defined($uid) );
$::verbose && print "Owner:$owner -> UID:$uid\n";
}
# invalid group?
if ( defined($group) )
{
$gid = getgrnam($group);
return -2 if ( !defined($gid) );
$::verbose && print "Group:$group -> GID:$gid\n";
}
my $changed = 0;
if ( $params{ 'Owner' } )
{
#
# Find the current UID/GID of the file, so we
# can change just the owner.
#
my ( $dev, $ino, $mode, $nlink, $orig_uid,
$orig_gid, $rdev, $size, $atime, $mtime,
$ctime, $blksize, $blocks
)
= stat($file);
$::verbose && print "\tSetting owner to $owner/$uid\n";
chown( $uid, $orig_gid, $file );
$changed += 1;
}
if ( $params{ 'Group' } )
{
#
# Find the current UID/GID of the file, so we
# can change just the group.
#
my ( $dev, $ino, $mode, $nlink, $orig_uid,
$orig_gid, $rdev, $size, $atime, $mtime,
$ctime, $blksize, $blocks
)
= stat($file);
$::verbose && print "\tSetting group to $group/$gid\n";
chown( $orig_uid, $gid, $file );
$changed += 1;
}
if ( $params{ 'Mode' } )
{
$::verbose && print "\tSetting mode to $mode\n";
my $mode = $params{ 'Mode' };
if ( $mode !~ /^0/ )
{
$mode = oct("0$mode");
$::verbose && print "\tOctal mode is now $mode\n";
}
chmod( $mode, $file );
$changed += 1;
}
return ($changed);
}
=head2 UserDetails
This primitive will return a hash of data about the local Unix user
specified, if it exists.
=for example begin
if ( UserExists( User => "skx" ) )
{
my %data = UserDetails( User => "skx" );
}
=for example end
The following parameters are available:
=over
=item User [mandatory]
The unix username to retrieve details of.
=back
The return value of this function is a hash of data conprising of the
following Keys/Values
=over
=item Home
The user's home directory
=item UID
The user's UID
( run in 0.778 second using v1.01-cache-2.11-cpan-39bf76dae61 )