X-Git-Url: http://git.rot13.org/?p=BackupPC.git;a=blobdiff_plain;f=lib%2FBackupPC%2FCGI%2FRestore.pm;h=8b093f900f3ef29c954be214f1d86939443941ad;hp=7fe7a5b13dffca884402794efb3bd1024f712eed;hb=f9796d809e6a7d4ed2c356f0f32f1a3d628d3d1f;hpb=fadae1eaa5482a441bc8e8aa829a063ee6a5f0c0 diff --git a/lib/BackupPC/CGI/Restore.pm b/lib/BackupPC/CGI/Restore.pm index 7fe7a5b..8b093f9 100644 --- a/lib/BackupPC/CGI/Restore.pm +++ b/lib/BackupPC/CGI/Restore.pm @@ -10,7 +10,7 @@ # Craig Barratt # # COPYRIGHT -# Copyright (C) 2003 Craig Barratt +# Copyright (C) 2003-2009 Craig Barratt # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -28,7 +28,7 @@ # #======================================================================== # -# Version 3.1.0beta0, released 3 Sep 2007. +# Version 3.2.0, released 31 Jul 2010. # # See http://backuppc.sourceforge.net. # @@ -38,6 +38,7 @@ package BackupPC::CGI::Restore; use strict; use BackupPC::CGI::Lib qw(:all); +use BackupPC::Xfer; use Data::Dumper; use File::Path; use Encode qw/decode_utf8/; @@ -101,13 +102,34 @@ EOF # # Build list of hosts # - my $hostDestSel; - my @hosts; + my($hostDestSel, @hosts, $gotThisHost, $directHost); + + # + # Check all the hosts this user has permissions for + # and make sure direct restore is enabled. + # Note: after this loop we have the config for the + # last host in @hosts, not the original $In{host}!! + # + $directHost = $host; foreach my $h ( GetUserHosts(1) ) { - my $sel = " selected" if ( $h eq $In{host} ); - $hostDestSel .= ""; - push(@hosts, $h); + # + # Pick up the host's config file + # + $bpc->ConfigRead($h); + %Conf = $bpc->Conf(); + if ( BackupPC::Xfer::restoreEnabled( \%Conf ) ) { + # + # Direct restore is enabled + # + push(@hosts, $h); + $gotThisHost = 1 if ( $h eq $host ); + } } + $directHost = $hosts[0] if ( !$gotThisHost && @hosts ); + foreach my $h ( @hosts ) { + my $sel = " selected" if ( $h eq $directHost ); + $hostDestSel .= ""; + } # # Tell the user what options they have @@ -116,27 +138,15 @@ EOF $share = decode_utf8($share); $content = eval("qq{$Lang->{Restore_Options_for__host2}}"); - if ( @hosts == 1 ) { - # - # Pick up the host's config file - # - $bpc->ConfigRead($hosts[0]); - %Conf = $bpc->Conf(); - } - # # Decide if option 1 (direct restore) is available based # on whether the restore command is set. # - my $cmd = $Conf{XferMethod} eq "smb" ? $Conf{SmbClientRestoreCmd} - : $Conf{XferMethod} eq "tar" ? $Conf{TarClientRestoreCmd} - : $Conf{XferMethod} eq "archive" ? undef - : $Conf{RsyncRestoreArgs}; - if ( defined($cmd) ) { + if ( $hostDestSel ne "" ) { $content .= eval( "qq{$Lang->{Restore_Options_for__host_Option1}}"); } else { - my $hostDest = $hosts[0]; + my $hostDest = $In{host}; $content .= eval( "qq{$Lang->{Restore_Options_for__host_Option1_disabled}}"); } @@ -250,11 +260,7 @@ EOF # Decide if option 1 (direct restore) is available based # on whether the restore command is set. # - my $cmd = $Conf{XferMethod} eq "smb" ? $Conf{SmbClientRestoreCmd} - : $Conf{XferMethod} eq "tar" ? $Conf{TarClientRestoreCmd} - : $Conf{XferMethod} eq "archive" ? undef - : $Conf{RsyncRestoreArgs}; - if ( !defined($cmd) ) { + unless ( BackupPC::Xfer::restoreEnabled( \%Conf ) ) { ErrorExit(eval("qq{$Lang->{Restore_Options_for__host_Option1_disabled}}")); } @@ -324,7 +330,7 @@ EOF [ \%restoreReq], [qw(*RestoreReq)]); $dump->Indent(1); - mkpath("$TopDir/pc/$hostDest", 0, 0777) + eval { mkpath("$TopDir/pc/$hostDest", 0, 0777) } if ( !-d "$TopDir/pc/$hostDest" ); my $openPath = "$TopDir/pc/$hostDest/$reqFileName"; if ( open(REQ, ">", $openPath) ) {