prepare to upload
[debian/amanda] / application-src / amsamba.pl
index f4654bdb413b01f75783bac875be6339d304dfba..d1f0bda72689c6c2e33da142ea208d0dc8e9ca1d 100644 (file)
@@ -102,6 +102,7 @@ sub new {
 #on exit:
 #  $self->{exclude}
 #  $self->{include}
+#  $self->{include_filename}
 sub validate_inexclude {
     my $self = shift;
 
@@ -128,22 +129,66 @@ sub validate_inexclude {
        }
        close(FF);
     }
-    if ($#{$self->{include_file}} >= 0) {
-       $self->{include} = [ @{$self->{include_file}} ];
-    }
-    foreach my $file (@{$self->{include_list}}) {
-       if (!open(FF, $file)) {
-           if ($self->{action} eq 'check' && !$self->{include_optional}) {
-               $self->print_to_server("Open of '$file' failed: $!",
-                                      $Amanda::Script_App::ERROR);
+
+    if ($self->{action} eq "restore" and defined $self->{'include_list'}) {
+       # put all include in a single file $self->{'include_filename'}
+       $self->{'include_filename'} = "$AMANDA_TMPDIR/amsamba.$$.include";
+       open INC_FILE, ">$self->{'include_filename'}";
+       if ($#{$self->{include_file}} >= 0) {
+           print INC_FILE "$self->{include_file}\n";
+       }
+       foreach my $file (@{$self->{include_list}}) {
+           if (!open(FF, $file)) {
+               if ($self->{action} eq 'check' && !$self->{include_optional}) {
+                   $self->print_to_server("Open of '$file' failed: $!",
+                                          $Amanda::Script_App::ERROR);
+               }
+               next;
            }
-           next;
+           while (<FF>) {
+               print INC_FILE;
+           }
+           close(FF);
        }
-       while (<FF>) {
-           chomp;
-           push @{$self->{include}}, $_;
+
+       # add command line include for amrestore
+       for(my $i=1;defined $ARGV[$i]; $i++) {
+           my $param = $ARGV[$i];
+           $param =~ /^(.*)$/;
+           print INC_FILE "$1\n";
+       }
+
+       close INC_FILE;
+    } else {
+       # put all include in $self->{'include'} they will be added on
+       # command line.
+       if ($#{$self->{include_file}} >= 0) {
+           $self->{include} = [ @{$self->{include_file}} ];
+       }
+
+       foreach my $file (@{$self->{include_list}}) {
+           if (!open(FF, $file)) {
+               if ($self->{action} eq 'check' && !$self->{include_optional}) {
+                   $self->print_to_server("Open of '$file' failed: $!",
+                                          $Amanda::Script_App::ERROR);
+               }
+               next;
+           }
+           while (<FF>) {
+               chomp;
+               push @{$self->{include}}, $_;
+           }
+           close(FF);
+       }
+
+       # add command line include for amrestore
+       if ($self->{action} eq "restore") {
+               for(my $i=1;defined $ARGV[$i]; $i++) {
+               my $param = $ARGV[$i];
+               $param =~ /^(.*)$/;
+               push @{$self->{include}}, $1;
+           }
        }
-       close(FF);
     }
 }
 
@@ -234,7 +279,7 @@ sub findpass {
             $diskname eq $self->{share} ||
             $diskname eq $self->{sambashare})) {
            if (defined $userpasswd && $userpasswd ne "") {
-               $self->{domain} = $domain if ($domain ne "");
+               $self->{domain} = $domain if defined $domain && $domain ne "";
                my ($username, $password) = split('%', $userpasswd, 2);
                $self->{username} = $username;
                $self->{password} = $password;
@@ -286,6 +331,10 @@ sub command_support {
 sub command_selfcheck {
     my $self = shift;
 
+    $self->print_to_server("disk " . quote_string($self->{disk}));
+
+    $self->print_to_server("amsamba version " . $Amanda::Constants::VERSION,
+                          $Amanda::Script_App::GOOD);
     #check binary
     if (!defined($self->{smbclient}) || $self->{smbclient} eq "") {
        $self->print_to_server(
@@ -299,7 +348,20 @@ sub command_selfcheck {
     elsif (! -x $self->{smbclient}) {
        $self->print_to_server("$self->{smbclient} is not executable",
                               $Amanda::Script_App::ERROR);
+    } else {
+       my @sv = `$self->{smbclient} --version`;
+       if ($? >> 8 == 0) {
+           $sv[0] =~ /^[^0-9]*(.*)$/;
+           my $sv = $1;
+           $self->print_to_server("amsamba smbclient-version $sv",
+                                  $Amanda::Script_App::GOOD);
+       } else {
+           $self->print_to_server(
+               "[Can't get " . $self->{smbclient} . " version]\n",
+               $Amanda::Script_App::ERROR);
+       }
     }
+
     $self->print_to_server("$self->{smbclient}",
                           $Amanda::Script_App::GOOD);
     if (!defined $self->{disk} || !defined $self->{device}) {
@@ -310,7 +372,6 @@ sub command_selfcheck {
     $self->validate_inexclude();
 
     print "OK " . $self->{share} . "\n";
-    print "OK " . $self->{disk} . "\n";
     print "OK " . $self->{device} . "\n";
     print "OK " . $self->{directory} . "\n" if defined $self->{directory};
 
@@ -692,14 +753,18 @@ sub command_restore {
        if (defined $self->{domain}) {
            push @cmd, "-W", $self->{domain};
        }
-       push @cmd, "-Tx", "-";
-       if ($#{$self->{include}} >= 0) {
-           push @cmd, @{$self->{include}};
-        }
-       for(my $i=1;defined $ARGV[$i]; $i++) {
-           my $param = $ARGV[$i];
-           $param =~ /^(.*)$/;
-           push @cmd, $1;
+       if (defined $self->{'include_filename'}) {
+           push @cmd, "-TFx", "-", "$self->{'include_filename'}";
+       } else {
+           push @cmd, "-Tx", "-";
+           if ($#{$self->{include}} >= 0) {
+               push @cmd, @{$self->{include}};
+            }
+           for(my $i=1;defined $ARGV[$i]; $i++) {
+               my $param = $ARGV[$i];
+               $param =~ /^(.*)$/;
+               push @cmd, $1;
+           }
        }
        my ($parent_rdr, $child_wtr);
        if (defined $self->{password}) {