--- /dev/null
+#!@PERL@ -T
+#
+
+# Run perl.
+eval '(exit $?0)' && eval 'exec @PERL@ -S $0 ${1+"$@"}'
+ & eval 'exec @PERL@ -S $0 $argv:q'
+ if 0;
+
+delete @ENV{'IFS', 'CDPATH', 'ENV', 'BASH_ENV', 'PATH'};
+$ENV{'PATH'} = "/usr/bin:/usr/sbin:/sbin:/bin";
+
+$debug=1;
+push(@INC, ".", "@DUMPER_DIR@");
+
+use File::Copy;
+use IPC::Open3;
+use Sys::Hostname;
+
+
+open(DEBUG,">>@AMANDA_DBGDIR@/amgtar.$$.debug") if ($debug==1);
+
+$prefix='@prefix@';
+$prefix = $prefix;
+$exec_prefix="@exec_prefix@";
+$exec_prefix=$exec_prefix;
+$libexecdir="@libexecdir@";
+$libexecdir=$libexecdir;
+
+$USE_VERSION_SUFFIXES='@USE_VERSION_SUFFIXES@';
+$suf = '';
+if ( $USE_VERSION_SUFFIXES =~ /^yes$/i ) {
+ $suf='-@VERSION@';
+}
+
+$myhost = hostname;
+$myhost =~ s/\..*$//;
+$runtar="${libexecdir}/runtar${suf}";
+$gnulist = '@GNUTAR_LISTED_INCREMENTAL_DIR@';
+$gnutar = '@GNUTAR@';
+
+
+
+$max_level = 9;
+$index_line = 1;
+$index_xml = 0;
+$message_line = 1;
+$message_xml = 0;
+$record = 1;
+$include_file = 1;
+$include_list = 1;
+$exclude_file = 1;
+$exclude_list = 1;
+$collection = 0;
+
+#$user_support = "";
+#$group_support = "";
+
+#$user_selfcheck = "";
+#$group_selfcheck = "";
+
+#$user_estimate = "";
+#$group_estimate = "";
+
+#$user_estimate_parse = "";
+#$group_estimate_parse = "";
+
+$user_backup = "root";
+#$group_backup = "";
+
+#$user_backup_parse = "";
+#$group_backup_parse = "";
+
+#$user_index_from_output = "";
+#$group_index_from_output = "";
+
+#$user_index_from_image = "";
+#$group_index_from_image = "";
+
+#$user_restore = "";
+#$group_restore = "";
+
+#$user_print_command = "";
+#$group_print_command = "";
+
+$user_default = "amanda";
+$group_default = "amanda";
+
+
+sub command_support {
+ my($config, $host, $disk, $device, $level) = @_;
+ print "CONFIG YES\n";
+ print DEBUG "STDOUT: CONFIG YES\n" if ($debug == 1);
+ print "HOST YES\n";
+ print DEBUG "STDOUT: HOST YES\n" if ($debug == 1);
+ print "DISK YES\n";
+ print DEBUG "STDOUT: DISK YES\n" if ($debug == 1);
+ print "MAX-LEVEL 9\n";
+ print DEBUG "STDOUT: MAX-LEVEL 9\n" if ($debug == 1);
+ print "INDEX-LINE YES\n";
+ print DEBUG "STDOUT: INDEX-LINE YES\n" if ($debug == 1);
+ print "INDEX-XML NO\n";
+ print DEBUG "STDOUT: INDEX-XML NO\n" if ($debug == 1);
+ print "MESSAGE-LINE YES\n";
+ print DEBUG "STDOUT: MESSAGE-LINE YES\n" if ($debug == 1);
+ print "MESSAGE-XML NO\n";
+ print DEBUG "STDOUT: MESSAGE-XML NO\n" if ($debug == 1);
+ print "RECORD YES\n";
+ print DEBUG "STDOUT: RECORD YES\n" if ($debug == 1);
+ print "INCLUDE-FILE YES\n";
+ print "INCLUDE-LIST YES\n";
+ print "EXCLUDE-FILE YES\n";
+ print "EXCLUDE-LIST YES\n";
+ print "COLLECTION NO\n";
+}
+
+sub command_selfcheck {
+ my($config, $host, $disk, $device, $level) = @_;
+ print DEBUG "STDOUT: OK $disk\n" if ($debug == 1);
+ print DEBUG "STDOUT: OK $device\n" if ($debug == 1);
+ print "OK $disk\n";
+ print "OK $device\n";
+ #check binary
+ #check statefile
+ #check amdevice
+ #check property include/exclude
+}
+
+sub command_estimate {
+ my($config, $host, $disk, $device, $level) = @_;
+ my($listdir) = "$host$disk";
+ $listdir =~ s/\//_/g;
+ if($level == 0) {
+ open(GNULIST, ">${gnulist}/${listdir}_${level}.new") || die();
+ close(GNULIST) || die();
+ }
+ else {
+ my($prev_level) = $level - 1;
+ if (-f "${gnulist}/${listdir}_${prev_level}") {
+ copy("${gnulist}/${listdir}_${prev_level}", "${gnulist}/${listdir}_${level}.new");
+ } else {
+ open(GNULIST, ">${gnulist}/${listdir}_${level}.new") || die();
+ close(GNULIST) || die();
+ #print "ERROR file ${gnulist}/${listdir}_${level}.new doesn't exist\n";
+ }
+ }
+ command_estimate_opt_direct($config, $host, $disk, $device, $level, $listdir);
+}
+
+
+sub command_estimate_opt_direct {
+ my($config, $host, $disk, $device, $level, $listdir) = @_;
+ my($size) = -1;
+ my(@cmd) = ($runtar, $config, $gnutar, "--create", "--directory", $device, "--listed-incremental", "${gnulist}/${listdir}_${level}.new", "--sparse", "--one-file-system", "--ignore-failed-read", "--totals", "--file", "/dev/null", ".");
+ #my(@cmd) = ($gnutar, "--create", "--directory", $device, "--listed-incremental", "${gnulist}/${listdir}_${level}.new", "--sparse", "--one-file-system", "--ignore-failed-read", "--totals", "--file", "/dev/null", ".");
+ print DEBUG "cmd:" , join(" ", @cmd), "\n" if ($debug == 1);
+ open3(\*WTRFH, '>&STDOUT', \*ESTIMATE, @cmd);
+
+ $size = parse_estimate(ESTIMATE);
+ close(ESTIMATE);
+ output_size($size);
+ unlink "${gnulist}/${listdir}_${level}.new";
+ exit 0;
+}
+
+sub parse_estimate {
+ my($fh) = @_;
+ my($size) = -1;
+ while(<$fh>) {
+print DEBUG "READ 2: $_" if ($debug == 1);
+ if ($_ =~ /^Total bytes written: (\d*)/) {
+ $size = $1;
+ last;
+ }
+ }
+ return $size;
+}
+
+sub output_size {
+ my($size) = @_;
+ if($size == -1) {
+ print DEBUG "STDOUT A: -1 -1\n" if ($debug == 1);
+ print "-1 -1\n";
+ exit 2;
+ }
+ else {
+ my($ksize) = int $size / (1024);
+ $ksize=32 if ($ksize<32);
+ print DEBUG "STDOUT B: $ksize 1\n" if ($debug == 1);
+ print "$ksize 1\n";
+ }
+}
+
+sub command_backup {
+ my($config, $host, $disk, $device, $level) = @_;
+ my($listdir) = "$host$disk";
+ my($verbose) = "";
+ $listdir =~ s/\//_/g;
+
+print DEBUG "config =" . $config . "\n" if ($debug == 1);
+print DEBUG "host =" . $host . "\n" if ($debug == 1);
+print DEBUG "disk =" . $disk . "\n" if ($debug == 1);
+print DEBUG "device =" . $device . "\n" if ($debug == 1);
+print DEBUG "level =" . $level . "\n" if ($debug == 1);
+
+ if($level == 0) {
+ open(GNULIST, ">${gnulist}/${listdir}_${level}.new") || die();
+ close(GNULIST) || die();
+ }
+ else {
+ my($prev_level) = $level - 1;
+ copy("${gnulist}/${listdir}_${prev_level}",
+ "${gnulist}/${listdir}_${level}.new");
+ }
+
+ if(defined($opt_index)) {
+ $verbose = "--verbose";
+ }
+ my(@cmd) = ($runtar, $config, $gnutar, "--create", $verbose, "--directory", $device, "--listed-incremental", "${gnulist}/${listdir}_${level}.new", "--sparse", "--one-file-system", "--ignore-failed-read", "--totals", "--file", "-", ".");
+ #my(@cmd) = ($gnutar, "--create", $verbose, "--directory", $device, "--listed-incremental", "${gnulist}/${listdir}_${level}.new", "--sparse", "--one-file-system", "--ignore-failed-read", "--totals", "--file", "-", ".");
+
+ print DEBUG "cmd:" , join(" ", @cmd), "\n" if ($debug == 1);
+
+ open3(\*WTRFH, '>&STDOUT', \*INDEX, @cmd) || die();
+
+ if(defined($opt_index)) {
+ open(INDEXOUT, '>&=3') || die();
+ parse_backup(INDEX, STDERR, INDEXOUT);
+ close(INDEXOUT);
+ }
+ else {
+ parse_backup(INDEX, STDERR, undef);
+ }
+ close(INDEX);
+ close(WTRFH);
+
+ if(defined($opt_record)) {
+ rename "${gnulist}/${listdir}_${level}.new",
+ "${gnulist}/${listdir}_${level}";
+ }
+ else {
+ unlink "${gnulist}/${listdir}_${level}.new";
+ }
+ exit 0;
+}
+
+sub parse_backup {
+ my($fhin, $fhout, $indexout) = @_;
+ my($size) = -1;
+ while(<$fhin>) {
+print DEBUG "READ 3: $_" if ($debug == 1);
+ if ( /^\.\//) {
+ if(defined($indexout)) {
+ if(defined($opt_index)) {
+ s/^\.//;
+print DEBUG "INDEXOUT: $_" if ($debug == 1);
+ print $indexout $_;
+ }
+ }
+ }
+ else {
+ if (/^Total bytes written: (\d*)/) {
+ $size = $1;
+ $ksize = int ($size / 1024);
+ }
+ elsif(defined($fhout)) {
+ next if /: Directory is new$/;
+print DEBUG "FHOUT 2: $_" if ($debug == 1);
+ print $fhout $_;
+ }
+ }
+ }
+ if(defined($fhout)) {
+ if ($size == -1) {
+print DEBUG "FHOUT 4: $command -1 -1\n" if ($debug == 1);
+ print $fhout "$command -1 -1\n";
+ }
+ else {
+ my($ksize) = int ($size/1024);
+print DEBUG "FHOUT 5: sendbackup: size $ksize\n" if ($debug == 1);
+ print $fhout "sendbackup: size $ksize\n";
+print DEBUG "FHOUT 5: sendbackup: end\n" if ($debug == 1);
+ print $fhout "sendbackup: end\n";
+ }
+ }
+}
+
+sub command_index_from_output {
+ index_from_output(STDIN, STDOUT);
+ exit 0;
+}
+
+sub index_from_output {
+ my($fhin, $fhout) = @_;
+ my($size) = -1;
+ while(<$fhin>) {
+print DEBUG "READ 4: $_" if ($debug == 1);
+ next if /^Total bytes written:/;
+ next if !/^\.\//;
+ s/^\.//;
+print DEBUG "FHOUT 6: $_" if ($debug == 1);
+ print $fhout $_;
+ }
+}
+
+sub command_index_from_image {
+ my($config, $host, $disk, $device, $level) = @_;
+ open(INDEX, "$gnutar --list --file - |") || die();
+ index_from_output(INDEX, STDOUT);
+}
+
+sub command_restore {
+ my($config, $host, $disk, $device, $level) = @_;
+
+# $ARGV[0] = undef;
+ my(@cmd) = ($gnutar, "--numeric-owner", "-xpGvf", "-");
+ for($i=1;defined $ARGV[$i]; $i++) {
+ push @cmd, $ARGV[$i];
+ }
+ print DEBUG "cmd:" , join(" ", @cmd), "\n" if ($debug == 1);
+ exec @cmd;
+}
+
+sub command_print_command {
+}
+
+require "generic-dumper"