]> git.sur5r.net Git - bacula/bacula/blobdiff - gui/bweb/cgi/bresto.pl
bweb: Update some GPL2 notice to AGPL
[bacula/bacula] / gui / bweb / cgi / bresto.pl
index 0b31d8cdf9411a285a2b22044f7015a8d30dc638..df92a485990138cbdde7a556c8d5d8ea709c660f 100755 (executable)
@@ -13,25 +13,24 @@ die "bresto is not enabled" if (not $bresto_enable);
    The main author of Bweb is Eric Bollengier.
    The main author of Bacula is Kern Sibbald, with contributions from
    many others, a complete list can be found in the file AUTHORS.
-
    This program is Free Software; you can redistribute it and/or
-   modify it under the terms of version two of the GNU General Public
-   License as published by the Free Software Foundation plus additions
-   that are listed in the file LICENSE.
+   modify it under the terms of version three of the GNU Affero General Public
+   License as published by the Free Software Foundation and included
+   in the file LICENSE.
 
    This program is distributed in the hope that it will be useful, but
    WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-   General Public License for more details.
+   Affero General Public License for more details.
 
-   You should have received a copy of the GNU General Public License
+   You should have received a copy of the GNU Affero General Public License
    along with this program; if not, write to the Free Software
    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
    02110-1301, USA.
 
    Bacula® is a registered trademark of Kern Sibbald.
    The licensor of Bacula is the Free Software Foundation Europe
-   (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zurich,
+   (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich,
    Switzerland, email:ftf@fsfeurope.org.
 
 =head1 VERSION
@@ -398,9 +397,9 @@ UNION
  (SELECT $pathid AS PathId, '.' AS Path))";
 
     my $sq2 = "
-SELECT tmp.PathId, tmp.Path, Lstat, JobId 
+SELECT tmp.PathId, tmp.Path, LStat, JobId 
   FROM $sq1 AS tmp  LEFT JOIN ( -- get attributes if any
-       SELECT File1.PathId, File1.JobId, File1.Lstat FROM File AS File1
+       SELECT File1.PathId, File1.JobId, File1.LStat FROM File AS File1
        WHERE File1.FilenameId = $dir_filenameid
        AND File1.JobId IN ($jobclause)) AS listfile1
   ON (tmp.PathId = listfile1.PathId)
@@ -466,10 +465,10 @@ sub ls_dirs
 
     # Then we get all the dir entries from File ...
     my $query = "
-SELECT PathId, Path, JobId, Lstat FROM (
+SELECT PathId, Path, JobId, LStat FROM (
 
     SELECT Path1.PathId, Path1.Path, lower(Path1.Path),
-           listfile1.JobId, listfile1.Lstat
+           listfile1.JobId, listfile1.LStat
     FROM (
        SELECT DISTINCT brestore_pathhierarchy1.PathId
        FROM brestore_pathhierarchy AS brestore_pathhierarchy1
@@ -484,7 +483,7 @@ SELECT PathId, Path, JobId, Lstat FROM (
    JOIN Path AS Path1 ON (listpath1.PathId = Path1.PathId)
 
    LEFT JOIN ( -- get attributes if any
-       SELECT File1.PathId, File1.JobId, File1.Lstat FROM File AS File1
+       SELECT File1.PathId, File1.JobId, File1.LStat FROM File AS File1
        WHERE File1.FilenameId = $dir_filenameid
        AND File1.JobId IN ($jobclause)) AS listfile1
        ON (listpath1.PathId = listfile1.PathId)
@@ -615,7 +614,7 @@ sub get_all_file_versions
     my @versions;
     my $query;
     $query =
-"SELECT File.JobId, File.FileId, File.Lstat,
+"SELECT File.JobId, File.FileId, File.LStat,
         File.Md5, Media.VolumeName, Media.InChanger
  FROM File, Job, Client, JobMedia, Media
  WHERE File.FilenameId = $fileid
@@ -912,17 +911,14 @@ sub fill_table_for_restore
           FROM File WHERE FileId IN ($fileid))";
     }
 
-    # using this is not good because the sql engine doesn't know
-    # what LIKE will use. It will be better to get Path% in perl
-    # but it doesn't work with accents... :(
     foreach my $dirid (@dirid) {
-      push @union, "
+        my $p = $bvfs->get_path($dirid);
+        $p =~ s/([%_\\])/\\$1/g;  # Escape % and _ for LIKE search
+        $p = $bvfs->dbh_quote($p);
+        push @union, "
   (SELECT File.JobId, File.FileIndex, File.FilenameId, File.PathId $FileId
     FROM Path JOIN File USING (PathId)
-   WHERE Path.Path LIKE
-        (SELECT ". $bvfs->dbh_strcat('Path',"'\%'") ." FROM Path
-          WHERE PathId = $dirid
-        )
+   WHERE Path.Path LIKE " . $bvfs->dbh_strcat($p, "'%'") . "
      AND File.JobId IN ($inclause))";
     }
 
@@ -1073,14 +1069,27 @@ if ($action eq 'restore') {
     print CGI::redirect("bweb.pl?action=dsp_cur_job;jobid=$jobid") ;
     exit 0;
 }
-
 sub escape_quote
 {
     my ($str) = @_;
+    my %esc = (
+        "\n" => '\n',
+        "\r" => '\r',
+        "\t" => '\t',
+        "\f" => '\f',
+        "\b" => '\b',
+        "\"" => '\"',
+        "\\" => '\\\\',
+        "\'" => '\\\'',
+    );
+
     if (!$str) {
         return '';
     }
-    $str =~ s/'/\\'/g;
+
+    $str =~ s/([\x22\x5c\n\r\t\f\b])/$esc{$1}/g;
+    $str =~ s/\//\\\//g;
+    $str =~ s/([\x00-\x08\x0b\x0e-\x1f])/'\\u00' . unpack('H2', $1)/eg;
     return $str;
 }
 
@@ -1101,12 +1110,11 @@ if ($action eq 'list_files_dirs') {
                                0, # filenameid
                                $_->[0], # pathid
                                "'$jids'", # jobid
-                               "'" . escape_quote($_->[1]) . "'", # name
+                                '"' . escape_quote($_->[1]) . '"', # name
                                "'" . $p[7] . "'",                 # size
-                               "'" . strftime('%Y-%m-%d %H:%m:%S', localtime($p[11])) .  "'") .
+                               "'" . strftime('%Y-%m-%d %H:%m:%S', localtime($p[11]||0)) .  "'") .
                    ']'; 
               } @$files);
