Lim
view release on metacpan or search on metacpan
bin/lim-agentd view on Meta::CPAN
#!/usr/bin/env perl
use common::sense;
use Getopt::Long ();
use Pod::Usage ();
use Log::Log4perl ();
$Log::Log4perl::JOIN_MSG_ARRAY_CHAR = '';
use POSIX;
use AnyEvent ();
if (AnyEvent->VERSION < 6.01) {
# Try and force detection of modules for old AnyEvents
foreach (qw(EV Event Glib EventLib POE)) {
eval "use $_ ();";
unless ($@) {
last;
}
}
AnyEvent::detect;
}
use Lim ();
use Lim::RPC::Server ();
use Lim::RPC::TLS ();
use Lim::Agent ();
use Lim::Plugins ();
my $help = 0;
my $conf;
my $log4perl;
my $foreground = 0;
my $pidfile = '/var/run/lim-agentd.pid';
my @options;
my @uris;
my $uid;
my $gid;
my $user;
my $group;
sub _set_user_group {
if (defined $group and !defined $gid) {
unless (defined ($gid = getgrnam($group))) {
print STDERR 'Unable to get group id for ', $group, ': ', $!;
exit(3);
}
}
my @gids;
if (defined $user or defined $uid) {
my $user = $user;
my $gid = $gid;
my $putback;
unless (defined $user) {
unless (defined ($user = getpwuid($uid))) {
print STDERR 'Unable to get user name for id ', $uid, ': ', $!;
exit(3);
}
}
unless (defined $gid) {
(undef, undef, undef, $gid) = getpwnam($user);
unless (defined $gid) {
print STDERR 'Unable to get group id for user ', $user, ': ', $!;
exit(3);
}
$putback=1;
}
setgrent;
while (my ($gname,undef,$_gid,$members) = getgrent) {
foreach (split(/\s+/o, $members)) {
if (defined $gid and $_gid == $gid) {
next;
}
if ($_ eq $user) {
push(@gids, $_gid);
last;
}
}
}
endgrent;
if (defined $putback) {
unshift(@gids, $gid);
}
}
if (defined $gid) {
$) = join(' ', $gid, @gids);
if ($!) {
print STDERR 'Unable to set groups to ', join(' ', $gid, @gids), ': ', $!;
exit(3);
}
unless (POSIX::setgid($gid)) {
print STDERR 'Unable to set group id to ', $gid, ': ', $!;
exit(3);
}
}
elsif (scalar @gids > 0) {
$) = join(' ', $gid, @gids);
if ($!) {
print STDERR 'Unable to set groups to ', join(' ', $gid, @gids), ': ', $!;
exit(3);
}
}
if (defined $user and !defined $uid) {
unless (defined ($uid = getpwnam($user))) {
print STDERR 'Unable to get user id for ', $user, ': ', $!;
exit(3);
}
}
if (defined $uid) {
unless (POSIX::setuid($uid)) {
print STDERR 'Unable to set user id to ', $uid, ': ', $!;
( run in 0.793 second using v1.01-cache-2.11-cpan-13bb782fe5a )