#on exit:
# $self->{exclude}
# $self->{include}
+# $self->{include_filename}
sub validate_inexclude {
my $self = shift;
}
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);
}
}
$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;
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(
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}) {
$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};
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}) {