view Lib/Deployment/Batch/Backup.pm @ 94:79bf75223afe

Fixed security related bugs
author wizard
date Thu, 29 Apr 2010 01:31:27 +0400
parents 16ada169ca75
children 76515373dac0
line wrap: on
line source

package Deployment::Batch::Backup;
use base qw(Deployment::Batch::Generic);
use Common;
use File::Copy;

BEGIN {
    DeclareProperty Action => ACCESS_READ;
}

sub CTOR {
    my ($this,$actionName,$actionArg) = @_;

    $this->{$Action} = { Name => $actionName, Arg => $actionArg };
}

sub Run {
    my ($this) = @_;

    my $tmpObj;
    
    # we are in the immediate mode
    if ($this->{$Action}{Name} eq 'File') {
        $this->Log("Backup file: $this->{$Action}{Arg}");
        if (-e $this->{$Action}{Arg}) {

            Deployment::Batch->Temp( File => \$tmpObj ) or die "Failed to create temp file" ;
        
            copy ($this->{$Action}{Arg}, $tmpObj->filename) or die "Failed to backup";
            $this->{$Action}{Result} = $tmpObj->filename;
        }
    } else {
        die "Don't know how to backup the $this->{$Action}{Name}";
    }
}

sub Rollback {
    my ($this) = @_;
    if ($this->{$Action}{Name} eq 'File') {
        $this->Log("Revert file: $this->{$Action}{Arg}");
        if ($this->{$Action}{Result}) {
            copy ($this->{$Action}{Result}, $this->{$Action}{Arg}) or die "Failed to backup";
        } else {
            unlink $this->{$Action}{Arg} if -f $this->{$Action}{Arg};
        }
    }
}

1;