Imported Upstream version 2.5.0
[debian/amanda] / dumper-src / generic-dumper.pl.in
diff --git a/dumper-src/generic-dumper.pl.in b/dumper-src/generic-dumper.pl.in
new file mode 100644 (file)
index 0000000..ceb2235
--- /dev/null
@@ -0,0 +1,386 @@
+
+
+$command = $ARGV[0];
+if ($command eq "privilege") {
+   wrapper_privilege();
+}
+elsif ($command eq "support") {
+   wrapper_support();
+}
+elsif ($command eq "selfcheck") {
+   wrapper_selfcheck();
+}
+elsif ($command eq "estimate") {
+   wrapper_estimate();
+}
+elsif ($command eq "estimate-parse") {
+   wrapper_estimate_parse();
+}
+elsif ($command eq "backup") {
+   wrapper_backup();
+}
+elsif ($command eq "backup-parse") {
+   wrapper_backup_parse();
+}
+elsif ($command eq "index-from-output") {
+   wrapper_index_from_output();
+}
+elsif ($command eq "index-from-image") {
+   wrapper_index_from_image();
+}
+elsif ($command eq "restore") {
+   wrapper_restore();
+}
+elsif ($command eq "print-command") {
+   wrapper_print_command();
+}
+else {
+   printf STDERR "Unknown command `$command'.\n";
+   exit 1;
+}
+
+
+sub wrapper_privilege() {
+   if(defined(&command_support)) {
+      command_privilege();
+      exit 0;
+   }
+   my($subcommand) = $ARGV[1];
+   if ($subcommand eq "support") {
+      wrapper_print_privilege($subcommand);
+   }
+   elsif ($subcommand eq "selfcheck") {
+      wrapper_print_privilege($subcommand);
+   }
+   elsif ($subcommand eq "estimate") {
+      wrapper_print_privilege($subcommand);
+   }
+   elsif ($subcommand eq "estimate-parse") {
+      wrapper_print_privilege($subcommand);
+   }
+   elsif ($subcommand eq "backup") {
+      wrapper_print_privilege($subcommand);
+   }
+   elsif ($subcommand eq "backup-parse") {
+      wrapper_print_privilege($subcommand);
+   }
+   elsif ($subcommand eq "index-from-output") {
+      wrapper_print_privilege($subcommand);
+   }
+   elsif ($subcommand eq "index-from-image") {
+      wrapper_print_privilege($subcommand);
+   }
+   elsif ($subcommand eq "restore") {
+      wrapper_print_privilege($subcommand);
+   }
+   elsif ($subcommand eq "print-command") {
+      wrapper_print_privilege($subcommand);
+   }
+   else {
+      printf STDERR "Unknown command `$subcommand'.\n";
+      exit 1;
+   }
+   if(defined($user_default) && defined($group_default)) {
+      print "USER $user_default\n";
+      print "GROUP $group_default\n";
+      exit 0;
+   }
+   exit 0;
+}
+
+
+sub wrapper_print_privilege {
+   my($command) = @_;
+   $command =~ s/-/_/g;
+   my($var_user) = "user_$command";
+   my($var_group) = "group_$command";
+   if(defined($$var_user) && defined($$var_group)) {
+      print "USER $$var_user\n";
+      print "GROUP $$var_group\n";
+      exit 0;
+   }
+   elsif(defined($$var_user) && !defined($$var_group)) {
+      print STDERR "\$$var_user defined but \$$var_group not defined\n";
+      exit 1;
+   }
+   elsif(!defined($$var_user) && defined($$var_group)) {
+      print STDERR "\$$var_group defined but \$$var_user not defined\n";
+      exit 1;
+   }
+}
+
+sub wrapper_support() {
+   if(defined(&command_support)) {
+      command_support();
+      exit 0;
+   }
+   my($subcommand) = $ARGV[1];
+   if ($subcommand eq "level-incrementals") {
+      if (defined($level_incrementals)) {
+         print "$level_incrementals\n";
+      }
+      else {
+         print "1\n";
+      }
+      exit 0;
+   }
+   elsif ($subcommand eq "index") {
+      my($index_generation);
+      foreach $index_generation (@index_generation) {
+         if( $index_generation eq "direct" ||
+             $index_generation eq "parse"  ||
+             $index_generation eq "output" ||
+             $index_generation eq "image") {
+                print "$index_generation\n";
+         }
+         else {
+            print "unknow indexing method '$index_generation'\n";
+         }
+      }
+   exit 0;
+   }
+   elsif ($subcommand eq "parse-estimate") {
+      my($parse_estimate);
+      foreach $parse_estimate (@parse_estimate) {
+         if( $parse_estimate eq "direct" ||
+             $parse_estimate eq "parse" ) {
+            print "$parse_estimate\n";
+         }
+         else {
+            print "unknow parse-estimate method '$parse_estimate'\n";
+         }
+      }
+   exit 0;
+   }
+   elsif ($subcommand eq "parse-backup") {
+      print "direct\n" if (defined($parse_backup_direct));
+      print "parse\n"  if (defined($parse_backup_parse));
+      my($parse_backup);
+      foreach $parse_backup (@parse_backup) {
+         if( $parse_backup eq "direct" ||
+             $parse_backup eq "parse" ) {
+            print "$parse_backup\n";
+         }
+         else {
+            print "unknow parse-backup method '$parse_backup'\n";
+         }
+      }
+      exit 0;
+   }
+   else {
+      exit 1;
+   }
+}
+
+sub wrapper_selfcheck() {
+   if(defined(&command_selfcheck)) {
+      command_selfcheck();
+   }
+   else {
+      exit 1;
+   }
+}
+
+sub wrapper_estimate() {
+   my($estimate_type) = $ARGV[1];
+   my($option);
+   my($estimate_type_is_ok) = 0;
+   my($backups_type);
+   foreach $backups_type (@backup_type) {
+      $estimate_type_is_ok = 1 if($estimate_type eq $backups_type);
+   }
+   if($estimate_type_is_ok == 0) {
+      print "estimate type `$estimate_type' not supported.\n";
+      exit 3;
+   }
+   $option = 3 if ($estimate_type eq "full");
+   $option = 4 if ($estimate_type eq "level");
+   $option = 4 if ($estimate_type eq "diff");
+   parse_options($option);
+   if($option_estimate_direct + $option_estimate_parse > 1) {
+      print "Can't define both `estimate-direct' and `estimate-parse'.\n";
+      exit 5;
+   }
+   elsif($option_estimate_direct + $option_estimate_parse == 0) {
+      print "You must have the option `estimate-direct' or `estimate-parse'.\n";
+      exit 5;
+   }
+   if($estimate_type eq "full") {
+      command_estimate_full($ARGV[2]);
+   }
+    elsif($estimate_type eq "level") {
+      command_estimate_level($ARGV[2], $ARGV[3]);
+   }
+   elsif($estimate_type eq "diff") {
+      command_estimate_diff($ARGV[2], $ARGV[3]);
+   }
+}
+
+sub wrapper_estimate_parse() {
+   if(defined(&command_estimate_parse)) {
+      command_estimate_parse();
+   }
+   else {
+      printf STDERR "`estimate-parse' is not supported.\n";
+      exit 1;
+   }
+}
+
+sub wrapper_backup() {
+   my($backup_type) = $ARGV[1];
+   my($option);
+   my($backup_type_is_ok) = 0;
+   my($backups_type);
+   foreach $backups_type (@backup_type) {
+      $backup_type_is_ok = 1 if($backup_type eq $backups_type);
+   }
+   if($backup_type_is_ok == 0) {
+      print "backup type `$backup_type' not supported.\n";
+      exit 3;
+   }
+   $option = 3 if ($backup_type eq "full");
+   $option = 4 if ($backup_type eq "level");
+   $option = 4 if ($backup_type eq "diff");
+   parse_options($option);
+   if($option_backup_direct + $option_backup_parse > 1) {
+      print "Can't define both `backup-direct' and `backup-parse'.\n";
+      exit 5;
+   }
+   elsif($option_backup_direct + $option_backup_parse == 0) {
+      print "You must have the option `backup-direct' or `backup-parse'.\n";
+      exit 5;
+   }
+   if($backup_type eq "full") {
+      command_backup_full($ARGV[2]);
+   }
+   elsif($backup_type eq "level") {
+      command_backup_level($ARGV[2], $ARGV[3]);
+   }
+   elsif($backup_type eq "diff") {
+      command_backup_diff($ARGV[2], $ARGV[3]);
+   }
+}
+
+sub wrapper_backup_parse() {
+   if(defined(&command_backup_parse)) {
+      command_backup_parse();
+   }
+   else {
+      printf STDERR "`backup-parse' is not supported.\n";
+      exit 1;
+   }
+}
+
+sub wrapper_index_from_output() {
+   if(defined(&command_index_from_output)) {
+      command_index_from_output();
+   }
+   else {
+      printf STDERR "`index-from-output' is not supported.\n";
+      exit 1;
+   }
+}
+
+sub wrapper_index_from_image() {
+   if(defined(&command_index_from_image)) {
+      command_index_from_image();
+   }
+   else {
+      printf STDERR "command `index-from-image' is not supported.\n";
+      exit 1;
+   }
+}
+
+sub wrapper_restore() {
+   if(defined(&command_restore)) {
+      command_restore();
+   }
+   else {
+     printf STDERR "`restore' is not supported.\n";
+     exit 1;
+   }
+}
+
+sub wrapper_print_command() {
+   if(defined(&command_print_command)) {
+      command_print_command();
+   }
+   else {
+      printf STDERR "`print-command' is not supported.\n";
+      exit 1;
+   }
+}
+
+
+sub parse_options() {
+   my($no_option) = @_;
+   my($options, @options, $option, $name, $option_name, $value);
+
+   while($no_option <= $#ARGV) {
+      $options = $ARGV[${no_option}];
+      @options = split (/;/,$options);
+      foreach $option (@options) {
+         if( $option =~ /=/ ) {
+            ($name,$value) = split(/=/,$option);
+         }
+         else {
+            $name  = $option;
+            $value = 1;
+         }
+         $option_name = "option_$name";
+         $option_name =~ s/\-/\_/g;
+        $$option_name = $value;
+      }
+      $no_option++;
+   }
+}
+
+sub check_file {
+   my($filename, $mode) = @_;
+
+   stat($filename);
+
+   if($mode eq "e") {
+      if( -e _ ) {
+         print "OK $filename exists\n";
+      }
+      else {
+         print "ERROR [can not find $filename]\n";
+      }
+   }
+   elsif($mode eq "x") {
+      if( -x _ ) {
+         print "OK $filename executable\n";
+      }
+      else {
+         print "ERROR [can not execute $filename]\n";
+      }
+   }
+   elsif($mode eq "r") {
+      if( -r _ ) {
+         print "OK $filename readable\n";
+      }
+      else {
+         print "ERROR [can not read $filename]\n";
+      }
+   }
+   elsif($mode eq "w") {
+      if( -w _ ) {
+         print "OK $filename writable\n";
+      }
+      else {
+         print "ERROR [can not write $filename]\n";
+      }
+   }
+   else {
+      print "ERROR [check_file: unknow mode $mode]\n";
+   }
+}
+
+sub check_dir {
+}
+
+sub check_suid {
+}
+
+1;