diff -up e-smith-backup-2.2.0/root/etc/e-smith/events/actions/workstation-backup-dar.catalog e-smith-backup-2.2.0/root/etc/e-smith/events/actions/workstation-backup-dar --- e-smith-backup-2.2.0/root/etc/e-smith/events/actions/workstation-backup-dar.catalog 2012-04-09 15:59:12.000000000 +0200 +++ e-smith-backup-2.2.0/root/etc/e-smith/events/actions/workstation-backup-dar 2012-04-09 16:00:47.000000000 +0200 @@ -27,6 +27,7 @@ use esmith::templates; use Time::localtime; use File::Copy; use File::Path; +use File::Find; use POSIX ":sys_wait_h"; use esmith::ConfigDB; @@ -318,6 +319,99 @@ foreach (<$tmpdir/$id/$bkname*>) unless move($_, $setdirname); } +# update dar_manager catalog + +$report .= "Updating catalog\n"; + +my %backupfiles = (); +my $mntbkdir; +my $mounted; +my $key; + +my $setbackuplist = sub { + if ( $_ =~ /\.dar/ ) + { + my $dir = $File::Find::dir; + my $backupref; + $dir =~ s/$mntbkdir\///; + $_ =~ s/\..*\.dar//; + $backupref = $_; + $_ =~ s/.*-//; + @{$backupfiles{$_}}[0] = $dir; + @{$backupfiles{$_}}[1] = $backupref; + } +}; + +$mntbkdir = $mntdir . '/' . $id; + +my $catalog = "$mntbkdir/dar-catalog"; +unless ( -e $catalog) +{ + system("/usr/bin/dar_manager", "-Q", "-C", "$catalog") == 0 + or ldie("Unable to create dar_manager catalog.\n"); +} + +# find available backups for the server + +find { wanted => \&$setbackuplist, untaint => 1 }, $mntbkdir ; + +# find backups in current catalog + +my $i = 0; +my @bknum; +my @setd; +my @bkname; +open(DAR_LIST, "/usr/bin/dar_manager -Q -B $catalog -l |"); +while () +{ + next unless ($_ =~ /set/); + chomp; + ($bknum[$i], $setd[$i], $bkname[$i]) = split(' ', $_, 3); + $i++; +} +close (DAR_LIST); + +# delete from catalog old removed backups + +my $j = $i; +while ($j) +{ + unless (-e "$setd[$j-1]/$bkname[$j-1]\.1\.dar") + { + my $del = $bknum[$j-1]; + if ($del =~ /^(.*)$/) + { + $del = $1; + } + system("/usr/bin/dar_manager", "-Q", "-B", "$catalog", "-D", "$del") == 0 + or ldie("Failed to delete set $del from catalog.\n"); + } + $j--; +} + +# add to catalog new backups + +foreach $key (sort keys %backupfiles) +{ + my $exists = 0; + my $rf; + foreach $rf (@bkname) + { + $exists = 1 if ($rf eq $backupfiles{$key}[1]); + last if $exists; + } + do + { + my $add = "$mntbkdir/$backupfiles{$key}[0]/$backupfiles{$key}[1]"; + if ($add =~ /^(.*)$/) + { + $add = $1; + } + system("/usr/bin/dar_manager", "-Q", "-B", "$catalog", "-A", "$add") == 0 + or ldie("Failed to add set $add to catalog.\n"); + } unless $exists; +} + # Check free disk space my $df = qx(/bin/df -Ph $mntdir); if ($df =~ /^\S+\s+(\S+)\s+(\S+)\s+(\S+)\s+(\d*%)/mi) diff -up e-smith-backup-2.2.0/root/etc/e-smith/web/functions/backup.catalog e-smith-backup-2.2.0/root/etc/e-smith/web/functions/backup --- e-smith-backup-2.2.0/root/etc/e-smith/web/functions/backup.catalog 2012-04-09 15:59:12.000000000 +0200 +++ e-smith-backup-2.2.0/root/etc/e-smith/web/functions/backup 2012-04-09 16:00:54.000000000 +0200 @@ -2604,72 +2604,12 @@ sub workstnSelRestore() } my $catalog = "$mntbkdir/dar-catalog"; - unless ( -e $catalog) - { - system("/usr/bin/dar_manager", "-C", "$catalog") == 0 - or die($fm->localise('ERR_DAR_CATALOG'),"\n"); - } - - # find available backups for the server - - find { wanted => \&$setbackuplist, untaint => 1 }, $mntbkdir ; - - # find backups in current catalog - my $i = 0; + my $j = 0; my @bknum; my @setd; my @bkname; - open(DAR_LIST, "/usr/bin/dar_manager -B $catalog -l |"); - while () - { - next unless ($_ =~ /set/); - chomp; - ($bknum[$i], $setd[$i], $bkname[$i]) = split(' ', $_, 3); - $i++; - } - close (DAR_LIST); - # delete from catalog old removed backups - - my $j = $i; - while ($j) - { - unless (-e "$setd[$j-1]/$bkname[$j-1]\.1\.dar") - { - my $del = $bknum[$j-1]; - if ($del =~ /^(.*)$/) - { - $del = $1; - } - system("/usr/bin/dar_manager", "-B", "$catalog", "-D", "$del") == 0 - or die($fm->localise('ERR_DAR_CATALOG'),"\n"); - } - $j--; - } - - # add to catalog new backups - - foreach $key (sort keys %backupfiles) - { - my $exists = 0; - my $rf; - foreach $rf (@bkname) - { - $exists = 1 if ($rf eq $backupfiles{$key}[1]); - last if $exists; - } - do - { - my $add = "$mntbkdir/$backupfiles{$key}[0]/$backupfiles{$key}[1]"; - if ($add =~ /^(.*)$/) - { - $add = $1; - } - system("/usr/bin/dar_manager", "-B", "$catalog", "-A", "$add") == 0 - or die($fm->localise('ERR_DAR_CATALOG'),"\n"); - } unless $exists; - } # update backups list from current catalog