diff -r f361d688365c -r b8f8ec90c296 bin/imager.restore --- a/bin/imager.restore Fri Jul 29 16:06:55 2011 +0200 +++ b/bin/imager.restore Sun Jul 31 16:10:24 2011 +0200 @@ -1,11 +1,12 @@ #! /usr/bin/perl # Eigentlich geht das selbe mit: # grep '^[[:space:]]*[[:digit:]]' IDX-file | tr -d | cut -f4 -d' ' | while read f; do -# cat DATA/$f || zcat DATA/$f.gz -# done -# ODER -# perl -ne '/^\s*\d/ and print "DATA/" . (split)[2] . "\n"' IDX-File | while read f; do -# cat DATA/$f || zcat DATA/$f.gz +# if test -f DATA/$f then cat $f +# elif test -f DATA/$f.gz then zcat DATA/$f.gz +# elif test -f DATA/$f.x then openssl aes-128-cbc -d -in DATA/$f.x +# elif test -f DATA/$f.gz.x then openssl aes-128-cbc -d -in DATA/$f.gz.x | zcat +# elif test -f DATA/$f.x.gz then zcat DATA/$f.x.gz | openssl aes-128-cbs -d +# fi # done use 5.010; @@ -16,12 +17,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 +35,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 +73,7 @@ if (-f "$data/$path") { open($in => "$data/$path"); binmode($in); - local $/ = \$blocksize; + local $/ = undef; $buffer = <$in>; } elsif (-f "$data/$path.gz") { @@ -75,6 +82,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.gz.x") { + open($in, "openssl @{[CIPHER]} -d -pass $o{pass} -in $data/$path.gz.x|"); + binmode($in); + gunzip($in => \$buffer) + or die $GunzipError; + } + elsif (-f "$data/$path.x.gz") { + warn "$data/$path.x.gz: depreciated!\n"; + open($in, + "gzip -d -c $data/$path.x.gz | openssl @{[CIPHER]} -d -pass $o{pass}|"); + binmode($in); + local $/ = undef; + $buffer = <$in>; + } else { die ME . ": Can't open $data/$path: $!\n"; } @@ -100,7 +127,7 @@ =head1 SYNOPSIS - imager.restore {idx} {destination} + imager.restore [options] {idx} {destination} =head1 DESCRIPTION @@ -108,5 +135,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 | B<--pass=>I + +In case you expect encrypted data, this option takes the argument for +B's C<-pass> option. See L for mor information. +(default: stdin) + +=item B<-h>|B<--help> + +=item B<-m>|B<--man> + +The standard help options. + +=back =cut