Various changes, including changes in 2.1.1 and 2.1.2 releases.
[BackupPC.git] / bin / BackupPC_tarExtract
index 270776f..32044f6 100755 (executable)
@@ -58,7 +58,7 @@ if ( $ARGV[0] !~ /^([\w\.\s-]+)$/ ) {
     exit(1);
 }
 my $client = $1;
     exit(1);
 }
 my $client = $1;
-if ( $ARGV[1] !~ /^([\w\s\.\/\$-]+)$/ ) {
+if ( $ARGV[1] !~ /^([\w\s.\/$(){}[\]-]+)$/ ) {
     print("$0: bad share name '$ARGV[1]'\n");
     exit(1);
 }
     print("$0: bad share name '$ARGV[1]'\n");
     exit(1);
 }
@@ -313,7 +313,7 @@ sub TarReadFile
         #
         my($nRead);
         #print("Reading $f->{name}, $f->{size} bytes, type $f->{type}\n");
         #
         my($nRead);
         #print("Reading $f->{name}, $f->{size} bytes, type $f->{type}\n");
-        pathCreate($dir, "$OutDir/$ShareName/$f->{mangleName}", $f);
+        pathCreate($dir, "$OutDir/$ShareName/$f->{mangleName}", $file, $f);
         my $poolWrite = BackupPC::PoolWrite->new($bpc,
                                          "$OutDir/$ShareName/$f->{mangleName}",
                                          $f->{size}, $Compress);
         my $poolWrite = BackupPC::PoolWrite->new($bpc,
                                          "$OutDir/$ShareName/$f->{mangleName}",
                                          $f->{size}, $Compress);
@@ -351,7 +351,7 @@ sub TarReadFile
        # a plain file.
         #
         $f->{size} = length($f->{linkname});
        # a plain file.
         #
         $f->{size} = length($f->{linkname});
-        pathCreate($dir, "$OutDir/$ShareName/$f->{mangleName}", $f);
+        pathCreate($dir, "$OutDir/$ShareName/$f->{mangleName}", $file, $f);
         my $poolWrite = BackupPC::PoolWrite->new($bpc,
                                          "$OutDir/$ShareName/$f->{mangleName}",
                                          $f->{size}, $Compress);
         my $poolWrite = BackupPC::PoolWrite->new($bpc,
                                          "$OutDir/$ShareName/$f->{mangleName}",
                                          $f->{size}, $Compress);
@@ -369,7 +369,7 @@ sub TarReadFile
         # contents.
         #
         $f->{size} = length($f->{linkname});
         # contents.
         #
         $f->{size} = length($f->{linkname});
-        pathCreate($dir, "$OutDir/$ShareName/$f->{mangleName}", $f);
+        pathCreate($dir, "$OutDir/$ShareName/$f->{mangleName}", $file, $f);
         my $poolWrite = BackupPC::PoolWrite->new($bpc,
                                          "$OutDir/$ShareName/$f->{mangleName}",
                                          $f->{size}, $Compress);
         my $poolWrite = BackupPC::PoolWrite->new($bpc,
                                          "$OutDir/$ShareName/$f->{mangleName}",
                                          $f->{size}, $Compress);
@@ -393,7 +393,7 @@ sub TarReadFile
         } else {
             $data = "$f->{devmajor},$f->{devminor}";
         }
         } else {
             $data = "$f->{devmajor},$f->{devminor}";
         }
-        pathCreate($dir, "$OutDir/$ShareName/$f->{mangleName}", $f);
+        pathCreate($dir, "$OutDir/$ShareName/$f->{mangleName}", $file, $f);
         my $poolWrite = BackupPC::PoolWrite->new($bpc,
                                          "$OutDir/$ShareName/$f->{mangleName}",
                                          length($data), $Compress);
         my $poolWrite = BackupPC::PoolWrite->new($bpc,
                                          "$OutDir/$ShareName/$f->{mangleName}",
                                          length($data), $Compress);
@@ -487,15 +487,17 @@ sub logFileAction
 #
 sub pathCreate
 {
 #
 sub pathCreate
 {
-    my($dir, $file, $f) = @_;
+    my($dir, $fullPath, $file, $f) = @_;
 
     #
 
     #
-    # Get parent directory of each of $dir and $file
+    # Get parent directory of each of $dir and $fullPath
     #
     #
-    $dir  =~ s{/[^/]*$}{};
-    $file =~ s{/[^/]*$}{};
-    return if ( -d $file );
-    mkpath($file, 0, 0777);
+    $dir      =~ s{/[^/]*$}{};
+    $fullPath =~ s{/[^/]*$}{};
+    return if ( -d $fullPath );
+    mkpath($fullPath, 0, 0777);
+    $Attrib{$dir} = BackupPC::Attrib->new({ compress => $Compress })
+                                if ( !defined($Attrib{$dir}) );
     $Attrib{$dir}->set($file, {
                             type  => BPC_FTYPE_DIR,
                             mode  => 0755,
     $Attrib{$dir}->set($file, {
                             type  => BPC_FTYPE_DIR,
                             mode  => 0755,