perfSONAR_PS-Services-MA-perfSONARBUOY
view release on metacpan or search on metacpan
lib/perfSONAR_PS/OWP.pm view on Meta::CPAN
$name =~ tr/a-z/A-Z/;
if ( $name ne $_ ) {
$args{$name} = $args{$_};
delete $args{$_};
}
}
foreach (@$must) {
return undef if !exists $args{$_};
}
my @args = %args;
return @args;
}
=head2 setids()
TDB
=cut
sub setids {
my (%args) = @_;
my ( $uid, $gid );
my ( $unam, $gnam );
$uid = $args{'USER'} if ( defined $args{'USER'} );
$gid = $args{'GROUP'} if ( defined $args{'GROUP'} );
# Don't do anything if we are not running as root.
return if ( $> != 0 );
die "Must set User option! (Running as root is folly!)"
if ( !$uid );
# set GID first to ensure we still have permissions to.
if ( defined($gid) ) {
if ( $gid =~ /\D/ ) {
# If there are any non-digits, it is a groupname.
$gid = getgrnam( $gnam = $gid )
or die "Can't getgrnam($gnam): $!";
}
elsif ( $gid < 0 ) {
$gid = -$gid;
}
die("Invalid GID: $gid") if ( !getgrgid($gid) );
$) = $( = $gid;
}
# Now set UID
if ( $uid =~ /\D/ ) {
# If there are any non-digits, it is a username.
$uid = getpwnam( $unam = $uid )
or die "Can't getpwnam($unam): $!";
}
elsif ( $uid < 0 ) {
$uid = -$uid;
}
die("Invalid UID: $uid") if ( !getpwuid($uid) );
$> = $< = $uid;
return;
}
=head2 daemonize()
TDB
=cut
sub daemonize {
my (%args) = @_;
my ( $dnull, $umask ) = ( '/dev/null', 022 );
my $fh;
$dnull = $args{'DEVNULL'} if ( defined $args{'DEVNULL'} );
$umask = $args{'UMASK'} if ( defined $args{'UMASK'} );
if ( defined $args{'PIDFILE'} ) {
$fh = new FileHandle $args{'PIDFILE'}, O_CREAT | O_RDWR | O_TRUNC;
unless ( $fh && flock( $fh, LOCK_EX | LOCK_NB ) ) {
die "Unable to lock pid file $args{'PIDFILE'}: $!";
}
$_ = <$fh>;
if ( defined $_ ) {
my ($pid) = /(\d+)/;
chomp $pid;
die "$FindBin::Script:$pid still running..."
if ( kill( 0, $pid ) );
}
}
open STDIN, "$dnull" or die "Can't read $dnull: $!";
open STDOUT, ">>$dnull" or die "Can't write $dnull: $!";
if ( !$args{'KEEPSTDERR'} ) {
open STDERR, ">>$dnull" or die "Can't write $dnull: $!";
}
defined( my $pid = fork ) or die "Can't fork: $!";
# parent
exit if $pid;
# child
$fh->seek( 0, 0 );
$fh->print($$);
undef $fh;
setsid or die "Can't start new session: $!";
umask $umask;
return 1;
}
=head2 print_hash()
TDB
=cut
( run in 1.408 second using v1.01-cache-2.11-cpan-364913b4093 )