fix(core): code evaluation tested with values - not permissive (#3237)

This commit is contained in:
qgarnier 2021-11-09 16:23:36 +01:00 committed by GitHub
parent f17c9f9341
commit 5764b0457c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
23 changed files with 230 additions and 419 deletions

View File

@ -27,13 +27,8 @@ use warnings;
sub custom_status_threshold { sub custom_status_threshold {
my ($self, %options) = @_; my ($self, %options) = @_;
my $status = 'ok'; my $status = 'ok';
my $message;
eval {
local $SIG{__WARN__} = sub { $message = $_[0]; };
local $SIG{__DIE__} = sub { $message = $_[0]; };
# To exclude some OK # To exclude some OK
if (defined($self->{instance_mode}->{option_results}->{ok_status}) && $self->{instance_mode}->{option_results}->{ok_status} ne '' && if (defined($self->{instance_mode}->{option_results}->{ok_status}) && $self->{instance_mode}->{option_results}->{ok_status} ne '' &&
$self->eval(value => $self->{instance_mode}->{option_results}->{ok_status})) { $self->eval(value => $self->{instance_mode}->{option_results}->{ok_status})) {
@ -45,10 +40,6 @@ sub custom_status_threshold {
$self->eval(value => $self->{instance_mode}->{option_results}->{warning_status})) { $self->eval(value => $self->{instance_mode}->{option_results}->{warning_status})) {
$status = 'warning'; $status = 'warning';
} }
};
if (defined($message)) {
$self->{output}->output_add(long_msg => 'filter status issue: ' . $message);
}
return $status; return $status;
} }

View File

@ -60,12 +60,7 @@ sub custom_hosts_perfdata {
sub custom_hosts_threshold { sub custom_hosts_threshold {
my ($self, %options) = @_; my ($self, %options) = @_;
my $message;
my $status = 'ok'; my $status = 'ok';
eval {
local $SIG{__WARN__} = sub { $message = $_[0]; };
local $SIG{__DIE__} = sub { $message = $_[0]; };
if (defined($self->{instance_mode}->{option_results}->{critical_total}) && $self->{instance_mode}->{option_results}->{critical_total} ne '' && if (defined($self->{instance_mode}->{option_results}->{critical_total}) && $self->{instance_mode}->{option_results}->{critical_total} ne '' &&
$self->eval(value => $self->{instance_mode}->{option_results}->{critical_total})) { $self->eval(value => $self->{instance_mode}->{option_results}->{critical_total})) {
$status = 'critical'; $status = 'critical';
@ -73,13 +68,8 @@ sub custom_hosts_threshold {
$self->eval(value => $self->{instance_mode}->{option_results}->{warning_total})) { $self->eval(value => $self->{instance_mode}->{option_results}->{warning_total})) {
$status = 'warning'; $status = 'warning';
} }
};
if (defined($message)) {
$self->{output}->output_add(long_msg => 'filter status issue: ' . $message);
}
return $status; return $status;
} }
sub custom_services_calc { sub custom_services_calc {
@ -94,8 +84,8 @@ sub custom_services_calc {
sub custom_services_output { sub custom_services_output {
my ($self, %options) = @_; my ($self, %options) = @_;
my $msg = '';
$msg .= "[ok:$self->{result_values}->{ok_total}][warning:$self->{result_values}->{warning_total}][critical:$self->{result_values}->{critical_total}][unknown:$self->{result_values}->{unknown_total}]\n"; my $msg .= "[ok:$self->{result_values}->{ok_total}][warning:$self->{result_values}->{warning_total}][critical:$self->{result_values}->{critical_total}][unknown:$self->{result_values}->{unknown_total}]\n";
return $msg return $msg
} }
@ -114,13 +104,7 @@ sub custom_services_perfdata {
sub custom_services_threshold { sub custom_services_threshold {
my ($self, %options) = @_; my ($self, %options) = @_;
my $message;
my $status = 'ok'; my $status = 'ok';
eval {
local $SIG{__WARN__} = sub { $message = $_[0]; };
local $SIG{__DIE__} = sub { $message = $_[0]; };
if (defined($self->{instance_mode}->{option_results}->{critical_total}) && $self->{instance_mode}->{option_results}->{critical_total} ne '' && if (defined($self->{instance_mode}->{option_results}->{critical_total}) && $self->{instance_mode}->{option_results}->{critical_total} ne '' &&
$self->eval(value => $self->{instance_mode}->{option_results}->{critical_total})) { $self->eval(value => $self->{instance_mode}->{option_results}->{critical_total})) {
$status = 'critical'; $status = 'critical';
@ -128,13 +112,8 @@ sub custom_services_threshold {
$self->eval(value => $self->{instance_mode}->{option_results}->{warning_total})) { $self->eval(value => $self->{instance_mode}->{option_results}->{warning_total})) {
$status = 'warning'; $status = 'warning';
} }
};
if (defined($message)) {
$self->{output}->output_add(long_msg => 'filter status issue: ' . $message);
}
return $status; return $status;
} }
sub custom_groups_calc { sub custom_groups_calc {
@ -220,13 +199,8 @@ sub custom_groups_perfdata {
sub custom_groups_threshold { sub custom_groups_threshold {
my ($self, %options) = @_; my ($self, %options) = @_;
my $status = 'ok'; my $status = 'ok';
my $message;
eval {
local $SIG{__WARN__} = sub { $message = $_[0]; };
local $SIG{__DIE__} = sub { $message = $_[0]; };
if (defined($self->{instance_mode}->{option_results}->{critical_groups}) && $self->{instance_mode}->{option_results}->{critical_groups} ne '' && if (defined($self->{instance_mode}->{option_results}->{critical_groups}) && $self->{instance_mode}->{option_results}->{critical_groups} ne '' &&
$self->eval(value => $self->{instance_mode}->{option_results}->{critical_groups})) { $self->eval(value => $self->{instance_mode}->{option_results}->{critical_groups})) {
$status = 'critical'; $status = 'critical';
@ -234,10 +208,6 @@ sub custom_groups_threshold {
$self->eval(value => $self->{instance_mode}->{option_results}->{warning_groups})) { $self->eval(value => $self->{instance_mode}->{option_results}->{warning_groups})) {
$status = 'warning'; $status = 'warning';
} }
};
if (defined($message)) {
$self->{output}->output_add(long_msg => 'filter status issue: ' . $message);
}
return $status; return $status;
} }
@ -245,8 +215,7 @@ sub custom_groups_threshold {
sub set_counters { sub set_counters {
my ($self, %options) = @_; my ($self, %options) = @_;
$self->{maps_counters_type} = [ $self->{maps_counters_type} = [];
];
$self->{maps_counters}->{totalservice} = [ $self->{maps_counters}->{totalservice} = [
{ label => 'total-service', threshold => 0, set => { { label => 'total-service', threshold => 0, set => {

View File

@ -31,13 +31,8 @@ use Digest::MD5 qw(md5_hex);
sub custom_select_threshold { sub custom_select_threshold {
my ($self, %options) = @_; my ($self, %options) = @_;
my $status = 'ok'; my $status = 'ok';
my $message;
eval {
local $SIG{__WARN__} = sub { $message = $_[0]; };
local $SIG{__DIE__} = sub { $message = $_[0]; };
our $expand = $self->{result_values}->{expand}; our $expand = $self->{result_values}->{expand};
if (defined($self->{result_values}->{config}->{critical}) && $self->{result_values}->{config}->{critical} && if (defined($self->{result_values}->{config}->{critical}) && $self->{result_values}->{config}->{critical} &&
$self->{instance_mode}->{safe}->reval($self->{result_values}->{config}->{critical})) { $self->{instance_mode}->{safe}->reval($self->{result_values}->{config}->{critical})) {
@ -53,10 +48,6 @@ sub custom_select_threshold {
$self->{output}->add_option_msg(short_msg => 'Unsafe code evaluation: ' . $@); $self->{output}->add_option_msg(short_msg => 'Unsafe code evaluation: ' . $@);
$self->{output}->option_exit(); $self->{output}->option_exit();
} }
};
if (defined($message)) {
$self->{output}->output_add(long_msg => 'filter status issue: ' . $message);
}
$self->{result_values}->{last_status} = $status; $self->{result_values}->{last_status} = $status;
return $status; return $status;

View File

@ -164,11 +164,6 @@ sub connector_response_status {
# Check response # Check response
my $status = 'ok'; my $status = 'ok';
my $message;
eval {
local $SIG{__WARN__} = sub { $message = $_[0]; };
local $SIG{__DIE__} = sub { $message = $_[0]; };
if (defined($self->{critical_connector_status}) && $self->{critical_connector_status} ne '' && if (defined($self->{critical_connector_status}) && $self->{critical_connector_status} ne '' &&
$self->{output}->test_eval(test => $self->{critical_connector_status}, values => $self->{result})) { $self->{output}->test_eval(test => $self->{critical_connector_status}, values => $self->{result})) {
$status = 'critical'; $status = 'critical';
@ -179,11 +174,6 @@ sub connector_response_status {
$self->{output}->test_eval(test => $self->{unknown_connector_status}, values => $self->{result})) { $self->{output}->test_eval(test => $self->{unknown_connector_status}, values => $self->{result})) {
$status = 'unknown'; $status = 'unknown';
} }
};
if (defined($message)) {
$self->{output}->add_option_msg(short_msg => 'filter connector status issue: ' . $message);
$self->{output}->option_exit();
}
if (!$self->{output}->is_status(value => $status, compare => 'ok', litteral => 1)) { if (!$self->{output}->is_status(value => $status, compare => 'ok', litteral => 1)) {
$self->{output}->output_add(long_msg => $self->{result}->{extra_message}, debug => 1); $self->{output}->output_add(long_msg => $self->{result}->{extra_message}, debug => 1);

View File

@ -29,13 +29,8 @@ use centreon::plugins::statefile;
sub custom_status_threshold { sub custom_status_threshold {
my ($self, %options) = @_; my ($self, %options) = @_;
my $status = 'ok'; my $status = 'ok';
my $message;
eval {
local $SIG{__WARN__} = sub { $message = $_[0]; };
local $SIG{__DIE__} = sub { $message = $_[0]; };
if (defined($self->{instance_mode}->{option_results}->{'critical-' . $self->{label}}) && $self->{instance_mode}->{option_results}->{'critical-' . $self->{label}} ne '' && if (defined($self->{instance_mode}->{option_results}->{'critical-' . $self->{label}}) && $self->{instance_mode}->{option_results}->{'critical-' . $self->{label}} ne '' &&
$self->eval(value => $self->{instance_mode}->{option_results}->{'critical-' . $self->{label}})) { $self->eval(value => $self->{instance_mode}->{option_results}->{'critical-' . $self->{label}})) {
$self->{instance_mode}->{dc_critical}++; $self->{instance_mode}->{dc_critical}++;
@ -45,10 +40,6 @@ sub custom_status_threshold {
$self->{instance_mode}->{dc_warning}++; $self->{instance_mode}->{dc_warning}++;
$status = 'warning'; $status = 'warning';
} }
};
if (defined($message)) {
$self->{output}->output_add(long_msg => 'filter status issue: ' . $message);
}
return $status; return $status;
} }

View File

@ -29,13 +29,8 @@ use centreon::plugins::statefile;
sub custom_status_threshold { sub custom_status_threshold {
my ($self, %options) = @_; my ($self, %options) = @_;
my $status = 'ok'; my $status = 'ok';
my $message;
eval {
local $SIG{__WARN__} = sub { $message = $_[0]; };
local $SIG{__DIE__} = sub { $message = $_[0]; };
if (defined($self->{instance_mode}->{option_results}->{'critical-' . $self->{label}}) && $self->{instance_mode}->{option_results}->{'critical-' . $self->{label}} ne '' && if (defined($self->{instance_mode}->{option_results}->{'critical-' . $self->{label}}) && $self->{instance_mode}->{option_results}->{'critical-' . $self->{label}} ne '' &&
$self->eval(value => $self->{instance_mode}->{option_results}->{'critical-' . $self->{label}})) { $self->eval(value => $self->{instance_mode}->{option_results}->{'critical-' . $self->{label}})) {
$self->{instance_mode}->{host_critical}++; $self->{instance_mode}->{host_critical}++;
@ -45,10 +40,6 @@ sub custom_status_threshold {
$self->{instance_mode}->{host_warning}++; $self->{instance_mode}->{host_warning}++;
$status = 'warning'; $status = 'warning';
} }
};
if (defined($message)) {
$self->{output}->output_add(long_msg => 'filter status issue: ' . $message);
}
return $status; return $status;
} }

View File

@ -75,11 +75,7 @@ sub check {
centreon::plugins::misc::trim($3), centreon::plugins::misc::trim($4)); centreon::plugins::misc::trim($3), centreon::plugins::misc::trim($4));
$checked++; $checked++;
my ($status, $message) = ('ok'); my $status = 'ok';
eval {
local $SIG{__WARN__} = sub { $message = $_[0]; };
local $SIG{__DIE__} = sub { $message = $_[0]; };
if (defined($self->{option_results}->{critical}) && $self->{option_results}->{critical} ne '' && if (defined($self->{option_results}->{critical}) && $self->{option_results}->{critical} ne '' &&
$self->{output}->test_eval(test => $self->{option_results}->{critical}, values => $self->{data})) { $self->{output}->test_eval(test => $self->{option_results}->{critical}, values => $self->{data})) {
$status = 'critical'; $status = 'critical';
@ -87,10 +83,7 @@ sub check {
$self->{output}->test_eval(test => $self->{option_results}->{warning}, values => $self->{data})) { $self->{output}->test_eval(test => $self->{option_results}->{warning}, values => $self->{data})) {
$status = 'warning'; $status = 'warning';
} }
};
if (defined($message)) {
$self->{output}->output_add(long_msg => 'filter status issue: ' . $message);
}
if (!$self->{output}->is_status(value => $status, compare => 'ok', litteral => 1)) { if (!$self->{output}->is_status(value => $status, compare => 'ok', litteral => 1)) {
$self->{output}->output_add( $self->{output}->output_add(
severity => $status, severity => $status,

View File

@ -73,11 +73,7 @@ sub check {
$checked++; $checked++;
my ($status, $message) = ('ok'); my $status = 'ok';
eval {
local $SIG{__WARN__} = sub { $message = $_[0]; };
local $SIG{__DIE__} = sub { $message = $_[0]; };
if (defined($self->{option_results}->{critical}) && $self->{option_results}->{critical} ne '' && if (defined($self->{option_results}->{critical}) && $self->{option_results}->{critical} ne '' &&
$self->{output}->test_eval(test => $self->{option_results}->{critical}, values => $self->{data})) { $self->{output}->test_eval(test => $self->{option_results}->{critical}, values => $self->{data})) {
$status = 'critical'; $status = 'critical';
@ -85,10 +81,7 @@ sub check {
$self->{output}->test_eval(test => $self->{option_results}->{warning}, values => $self->{data})) { $self->{output}->test_eval(test => $self->{option_results}->{warning}, values => $self->{data})) {
$status = 'warning'; $status = 'warning';
} }
};
if (defined($message)) {
$self->{output}->output_add(long_msg => 'filter status issue: ' . $message);
}
if (!$self->{output}->is_status(value => $status, compare => 'ok', litteral => 1)) { if (!$self->{output}->is_status(value => $status, compare => 'ok', litteral => 1)) {
$self->{output}->output_add( $self->{output}->output_add(
severity => $status, severity => $status,

View File

@ -75,11 +75,7 @@ sub check {
) )
); );
my ($status, $message) = ('ok'); my $status = 'ok';
eval {
local $SIG{__WARN__} = sub { $message = $_[0]; };
local $SIG{__DIE__} = sub { $message = $_[0]; };
if (defined($self->{option_results}->{critical}) && $self->{option_results}->{critical} ne '' && if (defined($self->{option_results}->{critical}) && $self->{option_results}->{critical} ne '' &&
$self->{output}->test_eval(test => $self->{option_results}->{critical}, values => $self->{data})) { $self->{output}->test_eval(test => $self->{option_results}->{critical}, values => $self->{data})) {
$status = 'critical'; $status = 'critical';
@ -87,10 +83,7 @@ sub check {
$self->{output}->test_eval(test => $self->{option_results}->{warning}, values => $self->{data})) { $self->{output}->test_eval(test => $self->{option_results}->{warning}, values => $self->{data})) {
$status = 'warning'; $status = 'warning';
} }
};
if (defined($message)) {
$self->{output}->output_add(long_msg => 'filter status issue: ' . $message);
}
if (!$self->{output}->is_status(value => $status, compare => 'ok', litteral => 1)) { if (!$self->{output}->is_status(value => $status, compare => 'ok', litteral => 1)) {
$self->{output}->output_add( $self->{output}->output_add(
severity => $status, severity => $status,

View File

@ -82,11 +82,7 @@ sub check {
$checked++; $checked++;
my ($status, $message) = ('ok'); my $status = 'ok'
eval {
local $SIG{__WARN__} = sub { $message = $_[0]; };
local $SIG{__DIE__} = sub { $message = $_[0]; };
if (defined($self->{option_results}->{critical}) && $self->{option_results}->{critical} ne '' && if (defined($self->{option_results}->{critical}) && $self->{option_results}->{critical} ne '' &&
$self->{output}->test_eval(test => $self->{option_results}->{critical}, values => $self->{data})) { $self->{output}->test_eval(test => $self->{option_results}->{critical}, values => $self->{data})) {
$status = 'critical'; $status = 'critical';
@ -94,10 +90,7 @@ sub check {
$self->{output}->test_eval(test => $self->{option_results}->{warning}, values => $self->{data})) { $self->{output}->test_eval(test => $self->{option_results}->{warning}, values => $self->{data})) {
$status = 'warning'; $status = 'warning';
} }
};
if (defined($message)) {
$self->{output}->output_add(long_msg => 'filter status issue: ' . $message);
}
if (!$self->{output}->is_status(value => $status, compare => 'ok', litteral => 1)) { if (!$self->{output}->is_status(value => $status, compare => 'ok', litteral => 1)) {
$self->{output}->output_add( $self->{output}->output_add(
severity => $status, severity => $status,

View File

@ -74,11 +74,7 @@ sub check {
centreon::plugins::misc::trim($4), centreon::plugins::misc::trim($5)); centreon::plugins::misc::trim($4), centreon::plugins::misc::trim($5));
$checked++; $checked++;
my ($status, $message) = ('ok'); my $status = 'ok';
eval {
local $SIG{__WARN__} = sub { $message = $_[0]; };
local $SIG{__DIE__} = sub { $message = $_[0]; };
if (defined($self->{option_results}->{critical}) && $self->{option_results}->{critical} ne '' && if (defined($self->{option_results}->{critical}) && $self->{option_results}->{critical} ne '' &&
$self->{output}->test_eval(test => $self->{option_results}->{critical}, values => $self->{data})) { $self->{output}->test_eval(test => $self->{option_results}->{critical}, values => $self->{data})) {
$status = 'critical'; $status = 'critical';
@ -86,10 +82,7 @@ sub check {
$self->{output}->test_eval(test => $self->{option_results}->{warning}, values => $self->{data})) { $self->{output}->test_eval(test => $self->{option_results}->{warning}, values => $self->{data})) {
$status = 'warning'; $status = 'warning';
} }
};
if (defined($message)) {
$self->{output}->output_add(long_msg => 'filter status issue: ' . $message);
}
if (!$self->{output}->is_status(value => $status, compare => 'ok', litteral => 1)) { if (!$self->{output}->is_status(value => $status, compare => 'ok', litteral => 1)) {
$self->{output}->output_add( $self->{output}->output_add(
severity => $status, severity => $status,

View File

@ -68,11 +68,7 @@ sub check {
$checked++; $checked++;
my ($status, $message) = ('ok'); my $status = 'ok';
eval {
local $SIG{__WARN__} = sub { $message = $_[0]; };
local $SIG{__DIE__} = sub { $message = $_[0]; };
if (defined($self->{option_results}->{critical}) && $self->{option_results}->{critical} ne '' && if (defined($self->{option_results}->{critical}) && $self->{option_results}->{critical} ne '' &&
$self->{output}->test_eval(test => $self->{option_results}->{critical}, values => $self->{data})) { $self->{output}->test_eval(test => $self->{option_results}->{critical}, values => $self->{data})) {
$status = 'critical'; $status = 'critical';
@ -80,10 +76,7 @@ sub check {
$self->{output}->test_eval(test => $self->{option_results}->{warning}, values => $self->{data})) { $self->{output}->test_eval(test => $self->{option_results}->{warning}, values => $self->{data})) {
$status = 'warning'; $status = 'warning';
} }
};
if (defined($message)) {
$self->{output}->output_add(long_msg => 'filter status issue: ' . $message);
}
if (!$self->{output}->is_status(value => $status, compare => 'ok', litteral => 1)) { if (!$self->{output}->is_status(value => $status, compare => 'ok', litteral => 1)) {
$self->{output}->output_add( $self->{output}->output_add(
severity => $status, severity => $status,

View File

@ -70,11 +70,7 @@ sub check {
$checked++; $checked++;
my ($status, $message) = ('ok'); my $status = 'ok';
eval {
local $SIG{__WARN__} = sub { $message = $_[0]; };
local $SIG{__DIE__} = sub { $message = $_[0]; };
if (defined($self->{option_results}->{critical}) && $self->{option_results}->{critical} ne '' && if (defined($self->{option_results}->{critical}) && $self->{option_results}->{critical} ne '' &&
$self->{output}->test_eval(test => $self->{option_results}->{critical}, values => $self->{data})) { $self->{output}->test_eval(test => $self->{option_results}->{critical}, values => $self->{data})) {
$status = 'critical'; $status = 'critical';
@ -82,10 +78,7 @@ sub check {
$self->{output}->test_eval(test => $self->{option_results}->{warning}, values => $self->{data})) { $self->{output}->test_eval(test => $self->{option_results}->{warning}, values => $self->{data})) {
$status = 'warning'; $status = 'warning';
} }
};
if (defined($message)) {
$self->{output}->output_add(long_msg => 'filter status issue: ' . $message);
}
if (!$self->{output}->is_status(value => $status, compare => 'ok', litteral => 1)) { if (!$self->{output}->is_status(value => $status, compare => 'ok', litteral => 1)) {
$self->{output}->output_add( $self->{output}->output_add(
severity => $status, severity => $status,

View File

@ -33,11 +33,6 @@ use Time::HiRes qw(gettimeofday tv_interval);
sub custom_select_threshold { sub custom_select_threshold {
my ($self, %options) = @_; my ($self, %options) = @_;
my $status = 'ok'; my $status = 'ok';
my $message;
eval {
local $SIG{__WARN__} = sub { $message = $_[0]; };
local $SIG{__DIE__} = sub { $message = $_[0]; };
our $expand = $self->{result_values}->{expand}; our $expand = $self->{result_values}->{expand};
if (defined($self->{result_values}->{config}->{critical}) && $self->{result_values}->{config}->{critical} && if (defined($self->{result_values}->{config}->{critical}) && $self->{result_values}->{config}->{critical} &&
@ -54,10 +49,6 @@ sub custom_select_threshold {
$self->{output}->add_option_msg(short_msg => 'Unsafe code evaluation: ' . $@); $self->{output}->add_option_msg(short_msg => 'Unsafe code evaluation: ' . $@);
$self->{output}->option_exit(); $self->{output}->option_exit();
} }
};
if (defined($message)) {
$self->{output}->output_add(long_msg => 'filter status issue: ' . $message);
}
$self->{result_values}->{last_status} = $status; $self->{result_values}->{last_status} = $status;
return $status; return $status;

View File

@ -383,12 +383,6 @@ sub request {
# Check response # Check response
my $status = 'ok'; my $status = 'ok';
my $message;
eval {
local $SIG{__WARN__} = sub { $message = $_[0]; };
local $SIG{__DIE__} = sub { $message = $_[0]; };
if (defined($options{request}->{critical_status}) && $options{request}->{critical_status} ne '' && if (defined($options{request}->{critical_status}) && $options{request}->{critical_status} ne '' &&
$self->{output}->test_eval(test => $options{request}->{critical_status}, values => { code => $self->{response_code} })) { $self->{output}->test_eval(test => $options{request}->{critical_status}, values => { code => $self->{response_code} })) {
$status = 'critical'; $status = 'critical';
@ -399,11 +393,6 @@ sub request {
$self->{output}->test_eval(test => $options{request}->{unknown_status}, values => { code => $self->{response_code} })) { $self->{output}->test_eval(test => $options{request}->{unknown_status}, values => { code => $self->{response_code} })) {
$status = 'unknown'; $status = 'unknown';
} }
};
if (defined($message)) {
$self->{output}->add_option_msg(short_msg => 'filter status issue: ' . $message);
$self->{output}->option_exit();
}
if (!$self->{output}->is_status(value => $status, compare => 'ok', litteral => 1)) { if (!$self->{output}->is_status(value => $status, compare => 'ok', litteral => 1)) {
my $short_msg = $self->{response_code} . ' ' . my $short_msg = $self->{response_code} . ' ' .

View File

@ -251,12 +251,6 @@ sub request {
# Check response # Check response
my $status = 'ok'; my $status = 'ok';
my $message;
eval {
local $SIG{__WARN__} = sub { $message = $_[0]; };
local $SIG{__DIE__} = sub { $message = $_[0]; };
my $code = $self->{response}->code(); my $code = $self->{response}->code();
if (defined($request_options->{critical_status}) && $request_options->{critical_status} ne '' && if (defined($request_options->{critical_status}) && $request_options->{critical_status} ne '' &&
$self->{output}->test_eval(test => $request_options->{critical_status}, values => { code => $code })) { $self->{output}->test_eval(test => $request_options->{critical_status}, values => { code => $code })) {
@ -268,11 +262,6 @@ sub request {
$self->{output}->test_eval(test => $request_options->{unknown_status}, values => { code => $code })) { $self->{output}->test_eval(test => $request_options->{unknown_status}, values => { code => $code })) {
$status = 'unknown'; $status = 'unknown';
} }
};
if (defined($message)) {
$self->{output}->add_option_msg(short_msg => 'filter status issue: ' . $message);
$self->{output}->option_exit();
}
if (!$self->{output}->is_status(value => $status, compare => 'ok', litteral => 1)) { if (!$self->{output}->is_status(value => $status, compare => 'ok', litteral => 1)) {
my $short_msg = $self->{response}->status_line; my $short_msg = $self->{response}->status_line;

View File

@ -928,9 +928,15 @@ sub test_eval {
die 'Unsafe code evaluation: ' . $@; die 'Unsafe code evaluation: ' . $@;
} }
} elsif (defined($options{values})) { } elsif (defined($options{values})) {
# unsafe code execution. don't need to check if it's safe (with no values)
my $values = $options{values}; my $values = $options{values};
{
local $SIG{__WARN__} = sub {}; # ignore
$result = eval "$options{test}"; $result = eval "$options{test}";
if ($@) {
die 'Code evaluation error: ' . $@;
}
}
} }
return $result; return $result;

View File

@ -30,11 +30,6 @@ our @EXPORT_OK = qw(catalog_status_threshold catalog_status_threshold_ng catalog
sub catalog_status_threshold { sub catalog_status_threshold {
my ($self, %options) = @_; my ($self, %options) = @_;
my $status = 'ok'; my $status = 'ok';
my $message;
eval {
local $SIG{__WARN__} = sub { $message = $_[0]; };
local $SIG{__DIE__} = sub { $message = $_[0]; };
my $label = $self->{label}; my $label = $self->{label};
$label =~ s/-/_/g; $label =~ s/-/_/g;
@ -51,10 +46,6 @@ sub catalog_status_threshold {
$self->eval(value => $self->{instance_mode}->{option_results}->{'unknown_' . $label})) { $self->eval(value => $self->{instance_mode}->{option_results}->{'unknown_' . $label})) {
$status = 'unknown'; $status = 'unknown';
} }
};
if (defined($message)) {
$self->{output}->output_add(long_msg => 'filter status issue: ' . $message);
}
return $status; return $status;
} }
@ -64,10 +55,6 @@ sub catalog_status_threshold_ng {
my $status = 'ok'; my $status = 'ok';
my $message; my $message;
eval {
local $SIG{__WARN__} = sub { $message = $_[0]; };
local $SIG{__DIE__} = sub { $message = $_[0]; };
if (defined($self->{instance_mode}->{option_results}->{'critical-' . $self->{label}}) && $self->{instance_mode}->{option_results}->{'critical-' . $self->{label}} ne '' && if (defined($self->{instance_mode}->{option_results}->{'critical-' . $self->{label}}) && $self->{instance_mode}->{option_results}->{'critical-' . $self->{label}} ne '' &&
$self->eval(value => $self->{instance_mode}->{option_results}->{'critical-' . $self->{label}})) { $self->eval(value => $self->{instance_mode}->{option_results}->{'critical-' . $self->{label}})) {
$status = 'critical'; $status = 'critical';
@ -78,10 +65,6 @@ sub catalog_status_threshold_ng {
$self->eval(value => $self->{instance_mode}->{option_results}->{'unknown-' . $self->{label}})) { $self->eval(value => $self->{instance_mode}->{option_results}->{'unknown-' . $self->{label}})) {
$status = 'unknown'; $status = 'unknown';
} }
};
if (defined($message)) {
$self->{output}->output_add(long_msg => 'filter status issue: ' . $message);
}
return $status; return $status;
} }

View File

@ -761,7 +761,6 @@ sub change_macros {
foreach (@{$options{macros}}) { foreach (@{$options{macros}}) {
if (defined($self->{option_results}->{$_}) && $self->{option_results}->{$_} ne '') { if (defined($self->{option_results}->{$_}) && $self->{option_results}->{$_} ne '') {
$self->{option_results}->{$_} =~ s/%\{(.*?)\}/\$values->{$1}/g; $self->{option_results}->{$_} =~ s/%\{(.*?)\}/\$values->{$1}/g;
$self->{output}->test_eval(test => $self->{option_results}->{$_});
} }
} }
} }

View File

@ -257,7 +257,14 @@ sub eval {
} }
} else { } else {
my $values = $self->{result_values}; my $values = $self->{result_values};
{
local $SIG{__WARN__} = sub {}; # ignore
$result = eval "$options{value}"; $result = eval "$options{value}";
if ($@) {
die 'Code evaluation error: ' . $@;
}
}
} }
return $result; return $result;

View File

@ -43,13 +43,8 @@ sub prefix_metric_output {
sub custom_status_threshold { sub custom_status_threshold {
my ($self, %options) = @_; my ($self, %options) = @_;
my $status = 'ok'; my $status = 'ok';
my $message;
eval {
local $SIG{__WARN__} = sub { $message = $_[0]; };
local $SIG{__DIE__} = sub { $message = $_[0]; };
if (defined($self->{instance_mode}->{option_results}->{critical_status}) && $self->{instance_mode}->{option_results}->{critical_status} ne '' && if (defined($self->{instance_mode}->{option_results}->{critical_status}) && $self->{instance_mode}->{option_results}->{critical_status} ne '' &&
$self->eval(value => $self->{instance_mode}->{option_results}->{critical_status})) { $self->eval(value => $self->{instance_mode}->{option_results}->{critical_status})) {
$status = 'critical'; $status = 'critical';
@ -57,10 +52,6 @@ sub custom_status_threshold {
$self->eval(value => $self->{instance_mode}->{option_results}->{warning_status})) { $self->eval(value => $self->{instance_mode}->{option_results}->{warning_status})) {
$status = 'warning'; $status = 'warning';
} }
};
if (defined($message)) {
$self->{output}->output_add(long_msg => 'filter status issue: ' . $message);
}
return $status; return $status;
} }

View File

@ -27,6 +27,7 @@ use warnings;
sub custom_status_output { sub custom_status_output {
my ($self, %options) = @_; my ($self, %options) = @_;
my $msg = 'Status : ' . $self->{result_values}->{linkstatus} . ' (oper: ' . $self->{result_values}->{opstatus} . ', ' . 'admin: ' . $self->{result_values}->{admstatus} . ')'; my $msg = 'Status : ' . $self->{result_values}->{linkstatus} . ' (oper: ' . $self->{result_values}->{opstatus} . ', ' . 'admin: ' . $self->{result_values}->{admstatus} . ')';
if (defined($self->{instance_mode}->{option_results}->{add_duplex_status})) { if (defined($self->{instance_mode}->{option_results}->{add_duplex_status})) {
$msg .= ' (duplex: ' . $self->{result_values}->{duplexstatus} . ')'; $msg .= ' (duplex: ' . $self->{result_values}->{duplexstatus} . ')';
@ -324,15 +325,10 @@ sub add_result_global {
admstatus => $self->{oid_adminstatus_mapping}->{$self->{results}->{$self->{oid_adminstatus} . '.' . $_}} admstatus => $self->{oid_adminstatus_mapping}->{$self->{results}->{$self->{oid_adminstatus} . '.' . $_}}
}; };
foreach (('global_link_up', 'global_link_down', 'global_admin_up', 'global_admin_down', 'global_oper_up', 'global_oper_down')) { foreach (('global_link_up', 'global_link_down', 'global_admin_up', 'global_admin_down', 'global_oper_up', 'global_oper_down')) {
eval {
local $SIG{__WARN__} = sub { return ; };
local $SIG{__DIE__} = sub { return ; };
if (defined($self->{option_results}->{$_ . '_rule'}) && $self->{option_results}->{$_ . '_rule'} ne '' && if (defined($self->{option_results}->{$_ . '_rule'}) && $self->{option_results}->{$_ . '_rule'} ne '' &&
$self->{output}->test_eval(test => $self->{option_results}->{$_ . '_rule'}, values => $values)) { $self->{output}->test_eval(test => $self->{option_results}->{$_ . '_rule'}, values => $values)) {
$self->{global}->{$_}++; $self->{global}->{$_}++;
} }
};
} }
$self->{global}->{total_port}++; $self->{global}->{total_port}++;
} }

View File

@ -33,11 +33,6 @@ use Digest::MD5 qw(md5_hex);
sub custom_threshold_output { sub custom_threshold_output {
my ($self, %options) = @_; my ($self, %options) = @_;
my $status = 'ok'; my $status = 'ok';
my $message;
eval {
local $SIG{__WARN__} = sub { $message = $_[0]; };
local $SIG{__DIE__} = sub { $message = $_[0]; };
if (defined($self->{instance_mode}->{option_results}->{critical_status}) && $self->{instance_mode}->{option_results}->{critical_status} ne '' && if (defined($self->{instance_mode}->{option_results}->{critical_status}) && $self->{instance_mode}->{option_results}->{critical_status} ne '' &&
$self->eval(value => $self->{instance_mode}->{option_results}->{critical_status})) { $self->eval(value => $self->{instance_mode}->{option_results}->{critical_status})) {
@ -51,10 +46,6 @@ sub custom_threshold_output {
if (eval "$self->{instance_mode}->{check_status}") { if (eval "$self->{instance_mode}->{check_status}") {
$self->{instance_mode}->{last_status} = 1; $self->{instance_mode}->{last_status} = 1;
} }
};
if (defined($message)) {
$self->{output}->output_add(long_msg => 'filter status issue: ' . $message);
}
return $status; return $status;
} }
@ -1341,15 +1332,10 @@ sub add_result_global {
admstatus => $self->{oid_adminstatus_mapping}->{ $self->{results}->{$self->{oid_adminstatus} . '.' . $_} } admstatus => $self->{oid_adminstatus_mapping}->{ $self->{results}->{$self->{oid_adminstatus} . '.' . $_} }
}; };
foreach (('global_admin_up', 'global_admin_down', 'global_oper_up', 'global_oper_down')) { foreach (('global_admin_up', 'global_admin_down', 'global_oper_up', 'global_oper_down')) {
eval {
local $SIG{__WARN__} = sub { return ; };
local $SIG{__DIE__} = sub { return ; };
if (defined($self->{option_results}->{$_ . '_rule'}) && $self->{option_results}->{$_ . '_rule'} ne '' && if (defined($self->{option_results}->{$_ . '_rule'}) && $self->{option_results}->{$_ . '_rule'} ne '' &&
$self->{output}->test_eval(test => $self->{option_results}->{$_ . '_rule'}, values => $values)) { $self->{output}->test_eval(test => $self->{option_results}->{$_ . '_rule'}, values => $values)) {
$self->{global}->{$_}++; $self->{global}->{$_}++;
} }
};
} }
$self->{global}->{total_port}++; $self->{global}->{total_port}++;
} }