MYDan

 view release on metacpan or  search on metacpan

dan/agent/argv/dump  view on Meta::CPAN

    return [ %o ] unless $file && -f $file;

    %o = ( path => $file =~ /^\// ? $file : Cwd::abs_path( $file ) );

    Getopt::Long::GetOptionsFromArray( \@_, \%o, qw( path=s chmod=s chown=s cc ) );

    if( delete $o{cc} )
    {
        my ( $uid, $mode ) = ( stat $file )[ 4, 2 ];
        $o{chmod} ||= $mode = sprintf( "%04o", $mode & 07777 );
	$o{chown} ||= ( getpwuid($uid) )[0];
    }

    $o{md5} = MYDan::Util::FastMD5->hexdigest( $file );

    $ENV{MYDanExtractFile} = $file;
    $ENV{MYDanExtractFileAim} = $o{path};

    return \%o;
};

dan/agent/argv/edump  view on Meta::CPAN


    
    %o = ( path => $file =~ /^\// ? $file : Cwd::abs_path( $file ) );

    Getopt::Long::GetOptionsFromArray( \@_, \%o, qw( path=s chmod=s chown=s cc ) );

    if( delete $o{cc} )
    {
        my ( $uid, $mode ) = ( stat $file )[ 4, 2 ];
        $o{chmod} ||= $mode = sprintf( "%04o", $mode & 07777 );
	$o{chown} ||= ( getpwuid($uid) )[0];
    }

    $o{md5} = Digest::MD5->new()->add( $data = `cat $file` )->hexdigest();
    return ( \%o, data => $data );
};

dan/agent/argv/sdump  view on Meta::CPAN


    
    %o = ( path => $file =~ /^\// ? $file : Cwd::abs_path( $file ) );

    Getopt::Long::GetOptionsFromArray( \@_, \%o, qw( path=s chmod=s chown=s cc ) );

    if( delete $o{cc} )
    {
        my ( $uid, $mode ) = ( stat $file )[ 4, 2 ];
        $o{chmod} ||= $mode = sprintf( "%04o", $mode & 07777 );
	$o{chown} ||= ( getpwuid($uid) )[0];
    }

    $o{md5} = Digest::MD5->new()->add( $o{file} = `cat $file` )->hexdigest();
    return [ \%o ];
};

dan/agent/code/load  view on Meta::CPAN


    my ( $file, $position ) = $param{argv} ? @{$param{argv}} : @{$param{data}};
    die "file undef" unless $file;

    die "Can't open '$file': $!\n" unless open my  $fh, '+<', $file;
    syswrite( \*STDOUT, "MYDanExtractFile_::${file}::_MYDanExtractFile" ) unless $position;

    my ( $uid, $mode, $size ) = (stat $file)[4,2,7];
    $mode  = sprintf( "%04o", $mode & 07777 );
    syswrite \*STDOUT, sprintf "%d:%s:%s:%s:", 
        $size,MYDan::Util::FastMD5->hexdigest( $file ),( getpwuid($uid) )[0], $mode;

    if( $position )
    {
        seek $fh, $position, 0;
        my ( $n, $buf );
        while( $n = sysread $fh, $buf, 102400 )
        {
            syswrite \*STDOUT, $buf;
        }
    }

dan/agent/code/zipdir  view on Meta::CPAN

	waitpid( $pid, 0 );
	&$idie( "run $cmd fail" ) if $? >> 8;
	close $H;
	return @list;
};

my %getp;
my $getp = sub
{
    my $uid = shift;
    $getp{$uid} = getpwuid( $uid ) unless exists $getp{$uid};
    return $getp{$uid};
};

my $dirl = sub
{
    my $dir = shift;
    my @stat = stat $dir;
    my $user = &$getp( $stat[4] );
    my $mode =  sprintf( "%04o", $stat[2] & 07777 );
    return $user ? [ $dir, $mode, $user ] : [ $dir, $mode ];

lib/MYDan/Agent/Query.pm  view on Meta::CPAN

=cut
sub run
{
    my ( $self, %path ) = @_;
    my $query = $self->{query};
    my ( $code, $sudo, $env ) = @$query{ qw( code sudo env ) };

    idie( "already running $code\n" ) if ( $code =~ /\.mx$/ ) && !
        MYDan::Util::ProcLock->new( File::Spec->join( $path{run}, $code ) )->lock();

    if ( $code ne 'proxy' && ! $< && $sudo && $sudo ne ( getpwuid $< )[0] )
    {
        idie( "invalid sudo $sudo\n" ) unless my @pw = getpwnam $sudo;
        @pw = map { 0 + sprintf '%d', $_ } @pw[2,3];
        POSIX::setgid( $pw[1] ); ## setgid must preceed setuid
        POSIX::setuid( $pw[0] );
    }

    %ENV = ( %ENV, %$env ) if $env && ref $env eq 'HASH';
    map{ $ENV{"MYDan_$_"} = $query->{$_} }qw( user sudo );

lib/MYDan/Util/Deploy.pm  view on Meta::CPAN

    {
        die "mkdir path $self{path} fail: $!" if system "mkdir -p '$self{path}'";
    }

    my $linkdir = dirname $self{link};
    unless( -d $linkdir )
    {
        die "mkdir path $linkdir fail: $!" if system "mkdir -p '$linkdir'";
    }

    $self{cache} = (getpwnam((getpwuid $<)[0]))[7] . "/.mydan/deploy";

    $self{path} = Cwd::abs_path( $self{path} ) unless $self{path} =~ /^\//;
    $self{repo} = Cwd::abs_path( $self{repo} ) if $self{repo} !~ /@/ && $self{repo} !~ /^\//;

    bless \%self, ref $class || $class;
}

sub deploy
{
    my $this = shift;

lib/MYDan/Util/Sudo.pm  view on Meta::CPAN

=head1 Methods

=head3 sudo( $user )

Become $user ( default root ). 

=cut
sub sudo
{
    my ( $class, $user ) = splice @_;
    my $me = ( getpwuid $< )[0];

    return $user if $me eq ( $user ||= 'root' ) 
        || POSIX::setuid( ( getpwnam $user )[2] );

    warn "$me: need '$user' privilege, invoking sudo.\n";
    confess "exec $0: $!" unless exec 'sudo', '-u', $user, $0, @ARGV;
}

1;



( run in 0.345 second using v1.01-cache-2.11-cpan-8d75d55dd25 )