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 )