diff --git a/lib/Simba/CA.pm b/lib/Simba/CA.pm index b63f4fb..5db397d 100644 --- a/lib/Simba/CA.pm +++ b/lib/Simba/CA.pm @@ -10,6 +10,8 @@ use Simba::Util qw(quote unquote typestr); use Readonly; use Digest::SHA1; use List::Util qw(min); +use IO::Handle; +use File::stat; Readonly my $BUFSIZE => 128 * 1024; @@ -53,6 +55,7 @@ sub backup2disk { my ($file_pid, $file_cfd, $file_dfd); # connection to get content of files $list_pid = open2($list_dfd, $list_cfd, "/usr/bin/ssh", "-l", "simba_da", $target->{host}, "da"); $list_cfd->printflush("list $target->{dir}\n"); # XXX - encode! + close($list_cfd); while (<$list_dfd>) { # split into fields my $f = $self->parse($_); @@ -139,10 +142,10 @@ sub parse { sub present { my ($self, $f) = @_; - my $st; - if ($self->{last_backup} && - ($st = lstat("$self->{last_backup}/$f->{name}")) && - $st->mtime == $f->{m} && + return unless $self->{last_backup}; + my $st = lstat("$self->{last_backup}/$f->{name}"); + return unless $st; + if ($st->mtime == $f->{m} && $st->size == $f->{s} && uid2name($st->uid) eq $f->{o} && uid2name($st->gid) eq $f->{g} && @@ -169,7 +172,11 @@ sub mkdir_p { my $parentdir = $dir; $parentdir =~ s|(.*)/.+|$1|; mkdir_p($parentdir, $perm); - return mkdir($dir, $perm); + if (-d $dir) { + return 1; + } else { + return mkdir($dir, $perm); + } } else { return undef; }