diff options
| -rw-r--r-- | NEWS | 8 | ||||
| -rw-r--r-- | THANKS.in | 6 | ||||
| -rw-r--r-- | configure.ac | 7 | ||||
| -rw-r--r-- | lib/utils_base.c | 15 | ||||
| -rwxr-xr-x | plugins-scripts/check_ifstatus.pl | 59 | ||||
| -rw-r--r-- | plugins-scripts/t/check_disk_smb.t | 2 | ||||
| -rw-r--r-- | plugins/check_by_ssh.c | 3 | ||||
| -rw-r--r-- | plugins/check_dig.c | 9 | ||||
| -rw-r--r-- | plugins/check_disk.c | 16 | ||||
| -rw-r--r-- | plugins/check_dns.c | 22 | ||||
| -rw-r--r-- | plugins/check_hpjd.c | 30 | ||||
| -rw-r--r-- | plugins/check_mysql.c | 22 | ||||
| -rw-r--r-- | plugins/check_ntp_peer.c | 58 | ||||
| -rw-r--r-- | plugins/check_ntp_time.c | 15 | ||||
| -rw-r--r-- | plugins/netutils.c | 15 | ||||
| -rw-r--r-- | plugins/sslutils.c | 9 | ||||
| -rw-r--r-- | plugins/t/NPTest.cache.travis | 2 | ||||
| -rw-r--r-- | plugins/t/check_dns.t | 14 | ||||
| -rw-r--r-- | plugins/t/check_hpjd.t | 35 | ||||
| -rw-r--r-- | plugins/t/check_ntp.t | 4 | ||||
| -rw-r--r-- | plugins/t/negate.t | 5 | ||||
| -rwxr-xr-x | plugins/tests/check_http.t | 8 | ||||
| -rwxr-xr-x | plugins/tests/check_snmp.t | 11 | ||||
| -rwxr-xr-x | test.pl.in | 2 | ||||
| -rwxr-xr-x | tools/generate-change-log | 2 |
25 files changed, 289 insertions, 90 deletions
| @@ -1,6 +1,12 @@ | |||
| 1 | This file documents the major additions and syntax changes between releases. | 1 | This file documents the major additions and syntax changes between releases. |
| 2 | 2 | ||
| 3 | 2.0.1 ... | 3 | 2.1 |
| 4 | ENHANCEMENTS | ||
| 5 | New check_hpjd -p option for port specification (abrist) | ||
| 6 | New ./configure --with-qmail-qstat-command option to specify the path to | ||
| 7 | qmail-qstat(8) | ||
| 8 | New check_ifstatus -n option to ignore interfaces by name | ||
| 9 | |||
| 4 | FIXES | 10 | FIXES |
| 5 | Fix check_jabber to work with Openfire servers | 11 | Fix check_jabber to work with Openfire servers |
| 6 | 12 | ||
| @@ -323,5 +323,11 @@ Eric J. Mislivec | |||
| 323 | Jean-Claude Computing | 323 | Jean-Claude Computing |
| 324 | Andy Brist | 324 | Andy Brist |
| 325 | Mikael Falkvidd | 325 | Mikael Falkvidd |
| 326 | Patric Wust | ||
| 327 | Julius Kriukas | ||
| 328 | Patrick McAndrew | ||
| 329 | Alexander Wittig | ||
| 330 | Jason Benguerel | ||
| 331 | Matthew Kent | ||
| 326 | Frederic Krueger | 332 | Frederic Krueger |
| 327 | Simon Meggle | 333 | Simon Meggle |
diff --git a/configure.ac b/configure.ac index f6ead580..1fa7472b 100644 --- a/configure.ac +++ b/configure.ac | |||
| @@ -1478,9 +1478,12 @@ else | |||
| 1478 | fi | 1478 | fi |
| 1479 | 1479 | ||
| 1480 | AC_PATH_PROG(PATH_TO_QMAIL_QSTAT,qmail-qstat) | 1480 | AC_PATH_PROG(PATH_TO_QMAIL_QSTAT,qmail-qstat) |
| 1481 | if test -x "$PATH_TO_QMAIL_QSTAT" | 1481 | AC_ARG_WITH(qmail_qstat_command, |
| 1482 | ACX_HELP_STRING([--with-qmail-qstat-command=PATH], | ||
| 1483 | [sets path to qmail-qstat]), PATH_TO_QMAIL_QSTAT=$withval) | ||
| 1484 | if test -n "$PATH_TO_QMAIL_QSTAT" | ||
| 1482 | then | 1485 | then |
| 1483 | AC_DEFINE_UNQUOTED(PATH_TO_MAILQ,"$PATH_TO_QMAIL_QSTAT",[path to qmail-qstat]) | 1486 | AC_DEFINE_UNQUOTED(PATH_TO_QMAIL_QSTAT,"$PATH_TO_QMAIL_QSTAT",[path to qmail-qstat]) |
| 1484 | else | 1487 | else |
| 1485 | AC_MSG_WARN([Could not find qmail-qstat or eqivalent]) | 1488 | AC_MSG_WARN([Could not find qmail-qstat or eqivalent]) |
| 1486 | fi | 1489 | fi |
diff --git a/lib/utils_base.c b/lib/utils_base.c index addf26bd..4fb6375d 100644 --- a/lib/utils_base.c +++ b/lib/utils_base.c | |||
| @@ -446,6 +446,7 @@ void np_enable_state(char *keyname, int expected_data_version) { | |||
| 446 | char *temp_filename = NULL; | 446 | char *temp_filename = NULL; |
| 447 | char *temp_keyname = NULL; | 447 | char *temp_keyname = NULL; |
| 448 | char *p=NULL; | 448 | char *p=NULL; |
| 449 | int ret; | ||
| 449 | 450 | ||
| 450 | if(this_monitoring_plugin==NULL) | 451 | if(this_monitoring_plugin==NULL) |
| 451 | die(STATE_UNKNOWN, _("This requires np_init to be called")); | 452 | die(STATE_UNKNOWN, _("This requires np_init to be called")); |
| @@ -476,9 +477,13 @@ void np_enable_state(char *keyname, int expected_data_version) { | |||
| 476 | this_state->state_data=NULL; | 477 | this_state->state_data=NULL; |
| 477 | 478 | ||
| 478 | /* Calculate filename */ | 479 | /* Calculate filename */ |
| 479 | asprintf(&temp_filename, "%s/%lu/%s/%s", | 480 | ret = xasprintf(&temp_filename, "%s/%lu/%s/%s", |
| 480 | _np_state_calculate_location_prefix(), (unsigned long)geteuid(), | 481 | _np_state_calculate_location_prefix(), (unsigned long)geteuid(), |
| 481 | this_monitoring_plugin->plugin_name, this_state->name); | 482 | this_monitoring_plugin->plugin_name, this_state->name); |
| 483 | if (ret < 0) | ||
| 484 | die(STATE_UNKNOWN, _("Cannot allocate memory: %s"), | ||
| 485 | strerror(errno)); | ||
| 486 | |||
| 482 | this_state->_filename=temp_filename; | 487 | this_state->_filename=temp_filename; |
| 483 | 488 | ||
| 484 | this_monitoring_plugin->state = this_state; | 489 | this_monitoring_plugin->state = this_state; |
| @@ -614,8 +619,8 @@ void np_state_write_string(time_t data_time, char *data_string) { | |||
| 614 | 619 | ||
| 615 | /* If file doesn't currently exist, create directories */ | 620 | /* If file doesn't currently exist, create directories */ |
| 616 | if(access(this_monitoring_plugin->state->_filename,F_OK)!=0) { | 621 | if(access(this_monitoring_plugin->state->_filename,F_OK)!=0) { |
| 617 | asprintf(&directories, "%s", this_monitoring_plugin->state->_filename); | 622 | result = xasprintf(&directories, "%s", this_monitoring_plugin->state->_filename); |
| 618 | if(directories==NULL) | 623 | if(result < 0) |
| 619 | die(STATE_UNKNOWN, _("Cannot allocate memory: %s"), | 624 | die(STATE_UNKNOWN, _("Cannot allocate memory: %s"), |
| 620 | strerror(errno)); | 625 | strerror(errno)); |
| 621 | 626 | ||
| @@ -633,8 +638,8 @@ void np_state_write_string(time_t data_time, char *data_string) { | |||
| 633 | np_free(directories); | 638 | np_free(directories); |
| 634 | } | 639 | } |
| 635 | 640 | ||
| 636 | asprintf(&temp_file,"%s.XXXXXX",this_monitoring_plugin->state->_filename); | 641 | result = xasprintf(&temp_file,"%s.XXXXXX",this_monitoring_plugin->state->_filename); |
| 637 | if(temp_file==NULL) | 642 | if(result < 0) |
| 638 | die(STATE_UNKNOWN, _("Cannot allocate memory: %s"), | 643 | die(STATE_UNKNOWN, _("Cannot allocate memory: %s"), |
| 639 | strerror(errno)); | 644 | strerror(errno)); |
| 640 | 645 | ||
diff --git a/plugins-scripts/check_ifstatus.pl b/plugins-scripts/check_ifstatus.pl index fb17d983..9aa25151 100755 --- a/plugins-scripts/check_ifstatus.pl +++ b/plugins-scripts/check_ifstatus.pl | |||
| @@ -9,6 +9,7 @@ | |||
| 9 | # Added -u option (4/2003) | 9 | # Added -u option (4/2003) |
| 10 | # Added -M option (10/2003) | 10 | # Added -M option (10/2003) |
| 11 | # Added SNMPv3 support (10/2003) | 11 | # Added SNMPv3 support (10/2003) |
| 12 | # Added -n option (07/2014) | ||
| 12 | # | 13 | # |
| 13 | # This program is free software; you can redistribute it and/or | 14 | # This program is free software; you can redistribute it and/or |
| 14 | # modify it under the terms of the GNU General Public License | 15 | # modify it under the terms of the GNU General Public License |
| @@ -95,8 +96,10 @@ my $ifXTable; | |||
| 95 | my $opt_h ; | 96 | my $opt_h ; |
| 96 | my $opt_V ; | 97 | my $opt_V ; |
| 97 | my $opt_u; | 98 | my $opt_u; |
| 99 | my $opt_n; | ||
| 98 | my $opt_x ; | 100 | my $opt_x ; |
| 99 | my %excluded ; | 101 | my %excluded ; |
| 102 | my %unused_names ; | ||
| 100 | my @unused_ports ; | 103 | my @unused_ports ; |
| 101 | my %session_opts; | 104 | my %session_opts; |
| 102 | 105 | ||
| @@ -171,27 +174,30 @@ alarm(0); | |||
| 171 | foreach $key (keys %ifStatus) { | 174 | foreach $key (keys %ifStatus) { |
| 172 | 175 | ||
| 173 | # skip unused interfaces | 176 | # skip unused interfaces |
| 174 | if (!defined($ifStatus{$key}{'notInUse'})) { | 177 | my $ifName = $ifStatus{$key}{$snmpIfDescr}; |
| 178 | |||
| 179 | if (!defined($ifStatus{$key}{'notInUse'}) || !grep(/^${ifName}/, @unused_ports )) { | ||
| 175 | # check only if interface is administratively up | 180 | # check only if interface is administratively up |
| 176 | if ($ifStatus{$key}{$snmpIfAdminStatus} == 1 ) { | 181 | if ($ifStatus{$key}{$snmpIfAdminStatus} == 1 ) { |
| 177 | 182 | #check only if interface is not excluded | |
| 178 | # check only if interface type is not listed in %excluded | 183 | if (!defined $unused_names{$ifStatus{$key}{$snmpIfDescr}} ) { |
| 179 | if (!defined $excluded{$ifStatus{$key}{$snmpIfType}} ) { | 184 | # check only if interface type is not listed in %excluded |
| 180 | if ($ifStatus{$key}{$snmpIfOperStatus} == 1 ) { $ifup++ ;} | 185 | if (!defined $excluded{$ifStatus{$key}{$snmpIfType}} ) { |
| 181 | if ($ifStatus{$key}{$snmpIfOperStatus} == 2 ) { | 186 | if ($ifStatus{$key}{$snmpIfOperStatus} == 1 ) { $ifup++ ; } |
| 182 | $ifdown++ ; | 187 | if ($ifStatus{$key}{$snmpIfOperStatus} == 2 ) { |
| 183 | if (defined $ifXTable) { | 188 | $ifdown++ ; |
| 184 | $ifmessage .= sprintf("%s: down -> %s<BR>", | 189 | if (defined $ifXTable) { |
| 185 | $ifStatus{$key}{$snmpIfName}, | 190 | $ifmessage .= sprintf("%s: down -> %s<BR>\n", $ifStatus{$key}{$snmpIfName}, $ifStatus{$key}{$snmpIfAlias}); |
| 186 | $ifStatus{$key}{$snmpIfAlias}); | 191 | }else{ |
| 187 | }else{ | 192 | $ifmessage .= sprintf("%s: down <BR>\n",$ifStatus{$key}{$snmpIfDescr}); |
| 188 | $ifmessage .= sprintf("%s: down <BR>", | 193 | } |
| 189 | $ifStatus{$key}{$snmpIfDescr}); | 194 | } |
| 190 | } | 195 | if ($ifStatus{$key}{$snmpIfOperStatus} == 5 ) { $ifdormant++ ;} |
| 196 | } else { | ||
| 197 | $ifexclude++; | ||
| 191 | } | 198 | } |
| 192 | if ($ifStatus{$key}{$snmpIfOperStatus} == 5 ) { $ifdormant++ ;} | 199 | } else { |
| 193 | }else{ | 200 | $ifunused++; |
| 194 | $ifexclude++; | ||
| 195 | } | 201 | } |
| 196 | 202 | ||
| 197 | } | 203 | } |
| @@ -221,7 +227,7 @@ foreach $key (keys %ifStatus) { | |||
| 221 | $ifexclude, | 227 | $ifexclude, |
| 222 | $ifunused); | 228 | $ifunused); |
| 223 | } | 229 | } |
| 224 | my $perfdata = sprintf("up=%d,down=%d,dormant=%d,excluded=%d,unused=%d",$ifup,$ifdown,$ifdormant,$ifexclude,$ifunused); | 230 | my $perfdata = sprintf("up=%d down=%d dormant=%d excluded=%d unused=%d",$ifup,$ifdown,$ifdormant,$ifexclude,$ifunused); |
| 225 | print ("$state: $answer |$perfdata\n"); | 231 | print ("$state: $answer |$perfdata\n"); |
| 226 | exit $ERRORS{$state}; | 232 | exit $ERRORS{$state}; |
| 227 | 233 | ||
| @@ -259,6 +265,8 @@ sub print_help() { | |||
| 259 | printf " the descriptive name. Do not use if you don't know what this is. \n"; | 265 | printf " the descriptive name. Do not use if you don't know what this is. \n"; |
| 260 | printf " -x (--exclude) A comma separated list of ifType values that should be excluded \n"; | 266 | printf " -x (--exclude) A comma separated list of ifType values that should be excluded \n"; |
| 261 | printf " from the report (default for an empty list is PPP(23).\n"; | 267 | printf " from the report (default for an empty list is PPP(23).\n"; |
| 268 | printf " -n (--unused_ports_by_name) A comma separated list of ifDescr values that should be excluded \n"; | ||
| 269 | printf " from the report (default is an empty exclusion list).\n"; | ||
| 262 | printf " -u (--unused_ports) A comma separated list of ifIndex values that should be excluded \n"; | 270 | printf " -u (--unused_ports) A comma separated list of ifIndex values that should be excluded \n"; |
| 263 | printf " from the report (default is an empty exclusion list).\n"; | 271 | printf " from the report (default is an empty exclusion list).\n"; |
| 264 | printf " See the IANAifType-MIB for a list of interface types.\n"; | 272 | printf " See the IANAifType-MIB for a list of interface types.\n"; |
| @@ -299,6 +307,7 @@ sub process_arguments() { | |||
| 299 | "I" => \$ifXTable, "ifmib" => \$ifXTable, | 307 | "I" => \$ifXTable, "ifmib" => \$ifXTable, |
| 300 | "x:s" => \$opt_x, "exclude:s" => \$opt_x, | 308 | "x:s" => \$opt_x, "exclude:s" => \$opt_x, |
| 301 | "u=s" => \$opt_u, "unused_ports=s" => \$opt_u, | 309 | "u=s" => \$opt_u, "unused_ports=s" => \$opt_u, |
| 310 | "n=s" => \$opt_n, "unused_ports_by_name=s" => \$opt_n, | ||
| 302 | "M=i" => \$maxmsgsize, "maxmsgsize=i" => \$maxmsgsize, | 311 | "M=i" => \$maxmsgsize, "maxmsgsize=i" => \$maxmsgsize, |
| 303 | "t=i" => \$timeout, "timeout=i" => \$timeout, | 312 | "t=i" => \$timeout, "timeout=i" => \$timeout, |
| 304 | ); | 313 | ); |
| @@ -406,6 +415,16 @@ sub process_arguments() { | |||
| 406 | } | 415 | } |
| 407 | } | 416 | } |
| 408 | 417 | ||
| 418 | # Excluded interface descriptors | ||
| 419 | if (defined $opt_n) { | ||
| 420 | my @unused = split(/,/,$opt_n); | ||
| 421 | if ( @unused ) { | ||
| 422 | foreach $key (@unused) { | ||
| 423 | $unused_names{$key} = 1; | ||
| 424 | } | ||
| 425 | } | ||
| 426 | } | ||
| 427 | |||
| 409 | # Excluded interface ports (ifIndex) - management reasons | 428 | # Excluded interface ports (ifIndex) - management reasons |
| 410 | if ($opt_u) { | 429 | if ($opt_u) { |
| 411 | @unused_ports = split(/,/,$opt_u); | 430 | @unused_ports = split(/,/,$opt_u); |
diff --git a/plugins-scripts/t/check_disk_smb.t b/plugins-scripts/t/check_disk_smb.t index 831f3887..c2e8bbb2 100644 --- a/plugins-scripts/t/check_disk_smb.t +++ b/plugins-scripts/t/check_disk_smb.t | |||
| @@ -90,7 +90,7 @@ SKIP: { | |||
| 90 | SKIP: { | 90 | SKIP: { |
| 91 | skip "no non responsive host defined", 1 if ( ! $host_nonresponsive ); | 91 | skip "no non responsive host defined", 1 if ( ! $host_nonresponsive ); |
| 92 | $res = NPTest->testCmd( "./$plugin -H $host_nonresponsive -s np_foobar "); | 92 | $res = NPTest->testCmd( "./$plugin -H $host_nonresponsive -s np_foobar "); |
| 93 | cmp_ok( $res->return_code, '==', 3, "Exit UNKNOWN with non responsive host" ); | 93 | cmp_ok( $res->return_code, '>=', 2, "Exit CRITICAL/UNKNOWN with non responsive host" ); |
| 94 | } | 94 | } |
| 95 | 95 | ||
| 96 | } | 96 | } |
diff --git a/plugins/check_by_ssh.c b/plugins/check_by_ssh.c index 58f333d3..a877f888 100644 --- a/plugins/check_by_ssh.c +++ b/plugins/check_by_ssh.c | |||
| @@ -169,7 +169,8 @@ process_arguments (int argc, char **argv) | |||
| 169 | {"verbose", no_argument, 0, 'v'}, | 169 | {"verbose", no_argument, 0, 'v'}, |
| 170 | {"fork", no_argument, 0, 'f'}, | 170 | {"fork", no_argument, 0, 'f'}, |
| 171 | {"timeout", required_argument, 0, 't'}, | 171 | {"timeout", required_argument, 0, 't'}, |
| 172 | {"host", required_argument, 0, 'H'}, | 172 | {"host", required_argument, 0, 'H'}, /* backward compatibility */ |
| 173 | {"hostname", required_argument, 0, 'H'}, | ||
| 173 | {"port", required_argument,0,'p'}, | 174 | {"port", required_argument,0,'p'}, |
| 174 | {"output", required_argument, 0, 'O'}, | 175 | {"output", required_argument, 0, 'O'}, |
| 175 | {"name", required_argument, 0, 'n'}, | 176 | {"name", required_argument, 0, 'n'}, |
diff --git a/plugins/check_dig.c b/plugins/check_dig.c index d9481f2d..d899b119 100644 --- a/plugins/check_dig.c +++ b/plugins/check_dig.c | |||
| @@ -94,8 +94,8 @@ main (int argc, char **argv) | |||
| 94 | timeout_interval_dig = timeout_interval / number_tries + number_tries; | 94 | timeout_interval_dig = timeout_interval / number_tries + number_tries; |
| 95 | 95 | ||
| 96 | /* get the command to run */ | 96 | /* get the command to run */ |
| 97 | xasprintf (&command_line, "%s @%s -p %d %s -t %s %s %s +tries=%d +time=%d", | 97 | xasprintf (&command_line, "%s %s %s -p %d @%s %s %s +tries=%d +time=%d", |
| 98 | PATH_TO_DIG, dns_server, server_port, query_address, record_type, dig_args, query_transport, number_tries, timeout_interval_dig); | 98 | PATH_TO_DIG, dig_args, query_transport, server_port, dns_server, query_address, record_type, number_tries, timeout_interval_dig); |
| 99 | 99 | ||
| 100 | alarm (timeout_interval); | 100 | alarm (timeout_interval); |
| 101 | gettimeofday (&tv, NULL); | 101 | gettimeofday (&tv, NULL); |
| @@ -296,7 +296,10 @@ process_arguments (int argc, char **argv) | |||
| 296 | dns_server = argv[c]; | 296 | dns_server = argv[c]; |
| 297 | } | 297 | } |
| 298 | else { | 298 | else { |
| 299 | dns_server = strdup ("127.0.0.1"); | 299 | if (strcmp(query_transport,"-6") == 0) |
| 300 | dns_server = strdup("::1"); | ||
| 301 | else | ||
| 302 | dns_server = strdup ("127.0.0.1"); | ||
| 300 | } | 303 | } |
| 301 | } | 304 | } |
| 302 | 305 | ||
diff --git a/plugins/check_disk.c b/plugins/check_disk.c index 925dfa82..0d73a4f1 100644 --- a/plugins/check_disk.c +++ b/plugins/check_disk.c | |||
| @@ -171,6 +171,7 @@ main (int argc, char **argv) | |||
| 171 | char *details; | 171 | char *details; |
| 172 | char *perf; | 172 | char *perf; |
| 173 | char *preamble; | 173 | char *preamble; |
| 174 | char *flag_header; | ||
| 174 | double inode_space_pct; | 175 | double inode_space_pct; |
| 175 | double warning_high_tide; | 176 | double warning_high_tide; |
| 176 | double critical_high_tide; | 177 | double critical_high_tide; |
| @@ -353,18 +354,23 @@ main (int argc, char **argv) | |||
| 353 | if (disk_result==STATE_OK && erronly && !verbose) | 354 | if (disk_result==STATE_OK && erronly && !verbose) |
| 354 | continue; | 355 | continue; |
| 355 | 356 | ||
| 356 | xasprintf (&output, "%s %s %.0f %s (%.0f%%", | 357 | if(disk_result && verbose >= 1) { |
| 357 | output, | 358 | xasprintf(&flag_header, " %s [", state_text (disk_result)); |
| 359 | } else { | ||
| 360 | xasprintf(&flag_header, ""); | ||
| 361 | } | ||
| 362 | xasprintf (&output, "%s%s %s %.0f %s (%.0f%%", | ||
| 363 | output, flag_header, | ||
| 358 | (!strcmp(me->me_mountdir, "none") || display_mntp) ? me->me_devname : me->me_mountdir, | 364 | (!strcmp(me->me_mountdir, "none") || display_mntp) ? me->me_devname : me->me_mountdir, |
| 359 | path->dfree_units, | 365 | path->dfree_units, |
| 360 | units, | 366 | units, |
| 361 | path->dfree_pct); | 367 | path->dfree_pct); |
| 362 | if (path->dused_inodes_percent < 0) { | 368 | if (path->dused_inodes_percent < 0) { |
| 363 | xasprintf(&output, "%s inode=-);", output); | 369 | xasprintf(&output, "%s inode=-)%s;", output, (disk_result ? "]" : "")); |
| 364 | } else { | 370 | } else { |
| 365 | xasprintf(&output, "%s inode=%.0f%%);", output, path->dfree_inodes_percent ); | 371 | xasprintf(&output, "%s inode=%.0f%%)%s;", output, path->dfree_inodes_percent, ((disk_result && verbose >= 1) ? "]" : "")); |
| 366 | } | 372 | } |
| 367 | 373 | free(flag_header); | |
| 368 | /* TODO: Need to do a similar debug line | 374 | /* TODO: Need to do a similar debug line |
| 369 | xasprintf (&details, _("%s\n\ | 375 | xasprintf (&details, _("%s\n\ |
| 370 | %.0f of %.0f %s (%.0f%% inode=%.0f%%) free on %s (type %s mounted on %s) warn:%lu crit:%lu warn%%:%.0f%% crit%%:%.0f%%"), | 376 | %.0f of %.0f %s (%.0f%% inode=%.0f%%) free on %s (type %s mounted on %s) warn:%lu crit:%lu warn%%:%.0f%% crit%%:%.0f%%"), |
diff --git a/plugins/check_dns.c b/plugins/check_dns.c index 31a953d7..22121226 100644 --- a/plugins/check_dns.c +++ b/plugins/check_dns.c | |||
| @@ -136,6 +136,28 @@ main (int argc, char **argv) | |||
| 136 | } | 136 | } |
| 137 | } | 137 | } |
| 138 | 138 | ||
| 139 | /* bug ID: 2946553 - Older versions of bind will use all available dns | ||
| 140 | servers, we have to match the one specified */ | ||
| 141 | if (strstr (chld_out.line[i], "Server:") && strlen(dns_server) > 0) { | ||
| 142 | temp_buffer = strchr (chld_out.line[i], ':'); | ||
| 143 | temp_buffer++; | ||
| 144 | |||
| 145 | /* Strip leading tabs */ | ||
| 146 | for (; *temp_buffer != '\0' && *temp_buffer == '\t'; temp_buffer++) | ||
| 147 | /* NOOP */; | ||
| 148 | |||
| 149 | strip(temp_buffer); | ||
| 150 | if (temp_buffer==NULL || strlen(temp_buffer)==0) { | ||
| 151 | die (STATE_CRITICAL, | ||
| 152 | _("DNS CRITICAL - '%s' returned empty server string\n"), | ||
| 153 | NSLOOKUP_COMMAND); | ||
| 154 | } | ||
| 155 | |||
| 156 | if (strcmp(temp_buffer, dns_server) != 0) { | ||
| 157 | die (STATE_CRITICAL, _("DNS CRITICAL - No response from DNS %s\n"), dns_server); | ||
| 158 | } | ||
| 159 | } | ||
| 160 | |||
| 139 | /* the server is responding, we just got the host name... */ | 161 | /* the server is responding, we just got the host name... */ |
| 140 | if (strstr (chld_out.line[i], "Name:")) | 162 | if (strstr (chld_out.line[i], "Name:")) |
| 141 | parse_address = TRUE; | 163 | parse_address = TRUE; |
diff --git a/plugins/check_hpjd.c b/plugins/check_hpjd.c index 1e7605ba..5fe06984 100644 --- a/plugins/check_hpjd.c +++ b/plugins/check_hpjd.c | |||
| @@ -39,7 +39,7 @@ const char *email = "devel@monitoring-plugins.org"; | |||
| 39 | #include "netutils.h" | 39 | #include "netutils.h" |
| 40 | 40 | ||
| 41 | #define DEFAULT_COMMUNITY "public" | 41 | #define DEFAULT_COMMUNITY "public" |
| 42 | 42 | #define DEFAULT_PORT "161" | |
| 43 | 43 | ||
| 44 | const char *option_summary = "-H host [-C community]\n"; | 44 | const char *option_summary = "-H host [-C community]\n"; |
| 45 | 45 | ||
| @@ -66,6 +66,7 @@ void print_usage (void); | |||
| 66 | 66 | ||
| 67 | char *community = NULL; | 67 | char *community = NULL; |
| 68 | char *address = NULL; | 68 | char *address = NULL; |
| 69 | char *port = NULL; | ||
| 69 | 70 | ||
| 70 | int | 71 | int |
| 71 | main (int argc, char **argv) | 72 | main (int argc, char **argv) |
| @@ -119,8 +120,8 @@ main (int argc, char **argv) | |||
| 119 | HPJD_GD_DOOR_OPEN, HPJD_GD_PAPER_OUTPUT, HPJD_GD_STATUS_DISPLAY); | 120 | HPJD_GD_DOOR_OPEN, HPJD_GD_PAPER_OUTPUT, HPJD_GD_STATUS_DISPLAY); |
| 120 | 121 | ||
| 121 | /* get the command to run */ | 122 | /* get the command to run */ |
| 122 | sprintf (command_line, "%s -OQa -m : -v 1 -c %s %s %s", PATH_TO_SNMPGET, community, | 123 | sprintf (command_line, "%s -OQa -m : -v 1 -c %s %s:%hd %s", PATH_TO_SNMPGET, community, |
| 123 | address, query_string); | 124 | address, port, query_string); |
| 124 | 125 | ||
| 125 | /* run the command */ | 126 | /* run the command */ |
| 126 | child_process = spopen (command_line); | 127 | child_process = spopen (command_line); |
| @@ -313,7 +314,7 @@ process_arguments (int argc, char **argv) | |||
| 313 | {"community", required_argument, 0, 'C'}, | 314 | {"community", required_argument, 0, 'C'}, |
| 314 | /* {"critical", required_argument,0,'c'}, */ | 315 | /* {"critical", required_argument,0,'c'}, */ |
| 315 | /* {"warning", required_argument,0,'w'}, */ | 316 | /* {"warning", required_argument,0,'w'}, */ |
| 316 | /* {"port", required_argument,0,'P'}, */ | 317 | {"port", required_argument,0,'p'}, |
| 317 | {"version", no_argument, 0, 'V'}, | 318 | {"version", no_argument, 0, 'V'}, |
| 318 | {"help", no_argument, 0, 'h'}, | 319 | {"help", no_argument, 0, 'h'}, |
| 319 | {0, 0, 0, 0} | 320 | {0, 0, 0, 0} |
| @@ -324,7 +325,7 @@ process_arguments (int argc, char **argv) | |||
| 324 | 325 | ||
| 325 | 326 | ||
| 326 | while (1) { | 327 | while (1) { |
| 327 | c = getopt_long (argc, argv, "+hVH:C:", longopts, &option); | 328 | c = getopt_long (argc, argv, "+hVH:C:p:", longopts, &option); |
| 328 | 329 | ||
| 329 | if (c == -1 || c == EOF || c == 1) | 330 | if (c == -1 || c == EOF || c == 1) |
| 330 | break; | 331 | break; |
| @@ -341,6 +342,12 @@ process_arguments (int argc, char **argv) | |||
| 341 | case 'C': /* community */ | 342 | case 'C': /* community */ |
| 342 | community = strscpy (community, optarg); | 343 | community = strscpy (community, optarg); |
| 343 | break; | 344 | break; |
| 345 | case 'p': | ||
| 346 | if (!is_intpos(optarg)) | ||
| 347 | usage2 (_("Port must be a positive short integer"), optarg); | ||
| 348 | else | ||
| 349 | port = atoi(optarg); | ||
| 350 | break; | ||
| 344 | case 'V': /* version */ | 351 | case 'V': /* version */ |
| 345 | print_revision (progname, NP_VERSION); | 352 | print_revision (progname, NP_VERSION); |
| 346 | exit (STATE_OK); | 353 | exit (STATE_OK); |
| @@ -369,6 +376,13 @@ process_arguments (int argc, char **argv) | |||
| 369 | community = strdup (DEFAULT_COMMUNITY); | 376 | community = strdup (DEFAULT_COMMUNITY); |
| 370 | } | 377 | } |
| 371 | 378 | ||
| 379 | if (port == NULL) { | ||
| 380 | if (argv[c] != NULL ) | ||
| 381 | port = argv[c]; | ||
| 382 | else | ||
| 383 | port = atoi (DEFAULT_PORT); | ||
| 384 | } | ||
| 385 | |||
| 372 | return validate_arguments (); | 386 | return validate_arguments (); |
| 373 | } | 387 | } |
| 374 | 388 | ||
| @@ -402,6 +416,10 @@ print_help (void) | |||
| 402 | printf (" %s", _("The SNMP community name ")); | 416 | printf (" %s", _("The SNMP community name ")); |
| 403 | printf (_("(default=%s)"), DEFAULT_COMMUNITY); | 417 | printf (_("(default=%s)"), DEFAULT_COMMUNITY); |
| 404 | printf ("\n"); | 418 | printf ("\n"); |
| 419 | printf (" %s\n", "-p, --port=STRING"); | ||
| 420 | printf (" %s", _("Specify the port to check ")); | ||
| 421 | printf (_("(default=%s)"), DEFAULT_PORT); | ||
| 422 | printf ("\n"); | ||
| 405 | 423 | ||
| 406 | printf (UT_SUPPORT); | 424 | printf (UT_SUPPORT); |
| 407 | } | 425 | } |
| @@ -412,5 +430,5 @@ void | |||
| 412 | print_usage (void) | 430 | print_usage (void) |
| 413 | { | 431 | { |
| 414 | printf ("%s\n", _("Usage:")); | 432 | printf ("%s\n", _("Usage:")); |
| 415 | printf ("%s -H host [-C community]\n", progname); | 433 | printf ("%s -H host [-C community] [-p port]\n", progname); |
| 416 | } | 434 | } |
diff --git a/plugins/check_mysql.c b/plugins/check_mysql.c index 4f09e5f8..216626bc 100644 --- a/plugins/check_mysql.c +++ b/plugins/check_mysql.c | |||
| @@ -42,6 +42,7 @@ const char *email = "devel@monitoring-plugins.org"; | |||
| 42 | #include "netutils.h" | 42 | #include "netutils.h" |
| 43 | 43 | ||
| 44 | #include <mysql.h> | 44 | #include <mysql.h> |
| 45 | #include <mysqld_error.h> | ||
| 45 | #include <errmsg.h> | 46 | #include <errmsg.h> |
| 46 | 47 | ||
| 47 | char *db_user = NULL; | 48 | char *db_user = NULL; |
| @@ -59,6 +60,7 @@ char *opt_file = NULL; | |||
| 59 | char *opt_group = NULL; | 60 | char *opt_group = NULL; |
| 60 | unsigned int db_port = MYSQL_PORT; | 61 | unsigned int db_port = MYSQL_PORT; |
| 61 | int check_slave = 0, warn_sec = 0, crit_sec = 0; | 62 | int check_slave = 0, warn_sec = 0, crit_sec = 0; |
| 63 | int ignore_auth = 0; | ||
| 62 | int verbose = 0; | 64 | int verbose = 0; |
| 63 | 65 | ||
| 64 | static double warning_time = 0; | 66 | static double warning_time = 0; |
| @@ -136,7 +138,16 @@ main (int argc, char **argv) | |||
| 136 | mysql_ssl_set(&mysql,key,cert,ca_cert,ca_dir,ciphers); | 138 | mysql_ssl_set(&mysql,key,cert,ca_cert,ca_dir,ciphers); |
| 137 | /* establish a connection to the server and error checking */ | 139 | /* establish a connection to the server and error checking */ |
| 138 | if (!mysql_real_connect(&mysql,db_host,db_user,db_pass,db,db_port,db_socket,0)) { | 140 | if (!mysql_real_connect(&mysql,db_host,db_user,db_pass,db,db_port,db_socket,0)) { |
| 139 | if (mysql_errno (&mysql) == CR_UNKNOWN_HOST) | 141 | if (ignore_auth && mysql_errno (&mysql) == ER_ACCESS_DENIED_ERROR) |
| 142 | { | ||
| 143 | printf("MySQL OK - Version: %s (protocol %d)\n", | ||
| 144 | mysql_get_server_info(&mysql), | ||
| 145 | mysql_get_proto_info(&mysql) | ||
| 146 | ); | ||
| 147 | mysql_close (&mysql); | ||
| 148 | return STATE_OK; | ||
| 149 | } | ||
| 150 | else if (mysql_errno (&mysql) == CR_UNKNOWN_HOST) | ||
| 140 | die (STATE_WARNING, "%s\n", mysql_error (&mysql)); | 151 | die (STATE_WARNING, "%s\n", mysql_error (&mysql)); |
| 141 | else if (mysql_errno (&mysql) == CR_VERSION_ERROR) | 152 | else if (mysql_errno (&mysql) == CR_VERSION_ERROR) |
| 142 | die (STATE_WARNING, "%s\n", mysql_error (&mysql)); | 153 | die (STATE_WARNING, "%s\n", mysql_error (&mysql)); |
| @@ -341,6 +352,7 @@ process_arguments (int argc, char **argv) | |||
| 341 | {"critical", required_argument, 0, 'c'}, | 352 | {"critical", required_argument, 0, 'c'}, |
| 342 | {"warning", required_argument, 0, 'w'}, | 353 | {"warning", required_argument, 0, 'w'}, |
| 343 | {"check-slave", no_argument, 0, 'S'}, | 354 | {"check-slave", no_argument, 0, 'S'}, |
| 355 | {"ignore-auth", no_argument, 0, 'n'}, | ||
| 344 | {"verbose", no_argument, 0, 'v'}, | 356 | {"verbose", no_argument, 0, 'v'}, |
| 345 | {"version", no_argument, 0, 'V'}, | 357 | {"version", no_argument, 0, 'V'}, |
| 346 | {"help", no_argument, 0, 'h'}, | 358 | {"help", no_argument, 0, 'h'}, |
| @@ -357,7 +369,7 @@ process_arguments (int argc, char **argv) | |||
| 357 | return ERROR; | 369 | return ERROR; |
| 358 | 370 | ||
| 359 | while (1) { | 371 | while (1) { |
| 360 | c = getopt_long (argc, argv, "hlvVSP:p:u:d:H:s:c:w:a:k:C:D:L:f:g:", longopts, &option); | 372 | c = getopt_long (argc, argv, "hlvVnSP:p:u:d:H:s:c:w:a:k:C:D:L:f:g:", longopts, &option); |
| 361 | 373 | ||
| 362 | if (c == -1 || c == EOF) | 374 | if (c == -1 || c == EOF) |
| 363 | break; | 375 | break; |
| @@ -419,6 +431,9 @@ process_arguments (int argc, char **argv) | |||
| 419 | case 'S': | 431 | case 'S': |
| 420 | check_slave = 1; /* check-slave */ | 432 | check_slave = 1; /* check-slave */ |
| 421 | break; | 433 | break; |
| 434 | case 'n': | ||
| 435 | ignore_auth = 1; /* ignore-auth */ | ||
| 436 | break; | ||
| 422 | case 'w': | 437 | case 'w': |
| 423 | warning = optarg; | 438 | warning = optarg; |
| 424 | warning_time = strtod (warning, NULL); | 439 | warning_time = strtod (warning, NULL); |
| @@ -506,6 +521,9 @@ print_help (void) | |||
| 506 | printf (UT_EXTRA_OPTS); | 521 | printf (UT_EXTRA_OPTS); |
| 507 | 522 | ||
| 508 | printf (UT_HOST_PORT, 'P', myport); | 523 | printf (UT_HOST_PORT, 'P', myport); |
| 524 | printf (" %s\n", "-n, --ignore-auth"); | ||
| 525 | printf (" %s\n", _("Ignore authentication failure and check for mysql connectivity only")); | ||
| 526 | |||
| 509 | printf (" %s\n", "-s, --socket=STRING"); | 527 | printf (" %s\n", "-s, --socket=STRING"); |
| 510 | printf (" %s\n", _("Use the specified socket (has no effect if -H is used)")); | 528 | printf (" %s\n", _("Use the specified socket (has no effect if -H is used)")); |
| 511 | 529 | ||
diff --git a/plugins/check_ntp_peer.c b/plugins/check_ntp_peer.c index 8dc19788..44424af5 100644 --- a/plugins/check_ntp_peer.c +++ b/plugins/check_ntp_peer.c | |||
| @@ -560,7 +560,7 @@ char *perfd_truechimers (int num_truechimers) | |||
| 560 | } | 560 | } |
| 561 | 561 | ||
| 562 | int main(int argc, char *argv[]){ | 562 | int main(int argc, char *argv[]){ |
| 563 | int result, offset_result, stratum, num_truechimers; | 563 | int result, offset_result, stratum, num_truechimers, oresult, jresult, sresult, tresult; |
| 564 | double offset=0, jitter=0; | 564 | double offset=0, jitter=0; |
| 565 | char *result_line, *perfdata_line; | 565 | char *result_line, *perfdata_line; |
| 566 | 566 | ||
| @@ -597,15 +597,22 @@ int main(int argc, char *argv[]){ | |||
| 597 | result = STATE_UNKNOWN; | 597 | result = STATE_UNKNOWN; |
| 598 | result = max_state_alt(result, get_status(fabs(offset), offset_thresholds)); | 598 | result = max_state_alt(result, get_status(fabs(offset), offset_thresholds)); |
| 599 | } | 599 | } |
| 600 | oresult = result; | ||
| 601 | |||
| 602 | if(do_truechimers) { | ||
| 603 | tresult = get_status(num_truechimers, truechimer_thresholds); | ||
| 604 | result = max_state_alt(result, tresult); | ||
| 605 | } | ||
| 600 | 606 | ||
| 601 | if(do_truechimers) | 607 | if(do_stratum) { |
| 602 | result = max_state_alt(result, get_status(num_truechimers, truechimer_thresholds)); | 608 | sresult = get_status(stratum, stratum_thresholds); |
| 603 | 609 | result = max_state_alt(result, sresult); | |
| 604 | if(do_stratum) | 610 | } |
| 605 | result = max_state_alt(result, get_status(stratum, stratum_thresholds)); | ||
| 606 | 611 | ||
| 607 | if(do_jitter) | 612 | if(do_jitter) { |
| 608 | result = max_state_alt(result, get_status(jitter, jitter_thresholds)); | 613 | jresult = get_status(jitter, jitter_thresholds); |
| 614 | result = max_state_alt(result, jresult); | ||
| 615 | } | ||
| 609 | 616 | ||
| 610 | switch (result) { | 617 | switch (result) { |
| 611 | case STATE_CRITICAL : | 618 | case STATE_CRITICAL : |
| @@ -629,20 +636,43 @@ int main(int argc, char *argv[]){ | |||
| 629 | if(offset_result == STATE_UNKNOWN){ | 636 | if(offset_result == STATE_UNKNOWN){ |
| 630 | xasprintf(&result_line, "%s %s", result_line, _("Offset unknown")); | 637 | xasprintf(&result_line, "%s %s", result_line, _("Offset unknown")); |
| 631 | xasprintf(&perfdata_line, ""); | 638 | xasprintf(&perfdata_line, ""); |
| 639 | } else if (oresult == STATE_WARNING) { | ||
| 640 | xasprintf(&result_line, "%s %s %.10g secs (WARNING)", result_line, _("Offset"), offset); | ||
| 641 | } else if (oresult == STATE_CRITICAL) { | ||
| 642 | xasprintf(&result_line, "%s %s %.10g secs (CRITICAL)", result_line, _("Offset"), offset); | ||
| 632 | } else { | 643 | } else { |
| 633 | xasprintf(&result_line, "%s %s %.10g secs", result_line, _("Offset"), offset); | 644 | xasprintf(&result_line, "%s %s %.10g secs", result_line, _("Offset"), offset); |
| 634 | xasprintf(&perfdata_line, "%s", perfd_offset(offset)); | 645 | } |
| 635 | } | 646 | xasprintf(&perfdata_line, "%s", perfd_offset(offset)); |
| 647 | |||
| 636 | if (do_jitter) { | 648 | if (do_jitter) { |
| 637 | xasprintf(&result_line, "%s, jitter=%f", result_line, jitter); | 649 | if (jresult == STATE_WARNING) { |
| 650 | xasprintf(&result_line, "%s, jitter=%f (WARNING)", result_line, jitter); | ||
| 651 | } else if (jresult == STATE_CRITICAL) { | ||
| 652 | xasprintf(&result_line, "%s, jitter=%f (CRITICAL)", result_line, jitter); | ||
| 653 | } else { | ||
| 654 | xasprintf(&result_line, "%s, jitter=%f", result_line, jitter); | ||
| 655 | } | ||
| 638 | xasprintf(&perfdata_line, "%s %s", perfdata_line, perfd_jitter(jitter)); | 656 | xasprintf(&perfdata_line, "%s %s", perfdata_line, perfd_jitter(jitter)); |
| 639 | } | 657 | } |
| 640 | if (do_stratum) { | 658 | if (do_stratum) { |
| 641 | xasprintf(&result_line, "%s, stratum=%i", result_line, stratum); | 659 | if (sresult == STATE_WARNING) { |
| 660 | xasprintf(&result_line, "%s, stratum=%i (WARNING)", result_line, stratum); | ||
| 661 | } else if (sresult == STATE_CRITICAL) { | ||
| 662 | xasprintf(&result_line, "%s, stratum=%i (CRITICAL)", result_line, stratum); | ||
| 663 | } else { | ||
| 664 | xasprintf(&result_line, "%s, stratum=%i", result_line, stratum); | ||
| 665 | } | ||
| 642 | xasprintf(&perfdata_line, "%s %s", perfdata_line, perfd_stratum(stratum)); | 666 | xasprintf(&perfdata_line, "%s %s", perfdata_line, perfd_stratum(stratum)); |
| 643 | } | 667 | } |
| 644 | if (do_truechimers) { | 668 | if (do_truechimers) { |
| 645 | xasprintf(&result_line, "%s, truechimers=%i", result_line, num_truechimers); | 669 | if (tresult == STATE_WARNING) { |
| 670 | xasprintf(&result_line, "%s, truechimers=%i (WARNING)", result_line, num_truechimers); | ||
| 671 | } else if (tresult == STATE_CRITICAL) { | ||
| 672 | xasprintf(&result_line, "%s, truechimers=%i (CRITICAL)", result_line, num_truechimers); | ||
| 673 | } else { | ||
| 674 | xasprintf(&result_line, "%s, truechimers=%i", result_line, num_truechimers); | ||
| 675 | } | ||
| 646 | xasprintf(&perfdata_line, "%s %s", perfdata_line, perfd_truechimers(num_truechimers)); | 676 | xasprintf(&perfdata_line, "%s %s", perfdata_line, perfd_truechimers(num_truechimers)); |
| 647 | } | 677 | } |
| 648 | printf("%s|%s\n", result_line, perfdata_line); | 678 | printf("%s|%s\n", result_line, perfdata_line); |
| @@ -651,8 +681,6 @@ int main(int argc, char *argv[]){ | |||
| 651 | return result; | 681 | return result; |
| 652 | } | 682 | } |
| 653 | 683 | ||
| 654 | |||
| 655 | |||
| 656 | void print_help(void){ | 684 | void print_help(void){ |
| 657 | print_revision(progname, NP_VERSION); | 685 | print_revision(progname, NP_VERSION); |
| 658 | 686 | ||
diff --git a/plugins/check_ntp_time.c b/plugins/check_ntp_time.c index 72dffbd8..e344f8b7 100644 --- a/plugins/check_ntp_time.c +++ b/plugins/check_ntp_time.c | |||
| @@ -48,6 +48,7 @@ static int verbose=0; | |||
| 48 | static int quiet=0; | 48 | static int quiet=0; |
| 49 | static char *owarn="60"; | 49 | static char *owarn="60"; |
| 50 | static char *ocrit="120"; | 50 | static char *ocrit="120"; |
| 51 | static int time_offset=0; | ||
| 51 | 52 | ||
| 52 | int process_arguments (int, char **); | 53 | int process_arguments (int, char **); |
| 53 | thresholds *offset_thresholds = NULL; | 54 | thresholds *offset_thresholds = NULL; |
| @@ -400,7 +401,7 @@ double offset_request(const char *host, int *status){ | |||
| 400 | gettimeofday(&recv_time, NULL); | 401 | gettimeofday(&recv_time, NULL); |
| 401 | DBG(print_ntp_message(&req[i])); | 402 | DBG(print_ntp_message(&req[i])); |
| 402 | respnum=servers[i].num_responses++; | 403 | respnum=servers[i].num_responses++; |
| 403 | servers[i].offset[respnum]=calc_offset(&req[i], &recv_time); | 404 | servers[i].offset[respnum]=calc_offset(&req[i], &recv_time)+time_offset; |
| 404 | if(verbose) { | 405 | if(verbose) { |
| 405 | printf("offset %.10g\n", servers[i].offset[respnum]); | 406 | printf("offset %.10g\n", servers[i].offset[respnum]); |
| 406 | } | 407 | } |
| @@ -455,6 +456,7 @@ int process_arguments(int argc, char **argv){ | |||
| 455 | {"use-ipv4", no_argument, 0, '4'}, | 456 | {"use-ipv4", no_argument, 0, '4'}, |
| 456 | {"use-ipv6", no_argument, 0, '6'}, | 457 | {"use-ipv6", no_argument, 0, '6'}, |
| 457 | {"quiet", no_argument, 0, 'q'}, | 458 | {"quiet", no_argument, 0, 'q'}, |
| 459 | {"time-offset", optional_argument, 0, 'o'}, | ||
| 458 | {"warning", required_argument, 0, 'w'}, | 460 | {"warning", required_argument, 0, 'w'}, |
| 459 | {"critical", required_argument, 0, 'c'}, | 461 | {"critical", required_argument, 0, 'c'}, |
| 460 | {"timeout", required_argument, 0, 't'}, | 462 | {"timeout", required_argument, 0, 't'}, |
| @@ -468,7 +470,7 @@ int process_arguments(int argc, char **argv){ | |||
| 468 | usage ("\n"); | 470 | usage ("\n"); |
| 469 | 471 | ||
| 470 | while (1) { | 472 | while (1) { |
| 471 | c = getopt_long (argc, argv, "Vhv46qw:c:t:H:p:", longopts, &option); | 473 | c = getopt_long (argc, argv, "Vhv46qw:c:t:H:p:o:", longopts, &option); |
| 472 | if (c == -1 || c == EOF || c == 1) | 474 | if (c == -1 || c == EOF || c == 1) |
| 473 | break; | 475 | break; |
| 474 | 476 | ||
| @@ -504,6 +506,9 @@ int process_arguments(int argc, char **argv){ | |||
| 504 | case 't': | 506 | case 't': |
| 505 | socket_timeout=atoi(optarg); | 507 | socket_timeout=atoi(optarg); |
| 506 | break; | 508 | break; |
| 509 | case 'o': | ||
| 510 | time_offset=atoi(optarg); | ||
| 511 | break; | ||
| 507 | case '4': | 512 | case '4': |
| 508 | address_family = AF_INET; | 513 | address_family = AF_INET; |
| 509 | break; | 514 | break; |
| @@ -616,6 +621,8 @@ void print_help(void){ | |||
| 616 | printf (" %s\n", _("Offset to result in warning status (seconds)")); | 621 | printf (" %s\n", _("Offset to result in warning status (seconds)")); |
| 617 | printf (" %s\n", "-c, --critical=THRESHOLD"); | 622 | printf (" %s\n", "-c, --critical=THRESHOLD"); |
| 618 | printf (" %s\n", _("Offset to result in critical status (seconds)")); | 623 | printf (" %s\n", _("Offset to result in critical status (seconds)")); |
| 624 | printf (" %s\n", "-o, --time_offset=INTEGER"); | ||
| 625 | printf (" %s\n", _("Expected offset of the ntp server relative to local server (seconds)")); | ||
| 619 | printf (UT_CONN_TIMEOUT, DEFAULT_SOCKET_TIMEOUT); | 626 | printf (UT_CONN_TIMEOUT, DEFAULT_SOCKET_TIMEOUT); |
| 620 | printf (UT_VERBOSE); | 627 | printf (UT_VERBOSE); |
| 621 | 628 | ||
| @@ -628,6 +635,8 @@ void print_help(void){ | |||
| 628 | printf("%s\n", _("Notes:")); | 635 | printf("%s\n", _("Notes:")); |
| 629 | printf(" %s\n", _("If you'd rather want to monitor an NTP server, please use")); | 636 | printf(" %s\n", _("If you'd rather want to monitor an NTP server, please use")); |
| 630 | printf(" %s\n", _("check_ntp_peer.")); | 637 | printf(" %s\n", _("check_ntp_peer.")); |
| 638 | printf(" %s\n", _("--time-offset is usefull for compensating for servers with known")); | ||
| 639 | printf(" %s\n", _("and expected clock skew.")); | ||
| 631 | printf("\n"); | 640 | printf("\n"); |
| 632 | printf(UT_THRESHOLDS_NOTES); | 641 | printf(UT_THRESHOLDS_NOTES); |
| 633 | 642 | ||
| @@ -642,6 +651,6 @@ void | |||
| 642 | print_usage(void) | 651 | print_usage(void) |
| 643 | { | 652 | { |
| 644 | printf ("%s\n", _("Usage:")); | 653 | printf ("%s\n", _("Usage:")); |
| 645 | printf(" %s -H <host> [-4|-6] [-w <warn>] [-c <crit>] [-v verbose]\n", progname); | 654 | printf(" %s -H <host> [-4|-6] [-w <warn>] [-c <crit>] [-v verbose] [-o <time offset>]\n", progname); |
| 646 | } | 655 | } |
| 647 | 656 | ||
diff --git a/plugins/netutils.c b/plugins/netutils.c index 00440465..83f8942f 100644 --- a/plugins/netutils.c +++ b/plugins/netutils.c | |||
| @@ -167,11 +167,12 @@ np_net_connect (const char *host_name, int port, int *sd, int proto) | |||
| 167 | char port_str[6], host[MAX_HOST_ADDRESS_LENGTH]; | 167 | char port_str[6], host[MAX_HOST_ADDRESS_LENGTH]; |
| 168 | size_t len; | 168 | size_t len; |
| 169 | int socktype, result; | 169 | int socktype, result; |
| 170 | short is_socket = (host_name[0] == '/'); | ||
| 170 | 171 | ||
| 171 | socktype = (proto == IPPROTO_UDP) ? SOCK_DGRAM : SOCK_STREAM; | 172 | socktype = (proto == IPPROTO_UDP) ? SOCK_DGRAM : SOCK_STREAM; |
| 172 | 173 | ||
| 173 | /* as long as it doesn't start with a '/', it's assumed a host or ip */ | 174 | /* as long as it doesn't start with a '/', it's assumed a host or ip */ |
| 174 | if(host_name[0] != '/'){ | 175 | if (!is_socket){ |
| 175 | memset (&hints, 0, sizeof (hints)); | 176 | memset (&hints, 0, sizeof (hints)); |
| 176 | hints.ai_family = address_family; | 177 | hints.ai_family = address_family; |
| 177 | hints.ai_protocol = proto; | 178 | hints.ai_protocol = proto; |
| @@ -253,7 +254,11 @@ np_net_connect (const char *host_name, int port, int *sd, int proto) | |||
| 253 | return econn_refuse_state; | 254 | return econn_refuse_state; |
| 254 | break; | 255 | break; |
| 255 | case STATE_CRITICAL: /* user did not set econn_refuse_state */ | 256 | case STATE_CRITICAL: /* user did not set econn_refuse_state */ |
| 256 | printf ("%s\n", strerror(errno)); | 257 | if (is_socket) |
| 258 | printf("connect to file socket %s: %s\n", host_name, strerror(errno)); | ||
| 259 | else | ||
| 260 | printf("connect to address %s and port %d: %s\n", | ||
| 261 | host_name, port, strerror(errno)); | ||
| 257 | return econn_refuse_state; | 262 | return econn_refuse_state; |
| 258 | break; | 263 | break; |
| 259 | default: /* it's a logic error if we do not end up in STATE_(OK|WARNING|CRITICAL) */ | 264 | default: /* it's a logic error if we do not end up in STATE_(OK|WARNING|CRITICAL) */ |
| @@ -262,7 +267,11 @@ np_net_connect (const char *host_name, int port, int *sd, int proto) | |||
| 262 | } | 267 | } |
| 263 | } | 268 | } |
| 264 | else { | 269 | else { |
| 265 | printf ("%s\n", strerror(errno)); | 270 | if (is_socket) |
| 271 | printf("connect to file socket %s: %s\n", host_name, strerror(errno)); | ||
| 272 | else | ||
| 273 | printf("connect to address %s and port %d: %s\n", | ||
| 274 | host_name, port, strerror(errno)); | ||
| 266 | return STATE_CRITICAL; | 275 | return STATE_CRITICAL; |
| 267 | } | 276 | } |
| 268 | } | 277 | } |
diff --git a/plugins/sslutils.c b/plugins/sslutils.c index 687bffb7..d0ae4741 100644 --- a/plugins/sslutils.c +++ b/plugins/sslutils.c | |||
| @@ -153,7 +153,8 @@ int np_net_ssl_check_cert(int days_till_exp_warn, int days_till_exp_crit){ | |||
| 153 | struct tm stamp; | 153 | struct tm stamp; |
| 154 | float time_left; | 154 | float time_left; |
| 155 | int days_left; | 155 | int days_left; |
| 156 | char timestamp[17] = ""; | 156 | char timestamp[50] = ""; |
| 157 | time_t tm_t; | ||
| 157 | 158 | ||
| 158 | certificate=SSL_get_peer_certificate(s); | 159 | certificate=SSL_get_peer_certificate(s); |
| 159 | if (!certificate) { | 160 | if (!certificate) { |
| @@ -211,10 +212,8 @@ int np_net_ssl_check_cert(int days_till_exp_warn, int days_till_exp_crit){ | |||
| 211 | 212 | ||
| 212 | time_left = difftime(timegm(&stamp), time(NULL)); | 213 | time_left = difftime(timegm(&stamp), time(NULL)); |
| 213 | days_left = time_left / 86400; | 214 | days_left = time_left / 86400; |
| 214 | snprintf | 215 | tm_t = mktime (&stamp); |
| 215 | (timestamp, 17, "%02d/%02d/%04d %02d:%02d", | 216 | strftime(timestamp, 50, "%c", localtime(&tm_t)); |
| 216 | stamp.tm_mon + 1, | ||
| 217 | stamp.tm_mday, stamp.tm_year + 1900, stamp.tm_hour, stamp.tm_min); | ||
| 218 | 217 | ||
| 219 | if (days_left > 0 && days_left <= days_till_exp_warn) { | 218 | if (days_left > 0 && days_left <= days_till_exp_warn) { |
| 220 | printf (_("%s - Certificate '%s' expires in %d day(s) (%s).\n"), (days_left>days_till_exp_crit)?"WARNING":"CRITICAL", cn, days_left, timestamp); | 219 | printf (_("%s - Certificate '%s' expires in %d day(s) (%s).\n"), (days_left>days_till_exp_crit)?"WARNING":"CRITICAL", cn, days_left, timestamp); |
diff --git a/plugins/t/NPTest.cache.travis b/plugins/t/NPTest.cache.travis index c1007deb..4ebfb90e 100644 --- a/plugins/t/NPTest.cache.travis +++ b/plugins/t/NPTest.cache.travis | |||
| @@ -14,6 +14,8 @@ | |||
| 14 | 'NP_HOST_SNMP' => '', | 14 | 'NP_HOST_SNMP' => '', |
| 15 | 'NP_HOST_TCP_FTP' => '', | 15 | 'NP_HOST_TCP_FTP' => '', |
| 16 | 'NP_HOST_TCP_HPJD' => '', | 16 | 'NP_HOST_TCP_HPJD' => '', |
| 17 | 'NP_HOST_HPJD_PORT_INVALID' => '161', | ||
| 18 | 'NP_HOST_HPJD_PORT_VALID' => '', | ||
| 17 | 'NP_HOST_TCP_HTTP' => 'localhost', | 19 | 'NP_HOST_TCP_HTTP' => 'localhost', |
| 18 | 'NP_HOST_TCP_HTTP2' => 'labs.consol.de', | 20 | 'NP_HOST_TCP_HTTP2' => 'labs.consol.de', |
| 19 | 'NP_HOST_TCP_IMAP' => 'imap.web.de', | 21 | 'NP_HOST_TCP_IMAP' => 'imap.web.de', |
diff --git a/plugins/t/check_dns.t b/plugins/t/check_dns.t index 4ff553f7..035e7682 100644 --- a/plugins/t/check_dns.t +++ b/plugins/t/check_dns.t | |||
| @@ -10,7 +10,7 @@ use NPTest; | |||
| 10 | 10 | ||
| 11 | plan skip_all => "check_dns not compiled" unless (-x "check_dns"); | 11 | plan skip_all => "check_dns not compiled" unless (-x "check_dns"); |
| 12 | 12 | ||
| 13 | plan tests => 14; | 13 | plan tests => 16; |
| 14 | 14 | ||
| 15 | my $successOutput = '/DNS OK: [\.0-9]+ seconds? response time/'; | 15 | my $successOutput = '/DNS OK: [\.0-9]+ seconds? response time/'; |
| 16 | 16 | ||
| @@ -43,6 +43,12 @@ my $dns_server = getTestParameter( | |||
| 43 | "A non default (remote) DNS server", | 43 | "A non default (remote) DNS server", |
| 44 | ); | 44 | ); |
| 45 | 45 | ||
| 46 | my $host_nonresponsive = getTestParameter( | ||
| 47 | "NP_HOST_NONRESPONSIVE", | ||
| 48 | "The hostname of system not responsive to network requests", | ||
| 49 | "10.0.0.1", | ||
| 50 | ); | ||
| 51 | |||
| 46 | my $res; | 52 | my $res; |
| 47 | 53 | ||
| 48 | $res = NPTest->testCmd("./check_dns -H $hostname_valid -t 5"); | 54 | $res = NPTest->testCmd("./check_dns -H $hostname_valid -t 5"); |
| @@ -54,7 +60,7 @@ cmp_ok( $res->return_code, '==', 2, "Critical threshold passed"); | |||
| 54 | 60 | ||
| 55 | $res = NPTest->testCmd("./check_dns -H $hostname_valid -t 5 -w 0 -c 5"); | 61 | $res = NPTest->testCmd("./check_dns -H $hostname_valid -t 5 -w 0 -c 5"); |
| 56 | cmp_ok( $res->return_code, '==', 1, "Warning threshold passed"); | 62 | cmp_ok( $res->return_code, '==', 1, "Warning threshold passed"); |
| 57 | like( $res->output, "/\|time=[\d\.]+s;0.0*;5\.0*;0\.0*/", "Output performance data OK" ); | 63 | like( $res->output, '/\|time=[\d\.]+s;0.0*;5\.0*;0\.0*/', "Output performance data OK" ); |
| 58 | 64 | ||
| 59 | $res = NPTest->testCmd("./check_dns -H $hostname_invalid -t 1"); | 65 | $res = NPTest->testCmd("./check_dns -H $hostname_invalid -t 1"); |
| 60 | cmp_ok( $res->return_code, '==', 2, "Invalid $hostname_invalid"); | 66 | cmp_ok( $res->return_code, '==', 2, "Invalid $hostname_invalid"); |
| @@ -66,6 +72,10 @@ like ( $res->output, $successOutput, "Output OK" ); | |||
| 66 | $res = NPTest->testCmd("./check_dns -H $hostname_invalid -s $dns_server -t 1"); | 72 | $res = NPTest->testCmd("./check_dns -H $hostname_invalid -s $dns_server -t 1"); |
| 67 | cmp_ok( $res->return_code, '==', 2, "Invalid $hostname_invalid on $dns_server"); | 73 | cmp_ok( $res->return_code, '==', 2, "Invalid $hostname_invalid on $dns_server"); |
| 68 | 74 | ||
| 75 | $res = NPTest->testCmd("./check_dns -H $hostname_valid -a $hostname_valid_ip -s $host_nonresponsive -t 2"); | ||
| 76 | cmp_ok( $res->return_code, '==', 2, "Got no answer from unresponsive server"); | ||
| 77 | like ( $res->output, "/CRITICAL - /", "Output OK"); | ||
| 78 | |||
| 69 | $res = NPTest->testCmd("./check_dns -H $hostname_valid -a $hostname_valid_ip -t 5"); | 79 | $res = NPTest->testCmd("./check_dns -H $hostname_valid -a $hostname_valid_ip -t 5"); |
| 70 | cmp_ok( $res->return_code, '==', 0, "Got expected address"); | 80 | cmp_ok( $res->return_code, '==', 0, "Got expected address"); |
| 71 | 81 | ||
diff --git a/plugins/t/check_hpjd.t b/plugins/t/check_hpjd.t index 10ded54a..4d64852a 100644 --- a/plugins/t/check_hpjd.t +++ b/plugins/t/check_hpjd.t | |||
| @@ -10,7 +10,6 @@ use NPTest; | |||
| 10 | 10 | ||
| 11 | plan skip_all => "check_hpjd not compiled" unless (-x "check_hpjd"); | 11 | plan skip_all => "check_hpjd not compiled" unless (-x "check_hpjd"); |
| 12 | 12 | ||
| 13 | plan tests => 5; | ||
| 14 | 13 | ||
| 15 | my $successOutput = '/^Printer ok - /'; | 14 | my $successOutput = '/^Printer ok - /'; |
| 16 | my $failureOutput = '/Timeout: No [Rr]esponse from /'; | 15 | my $failureOutput = '/Timeout: No [Rr]esponse from /'; |
| @@ -20,31 +19,53 @@ my $host_tcp_hpjd = getTestParameter( | |||
| 20 | "A host (usually a printer) providing the HP-JetDirect Services" | 19 | "A host (usually a printer) providing the HP-JetDirect Services" |
| 21 | ); | 20 | ); |
| 22 | 21 | ||
| 22 | my $host_hpjd_port_invalid = getTestParameter( | ||
| 23 | "NP_HOST_HPJD_PORT_INVALID", | ||
| 24 | "A port that HP-JetDirect Services is not listening on", | ||
| 25 | "162" | ||
| 26 | ); | ||
| 27 | |||
| 28 | my $host_hpjd_port_valid = getTestParameter( | ||
| 29 | "NP_HOST_HPJD_PORT_VALID", | ||
| 30 | "The port that HP-JetDirect Services is currently listening on", | ||
| 31 | "161" | ||
| 32 | ); | ||
| 33 | |||
| 23 | my $host_nonresponsive = getTestParameter( | 34 | my $host_nonresponsive = getTestParameter( |
| 24 | "NP_HOST_NONRESPONSIVE", | 35 | "NP_HOST_NONRESPONSIVE", |
| 25 | "The hostname of system not responsive to network requests", | 36 | "The hostname of system not responsive to network requests", |
| 26 | "10.0.0.1", | 37 | "10.0.0.1" |
| 27 | ); | 38 | ); |
| 28 | 39 | ||
| 29 | my $hostname_invalid = getTestParameter( | 40 | my $hostname_invalid = getTestParameter( |
| 30 | "NP_HOSTNAME_INVALID", | 41 | "NP_HOSTNAME_INVALID", |
| 31 | "An invalid (not known to DNS) hostname", | 42 | "An invalid (not known to DNS) hostname", |
| 32 | "nosuchhost", | 43 | "nosuchhost" |
| 33 | ); | 44 | ); |
| 34 | 45 | ||
| 46 | my $tests = $host_tcp_hpjd ? 9 : 5; | ||
| 47 | plan tests => $tests; | ||
| 35 | my $res; | 48 | my $res; |
| 36 | 49 | ||
| 37 | SKIP: { | 50 | SKIP: { |
| 38 | skip "No HP JetDirect defined", 2 unless $host_tcp_hpjd; | 51 | skip "No HP JetDirect defined", 2 unless $host_tcp_hpjd; |
| 39 | $res = NPTest->testCmd("./check_hpjd $host_tcp_hpjd"); | 52 | $res = NPTest->testCmd("./check_hpjd -H $host_tcp_hpjd"); |
| 40 | cmp_ok( $res->return_code, '==', 0, "Jetdirect responding" ); | 53 | cmp_ok( $res->return_code, 'eq', 0, "Jetdirect responding" ); |
| 41 | like ( $res->output, $successOutput, "Output correct" ); | 54 | like ( $res->output, $successOutput, "Output correct" ); |
| 55 | |||
| 56 | $res = NPTest->testCmd("./check_hpjd -H $host_tcp_hpjd -p $host_hpjd_port_valid"); | ||
| 57 | cmp_ok( $res->return_code, 'eq', 0, "Jetdirect responding on port $host_hpjd_port_valid" ); | ||
| 58 | like ( $res->output, $successOutput, "Output correct" ); | ||
| 59 | |||
| 60 | $res = NPTest->testCmd("./check_hpjd -H $host_tcp_hpjd -p $host_hpjd_port_invalid"); | ||
| 61 | cmp_ok( $res->return_code, 'eq', 2, "Jetdirect not responding on port $host_hpjd_port_invalid" ); | ||
| 62 | like ( $res->output, $failureOutput, "Output correct" ); | ||
| 42 | } | 63 | } |
| 43 | 64 | ||
| 44 | $res = NPTest->testCmd("./check_hpjd $host_nonresponsive"); | 65 | $res = NPTest->testCmd("./check_hpjd -H $host_nonresponsive"); |
| 45 | cmp_ok( $res->return_code, 'eq', 2, "Host not responding"); | 66 | cmp_ok( $res->return_code, 'eq', 2, "Host not responding"); |
| 46 | like ( $res->output, $failureOutput, "Output OK" ); | 67 | like ( $res->output, $failureOutput, "Output OK" ); |
| 47 | 68 | ||
| 48 | $res = NPTest->testCmd("./check_hpjd $hostname_invalid"); | 69 | $res = NPTest->testCmd("./check_hpjd -H $hostname_invalid"); |
| 49 | cmp_ok( $res->return_code, 'eq', 3, "Hostname invalid"); | 70 | cmp_ok( $res->return_code, 'eq', 3, "Hostname invalid"); |
| 50 | 71 | ||
diff --git a/plugins/t/check_ntp.t b/plugins/t/check_ntp.t index 74d890fa..b8fc8fdf 100644 --- a/plugins/t/check_ntp.t +++ b/plugins/t/check_ntp.t | |||
| @@ -35,8 +35,8 @@ my $ntp_okmatch1 = '/^NTP\sOK:\sOffset\s-?[0-9]+(\.[0-9]+)?(e-[0-9]{2})?\ssecs/' | |||
| 35 | my $ntp_warnmatch1 = '/^NTP\sWARNING:\sOffset\s-?[0-9]+(\.[0-9]+)?(e-[0-9]{2})?\ssecs/'; | 35 | my $ntp_warnmatch1 = '/^NTP\sWARNING:\sOffset\s-?[0-9]+(\.[0-9]+)?(e-[0-9]{2})?\ssecs/'; |
| 36 | my $ntp_critmatch1 = '/^NTP\sCRITICAL:\sOffset\s-?[0-9]+(\.[0-9]+)?(e-[0-9]{2})?\ssecs/'; | 36 | my $ntp_critmatch1 = '/^NTP\sCRITICAL:\sOffset\s-?[0-9]+(\.[0-9]+)?(e-[0-9]{2})?\ssecs/'; |
| 37 | my $ntp_okmatch2 = '/^NTP\sOK:\sOffset\s-?[0-9]+(\.[0-9]+)?(e-[0-9]{2})?\ssecs,\sjitter=[0-9]+\.[0-9]+,\sstratum=[0-9]{1,2},\struechimers=[0-9]+/'; | 37 | my $ntp_okmatch2 = '/^NTP\sOK:\sOffset\s-?[0-9]+(\.[0-9]+)?(e-[0-9]{2})?\ssecs,\sjitter=[0-9]+\.[0-9]+,\sstratum=[0-9]{1,2},\struechimers=[0-9]+/'; |
| 38 | my $ntp_warnmatch2 = '/^NTP\sWARNING:\sOffset\s-?[0-9]+(\.[0-9]+)?(e-[0-9]{2})?\ssecs,\sjitter=[0-9]+\.[0-9]+,\sstratum=[0-9]{1,2},\struechimers=[0-9]+/'; | 38 | my $ntp_warnmatch2 = '/^NTP\sWARNING:\sOffset\s-?[0-9]+(\.[0-9]+)?(e-[0-9]{2})?\ssecs,\sjitter=[0-9]+\.[0-9]+,\sstratum=[0-9]{1,2}\s\(WARNING\),\struechimers=[0-9]+/'; |
| 39 | my $ntp_critmatch2 = '/^NTP\sCRITICAL:\sOffset\s-?[0-9]+(\.[0-9]+)?(e-[0-9]{2})?\ssecs,\sjitter=[0-9]+\.[0-9]+,\sstratum=[0-9]{1,2},\struechimers=[0-9]+/'; | 39 | my $ntp_critmatch2 = '/^NTP\sCRITICAL:\sOffset\s-?[0-9]+(\.[0-9]+)?(e-[0-9]{2})?\ssecs,\sjitter=[0-9]+\.[0-9]+\s\(CRITICAL\),\sstratum=[0-9]{1,2},\struechimers=[0-9]+/'; |
| 40 | my $ntp_noresponse = '/^(CRITICAL - Socket timeout after 3 seconds)|(NTP CRITICAL: No response from NTP server)$/'; | 40 | my $ntp_noresponse = '/^(CRITICAL - Socket timeout after 3 seconds)|(NTP CRITICAL: No response from NTP server)$/'; |
| 41 | my $ntp_nosuchhost = '/^check_ntp.*: Invalid hostname/address - ' . $hostname_invalid . '/'; | 41 | my $ntp_nosuchhost = '/^check_ntp.*: Invalid hostname/address - ' . $hostname_invalid . '/'; |
| 42 | 42 | ||
diff --git a/plugins/t/negate.t b/plugins/t/negate.t index f18acc39..d96a109b 100644 --- a/plugins/t/negate.t +++ b/plugins/t/negate.t | |||
| @@ -6,6 +6,7 @@ | |||
| 6 | 6 | ||
| 7 | use strict; | 7 | use strict; |
| 8 | use Test::More; | 8 | use Test::More; |
| 9 | use Cwd; | ||
| 9 | use NPTest; | 10 | use NPTest; |
| 10 | 11 | ||
| 11 | # 15 tests in the first part, 9 in timeout tests and 2 * 32 in the last loops | 12 | # 15 tests in the first part, 9 in timeout tests and 2 * 32 in the last loops |
| @@ -13,7 +14,7 @@ plan tests => 88; | |||
| 13 | 14 | ||
| 14 | my $res; | 15 | my $res; |
| 15 | 16 | ||
| 16 | my $PWD = $ENV{PWD}; | 17 | my $PWD = getcwd(); |
| 17 | 18 | ||
| 18 | $res = NPTest->testCmd( "./negate" ); | 19 | $res = NPTest->testCmd( "./negate" ); |
| 19 | is( $res->return_code, 3, "Not enough parameters"); | 20 | is( $res->return_code, 3, "Not enough parameters"); |
| @@ -50,7 +51,7 @@ is( $res->output, "OK: a dummy okay", "The quoted string is passed through to su | |||
| 50 | $res = NPTest->testCmd( "./negate '$PWD/check_dummy 0' 'a dummy okay'" ); | 51 | $res = NPTest->testCmd( "./negate '$PWD/check_dummy 0' 'a dummy okay'" ); |
| 51 | is( $res->output, "No data returned from command", "Bad command, as expected (trying to execute './check_dummy 0')"); | 52 | is( $res->output, "No data returned from command", "Bad command, as expected (trying to execute './check_dummy 0')"); |
| 52 | 53 | ||
| 53 | $res = NPTest->testCmd( './negate $PWD/check_dummy 0 \'$$ a dummy okay\'' ); | 54 | $res = NPTest->testCmd( './negate '.$PWD.'/check_dummy 0 \'$$ a dummy okay\'' ); |
| 54 | is( $res->output, 'OK: $$ a dummy okay', 'Proves that $$ is not being expanded again' ); | 55 | is( $res->output, 'OK: $$ a dummy okay', 'Proves that $$ is not being expanded again' ); |
| 55 | 56 | ||
| 56 | my %state = ( | 57 | my %state = ( |
diff --git a/plugins/tests/check_http.t b/plugins/tests/check_http.t index 225b449f..d93a0ecf 100755 --- a/plugins/tests/check_http.t +++ b/plugins/tests/check_http.t | |||
| @@ -186,21 +186,21 @@ SKIP: { | |||
| 186 | 186 | ||
| 187 | $result = NPTest->testCmd( "$command -p $port_https -S -C 14" ); | 187 | $result = NPTest->testCmd( "$command -p $port_https -S -C 14" ); |
| 188 | is( $result->return_code, 0, "$command -p $port_https -S -C 14" ); | 188 | is( $result->return_code, 0, "$command -p $port_https -S -C 14" ); |
| 189 | is( $result->output, 'OK - Certificate \'Ton Voon\' will expire on 03/03/2019 21:41.', "output ok" ); | 189 | is( $result->output, 'OK - Certificate \'Ton Voon\' will expire on Sun Mar 3 21:41:00 2019.', "output ok" ); |
| 190 | 190 | ||
| 191 | $result = NPTest->testCmd( "$command -p $port_https -S -C 14000" ); | 191 | $result = NPTest->testCmd( "$command -p $port_https -S -C 14000" ); |
| 192 | is( $result->return_code, 1, "$command -p $port_https -S -C 14000" ); | 192 | is( $result->return_code, 1, "$command -p $port_https -S -C 14000" ); |
| 193 | like( $result->output, '/WARNING - Certificate \'Ton Voon\' expires in \d+ day\(s\) \(03/03/2019 21:41\)./', "output ok" ); | 193 | like( $result->output, '/WARNING - Certificate \'Ton Voon\' expires in \d+ day\(s\) \(Sun Mar 3 21:41:00 2019\)./', "output ok" ); |
| 194 | 194 | ||
| 195 | # Expired cert tests | 195 | # Expired cert tests |
| 196 | $result = NPTest->testCmd( "$command -p $port_https -S -C 13960,14000" ); | 196 | $result = NPTest->testCmd( "$command -p $port_https -S -C 13960,14000" ); |
| 197 | is( $result->return_code, 2, "$command -p $port_https -S -C 13960,14000" ); | 197 | is( $result->return_code, 2, "$command -p $port_https -S -C 13960,14000" ); |
| 198 | like( $result->output, '/CRITICAL - Certificate \'Ton Voon\' expires in \d+ day\(s\) \(03/03/2019 21:41\)./', "output ok" ); | 198 | like( $result->output, '/CRITICAL - Certificate \'Ton Voon\' expires in \d+ day\(s\) \(Sun Mar 3 21:41:00 2019\)./', "output ok" ); |
| 199 | 199 | ||
| 200 | $result = NPTest->testCmd( "$command -p $port_https_expired -S -C 7" ); | 200 | $result = NPTest->testCmd( "$command -p $port_https_expired -S -C 7" ); |
| 201 | is( $result->return_code, 2, "$command -p $port_https_expired -S -C 7" ); | 201 | is( $result->return_code, 2, "$command -p $port_https_expired -S -C 7" ); |
| 202 | is( $result->output, | 202 | is( $result->output, |
| 203 | 'CRITICAL - Certificate \'Ton Voon\' expired on 03/05/2009 00:13.', | 203 | 'CRITICAL - Certificate \'Ton Voon\' expired on Thu Mar 5 00:13:00 2009.', |
| 204 | "output ok" ); | 204 | "output ok" ); |
| 205 | 205 | ||
| 206 | } | 206 | } |
diff --git a/plugins/tests/check_snmp.t b/plugins/tests/check_snmp.t index aace9bcc..2fd033d2 100755 --- a/plugins/tests/check_snmp.t +++ b/plugins/tests/check_snmp.t | |||
| @@ -20,7 +20,16 @@ if ($@) { | |||
| 20 | plan skip_all => "Missing required module for test: $@"; | 20 | plan skip_all => "Missing required module for test: $@"; |
| 21 | } else { | 21 | } else { |
| 22 | if (-x "./check_snmp") { | 22 | if (-x "./check_snmp") { |
| 23 | plan tests => $tests; | 23 | # check if snmpd has perl support |
| 24 | my $test = `snmpd -c tests/conf/snmpd.conf -C -r -H 2>&1`; | ||
| 25 | if(!defined $test) { | ||
| 26 | plan skip_all => "snmpd required"; | ||
| 27 | } | ||
| 28 | elsif($test =~ m/Warning: Unknown token: perl/) { | ||
| 29 | plan skip_all => "snmpd has no perl support"; | ||
| 30 | } else { | ||
| 31 | plan tests => $tests; | ||
| 32 | } | ||
| 24 | } else { | 33 | } else { |
| 25 | plan skip_all => "No check_snmp compiled"; | 34 | plan skip_all => "No check_snmp compiled"; |
| 26 | } | 35 | } |
| @@ -9,6 +9,8 @@ use Getopt::Long; | |||
| 9 | 9 | ||
| 10 | use NPTest qw(DetermineTestHarnessDirectory TestsFrom); | 10 | use NPTest qw(DetermineTestHarnessDirectory TestsFrom); |
| 11 | 11 | ||
| 12 | $ENV{LC_ALL} = 'C'; | ||
| 13 | |||
| 12 | my @tstdir; | 14 | my @tstdir; |
| 13 | 15 | ||
| 14 | if ( ! GetOptions( "testdir:s" => \@tstdir ) ) | 16 | if ( ! GetOptions( "testdir:s" => \@tstdir ) ) |
diff --git a/tools/generate-change-log b/tools/generate-change-log index 3a6b38e7..ad19ce96 100755 --- a/tools/generate-change-log +++ b/tools/generate-change-log | |||
| @@ -19,6 +19,7 @@ use Text::Wrap; | |||
| 19 | 19 | ||
| 20 | # The lines will have a length of no more than $columns - 1. | 20 | # The lines will have a length of no more than $columns - 1. |
| 21 | $Text::Wrap::columns = 81; | 21 | $Text::Wrap::columns = 81; |
| 22 | $Text::Wrap::huge = 'overflow'; | ||
| 22 | 23 | ||
| 23 | if (system('git rev-parse --git-dir >/dev/null 2>&1') != 0) { | 24 | if (system('git rev-parse --git-dir >/dev/null 2>&1') != 0) { |
| 24 | print "Not a Git repository, so I won't update the ChangeLog.\n"; | 25 | print "Not a Git repository, so I won't update the ChangeLog.\n"; |
| @@ -51,6 +52,7 @@ while ($git_log =~ /$regex/gm) { | |||
| 51 | $prev_date = $commit{date}; | 52 | $prev_date = $commit{date}; |
| 52 | $prev_name = $commit{name}; | 53 | $prev_name = $commit{name}; |
| 53 | $prev_email = $commit{email}; | 54 | $prev_email = $commit{email}; |
| 55 | $commit{message} =~ s/\s*Signed\-off\-by.*$//sgmx; | ||
| 54 | 56 | ||
| 55 | my @files = split(/\n/, $commit{files}); | 57 | my @files = split(/\n/, $commit{files}); |
| 56 | my @message = map { s/^ {4}//; $_ } split(/\n/, $commit{message}); | 58 | my @message = map { s/^ {4}//; $_ } split(/\n/, $commit{message}); |
