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 )