From 533b2bf32ee369f29b0a5526b0f032e303df069a Mon Sep 17 00:00:00 2001 From: hjp Date: Mon, 20 Nov 2006 09:03:25 +0000 Subject: [PATCH] Closed command file handle after list to force DA to exit. Restructured code in present to find bug (bug vanished, but I don't see why). Made mkdir_p a little bit more fault tolerant. --- lib/Simba/CA.pm | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) 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; }