X-Git-Url: http://git.rot13.org/?p=BackupPC.git;a=blobdiff_plain;f=lib%2FBackupPC%2FCGI%2FRestore.pm;h=c9eec4806c9e5026cbd199f77b43714c0cbacc1d;hp=70c428b8830d8b04ea66c069526c6d152a4bc16d;hb=c2b072c9ad558447fb73fedf0cad170214b7d80e;hpb=8c30bb82b66f26ccf7e261e2c42711251d0d6ccd diff --git a/lib/BackupPC/CGI/Restore.pm b/lib/BackupPC/CGI/Restore.pm index 70c428b..c9eec48 100644 --- a/lib/BackupPC/CGI/Restore.pm +++ b/lib/BackupPC/CGI/Restore.pm @@ -28,7 +28,7 @@ # #======================================================================== # -# Version 2.1.0beta2, released 23 May 2004. +# Version 3.0.0, released 28 Jan 2007. # # See http://backuppc.sourceforge.net. # @@ -40,6 +40,7 @@ use strict; use BackupPC::CGI::Lib qw(:all); use Data::Dumper; use File::Path; +use Encode; sub action { @@ -73,6 +74,7 @@ sub action $hiddenStr .= < EOF + $name = decode_utf8($name); $fileListStr .= < ${EscHTML($name)} EOF @@ -110,37 +112,33 @@ EOF # # Tell the user what options they have # + $pathHdr = decode_utf8($pathHdr); $content .= eval("qq{$Lang->{Restore_Options_for__host2}}"); - # - # If there is a single host, make sure direct restore is enabled - # 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) ) { - $content .= eval( - "qq{$Lang->{Restore_Options_for__host_Option1}}"); - } else { - my $hostDest = $hosts[0]; - $content .= eval( - "qq{$Lang->{Restore_Options_for__host_Option1_disabled}}"); - } - } else { - $content .= eval("qq{$Lang->{Restore_Options_for__host_Option1}}"); - } + # + # 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) ) { + $content .= eval( + "qq{$Lang->{Restore_Options_for__host_Option1}}"); + } else { + my $hostDest = $hosts[0]; + $content .= eval( + "qq{$Lang->{Restore_Options_for__host_Option1_disabled}}"); + } # # Verify that Archive::Zip is available before showing the @@ -266,10 +264,16 @@ EOF (my $strippedShareDest = $In{shareDest}) =~ s/^\///; substr($targetFile, 0, length($pathHdr)) = "/$In{pathHdr}/"; $targetFile =~ s{//+}{/}g; + $strippedShareDest = decode_utf8($strippedShareDest); + $targetFile = decode_utf8($targetFile); + $strippedShare = decode_utf8($strippedShare); + $f = decode_utf8($f); $fileListStr .= <$host:/$strippedShare$f$In{hostDest}:/$strippedShareDest$targetFile EOF } + $In{shareDest} = decode_utf8($In{shareDest}); + $In{pathHdr} = decode_utf8($In{pathHdr}); my $content = eval("qq{$Lang->{Are_you_sure}}"); Header(eval("qq{$Lang->{Restore_Confirm_on__host}}"), $content); Trailer(); @@ -321,12 +325,13 @@ EOF $dump->Indent(1); mkpath("$TopDir/pc/$hostDest", 0, 0777) if ( !-d "$TopDir/pc/$hostDest" ); - if ( open(REQ, ">$TopDir/pc/$hostDest/$reqFileName") ) { + my $openPath = "$TopDir/pc/$hostDest/$reqFileName"; + if ( open(REQ, ">", $openPath) ) { binmode(REQ); print(REQ $dump->Dump); close(REQ); } else { - ErrorExit(eval("qq{$Lang->{Can_t_open_create}}")); + ErrorExit(eval("qq{$Lang->{Can_t_open_create__openPath}}")); } $reply = $bpc->ServerMesg("restore ${EscURI($ipAddr)}" . " ${EscURI($hostDest)} $User $reqFileName");