diff --git a/src/apps/protocols/cifs/mode/filescount.pm b/src/apps/protocols/cifs/mode/filescount.pm index 28ae338f7..88cbf1fc6 100644 --- a/src/apps/protocols/cifs/mode/filescount.pm +++ b/src/apps/protocols/cifs/mode/filescount.pm @@ -106,27 +106,28 @@ sub countFiles { # Cannot list we skip next; } - + # this loop is recursive, when we find a directory we add it to the list used by the for loop. + # max_depth is used to limit the depth we search. + # same behaviour as ftp and sftp protocol. foreach my $file (@$files) { - next if ($file->[0] != SMBC_FILE && $file->[0] != SMBC_DIR); + next if ($file->[0] != SMBC_FILE && $file->[0] != SMBC_DIR); next if ($file->[1] eq '.' || $file->[1] eq '..'); my $name = $dir . '/' . $file->[1]; - - if (defined($self->{option_results}->{filter_file}) && $self->{option_results}->{filter_file} ne '' && - $name !~ /$self->{option_results}->{filter_file}/) { - $self->{output}->output_add(long_msg => sprintf("skipping '%s'", $name), debug => 1); - next; - } if ($file->[0] == SMBC_DIR) { if (defined($self->{option_results}->{max_depth}) && $level + 1 <= $self->{option_results}->{max_depth}) { push @$list, { name => $name, level => $level + 1 }; } - } else { - $self->{output}->output_add(long_msg => sprintf("Match '%s'", $name)); - $self->{global}->{detected}++; + next; + } elsif (!centreon::plugins::misc::is_empty($self->{option_results}->{filter_file}) + # if this is a file check the filter_file regex + && $name !~ /$self->{option_results}->{filter_file}/) { + $self->{output}->output_add(long_msg => sprintf("skipping '%s'", $name), debug => 1); + next; } + $self->{output}->output_add(long_msg => sprintf("Match '%s'", $name)); + $self->{global}->{detected}++; } } } diff --git a/src/apps/protocols/ftp/mode/filescount.pm b/src/apps/protocols/ftp/mode/filescount.pm index 3345814fb..8c186f9aa 100644 --- a/src/apps/protocols/ftp/mode/filescount.pm +++ b/src/apps/protocols/ftp/mode/filescount.pm @@ -89,7 +89,7 @@ sub run { my $exit_code = $self->{perfdata}->threshold_check(value => $count, threshold => [ { label => 'critical', exit_litteral => 'critical' }, { label => 'warning', exit_litteral => 'warning' } ]); - + $self->{output}->output_add(severity => $exit_code, short_msg => sprintf("Number of files : %s", $count)); $self->{output}->perfdata_add(label => 'files', @@ -105,7 +105,7 @@ sub countFiles { my ($self) = @_; my @listings; my $count = 0; - + if (!defined($self->{option_results}->{directory}) || scalar(@{$self->{option_results}->{directory}}) == 0) { push @listings, [ { name => '.', level => 0 } ]; } else { @@ -121,36 +121,39 @@ sub countFiles { my $hash = pop @$list; my $dir = $hash->{name}; my $level = $hash->{level}; - + if (!(@files = apps::protocols::ftp::lib::ftp::execute($self, command => $map_commands{ls}->{$self->{ssl_or_not}}->{name}, command_args => [$dir]))) { # Cannot list we skip next; } - + # this loop is recursive, when we find a directory we add it to the list used by the for loop. + # max_depth is used to limit the depth we search. + # same behaviour as cifs(samba) and sftp protocol. foreach my $line (@files) { # IIS: 05-13-15 10:59AM 1184403 test.jpg next if ($line !~ /(\S+)\s+\S+\s+\S+\s+\S+\s+\S+\s+\S+\s+\S+\s+\S+\s+(.*)/ && - $line !~ /^\s*\S+\s*\S+\s*(\S+)\s+(.*)/); + $line !~ /^\s*\S+\s*\S+\s*(\S+)\s+(.*)/); my ($rights, $filename) = ($1, $2); my $bname = basename($filename); next if ($bname eq '.' || $bname eq '..'); my $name = $dir . '/' . $bname; - - if (defined($self->{option_results}->{filter_file}) && $self->{option_results}->{filter_file} ne '' && - $name !~ /$self->{option_results}->{filter_file}/) { + + if ($rights =~ /^(d|