summaryrefslogtreecommitdiffstats
path: root/plugins
diff options
context:
space:
mode:
Diffstat (limited to 'plugins')
-rw-r--r--plugins/check_dig.c19
-rw-r--r--plugins/check_ldap.c5
-rw-r--r--plugins/check_ntp.c9
-rw-r--r--plugins/check_ntp_peer.c3
-rw-r--r--plugins/check_ntp_time.c9
-rw-r--r--plugins/check_pgsql.c2
-rw-r--r--plugins/check_procs.c113
-rw-r--r--plugins/check_snmp.c49
-rw-r--r--plugins/check_ssh.c2
-rw-r--r--plugins/common.h1
-rw-r--r--plugins/t/check_dig.t22
11 files changed, 110 insertions, 124 deletions
diff --git a/plugins/check_dig.c b/plugins/check_dig.c
index 893e0a1..3c80cb7 100644
--- a/plugins/check_dig.c
+++ b/plugins/check_dig.c
@@ -54,6 +54,7 @@ char *record_type = "A";
54char *expected_address = NULL; 54char *expected_address = NULL;
55char *dns_server = NULL; 55char *dns_server = NULL;
56char *dig_args = ""; 56char *dig_args = "";
57char *query_transport = "";
57int verbose = FALSE; 58int verbose = FALSE;
58int server_port = DEFAULT_PORT; 59int server_port = DEFAULT_PORT;
59double warning_interval = UNDEFINED; 60double warning_interval = UNDEFINED;
@@ -87,8 +88,8 @@ main (int argc, char **argv)
87 usage_va(_("Could not parse arguments")); 88 usage_va(_("Could not parse arguments"));
88 89
89 /* get the command to run */ 90 /* get the command to run */
90 xasprintf (&command_line, "%s @%s -p %d %s -t %s %s", 91 xasprintf (&command_line, "%s @%s -p %d %s -t %s %s %s",
91 PATH_TO_DIG, dns_server, server_port, query_address, record_type, dig_args); 92 PATH_TO_DIG, dns_server, server_port, query_address, record_type, dig_args, query_transport);
92 93
93 alarm (timeout_interval); 94 alarm (timeout_interval);
94 gettimeofday (&tv, NULL); 95 gettimeofday (&tv, NULL);
@@ -199,6 +200,8 @@ process_arguments (int argc, char **argv)
199 {"record_type", required_argument, 0, 'T'}, 200 {"record_type", required_argument, 0, 'T'},
200 {"expected_address", required_argument, 0, 'a'}, 201 {"expected_address", required_argument, 0, 'a'},
201 {"port", required_argument, 0, 'p'}, 202 {"port", required_argument, 0, 'p'},
203 {"use-ipv4", no_argument, 0, '4'},
204 {"use-ipv6", no_argument, 0, '6'},
202 {0, 0, 0, 0} 205 {0, 0, 0, 0}
203 }; 206 };
204 207
@@ -206,7 +209,7 @@ process_arguments (int argc, char **argv)
206 return ERROR; 209 return ERROR;
207 210
208 while (1) { 211 while (1) {
209 c = getopt_long (argc, argv, "hVvt:l:H:w:c:T:p:a:A:", longopts, &option); 212 c = getopt_long (argc, argv, "hVvt:l:H:w:c:T:p:a:A:46", longopts, &option);
210 213
211 if (c == -1 || c == EOF) 214 if (c == -1 || c == EOF)
212 break; 215 break;
@@ -269,6 +272,12 @@ process_arguments (int argc, char **argv)
269 case 'a': 272 case 'a':
270 expected_address = optarg; 273 expected_address = optarg;
271 break; 274 break;
275 case '4':
276 query_transport = "-4";
277 break;
278 case '6':
279 query_transport = "-6";
280 break;
272 default: /* usage5 */ 281 default: /* usage5 */
273 usage5(); 282 usage5();
274 } 283 }
@@ -325,6 +334,10 @@ print_help (void)
325 334
326 printf (UT_HOST_PORT, 'p', myport); 335 printf (UT_HOST_PORT, 'p', myport);
327 336
337 printf (" %s\n","-4, --use-ipv4");
338 printf (" %s\n",_("Force dig to only use IPv4 query transport"));
339 printf (" %s\n","-6, --use-ipv6");
340 printf (" %s\n",_("Force dig to only use IPv6 query transport"));
328 printf (" %s\n","-l, --query_address=STRING"); 341 printf (" %s\n","-l, --query_address=STRING");
329 printf (" %s\n",_("Machine name to lookup")); 342 printf (" %s\n",_("Machine name to lookup"));
330 printf (" %s\n","-T, --record_type=STRING"); 343 printf (" %s\n","-T, --record_type=STRING");
diff --git a/plugins/check_ldap.c b/plugins/check_ldap.c
index 65db851..b05aca9 100644
--- a/plugins/check_ldap.c
+++ b/plugins/check_ldap.c
@@ -445,11 +445,6 @@ print_help (void)
445 printf (UT_SUPPORT); 445 printf (UT_SUPPORT);
446} 446}
447 447
448/* todo
449* add option -4 and -6 to the long manual
450*
451*/
452
453void 448void
454print_usage (void) 449print_usage (void)
455{ 450{
diff --git a/plugins/check_ntp.c b/plugins/check_ntp.c
index 76d19ba..16be7c5 100644
--- a/plugins/check_ntp.c
+++ b/plugins/check_ntp.c
@@ -398,7 +398,11 @@ double offset_request(const char *host, int *status){
398 die(STATE_UNKNOWN, "can not create new socket"); 398 die(STATE_UNKNOWN, "can not create new socket");
399 } 399 }
400 if(connect(socklist[i], ai_tmp->ai_addr, ai_tmp->ai_addrlen)){ 400 if(connect(socklist[i], ai_tmp->ai_addr, ai_tmp->ai_addrlen)){
401 die(STATE_UNKNOWN, "can't create socket connection"); 401 /* don't die here, because it is enough if there is one server
402 answering in time. This also would break for dual ipv4/6 stacked
403 ntp servers when the client only supports on of them.
404 */
405 DBG(printf("can't create socket connection on peer %i: %s\n", i, strerror(errno)));
402 } else { 406 } else {
403 ufds[i].fd=socklist[i]; 407 ufds[i].fd=socklist[i];
404 ufds[i].events=POLLIN; 408 ufds[i].events=POLLIN;
@@ -845,6 +849,7 @@ void print_help(void){
845 printf (UT_HELP_VRSN); 849 printf (UT_HELP_VRSN);
846 printf (UT_EXTRA_OPTS); 850 printf (UT_EXTRA_OPTS);
847 printf (UT_HOST_PORT, 'p', "123"); 851 printf (UT_HOST_PORT, 'p', "123");
852 printf (UT_IPv46);
848 printf (" %s\n", "-w, --warning=THRESHOLD"); 853 printf (" %s\n", "-w, --warning=THRESHOLD");
849 printf (" %s\n", _("Offset to result in warning status (seconds)")); 854 printf (" %s\n", _("Offset to result in warning status (seconds)"));
850 printf (" %s\n", "-c, --critical=THRESHOLD"); 855 printf (" %s\n", "-c, --critical=THRESHOLD");
@@ -881,5 +886,5 @@ print_usage(void)
881 printf ("%s\n", _("WARNING: check_ntp is deprecated. Please use check_ntp_peer or")); 886 printf ("%s\n", _("WARNING: check_ntp is deprecated. Please use check_ntp_peer or"));
882 printf ("%s\n\n", _("check_ntp_time instead.")); 887 printf ("%s\n\n", _("check_ntp_time instead."));
883 printf ("%s\n", _("Usage:")); 888 printf ("%s\n", _("Usage:"));
884 printf(" %s -H <host> [-w <warn>] [-c <crit>] [-j <warn>] [-k <crit>] [-v verbose]\n", progname); 889 printf(" %s -H <host> [-w <warn>] [-c <crit>] [-j <warn>] [-k <crit>] [-4|-6] [-v verbose]\n", progname);
885} 890}
diff --git a/plugins/check_ntp_peer.c b/plugins/check_ntp_peer.c
index 50cb7b1..b59c056 100644
--- a/plugins/check_ntp_peer.c
+++ b/plugins/check_ntp_peer.c
@@ -660,6 +660,7 @@ void print_help(void){
660 print_usage(); 660 print_usage();
661 printf (UT_HELP_VRSN); 661 printf (UT_HELP_VRSN);
662 printf (UT_EXTRA_OPTS); 662 printf (UT_EXTRA_OPTS);
663 printf (UT_IPv46);
663 printf (UT_HOST_PORT, 'p', "123"); 664 printf (UT_HOST_PORT, 'p', "123");
664 printf (" %s\n", "-q, --quiet"); 665 printf (" %s\n", "-q, --quiet");
665 printf (" %s\n", _("Returns UNKNOWN instead of CRITICAL or WARNING if server isn't synchronized")); 666 printf (" %s\n", _("Returns UNKNOWN instead of CRITICAL or WARNING if server isn't synchronized"));
@@ -716,6 +717,6 @@ void
716print_usage(void) 717print_usage(void)
717{ 718{
718 printf ("%s\n", _("Usage:")); 719 printf ("%s\n", _("Usage:"));
719 printf(" %s -H <host> [-w <warn>] [-c <crit>] [-W <warn>] [-C <crit>]\n", progname); 720 printf(" %s -H <host> [-4|-6] [-w <warn>] [-c <crit>] [-W <warn>] [-C <crit>]\n", progname);
720 printf(" [-j <warn>] [-k <crit>] [-v verbose]\n"); 721 printf(" [-j <warn>] [-k <crit>] [-v verbose]\n");
721} 722}
diff --git a/plugins/check_ntp_time.c b/plugins/check_ntp_time.c
index d543d6b..bbcaa0b 100644
--- a/plugins/check_ntp_time.c
+++ b/plugins/check_ntp_time.c
@@ -344,7 +344,11 @@ double offset_request(const char *host, int *status){
344 die(STATE_UNKNOWN, "can not create new socket"); 344 die(STATE_UNKNOWN, "can not create new socket");
345 } 345 }
346 if(connect(socklist[i], ai_tmp->ai_addr, ai_tmp->ai_addrlen)){ 346 if(connect(socklist[i], ai_tmp->ai_addr, ai_tmp->ai_addrlen)){
347 die(STATE_UNKNOWN, "can't create socket connection"); 347 /* don't die here, because it is enough if there is one server
348 answering in time. This also would break for dual ipv4/6 stacked
349 ntp servers when the client only supports on of them.
350 */
351 DBG(printf("can't create socket connection on peer %i: %s\n", i, strerror(errno)));
348 } else { 352 } else {
349 ufds[i].fd=socklist[i]; 353 ufds[i].fd=socklist[i];
350 ufds[i].events=POLLIN; 354 ufds[i].events=POLLIN;
@@ -602,6 +606,7 @@ void print_help(void){
602 print_usage(); 606 print_usage();
603 printf (UT_HELP_VRSN); 607 printf (UT_HELP_VRSN);
604 printf (UT_EXTRA_OPTS); 608 printf (UT_EXTRA_OPTS);
609 printf (UT_IPv46);
605 printf (UT_HOST_PORT, 'p', "123"); 610 printf (UT_HOST_PORT, 'p', "123");
606 printf (" %s\n", "-q, --quiet"); 611 printf (" %s\n", "-q, --quiet");
607 printf (" %s\n", _("Returns UNKNOWN instead of CRITICAL if offset cannot be found")); 612 printf (" %s\n", _("Returns UNKNOWN instead of CRITICAL if offset cannot be found"));
@@ -635,6 +640,6 @@ void
635print_usage(void) 640print_usage(void)
636{ 641{
637 printf ("%s\n", _("Usage:")); 642 printf ("%s\n", _("Usage:"));
638 printf(" %s -H <host> [-w <warn>] [-c <crit>] [-v verbose]\n", progname); 643 printf(" %s -H <host> [-4|-6] [-w <warn>] [-c <crit>] [-v verbose]\n", progname);
639} 644}
640 645
diff --git a/plugins/check_pgsql.c b/plugins/check_pgsql.c
index 69edae7..8b0769f 100644
--- a/plugins/check_pgsql.c
+++ b/plugins/check_pgsql.c
@@ -475,6 +475,6 @@ void
475print_usage (void) 475print_usage (void)
476{ 476{
477 printf ("%s\n", _("Usage:")); 477 printf ("%s\n", _("Usage:"));
478 printf ("%s [-H <host>] [-P <port>] [-c <critical time>] [-w <warning time>]\n", progname); 478 printf ("%s [-H <host>] [-4|-6] [-P <port>] [-c <critical time>] [-w <warning time>]\n", progname);
479 printf (" [-t <timeout>] [-d <database>] [-l <logname>] [-p <password>]\n"); 479 printf (" [-t <timeout>] [-d <database>] [-l <logname>] [-p <password>]\n");
480} 480}
diff --git a/plugins/check_procs.c b/plugins/check_procs.c
index 2f2dcc5..00b032a 100644
--- a/plugins/check_procs.c
+++ b/plugins/check_procs.c
@@ -45,15 +45,13 @@ const char *email = "nagiosplug-devel@lists.sourceforge.net";
45 45
46int process_arguments (int, char **); 46int process_arguments (int, char **);
47int validate_arguments (void); 47int validate_arguments (void);
48int check_thresholds (int);
49int convert_to_seconds (char *); 48int convert_to_seconds (char *);
50void print_help (void); 49void print_help (void);
51void print_usage (void); 50void print_usage (void);
52 51
53int wmax = -1; 52char *warning_range = NULL;
54int cmax = -1; 53char *critical_range = NULL;
55int wmin = -1; 54thresholds *procs_thresholds = NULL;
56int cmin = -1;
57 55
58int options = 0; /* bitmask of filter criteria to test against */ 56int options = 0; /* bitmask of filter criteria to test against */
59#define ALL 1 57#define ALL 1
@@ -238,14 +236,14 @@ main (int argc, char **argv)
238 } 236 }
239 237
240 if (metric == METRIC_VSZ) 238 if (metric == METRIC_VSZ)
241 i = check_thresholds (procvsz); 239 i = get_status ((double)procvsz, procs_thresholds);
242 else if (metric == METRIC_RSS) 240 else if (metric == METRIC_RSS)
243 i = check_thresholds (procrss); 241 i = get_status ((double)procrss, procs_thresholds);
244 /* TODO? float thresholds for --metric=CPU */ 242 /* TODO? float thresholds for --metric=CPU */
245 else if (metric == METRIC_CPU) 243 else if (metric == METRIC_CPU)
246 i = check_thresholds ((int)procpcpu); 244 i = get_status (procpcpu, procs_thresholds);
247 else if (metric == METRIC_ELAPSED) 245 else if (metric == METRIC_ELAPSED)
248 i = check_thresholds (procseconds); 246 i = get_status ((double)procseconds, procs_thresholds);
249 247
250 if (metric != METRIC_PROCS) { 248 if (metric != METRIC_PROCS) {
251 if (i == STATE_WARNING) { 249 if (i == STATE_WARNING) {
@@ -276,7 +274,7 @@ main (int argc, char **argv)
276 274
277 /* Needed if procs found, but none match filter */ 275 /* Needed if procs found, but none match filter */
278 if ( metric == METRIC_PROCS ) { 276 if ( metric == METRIC_PROCS ) {
279 result = max_state (result, check_thresholds (procs) ); 277 result = max_state (result, get_status ((double)procs, procs_thresholds) );
280 } 278 }
281 279
282 if ( result == STATE_OK ) { 280 if ( result == STATE_OK ) {
@@ -301,6 +299,13 @@ main (int argc, char **argv)
301 if ( verbose >= 1 && strcmp(fails,"") ) 299 if ( verbose >= 1 && strcmp(fails,"") )
302 printf (" [%s]", fails); 300 printf (" [%s]", fails);
303 301
302 if (metric == METRIC_PROCS)
303 printf (" | procs=%d;%s;%s;0;", procs,
304 warning_range ? warning_range : "",
305 critical_range ? critical_range : "");
306 else
307 printf (" | procs=%d;;;0; procs_warn=%d;;;0; procs_crit=%d;;;0;", procs, warn, crit);
308
304 printf ("\n"); 309 printf ("\n");
305 return result; 310 return result;
306} 311}
@@ -368,28 +373,10 @@ process_arguments (int argc, char **argv)
368 timeout_interval = atoi (optarg); 373 timeout_interval = atoi (optarg);
369 break; 374 break;
370 case 'c': /* critical threshold */ 375 case 'c': /* critical threshold */
371 if (is_integer (optarg)) 376 critical_range = optarg;
372 cmax = atoi (optarg);
373 else if (sscanf (optarg, ":%d", &cmax) == 1)
374 break;
375 else if (sscanf (optarg, "%d:%d", &cmin, &cmax) == 2)
376 break;
377 else if (sscanf (optarg, "%d:", &cmin) == 1)
378 break;
379 else
380 usage4 (_("Critical Process Count must be an integer!"));
381 break; 377 break;
382 case 'w': /* warning threshold */ 378 case 'w': /* warning threshold */
383 if (is_integer (optarg)) 379 warning_range = optarg;
384 wmax = atoi (optarg);
385 else if (sscanf (optarg, ":%d", &wmax) == 1)
386 break;
387 else if (sscanf (optarg, "%d:%d", &wmin, &wmax) == 2)
388 break;
389 else if (sscanf (optarg, "%d:", &wmin) == 1)
390 break;
391 else
392 usage4 (_("Warning Process Count must be an integer!"));
393 break; 380 break;
394 case 'p': /* process id */ 381 case 'p': /* process id */
395 if (sscanf (optarg, "%d%[^0-9]", &ppid, tmp) == 1) { 382 if (sscanf (optarg, "%d%[^0-9]", &ppid, tmp) == 1) {
@@ -518,16 +505,19 @@ process_arguments (int argc, char **argv)
518 } 505 }
519 506
520 c = optind; 507 c = optind;
521 if (wmax == -1 && argv[c]) 508 if ((! warning_range) && argv[c])
522 wmax = atoi (argv[c++]); 509 warning_range = argv[c++];
523 if (cmax == -1 && argv[c]) 510 if ((! critical_range) && argv[c])
524 cmax = atoi (argv[c++]); 511 critical_range = argv[c++];
525 if (statopts == NULL && argv[c]) { 512 if (statopts == NULL && argv[c]) {
526 xasprintf (&statopts, "%s", argv[c++]); 513 xasprintf (&statopts, "%s", argv[c++]);
527 xasprintf (&fmt, _("%s%sSTATE = %s"), (fmt ? fmt : ""), (options ? ", " : ""), statopts); 514 xasprintf (&fmt, _("%s%sSTATE = %s"), (fmt ? fmt : ""), (options ? ", " : ""), statopts);
528 options |= STAT; 515 options |= STAT;
529 } 516 }
530 517
518 /* this will abort in case of invalid ranges */
519 set_thresholds (&procs_thresholds, warning_range, critical_range);
520
531 return validate_arguments (); 521 return validate_arguments ();
532} 522}
533 523
@@ -536,27 +526,6 @@ process_arguments (int argc, char **argv)
536int 526int
537validate_arguments () 527validate_arguments ()
538{ 528{
539
540 if (wmax >= 0 && wmin == -1)
541 wmin = 0;
542 if (cmax >= 0 && cmin == -1)
543 cmin = 0;
544 if (wmax >= wmin && cmax >= cmin) { /* standard ranges */
545 if (wmax > cmax && cmax != -1) {
546 printf (_("wmax (%d) cannot be greater than cmax (%d)\n"), wmax, cmax);
547 return ERROR;
548 }
549 if (cmin > wmin && wmin != -1) {
550 printf (_("wmin (%d) cannot be less than cmin (%d)\n"), wmin, cmin);
551 return ERROR;
552 }
553 }
554
555/* if (wmax == -1 && cmax == -1 && wmin == -1 && cmin == -1) { */
556/* printf ("At least one threshold must be set\n"); */
557/* return ERROR; */
558/* } */
559
560 if (options == 0) 529 if (options == 0)
561 options = ALL; 530 options = ALL;
562 531
@@ -579,40 +548,6 @@ validate_arguments ()
579} 548}
580 549
581 550
582
583/* Check thresholds against value */
584int
585check_thresholds (int value)
586{
587 if (wmax == -1 && cmax == -1 && wmin == -1 && cmin == -1) {
588 return OK;
589 }
590 else if (cmax >= 0 && cmin >= 0 && cmax < cmin) {
591 if (value > cmax && value < cmin)
592 return STATE_CRITICAL;
593 }
594 else if (cmax >= 0 && value > cmax) {
595 return STATE_CRITICAL;
596 }
597 else if (cmin >= 0 && value < cmin) {
598 return STATE_CRITICAL;
599 }
600
601 if (wmax >= 0 && wmin >= 0 && wmax < wmin) {
602 if (value > wmax && value < wmin) {
603 return STATE_WARNING;
604 }
605 }
606 else if (wmax >= 0 && value > wmax) {
607 return STATE_WARNING;
608 }
609 else if (wmin >= 0 && value < wmin) {
610 return STATE_WARNING;
611 }
612 return STATE_OK;
613}
614
615
616/* convert the elapsed time to seconds */ 551/* convert the elapsed time to seconds */
617int 552int
618convert_to_seconds(char *etime) { 553convert_to_seconds(char *etime) {
diff --git a/plugins/check_snmp.c b/plugins/check_snmp.c
index 2d9861b..7c5d0ec 100644
--- a/plugins/check_snmp.c
+++ b/plugins/check_snmp.c
@@ -144,6 +144,25 @@ double previous_value[MAX_OIDS];
144int perf_labels = 1; 144int perf_labels = 1;
145 145
146 146
147static char *fix_snmp_range(char *th)
148{
149 double left, right;
150 char *colon, *ret;
151 if (!(colon = strchr(th, ':')))
152 return th;
153 *colon = 0;
154
155 left = strtod(th, NULL);
156 right = strtod(colon + 1, NULL);
157 if (right >= left) {
158 return th;
159 }
160 ret = malloc(strlen(th) + strlen(colon + 1) + 2);
161 sprintf(ret, "@%s:%s", colon + 1, th);
162 free(th);
163 return ret;
164}
165
147int 166int
148main (int argc, char **argv) 167main (int argc, char **argv)
149{ 168{
@@ -181,8 +200,8 @@ main (int argc, char **argv)
181 bindtextdomain (PACKAGE, LOCALEDIR); 200 bindtextdomain (PACKAGE, LOCALEDIR);
182 textdomain (PACKAGE); 201 textdomain (PACKAGE);
183 202
184 labels = malloc (labels_size); 203 labels = malloc (labels_size * sizeof(*labels));
185 unitv = malloc (unitv_size); 204 unitv = malloc (unitv_size * sizeof(*unitv));
186 for (i = 0; i < MAX_OIDS; i++) 205 for (i = 0; i < MAX_OIDS; i++)
187 eval_method[i] = CHECK_UNDEF; 206 eval_method[i] = CHECK_UNDEF;
188 207
@@ -228,6 +247,10 @@ main (int argc, char **argv)
228 for (i=0; i<numoids; i++) { 247 for (i=0; i<numoids; i++) {
229 char *w = th_warn ? strndup(th_warn, strcspn(th_warn, ",")) : NULL; 248 char *w = th_warn ? strndup(th_warn, strcspn(th_warn, ",")) : NULL;
230 char *c = th_crit ? strndup(th_crit, strcspn(th_crit, ",")) : NULL; 249 char *c = th_crit ? strndup(th_crit, strcspn(th_crit, ",")) : NULL;
250 /* translate "2:1" to "@1:2" for backwards compatibility */
251 w = w ? fix_snmp_range(w) : NULL;
252 c = c ? fix_snmp_range(c) : NULL;
253
231 /* Skip empty thresholds, while avoiding segfault */ 254 /* Skip empty thresholds, while avoiding segfault */
232 set_thresholds(&thlds[i], 255 set_thresholds(&thlds[i],
233 w ? strpbrk(w, NP_THRESHOLDS_CHARS) : NULL, 256 w ? strpbrk(w, NP_THRESHOLDS_CHARS) : NULL,
@@ -396,7 +419,7 @@ main (int argc, char **argv)
396 show = strstr (response, "Timeticks: "); 419 show = strstr (response, "Timeticks: ");
397 } 420 }
398 else 421 else
399 show = response; 422 show = response + 3;
400 423
401 iresult = STATE_DEPENDENT; 424 iresult = STATE_DEPENDENT;
402 425
@@ -405,7 +428,7 @@ main (int argc, char **argv)
405 if (thlds[i]->warning || thlds[i]->critical || calculate_rate) { 428 if (thlds[i]->warning || thlds[i]->critical || calculate_rate) {
406 ptr = strpbrk (show, "0123456789"); 429 ptr = strpbrk (show, "0123456789");
407 if (ptr == NULL) 430 if (ptr == NULL)
408 die (STATE_UNKNOWN,_("No valid data returned")); 431 die (STATE_UNKNOWN,_("No valid data returned (%s)\n"), show);
409 response_value[i] = strtod (ptr, NULL); 432 response_value[i] = strtod (ptr, NULL);
410 433
411 if(calculate_rate) { 434 if(calculate_rate) {
@@ -745,9 +768,9 @@ process_arguments (int argc, char **argv)
745 break; 768 break;
746 case 'l': /* label */ 769 case 'l': /* label */
747 nlabels++; 770 nlabels++;
748 if (nlabels >= labels_size) { 771 if (nlabels > labels_size) {
749 labels_size += 8; 772 labels_size += 8;
750 labels = realloc (labels, labels_size); 773 labels = realloc (labels, labels_size * sizeof(*labels));
751 if (labels == NULL) 774 if (labels == NULL)
752 die (STATE_UNKNOWN, _("Could not reallocate labels[%d]"), (int)nlabels); 775 die (STATE_UNKNOWN, _("Could not reallocate labels[%d]"), (int)nlabels);
753 } 776 }
@@ -757,13 +780,13 @@ process_arguments (int argc, char **argv)
757 if (ptr[0] == '\'') 780 if (ptr[0] == '\'')
758 labels[nlabels - 1] = ptr + 1; 781 labels[nlabels - 1] = ptr + 1;
759 while (ptr && (ptr = nextarg (ptr))) { 782 while (ptr && (ptr = nextarg (ptr))) {
760 if (nlabels >= labels_size) { 783 nlabels++;
784 if (nlabels > labels_size) {
761 labels_size += 8; 785 labels_size += 8;
762 labels = realloc (labels, labels_size); 786 labels = realloc (labels, labels_size * sizeof(*labels));
763 if (labels == NULL) 787 if (labels == NULL)
764 die (STATE_UNKNOWN, _("Could not reallocate labels\n")); 788 die (STATE_UNKNOWN, _("Could not reallocate labels\n"));
765 } 789 }
766 nlabels++;
767 ptr = thisarg (ptr); 790 ptr = thisarg (ptr);
768 if (ptr[0] == '\'') 791 if (ptr[0] == '\'')
769 labels[nlabels - 1] = ptr + 1; 792 labels[nlabels - 1] = ptr + 1;
@@ -774,9 +797,9 @@ process_arguments (int argc, char **argv)
774 case 'u': /* units */ 797 case 'u': /* units */
775 units = optarg; 798 units = optarg;
776 nunits++; 799 nunits++;
777 if (nunits >= unitv_size) { 800 if (nunits > unitv_size) {
778 unitv_size += 8; 801 unitv_size += 8;
779 unitv = realloc (unitv, unitv_size); 802 unitv = realloc (unitv, unitv_size * sizeof(*unitv));
780 if (unitv == NULL) 803 if (unitv == NULL)
781 die (STATE_UNKNOWN, _("Could not reallocate units [%d]\n"), (int)nunits); 804 die (STATE_UNKNOWN, _("Could not reallocate units [%d]\n"), (int)nunits);
782 } 805 }
@@ -786,9 +809,9 @@ process_arguments (int argc, char **argv)
786 if (ptr[0] == '\'') 809 if (ptr[0] == '\'')
787 unitv[nunits - 1] = ptr + 1; 810 unitv[nunits - 1] = ptr + 1;
788 while (ptr && (ptr = nextarg (ptr))) { 811 while (ptr && (ptr = nextarg (ptr))) {
789 if (nunits >= unitv_size) { 812 if (nunits > unitv_size) {
790 unitv_size += 8; 813 unitv_size += 8;
791 unitv = realloc (unitv, unitv_size); 814 unitv = realloc (unitv, unitv_size * sizeof(*unitv));
792 if (units == NULL) 815 if (units == NULL)
793 die (STATE_UNKNOWN, _("Could not realloc() units\n")); 816 die (STATE_UNKNOWN, _("Could not realloc() units\n"));
794 } 817 }
diff --git a/plugins/check_ssh.c b/plugins/check_ssh.c
index 4d63394..6e8a5fc 100644
--- a/plugins/check_ssh.c
+++ b/plugins/check_ssh.c
@@ -307,6 +307,6 @@ void
307print_usage (void) 307print_usage (void)
308{ 308{
309 printf ("%s\n", _("Usage:")); 309 printf ("%s\n", _("Usage:"));
310 printf ("%s [-46] [-t <timeout>] [-r <remote version>] [-p <port>] <host>\n", progname); 310 printf ("%s [-4|-6] [-t <timeout>] [-r <remote version>] [-p <port>] <host>\n", progname);
311} 311}
312 312
diff --git a/plugins/common.h b/plugins/common.h
index 09af7e7..c0dc2f4 100644
--- a/plugins/common.h
+++ b/plugins/common.h
@@ -141,6 +141,7 @@
141#ifdef HAVE_GNUTLS_OPENSSL_H 141#ifdef HAVE_GNUTLS_OPENSSL_H
142# include <gnutls/openssl.h> 142# include <gnutls/openssl.h>
143#else 143#else
144# define OPENSSL_LOAD_CONF /* See the OPENSSL_config(3) man page. */
144# ifdef HAVE_SSL_H 145# ifdef HAVE_SSL_H
145# include <rsa.h> 146# include <rsa.h>
146# include <crypto.h> 147# include <crypto.h>
diff --git a/plugins/t/check_dig.t b/plugins/t/check_dig.t
index 323859e..1ab4b42 100644
--- a/plugins/t/check_dig.t
+++ b/plugins/t/check_dig.t
@@ -10,30 +10,30 @@ use NPTest;
10 10
11plan skip_all => "check_dig not compiled" unless (-x "check_dig"); 11plan skip_all => "check_dig not compiled" unless (-x "check_dig");
12 12
13plan tests => 12; 13plan tests => 16;
14 14
15my $successOutput = '/DNS OK - [\.0-9]+ seconds? response time/'; 15my $successOutput = '/DNS OK - [\.0-9]+ seconds? response time/';
16 16
17my $hostname_valid = getTestParameter( 17my $hostname_valid = getTestParameter(
18 "NP_HOSTNAME_VALID", 18 "NP_HOSTNAME_VALID",
19 "A valid (known to DNS) hostname", 19 "A valid (known to DNS) hostname",
20 "nagios.com" 20 "nagiosplugins.org"
21 ); 21 );
22 22
23my $hostname_valid_ip = getTestParameter( 23my $hostname_valid_ip = getTestParameter(
24 "NP_HOSTNAME_VALID_IP", 24 "NP_HOSTNAME_VALID_IP",
25 "The IP address of the valid hostname $hostname_valid", 25 "The IP address of the valid hostname $hostname_valid",
26 "66.118.156.50", 26 "67.207.143.200",
27 ); 27 );
28 28
29my $hostname_valid_reverse = getTestParameter( 29my $hostname_valid_reverse = getTestParameter(
30 "NP_HOSTNAME_VALID_REVERSE", 30 "NP_HOSTNAME_VALID_REVERSE",
31 "The hostname of $hostname_valid_ip", 31 "The hostname of $hostname_valid_ip",
32 "66-118-156-50.static.sagonet.net.", 32 "nagiosplugins.org.",
33 ); 33 );
34 34
35my $hostname_invalid = getTestParameter( 35my $hostname_invalid = getTestParameter(
36 "NP_HOSTNAME_INVALID", 36 "NP_HOSTNAME_INVALID",
37 "An invalid (not known to DNS) hostname", 37 "An invalid (not known to DNS) hostname",
38 "nosuchhost.altinity.com", 38 "nosuchhost.altinity.com",
39 ); 39 );
@@ -69,6 +69,14 @@ SKIP: {
69 cmp_ok( $res->return_code, '==', 0, "Found $hostname_valid on $dns_server"); 69 cmp_ok( $res->return_code, '==', 0, "Found $hostname_valid on $dns_server");
70 like ( $res->output, $successOutput, "Output OK" ); 70 like ( $res->output, $successOutput, "Output OK" );
71 71
72 $res = NPTest->testCmd("./check_dig -H $dns_server -l $hostname_valid -t 5 -4");
73 cmp_ok( $res->return_code, '==', 0, "Found $hostname_valid on $dns_server");
74 like ( $res->output, $successOutput, "Output OK for IPv4" );
75
76 $res = NPTest->testCmd("./check_dig -H $dns_server -l $hostname_valid -t 5 -6");
77 cmp_ok( $res->return_code, '==', 0, "Found $hostname_valid on $dns_server");
78 like ( $res->output, $successOutput, "Output OK for IPv6" );
79
72 $res = NPTest->testCmd("./check_dig -H $dns_server -l $hostname_valid -a $hostname_valid_ip -t 5"); 80 $res = NPTest->testCmd("./check_dig -H $dns_server -l $hostname_valid -a $hostname_valid_ip -t 5");
73 cmp_ok( $res->return_code, '==', 0, "Got expected address"); 81 cmp_ok( $res->return_code, '==', 0, "Got expected address");
74 82