bin/imager.restore
branchtesting
changeset 37 cb50d6c57439
parent 26 496ee9b0f488
child 38 fac6d76d06e8
--- a/bin/imager.restore	Fri Jul 29 16:06:55 2011 +0200
+++ b/bin/imager.restore	Sun Jul 31 15:03:06 2011 +0200
@@ -16,12 +16,17 @@
 use autodie qw(:all);
 use Pod::Usage;
 use Getopt::Long;
+use Hash::Util qw(lock_keys);
 use IO::Uncompress::Gunzip qw(gunzip $GunzipError);
 
 use constant KiB => 1024;
 use constant MiB => 1024 * KiB;
 use constant GiB => 1024 * MiB;
 use constant ME  => basename $0;
+use constant CIPHER => "aes-128-cbc";
+
+my %o = (pass => "stdin");
+lock_keys(%o);
 
 sub find_data_dir;
 
@@ -29,8 +34,9 @@
 
     Getopt::Long::Configure(qw(Bundling));
     GetOptions(
-        "h|help" => sub { pod2usage(-verbose => 1, -exit => 0) },
-        "m|man"  => sub {
+        "p|pass=s" => \$o{pass},
+        "h|help"   => sub { pod2usage(-verbose => 1, -exit => 0) },
+        "m|man"    => sub {
             pod2usage(
                 -verbose   => 2,
                 -exit      => 0,
@@ -66,7 +72,7 @@
         if (-f "$data/$path") {
             open($in => "$data/$path");
             binmode($in);
-            local $/ = \$blocksize;
+            local $/ = undef;
             $buffer = <$in>;
         }
         elsif (-f "$data/$path.gz") {
@@ -75,6 +81,26 @@
             gunzip($in => \$buffer)
               or die $GunzipError;
         }
+        elsif (-f "$data/$path.x") {
+            open($in, "openssl @{[CIPHER]} -d -pass $o{pass} -in '$data/$path.x'|");
+            binmode($in);
+            local $/ = undef;
+            $buffer = <$in>;
+        }
+        elsif (-f "$data/$path.x.gz") {
+            warn "$data/$path.x.gz: depreciated!\n";
+            open($in,
+                "gzip -d -c $data/$path.x.gz | openssl bf -d -pass $o{pass}|");
+            binmode($in);
+            local $/ = undef;
+            $buffer = <$in>;
+        }
+        elsif (-f "$data/$path.gz.x") {
+            open($in, "openssl bf -d -pass $o{pass} -in $data/$path.gz.x|");
+            binmode($in);
+            gunzip($in => \$buffer)
+              or die $GunzipError;
+        }
         else {
             die ME . ": Can't open $data/$path: $!\n";
         }
@@ -100,7 +126,7 @@
 
 =head1 SYNOPSIS
 
-    imager.restore {idx} {destination}
+    imager.restore [options] {idx} {destination}
 
 =head1 DESCRIPTION
 
@@ -108,5 +134,22 @@
 cats them as one data stream. The destination can be any block device,
 a file name or even B<-> (STDOUT).
 
+=head1 OPTIONS
+
+=over
+
+=item B<-p> I<pass> | B<--pass=>I<pass>
+
+In case you expect encrypted data, this option takes the argument for
+B<openssl>'s C<-pass> option. See L<openssl(3)> for mor information.
+(default: stdin)
+
+=item B<-h>|B<--help>
+
+=item B<-m>|B<--man>
+
+The standard help options.
+
+=back
 
 =cut