--- /dev/null
+
+
+$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;