Lemonldap-NG-Common
view release on metacpan or search on metacpan
eg/lokiSender view on Meta::CPAN
#!/usr/bin/perl
use strict;
use Getopt::Long;
use POSIX;
use Pod::Usage;
our $VERSION = "2.22.0";
# Options
my $opts = {};
my $help;
my $opt_user = '__APACHEUSER__';
my $opt_group = '__APACHEGROUP__';
my @CMDLINE = @ARGV;
GetOptions(
'daemon' => \$opts->{daemon},
'defer-dir=s' => \$opts->{deferDir},
'debug' => \$opts->{debug},
'delay=s' => \$opts->{delay},
'group|g=s' => \$opts->{group},
'help|h' => \$help,
'ini-file=s' => \$opts->{iniFile},
'syslog-facility' => \$opts->{syslogFacility},
'user|u=s' => \$opts->{user},
) or pod2usage( -exitcode => 1, -verbose => 0 );
foreach my $opt ( keys %$opts ) {
$opts->{$opt} //= $ENV{ 'LLNG_LOKI_' . uc($opt) };
}
pod2usage( -exitcode => 0, -verbose => 2 ) if $help;
$opts->{delay} ||= 60 if $opts->{daemon};
$opts->{deferDir} ||= &_getDeferDir;
mkdir $opts->{deferDir} unless -e $opts->{deferDir};
die "Missing directory $opts->{deferDir}" unless -d $opts->{deferDir};
die "Cannot write into $opts->{deferDir}" unless -w $opts->{deferDir};
die 'Missing --defer-dir' unless $opts->{deferDir};
# Change owner if asked
POSIX::nice(10);
if ( $opts->{group} || $opts->{user} ) {
eval {
no warnings;
my ( $gid, $uid );
if ( $opts->{group} ) {
$gid = getgrnam( $opts->{group} );
POSIX::setgid($gid);
}
if ( $opts->{user} ) {
$uid = getpwnam( $opts->{user} );
chown( $uid, ( $gid // [ stat( $opts->{deferDir} ) ]->[5] ),
$opts->{deferDir} )
and chmod( 0700, $opts->{deferDir} );
POSIX::setuid( scalar( getpwnam( $opts->{user} ) ) )
if $opts->{user};
my (
undef, undef, undef, undef, undef,
undef, undef, $homedir, undef
) = getpwnam( $opts->{user} );
$ENV{HOME} = $homedir if $homedir;
}
};
}
&daemonize if $opts->{daemon};
require HTTP::Request;
require JSON;
require LWP::UserAgent;
require Sys::Syslog;
my $j = JSON->new->canonical;
my $syslogOpened;
sub _log {
my ( $level, $msg ) = @_;
if ( $opts->{daemon} ) {
unless ($syslogOpened) {
Sys::Syslog::openlog( 'LLNG-Loki', 'cons,pid,ndelay',
$opts->{syslogFacility} || 'daemon' );
$syslogOpened++;
}
Sys::Syslog::syslog( $level, $msg );
}
else {
print STDERR "[$level] $msg\n";
}
}
sub debug {
map { _log( 'debug', $_ ) } @_ if $opts->{debug};
}
sub warning {
map { _log( 'warning', $_ ) } @_;
}
sub error {
map { _log( 'err', $_ ) } @_;
}
sub _getDeferDir {
require Lemonldap::NG::Common::Conf;
my $ca = Lemonldap::NG::Common::Conf->new( { (
$opts->{iniFile}
? ( confFile => $opts->{iniFile} )
: ()
)
}
( run in 0.850 second using v1.01-cache-2.11-cpan-71847e10f99 )