-
     print "," if (@$files);
 
     $files = $bvfs->ls_dirs();
@@ -1118,9 +1126,9 @@ if ($action eq 'list_files_dirs') {
                                0, # filenameid
                                $_->[0], # pathid
                                "'$jids'", # jobid
-                               "'" . escape_quote($_->[1]) . "'", # name
+                               '"' . escape_quote($_->[1]) . '"', # name
                                "'" . $p[7] . "'",                 # size
-                               "'" . strftime('%Y-%m-%d %H:%m:%S', localtime($p[11])) .  "'") .
+                               "'" . strftime('%Y-%m-%d %H:%m:%S', localtime($p[11]||0)) .  "'") .
                    ']'; 
               } @$files);
 
@@ -1134,7 +1142,7 @@ if ($action eq 'list_files_dirs') {
                                $_->[0],
                                $pathid,
                                $_->[4],
-                               "'" . escape_quote($_->[2]) . "'",
+                                '"' . escape_quote($_->[2]) . '"', # name
                                "'" . $p[7] . "'",
                                "'" . strftime('%Y-%m-%d %H:%m:%S', localtime($p[11])) .  "'") .
                    ']'; 
@@ -1154,7 +1162,7 @@ if ($action eq 'list_files_dirs') {
                                $_->[0],
                                $pathid,
                                $_->[4],
-                               "'" . escape_quote($_->[2]) . "'",
+                                '"' . escape_quote($_->[2]) . '"', # name
                                "'" . $p[7] . "'",
                                "'" . strftime('%Y-%m-%d %H:%m:%S', localtime($p[11])) .  "'") .
                    ']'; 
@@ -1221,7 +1229,7 @@ if ($action eq 'list_files_dirs') {
     }
 
     if ($table) {
-        #$bvfs->dbh_do("DROP TABLE $table");
+        $bvfs->dbh_do("DROP TABLE $table");
     }
 
 }