DynGig-Util
view release on metacpan or search on metacpan
lib/DynGig/Util/Setuid.pm view on Meta::CPAN
or an ARRAY reference in scalar context.
=cut
sub setuidgid
{
my ( $class, $user ) = @_;
return undef unless my @pw = getpwnam( $user ||= 'root' );
my @id = map { sprintf '%d', $_ } @pw[2,3];
my $self = ( getpwuid $< )[0];
if ( $user ne $self )
{
( $<, $>, $(, $) ) = ( $id[0], @id, join ' ', $id[1], $id[1] );
return undef if $> != $id[0];
}
return wantarray ? @id : \@id;
}
=head2 sudo( user )
Invokes system sudo. Becomes 'root' if user is not specified.
=cut
sub sudo
{
my ( $class, $user ) = @_;
my $self = ( getpwuid $< )[0];
return $self if $self eq ( $user ||= 'root' );
warn "$self: need '$user' priviledge, invoking sudo.\n";
croak "exec $0: $!" unless exec 'sudo', '-u', $user, $0, @ARGV;
}
=head1 NOTE
See DynGig::Util
( run in 0.236 second using v1.01-cache-2.11-cpan-8d75d55dd25 )