summaryrefslogtreecommitdiffstats
path: root/plugins
diff options
context:
space:
mode:
Diffstat (limited to 'plugins')
-rw-r--r--plugins/check_disk.c82
-rw-r--r--plugins/check_dns.c130
-rw-r--r--plugins/check_fping.c5
-rw-r--r--plugins/check_hpjd.c96
-rw-r--r--plugins/check_mrtg.c166
-rw-r--r--plugins/check_nwstat.c94
-rw-r--r--plugins/check_ping.c6
-rw-r--r--plugins/check_vsz.c33
-rw-r--r--plugins/urlize.c4
-rw-r--r--plugins/utils.c67
10 files changed, 243 insertions, 440 deletions
diff --git a/plugins/check_disk.c b/plugins/check_disk.c
index 9ce4a32..bde9563 100644
--- a/plugins/check_disk.c
+++ b/plugins/check_disk.c
@@ -37,9 +37,10 @@
37#include <stdarg.h> 37#include <stdarg.h>
38 38
39#define PROGNAME "check_disk" 39#define PROGNAME "check_disk"
40#define REVISION "$Revision$"
41#define COPYRIGHT "2000-2002"
40 42
41int process_arguments (int, char **); 43int process_arguments (int, char **);
42int call_getopt (int, char **);
43int validate_arguments (void); 44int validate_arguments (void);
44int check_disk (int usp, int free_disk); 45int check_disk (int usp, int free_disk);
45void print_help (void); 46void print_help (void);
@@ -49,7 +50,7 @@ int w_df = -1;
49int c_df = -1; 50int c_df = -1;
50float w_dfp = -1.0; 51float w_dfp = -1.0;
51float c_dfp = -1.0; 52float c_dfp = -1.0;
52char *path = NULL; 53char *path = "";
53int verbose = FALSE; 54int verbose = FALSE;
54int display_mntp = FALSE; 55int display_mntp = FALSE;
55 56
@@ -73,7 +74,7 @@ main (int argc, char **argv)
73 if (process_arguments (argc, argv) != OK) 74 if (process_arguments (argc, argv) != OK)
74 usage ("Could not parse arguments\n"); 75 usage ("Could not parse arguments\n");
75 76
76 command_line = ssprintf (command_line, "%s %s", DF_COMMAND, path); 77 asprintf (&command_line, "%s %s", DF_COMMAND, path);
77 78
78 if (verbose) 79 if (verbose)
79 printf ("%s ==> ", command_line); 80 printf ("%s ==> ", command_line);
@@ -175,41 +176,6 @@ process_arguments (int argc, char **argv)
175{ 176{
176 int c; 177 int c;
177 178
178 if (argc < 2)
179 return ERROR;
180
181 for (c = 1; c < argc; c++) {
182 if (strcmp ("-to", argv[c]) == 0) {
183 strcpy (argv[c], "-t");
184 }
185 }
186
187 c = 0;
188 while ((c += (call_getopt (argc - c, &argv[c]))) < argc) {
189
190 if (w_dfp == -1 && is_intnonneg (argv[c]))
191 w_dfp = (100.0 - atof (argv[c]));
192 else if (c_dfp == -1 && is_intnonneg (argv[c]))
193 c_dfp = (100.0 - atof (argv[c]));
194 else if (path == NULL || path[0] == 0)
195 path = strscpy (path, argv[c]);
196 }
197
198 if (path == NULL) {
199 path = malloc (1);
200 if (path == NULL)
201 terminate (STATE_UNKNOWN, "Could not malloc empty path\n");
202 path[0] = 0;
203 }
204
205 return validate_arguments ();
206}
207
208int
209call_getopt (int argc, char **argv)
210{
211 int c, i = 0;
212
213#ifdef HAVE_GETOPT_H 179#ifdef HAVE_GETOPT_H
214 int option_index = 0; 180 int option_index = 0;
215 static struct option long_options[] = { 181 static struct option long_options[] = {
@@ -226,28 +192,25 @@ call_getopt (int argc, char **argv)
226 }; 192 };
227#endif 193#endif
228 194
195 if (argc < 2)
196 return ERROR;
197
198 for (c = 1; c < argc; c++)
199 if (strcmp ("-to", argv[c]) == 0)
200 strcpy (argv[c], "-t");
201
229 while (1) { 202 while (1) {
230#ifdef HAVE_GETOPT_H 203#ifdef HAVE_GETOPT_H
231 c = 204 c =
232 getopt_long (argc, argv, "+?Vhvt:c:w:p:m", long_options, &option_index); 205 getopt_long (argc, argv, "Vhvt:c:w:p:m", long_options, &option_index);
233#else 206#else
234 c = getopt (argc, argv, "+?Vhvt:c:w:p:m"); 207 c = getopt (argc, argv, "Vhvt:c:w:p:m");
235#endif 208#endif
236 209
237 i++; 210 if (c == -1 || c == EOF)
238
239 if (c == -1 || c == EOF || c == 1)
240 break; 211 break;
241 212
242 switch (c) { 213 switch (c) {
243 case 't':
244 case 'c':
245 case 'w':
246 case 'p':
247 i++;
248 }
249
250 switch (c) {
251 case 'w': /* warning time threshold */ 214 case 'w': /* warning time threshold */
252 if (is_intnonneg (optarg)) { 215 if (is_intnonneg (optarg)) {
253 w_df = atoi (optarg); 216 w_df = atoi (optarg);
@@ -298,7 +261,7 @@ call_getopt (int argc, char **argv)
298 display_mntp = TRUE; 261 display_mntp = TRUE;
299 break; 262 break;
300 case 'V': /* version */ 263 case 'V': /* version */
301 print_revision (my_basename (argv[0]), "$Revision$"); 264 print_revision (PROGNAME, REVISION);
302 exit (STATE_OK); 265 exit (STATE_OK);
303 case 'h': /* help */ 266 case 'h': /* help */
304 print_help (); 267 print_help ();
@@ -308,7 +271,18 @@ call_getopt (int argc, char **argv)
308 break; 271 break;
309 } 272 }
310 } 273 }
311 return i; 274
275 c = optind;
276 if (w_dfp == -1 && argc > c && is_intnonneg (argv[c]))
277 w_dfp = (100.0 - atof (argv[c++]));
278
279 if (c_dfp == -1 && argc > c && is_intnonneg (argv[c]))
280 c_dfp = (100.0 - atof (argv[c++]));
281
282 if (argc > c && strlen (path) == 0)
283 path = argv[c++];
284
285 return validate_arguments ();
312} 286}
313 287
314int 288int
@@ -358,7 +332,7 @@ check_disk (usp, free_disk)
358void 332void
359print_help (void) 333print_help (void)
360{ 334{
361 print_revision (PROGNAME, "$Revision$"); 335 print_revision (PROGNAME, REVISION);
362 printf 336 printf
363 ("Copyright (c) 2000 Ethan Galstad/Karl DeBisschop\n\n" 337 ("Copyright (c) 2000 Ethan Galstad/Karl DeBisschop\n\n"
364 "This plugin will check the percent of used disk space on a mounted\n" 338 "This plugin will check the percent of used disk space on a mounted\n"
diff --git a/plugins/check_dns.c b/plugins/check_dns.c
index bc0400f..f9cf288 100644
--- a/plugins/check_dns.c
+++ b/plugins/check_dns.c
@@ -48,11 +48,14 @@
48#include "popen.h" 48#include "popen.h"
49#include "utils.h" 49#include "utils.h"
50 50
51#define PROGNAME "check_dns"
52#define REVISION "$Revision$"
53#define COPYRIGHT "2000-2002"
54
51int process_arguments (int, char **); 55int process_arguments (int, char **);
52int call_getopt (int, char **);
53int validate_arguments (void); 56int validate_arguments (void);
54void print_usage (char *); 57void print_usage (void);
55void print_help (char *); 58void print_help (void);
56int error_scan (char *); 59int error_scan (char *);
57 60
58#define ADDRESS_LENGTH 256 61#define ADDRESS_LENGTH 256
@@ -80,13 +83,12 @@ main (int argc, char **argv)
80 } 83 }
81 84
82 if (process_arguments (argc, argv) != OK) { 85 if (process_arguments (argc, argv) != OK) {
83 print_usage (my_basename (argv[0])); 86 print_usage ();
84 return STATE_UNKNOWN; 87 return STATE_UNKNOWN;
85 } 88 }
86 89
87 /* get the command to run */ 90 /* get the command to run */
88 command_line = ssprintf (command_line, "%s %s %s", NSLOOKUP_COMMAND, 91 sprintf (&command_line, "%s %s %s", NSLOOKUP_COMMAND, query_address, dns_server);
89 query_address, dns_server);
90 92
91 alarm (timeout_interval); 93 alarm (timeout_interval);
92 time (&start_time); 94 time (&start_time);
@@ -171,7 +173,7 @@ main (int argc, char **argv)
171 /* compare to expected address */ 173 /* compare to expected address */
172 if (result == STATE_OK && match_expected_address && strcmp(address, expected_address)) { 174 if (result == STATE_OK && match_expected_address && strcmp(address, expected_address)) {
173 result = STATE_CRITICAL; 175 result = STATE_CRITICAL;
174 output = ssprintf(output, "expected %s but got %s", expected_address, address); 176 asprintf(&output, "expected %s but got %s", expected_address, address);
175 } 177 }
176 178
177 (void) time (&end_time); 179 (void) time (&end_time);
@@ -256,46 +258,6 @@ process_arguments (int argc, char **argv)
256{ 258{
257 int c; 259 int c;
258 260
259 if (argc < 2)
260 return ERROR;
261
262 for (c = 1; c < argc; c++)
263 if (strcmp ("-to", argv[c]) == 0)
264 strcpy (argv[c], "-t");
265
266 c = 0;
267 while (c += (call_getopt (argc - c, &argv[c]))) {
268 if (argc <= c)
269 break;
270 if (query_address[0] == 0) {
271 if (is_host (argv[c]) == FALSE) {
272 printf ("Invalid name/address: %s\n\n", argv[c]);
273 return ERROR;
274 }
275 if (strlen (argv[c]) >= ADDRESS_LENGTH)
276 terminate (STATE_UNKNOWN, "Input buffer overflow\n");
277 strcpy (query_address, argv[c]);
278 }
279 else if (dns_server[0] == 0) {
280 if (is_host (argv[c]) == FALSE) {
281 printf ("Invalid name/address: %s\n\n", argv[c]);
282 return ERROR;
283 }
284 if (strlen (argv[c]) >= ADDRESS_LENGTH)
285 terminate (STATE_UNKNOWN, "Input buffer overflow\n");
286 strcpy (dns_server, argv[c]);
287 }
288 }
289
290 return validate_arguments ();
291
292}
293
294int
295call_getopt (int argc, char **argv)
296{
297 int c, i = 1;
298
299#ifdef HAVE_GETOPT_H 261#ifdef HAVE_GETOPT_H
300 int opt_index = 0; 262 int opt_index = 0;
301 static struct option long_opts[] = { 263 static struct option long_opts[] = {
@@ -311,37 +273,33 @@ call_getopt (int argc, char **argv)
311 }; 273 };
312#endif 274#endif
313 275
276 if (argc < 2)
277 return ERROR;
278
279 for (c = 1; c < argc; c++)
280 if (strcmp ("-to", argv[c]) == 0)
281 strcpy (argv[c], "-t");
314 282
315 while (1) { 283 while (1) {
316#ifdef HAVE_GETOPT_H 284#ifdef HAVE_GETOPT_H
317 c = getopt_long (argc, argv, "+?hVvt:H:s:r:a:", long_opts, &opt_index); 285 c = getopt_long (argc, argv, "hVvt:H:s:r:a:", long_opts, &opt_index);
318#else 286#else
319 c = getopt (argc, argv, "+?hVvt:H:s:r:a:"); 287 c = getopt (argc, argv, "hVvt:H:s:r:a:");
320#endif 288#endif
321 289
322 if (c == -1 || c == EOF) 290 if (c == -1 || c == EOF)
323 break; 291 break;
324 292
325 i++;
326 switch (c) {
327 case 't':
328 case 'H':
329 case 's':
330 case 'r':
331 case 'a':
332 i++;
333 }
334
335 switch (c) { 293 switch (c) {
336 case '?': /* args not parsable */ 294 case '?': /* args not parsable */
337 printf ("%s: Unknown argument: %s\n\n", my_basename (argv[0]), optarg); 295 printf ("%s: Unknown argument: %s\n\n", PROGNAME, optarg);
338 print_usage (my_basename (argv[0])); 296 print_usage ();
339 exit (STATE_UNKNOWN); 297 exit (STATE_UNKNOWN);
340 case 'h': /* help */ 298 case 'h': /* help */
341 print_help (my_basename (argv[0])); 299 print_help ();
342 exit (STATE_OK); 300 exit (STATE_OK);
343 case 'V': /* version */ 301 case 'V': /* version */
344 print_revision (my_basename (argv[0]), "$Revision$"); 302 print_revision (PROGNAME, REVISION);
345 exit (STATE_OK); 303 exit (STATE_OK);
346 case 'v': /* version */ 304 case 'v': /* version */
347 verbose = TRUE; 305 verbose = TRUE;
@@ -352,7 +310,7 @@ call_getopt (int argc, char **argv)
352 case 'H': /* hostname */ 310 case 'H': /* hostname */
353 if (is_host (optarg) == FALSE) { 311 if (is_host (optarg) == FALSE) {
354 printf ("Invalid host name/address\n\n"); 312 printf ("Invalid host name/address\n\n");
355 print_usage (my_basename (argv[0])); 313 print_usage ();
356 exit (STATE_UNKNOWN); 314 exit (STATE_UNKNOWN);
357 } 315 }
358 if (strlen (optarg) >= ADDRESS_LENGTH) 316 if (strlen (optarg) >= ADDRESS_LENGTH)
@@ -362,7 +320,7 @@ call_getopt (int argc, char **argv)
362 case 's': /* server name */ 320 case 's': /* server name */
363 if (is_host (optarg) == FALSE) { 321 if (is_host (optarg) == FALSE) {
364 printf ("Invalid server name/address\n\n"); 322 printf ("Invalid server name/address\n\n");
365 print_usage (my_basename (argv[0])); 323 print_usage ();
366 exit (STATE_UNKNOWN); 324 exit (STATE_UNKNOWN);
367 } 325 }
368 if (strlen (optarg) >= ADDRESS_LENGTH) 326 if (strlen (optarg) >= ADDRESS_LENGTH)
@@ -372,7 +330,7 @@ call_getopt (int argc, char **argv)
372 case 'r': /* reverse server name */ 330 case 'r': /* reverse server name */
373 if (is_host (optarg) == FALSE) { 331 if (is_host (optarg) == FALSE) {
374 printf ("Invalid host name/address\n\n"); 332 printf ("Invalid host name/address\n\n");
375 print_usage (my_basename (argv[0])); 333 print_usage ();
376 exit (STATE_UNKNOWN); 334 exit (STATE_UNKNOWN);
377 } 335 }
378 if (strlen (optarg) >= ADDRESS_LENGTH) 336 if (strlen (optarg) >= ADDRESS_LENGTH)
@@ -382,7 +340,7 @@ call_getopt (int argc, char **argv)
382 case 'a': /* expected address */ 340 case 'a': /* expected address */
383 if (is_dotted_quad (optarg) == FALSE) { 341 if (is_dotted_quad (optarg) == FALSE) {
384 printf ("Invalid expected address\n\n"); 342 printf ("Invalid expected address\n\n");
385 print_usage (my_basename (argv[0])); 343 print_usage ();
386 exit (STATE_UNKNOWN); 344 exit (STATE_UNKNOWN);
387 } 345 }
388 if (strlen (optarg) >= ADDRESS_LENGTH) 346 if (strlen (optarg) >= ADDRESS_LENGTH)
@@ -392,7 +350,29 @@ call_getopt (int argc, char **argv)
392 break; 350 break;
393 } 351 }
394 } 352 }
395 return i; 353
354 c = optind;
355 if (query_address[0] == 0) {
356 if (is_host (argv[c]) == FALSE) {
357 printf ("Invalid name/address: %s\n\n", argv[c]);
358 return ERROR;
359 }
360 if (strlen (argv[c]) >= ADDRESS_LENGTH)
361 terminate (STATE_UNKNOWN, "Input buffer overflow\n");
362 strcpy (query_address, argv[c++]);
363 }
364
365 if (dns_server[0] == 0) {
366 if (is_host (argv[c]) == FALSE) {
367 printf ("Invalid name/address: %s\n\n", argv[c]);
368 return ERROR;
369 }
370 if (strlen (argv[c]) >= ADDRESS_LENGTH)
371 terminate (STATE_UNKNOWN, "Input buffer overflow\n");
372 strcpy (dns_server, argv[c++]);
373 }
374
375 return validate_arguments ();
396} 376}
397 377
398int 378int
@@ -405,21 +385,21 @@ validate_arguments ()
405} 385}
406 386
407void 387void
408print_usage (char *cmd) 388print_usage (void)
409{ 389{
410 printf ("Usage: %s -H host [-s server] [-a expected-address] [-t timeout]\n" " %s --help\n" 390 printf ("Usage: %s -H host [-s server] [-a expected-address] [-t timeout]\n" " %s --help\n"
411 " %s --version\n", cmd, cmd, cmd); 391 " %s --version\n", PROGNAME, PROGNAME, PROGNAME);
412} 392}
413 393
414void 394void
415print_help (char *cmd) 395print_help (void)
416{ 396{
417 print_revision (cmd, "$Revision$"); 397 print_revision (PROGNAME, REVISION);
418 printf ("Copyright (c) 1999 Ethan Galstad (nagios@nagios.org)\n\n"); 398 printf ("Copyright (c) 1999 Ethan Galstad (nagios@nagios.org)\n\n");
419 print_usage (cmd); 399 print_usage ();
420 printf ("\n");
421 printf 400 printf
422 ("-H, --hostname=HOST\n" 401 ("\nOptions:\n"
402 "-H, --hostname=HOST\n"
423 " The name or address you want to query\n" 403 " The name or address you want to query\n"
424 "-s, --server=HOST\n" 404 "-s, --server=HOST\n"
425 " Optional DNS server you want to use for the lookup\n" 405 " Optional DNS server you want to use for the lookup\n"
diff --git a/plugins/check_fping.c b/plugins/check_fping.c
index 9a2dd55..da11e67 100644
--- a/plugins/check_fping.c
+++ b/plugins/check_fping.c
@@ -71,9 +71,8 @@ main (int argc, char **argv)
71 server = strscpy (server, server_name); 71 server = strscpy (server, server_name);
72 72
73 /* compose the command */ 73 /* compose the command */
74 command_line = ssprintf 74 asprintf (&command_line, "%s -b %d -c %d %s", PATH_TO_FPING,
75 (command_line, "%s -b %d -c %d %s", 75 packet_size, packet_count, server);
76 PATH_TO_FPING, packet_size, packet_count, server);
77 76
78 if (verbose) 77 if (verbose)
79 printf ("%s\n", command_line); 78 printf ("%s\n", command_line);
diff --git a/plugins/check_hpjd.c b/plugins/check_hpjd.c
index 6d42cd3..42b4bb5 100644
--- a/plugins/check_hpjd.c
+++ b/plugins/check_hpjd.c
@@ -66,6 +66,8 @@
66#include "utils.h" 66#include "utils.h"
67 67
68#define PROGNAME "check_hpjd" 68#define PROGNAME "check_hpjd"
69#define REVISION "$Revision$"
70#define COPYRIGHT "2000-2002"
69 71
70#define HPJD_LINE_STATUS ".1.3.6.1.4.1.11.2.3.9.1.1.2.1" 72#define HPJD_LINE_STATUS ".1.3.6.1.4.1.11.2.3.9.1.1.2.1"
71#define HPJD_PAPER_STATUS ".1.3.6.1.4.1.11.2.3.9.1.1.2.2" 73#define HPJD_PAPER_STATUS ".1.3.6.1.4.1.11.2.3.9.1.1.2.2"
@@ -84,13 +86,13 @@
84#define OFFLINE 1 86#define OFFLINE 1
85 87
86int process_arguments (int, char **); 88int process_arguments (int, char **);
87int call_getopt (int, char **);
88int validate_arguments (void); 89int validate_arguments (void);
89void print_help (void); 90void print_help (void);
90void print_usage (void); 91void print_usage (void);
91 92
92char *community = NULL; 93char *community = NULL;
93char *address = NULL; 94char *address = "127.0.0.1";
95
94 96
95int 97int
96main (int argc, char **argv) 98main (int argc, char **argv)
@@ -386,55 +388,6 @@ process_arguments (int argc, char **argv)
386{ 388{
387 int c; 389 int c;
388 390
389 if (argc < 2)
390 return ERROR;
391
392 for (c = 1; c < argc; c++) {
393 if (strcmp ("-to", argv[c]) == 0)
394 strcpy (argv[c], "-t");
395 else if (strcmp ("-wt", argv[c]) == 0)
396 strcpy (argv[c], "-w");
397 else if (strcmp ("-ct", argv[c]) == 0)
398 strcpy (argv[c], "-c");
399 }
400
401
402
403 c = 0;
404 while ((c += (call_getopt (argc - c, &argv[c]))) < argc) {
405
406 if (is_option (argv[c]))
407 continue;
408
409 if (address == NULL) {
410 if (is_host (argv[c])) {
411 address = argv[c];
412 }
413 else {
414 usage ("Invalid host name");
415 }
416 }
417 else if (community == NULL) {
418 community = argv[c];
419 }
420 }
421
422 if (address == NULL)
423 address = strscpy (NULL, "127.0.0.1");
424
425 return validate_arguments ();
426}
427
428
429
430
431
432
433int
434call_getopt (int argc, char **argv)
435{
436 int c, i = 0;
437
438#ifdef HAVE_GETOPT_H 391#ifdef HAVE_GETOPT_H
439 int option_index = 0; 392 int option_index = 0;
440 static struct option long_options[] = { 393 static struct option long_options[] = {
@@ -450,6 +403,18 @@ call_getopt (int argc, char **argv)
450 }; 403 };
451#endif 404#endif
452 405
406 if (argc < 2)
407 return ERROR;
408
409 for (c = 1; c < argc; c++) {
410 if (strcmp ("-to", argv[c]) == 0)
411 strcpy (argv[c], "-t");
412 else if (strcmp ("-wt", argv[c]) == 0)
413 strcpy (argv[c], "-w");
414 else if (strcmp ("-ct", argv[c]) == 0)
415 strcpy (argv[c], "-c");
416 }
417
453 while (1) { 418 while (1) {
454#ifdef HAVE_GETOPT_H 419#ifdef HAVE_GETOPT_H
455 c = getopt_long (argc, argv, "+hVH:C:", long_options, &option_index); 420 c = getopt_long (argc, argv, "+hVH:C:", long_options, &option_index);
@@ -457,18 +422,10 @@ call_getopt (int argc, char **argv)
457 c = getopt (argc, argv, "+?hVH:C:"); 422 c = getopt (argc, argv, "+?hVH:C:");
458#endif 423#endif
459 424
460 i++;
461
462 if (c == -1 || c == EOF || c == 1) 425 if (c == -1 || c == EOF || c == 1)
463 break; 426 break;
464 427
465 switch (c) { 428 switch (c) {
466 case 'H':
467 case 'C':
468 i++;
469 }
470
471 switch (c) {
472 case 'H': /* hostname */ 429 case 'H': /* hostname */
473 if (is_host (optarg)) { 430 if (is_host (optarg)) {
474 address = optarg; 431 address = optarg;
@@ -481,7 +438,7 @@ call_getopt (int argc, char **argv)
481 community = optarg; 438 community = optarg;
482 break; 439 break;
483 case 'V': /* version */ 440 case 'V': /* version */
484 print_revision (PROGNAME, "$Revision$"); 441 print_revision (PROGNAME, REVISION);
485 exit (STATE_OK); 442 exit (STATE_OK);
486 case 'h': /* help */ 443 case 'h': /* help */
487 print_help (); 444 print_help ();
@@ -490,7 +447,22 @@ call_getopt (int argc, char **argv)
490 usage ("Invalid argument\n"); 447 usage ("Invalid argument\n");
491 } 448 }
492 } 449 }
493 return i; 450
451 c = optind;
452 if (address == NULL) {
453 if (is_host (argv[c])) {
454 address = argv[c++];
455 }
456 else {
457 usage ("Invalid host name");
458 }
459 }
460
461 if (community == NULL) {
462 community = argv[c++];
463 }
464
465 return validate_arguments ();
494} 466}
495 467
496 468
@@ -510,7 +482,7 @@ validate_arguments (void)
510void 482void
511print_help (void) 483print_help (void)
512{ 484{
513 print_revision (PROGNAME, "$Revision$"); 485 print_revision (PROGNAME, REVISION);
514 printf 486 printf
515 ("Copyright (c) 2000 Ethan Galstad/Karl DeBisschop\n\n" 487 ("Copyright (c) 2000 Ethan Galstad/Karl DeBisschop\n\n"
516 "This plugin tests the STATUS of an HP printer with a JetDirect card.\n" 488 "This plugin tests the STATUS of an HP printer with a JetDirect card.\n"
diff --git a/plugins/check_mrtg.c b/plugins/check_mrtg.c
index b86686d..4d297aa 100644
--- a/plugins/check_mrtg.c
+++ b/plugins/check_mrtg.c
@@ -86,7 +86,6 @@ Notes:\n\
86#include "utils.h" 86#include "utils.h"
87 87
88int process_arguments (int, char **); 88int process_arguments (int, char **);
89int call_getopt (int, char **);
90int validate_arguments (void); 89int validate_arguments (void);
91void print_help (void); 90void print_help (void);
92void print_usage (void); 91void print_usage (void);
@@ -97,8 +96,8 @@ int use_average = TRUE;
97int variable_number = -1; 96int variable_number = -1;
98unsigned long value_warning_threshold = 0L; 97unsigned long value_warning_threshold = 0L;
99unsigned long value_critical_threshold = 0L; 98unsigned long value_critical_threshold = 0L;
100char *value_label = NULL; 99char *value_label = "";
101char *units_label = NULL; 100char *units_label = "";
102 101
103int 102int
104main (int argc, char **argv) 103main (int argc, char **argv)
@@ -215,83 +214,6 @@ process_arguments (int argc, char **argv)
215{ 214{
216 int c; 215 int c;
217 216
218 if (argc < 2)
219 return ERROR;
220
221 for (c = 1; c < argc; c++) {
222 if (strcmp ("-to", argv[c]) == 0)
223 strcpy (argv[c], "-t");
224 else if (strcmp ("-wt", argv[c]) == 0)
225 strcpy (argv[c], "-w");
226 else if (strcmp ("-ct", argv[c]) == 0)
227 strcpy (argv[c], "-c");
228 }
229
230
231
232 c = 0;
233 while ((c += (call_getopt (argc - c, &argv[c]))) < argc) {
234
235 if (is_option (argv[c]))
236 continue;
237
238 if (log_file == NULL) {
239 log_file = argv[c];
240 }
241 else if (expire_minutes <= 0) {
242 if (is_intpos (argv[c]))
243 expire_minutes = atoi (argv[c]);
244 else
245 terminate (STATE_UNKNOWN,
246 "%s is not a valid expiration time\nUse '%s -h' for additional help\n",
247 argv[c], PROGNAME);
248 }
249 else if (strcmp (argv[c], "MAX") == 0) {
250 use_average = FALSE;
251 }
252 else if (strcmp (argv[c], "AVG") == 0) {
253 use_average = TRUE;
254 }
255 else if (variable_number == -1) {
256 variable_number = atoi (argv[c]);
257 if (variable_number < 1 || variable_number > 2) {
258 printf ("%s :", argv[c]);
259 usage ("Invalid variable number\n");
260 }
261 }
262 else if (value_warning_threshold == 0) {
263 value_warning_threshold = strtoul (argv[c], NULL, 10);
264 }
265 else if (value_critical_threshold == 0) {
266 value_critical_threshold = strtoul (argv[c], NULL, 10);
267 }
268 else if (value_label == NULL) {
269 value_label = argv[c];
270 }
271 else if (units_label == NULL) {
272 units_label = argv[c];
273 }
274 }
275
276 if (value_label == NULL)
277 value_label = strscpy (NULL, "");
278
279 if (units_label == NULL)
280 units_label = strscpy (NULL, "");
281
282 return validate_arguments ();
283}
284
285
286
287
288
289
290int
291call_getopt (int argc, char **argv)
292{
293 int c, i = 0;
294
295#ifdef HAVE_GETOPT_H 217#ifdef HAVE_GETOPT_H
296 int option_index = 0; 218 int option_index = 0;
297 static struct option long_options[] = { 219 static struct option long_options[] = {
@@ -310,33 +232,31 @@ call_getopt (int argc, char **argv)
310 }; 232 };
311#endif 233#endif
312 234
235 if (argc < 2)
236 return ERROR;
237
238 for (c = 1; c < argc; c++) {
239 if (strcmp ("-to", argv[c]) == 0)
240 strcpy (argv[c], "-t");
241 else if (strcmp ("-wt", argv[c]) == 0)
242 strcpy (argv[c], "-w");
243 else if (strcmp ("-ct", argv[c]) == 0)
244 strcpy (argv[c], "-c");
245 }
246
313 while (1) { 247 while (1) {
314#ifdef HAVE_GETOPT_H 248#ifdef HAVE_GETOPT_H
315 c = 249 c =
316 getopt_long (argc, argv, "+hVF:e:a:v:c:w:l:u:", long_options, 250 getopt_long (argc, argv, "hVF:e:a:v:c:w:l:u:", long_options,
317 &option_index); 251 &option_index);
318#else 252#else
319 c = getopt (argc, argv, "+?hVF:e:a:v:c:w:l:u:"); 253 c = getopt (argc, argv, "hVF:e:a:v:c:w:l:u:");
320#endif 254#endif
321 255
322 i++; 256 if (c == -1 || c == EOF)
323
324 if (c == -1 || c == EOF || c == 1)
325 break; 257 break;
326 258
327 switch (c) { 259 switch (c) {
328 case 'F':
329 case 'e':
330 case 'a':
331 case 'v':
332 case 'c':
333 case 'w':
334 case 'l':
335 case 'u':
336 i++;
337 }
338
339 switch (c) {
340 case 'F': /* input file */ 260 case 'F': /* input file */
341 log_file = optarg; 261 log_file = optarg;
342 break; 262 break;
@@ -367,7 +287,7 @@ call_getopt (int argc, char **argv)
367 units_label = optarg; 287 units_label = optarg;
368 break; 288 break;
369 case 'V': /* version */ 289 case 'V': /* version */
370 print_revision (PROGNAME, "$Revision$"); 290 print_revision (PROGNAME, REVISION);
371 exit (STATE_OK); 291 exit (STATE_OK);
372 case 'h': /* help */ 292 case 'h': /* help */
373 print_help (); 293 print_help ();
@@ -376,7 +296,55 @@ call_getopt (int argc, char **argv)
376 usage ("Invalid argument\n"); 296 usage ("Invalid argument\n");
377 } 297 }
378 } 298 }
379 return i; 299
300 c = optind;
301 if (log_file == NULL && argc > c) {
302 log_file = argv[c++];
303 }
304
305 if (expire_minutes <= 0 && argc > c) {
306 if (is_intpos (argv[c]))
307 expire_minutes = atoi (argv[c++]);
308 else
309 terminate (STATE_UNKNOWN,
310 "%s is not a valid expiration time\nUse '%s -h' for additional help\n",
311 argv[c], PROGNAME);
312 }
313
314 if (argc > c && strcmp (argv[c], "MAX") == 0) {
315 use_average = FALSE;
316 c++;
317 }
318 else if (argc > c && strcmp (argv[c], "AVG") == 0) {
319 use_average = TRUE;
320 c++;
321 }
322
323 if (argc > c && variable_number == -1) {
324 variable_number = atoi (argv[c++]);
325 if (variable_number < 1 || variable_number > 2) {
326 printf ("%s :", argv[c]);
327 usage ("Invalid variable number\n");
328 }
329 }
330
331 if (argc > c && value_warning_threshold == 0) {
332 value_warning_threshold = strtoul (argv[c++], NULL, 10);
333 }
334
335 if (vargc > c && alue_critical_threshold == 0) {
336 value_critical_threshold = strtoul (argv[c++], NULL, 10);
337 }
338
339 if (argc > c && strlen (value_label) == 0) {
340 value_label = argv[c++];
341 }
342
343 if (argc > c && strlen (units_label) == 0) {
344 units_label = argv[c++];
345 }
346
347 return validate_arguments ();
380} 348}
381 349
382int 350int
diff --git a/plugins/check_nwstat.c b/plugins/check_nwstat.c
index e142670..f8fca73 100644
--- a/plugins/check_nwstat.c
+++ b/plugins/check_nwstat.c
@@ -180,13 +180,13 @@ int main(int argc, char **argv){
180 if(result!=STATE_OK) 180 if(result!=STATE_OK)
181 return result; 181 return result;
182 if(!strcmp(recv_buffer,"-1\n")) 182 if(!strcmp(recv_buffer,"-1\n"))
183 netware_version = ssprintf(netware_version,""); 183 asprintf(&netware_version,"");
184 else { 184 else {
185 recv_buffer[strlen(recv_buffer)-1]=0; 185 recv_buffer[strlen(recv_buffer)-1]=0;
186 netware_version = ssprintf(netware_version,"NetWare %s: ",recv_buffer); 186 asprintf(&netware_version,"NetWare %s: ",recv_buffer);
187 } 187 }
188 } else 188 } else
189 netware_version = ssprintf(netware_version,""); 189 asprintf(&netware_version,"");
190 190
191 191
192 /* check CPU load */ 192 /* check CPU load */
@@ -204,7 +204,7 @@ int main(int argc, char **argv){
204 break; 204 break;
205 } 205 }
206 206
207 send_buffer = ssprintf(send_buffer,"UTIL%s\r\n",temp_buffer); 207 asprintf(&send_buffer,"UTIL%s\r\n",temp_buffer);
208 result=process_tcp_request(server_address,server_port,send_buffer,recv_buffer,sizeof(recv_buffer)); 208 result=process_tcp_request(server_address,server_port,send_buffer,recv_buffer,sizeof(recv_buffer));
209 if(result!=STATE_OK) 209 if(result!=STATE_OK)
210 return result; 210 return result;
@@ -221,7 +221,7 @@ int main(int argc, char **argv){
221 else if(check_warning_value==TRUE && utilization >= warning_value) 221 else if(check_warning_value==TRUE && utilization >= warning_value)
222 result=STATE_WARNING; 222 result=STATE_WARNING;
223 223
224 output_message = ssprintf(output_message,"Load %s - %s %s-min load average = %lu%%",(result==STATE_OK)?"ok":"problem",uptime,temp_buffer,utilization); 224 asprintf(&output_message,"Load %s - %s %s-min load average = %lu%%",(result==STATE_OK)?"ok":"problem",uptime,temp_buffer,utilization);
225 225
226 /* check number of user connections */ 226 /* check number of user connections */
227 } else if (vars_to_check==CHECK_CONNS) { 227 } else if (vars_to_check==CHECK_CONNS) {
@@ -236,7 +236,7 @@ int main(int argc, char **argv){
236 result=STATE_CRITICAL; 236 result=STATE_CRITICAL;
237 else if(check_warning_value==TRUE && current_connections >= warning_value) 237 else if(check_warning_value==TRUE && current_connections >= warning_value)
238 result=STATE_WARNING; 238 result=STATE_WARNING;
239 output_message = ssprintf(output_message,"Conns %s - %lu current connections",(result==STATE_OK)?"ok":"problem",current_connections); 239 asprintf(&output_message,"Conns %s - %lu current connections",(result==STATE_OK)?"ok":"problem",current_connections);
240 240
241 /* check % long term cache hits */ 241 /* check % long term cache hits */
242 } else if (vars_to_check==CHECK_LTCH) { 242 } else if (vars_to_check==CHECK_LTCH) {
@@ -251,7 +251,7 @@ int main(int argc, char **argv){
251 result=STATE_CRITICAL; 251 result=STATE_CRITICAL;
252 else if(check_warning_value==TRUE && cache_hits <= warning_value) 252 else if(check_warning_value==TRUE && cache_hits <= warning_value)
253 result=STATE_WARNING; 253 result=STATE_WARNING;
254 output_message = ssprintf(output_message,"Long term cache hits = %d%%",cache_hits); 254 asprintf(&output_message,"Long term cache hits = %d%%",cache_hits);
255 255
256 /* check cache buffers */ 256 /* check cache buffers */
257 } else if (vars_to_check==CHECK_CBUFF) { 257 } else if (vars_to_check==CHECK_CBUFF) {
@@ -266,7 +266,7 @@ int main(int argc, char **argv){
266 result=STATE_CRITICAL; 266 result=STATE_CRITICAL;
267 else if(check_warning_value==TRUE && cache_buffers <= warning_value) 267 else if(check_warning_value==TRUE && cache_buffers <= warning_value)
268 result=STATE_WARNING; 268 result=STATE_WARNING;
269 output_message = ssprintf(output_message,"Total cache buffers = %lu",cache_buffers); 269 asprintf(&output_message,"Total cache buffers = %lu",cache_buffers);
270 270
271 /* check dirty cache buffers */ 271 /* check dirty cache buffers */
272 } else if (vars_to_check==CHECK_CDBUFF) { 272 } else if (vars_to_check==CHECK_CDBUFF) {
@@ -281,7 +281,7 @@ int main(int argc, char **argv){
281 result=STATE_CRITICAL; 281 result=STATE_CRITICAL;
282 else if(check_warning_value==TRUE && cache_buffers >= warning_value) 282 else if(check_warning_value==TRUE && cache_buffers >= warning_value)
283 result=STATE_WARNING; 283 result=STATE_WARNING;
284 output_message = ssprintf(output_message,"Dirty cache buffers = %lu",cache_buffers); 284 asprintf(&output_message,"Dirty cache buffers = %lu",cache_buffers);
285 285
286 /* check LRU sitting time in minutes */ 286 /* check LRU sitting time in minutes */
287 } else if (vars_to_check==CHECK_LRUM) { 287 } else if (vars_to_check==CHECK_LRUM) {
@@ -296,19 +296,19 @@ int main(int argc, char **argv){
296 result=STATE_CRITICAL; 296 result=STATE_CRITICAL;
297 else if(check_warning_value==TRUE && lru_time <= warning_value) 297 else if(check_warning_value==TRUE && lru_time <= warning_value)
298 result=STATE_WARNING; 298 result=STATE_WARNING;
299 output_message = ssprintf(output_message,"LRU sitting time = %lu minutes",lru_time); 299 sprintf(&output_message,"LRU sitting time = %lu minutes",lru_time);
300 300
301 301
302 /* check KB free space on volume */ 302 /* check KB free space on volume */
303 } else if (vars_to_check==CHECK_VKF) { 303 } else if (vars_to_check==CHECK_VKF) {
304 304
305 send_buffer = ssprintf(send_buffer,"VKF%s\r\n",volume_name); 305 asprintf(&send_buffer,"VKF%s\r\n",volume_name);
306 result=process_tcp_request(server_address,server_port,send_buffer,recv_buffer,sizeof(recv_buffer)); 306 result=process_tcp_request(server_address,server_port,send_buffer,recv_buffer,sizeof(recv_buffer));
307 if(result!=STATE_OK) 307 if(result!=STATE_OK)
308 return result; 308 return result;
309 309
310 if (!strcmp(recv_buffer,"-1\n")) { 310 if (!strcmp(recv_buffer,"-1\n")) {
311 output_message = ssprintf(output_message,"Error: Volume '%s' does not exist!",volume_name); 311 asprintf(&output_message,"Error: Volume '%s' does not exist!",volume_name);
312 result=STATE_CRITICAL; 312 result=STATE_CRITICAL;
313 } else { 313 } else {
314 free_disk_space=strtoul(recv_buffer,NULL,10); 314 free_disk_space=strtoul(recv_buffer,NULL,10);
@@ -316,27 +316,27 @@ int main(int argc, char **argv){
316 result=STATE_CRITICAL; 316 result=STATE_CRITICAL;
317 else if(check_warning_value==TRUE && free_disk_space <= warning_value) 317 else if(check_warning_value==TRUE && free_disk_space <= warning_value)
318 result=STATE_WARNING; 318 result=STATE_WARNING;
319 output_message = ssprintf(output_message,"%s%lu KB free on volume %s",(result==STATE_OK)?"":"Only ",free_disk_space,volume_name); 319 asprintf(&output_message,"%s%lu KB free on volume %s",(result==STATE_OK)?"":"Only ",free_disk_space,volume_name);
320 } 320 }
321 321
322 /* check % free space on volume */ 322 /* check % free space on volume */
323 } else if (vars_to_check==CHECK_VPF) { 323 } else if (vars_to_check==CHECK_VPF) {
324 324
325 send_buffer = ssprintf(send_buffer,"VKF%s\r\n",volume_name); 325 asprintf(&send_buffer,"VKF%s\r\n",volume_name);
326 result=process_tcp_request(server_address,server_port,send_buffer,recv_buffer,sizeof(recv_buffer)); 326 result=process_tcp_request(server_address,server_port,send_buffer,recv_buffer,sizeof(recv_buffer));
327 if(result!=STATE_OK) 327 if(result!=STATE_OK)
328 return result; 328 return result;
329 329
330 if(!strcmp(recv_buffer,"-1\n")){ 330 if(!strcmp(recv_buffer,"-1\n")){
331 331
332 output_message = ssprintf(output_message,"Error: Volume '%s' does not exist!",volume_name); 332 asprintf(&output_message,"Error: Volume '%s' does not exist!",volume_name);
333 result=STATE_CRITICAL; 333 result=STATE_CRITICAL;
334 334
335 } else { 335 } else {
336 336
337 free_disk_space=strtoul(recv_buffer,NULL,10); 337 free_disk_space=strtoul(recv_buffer,NULL,10);
338 338
339 send_buffer = ssprintf(send_buffer,"VKS%s\r\n",volume_name); 339 asprintf(&send_buffer,"VKS%s\r\n",volume_name);
340 result=process_tcp_request(server_address,server_port,send_buffer,recv_buffer,sizeof(recv_buffer)); 340 result=process_tcp_request(server_address,server_port,send_buffer,recv_buffer,sizeof(recv_buffer));
341 if(result!=STATE_OK) 341 if(result!=STATE_OK)
342 return result; 342 return result;
@@ -349,7 +349,7 @@ int main(int argc, char **argv){
349 else if(check_warning_value==TRUE && percent_free_space <= warning_value) 349 else if(check_warning_value==TRUE && percent_free_space <= warning_value)
350 result=STATE_WARNING; 350 result=STATE_WARNING;
351 free_disk_space/=1024; 351 free_disk_space/=1024;
352 output_message = ssprintf(output_message,"%lu MB (%d%%) free on volume %s",free_disk_space,percent_free_space,volume_name); 352 asprintf(&output_message,"%lu MB (%d%%) free on volume %s",free_disk_space,percent_free_space,volume_name);
353 } 353 }
354 354
355 /* check to see if DS Database is open or closed */ 355 /* check to see if DS Database is open or closed */
@@ -368,7 +368,7 @@ int main(int argc, char **argv){
368 result=process_tcp_request(server_address,server_port,send_buffer,recv_buffer,sizeof(recv_buffer)); 368 result=process_tcp_request(server_address,server_port,send_buffer,recv_buffer,sizeof(recv_buffer));
369 temp_buffer=strtok(recv_buffer,"\r\n"); 369 temp_buffer=strtok(recv_buffer,"\r\n");
370 370
371 output_message = ssprintf(output_message,"Directory Services Database is %s (DS version %s)",(result==STATE_OK)?"open":"closed",temp_buffer); 371 asprintf(&output_message,"Directory Services Database is %s (DS version %s)",(result==STATE_OK)?"open":"closed",temp_buffer);
372 372
373 /* check to see if logins are enabled */ 373 /* check to see if logins are enabled */
374 } else if (vars_to_check==CHECK_LOGINS) { 374 } else if (vars_to_check==CHECK_LOGINS) {
@@ -382,19 +382,19 @@ int main(int argc, char **argv){
382 else 382 else
383 result=STATE_WARNING; 383 result=STATE_WARNING;
384 384
385 output_message = ssprintf(output_message,"Logins are %s",(result==STATE_OK)?"enabled":"disabled"); 385 asprintf(&output_message,"Logins are %s",(result==STATE_OK)?"enabled":"disabled");
386 386
387 /* check packet receive buffers */ 387 /* check packet receive buffers */
388 } else if (vars_to_check==CHECK_UPRB || vars_to_check==CHECK_PUPRB) { 388 } else if (vars_to_check==CHECK_UPRB || vars_to_check==CHECK_PUPRB) {
389 389
390 send_buffer = ssprintf(send_buffer,"S15\r\n",volume_name); 390 asprintf(&send_buffer,"S15\r\n",volume_name);
391 result=process_tcp_request(server_address,server_port,send_buffer,recv_buffer,sizeof(recv_buffer)); 391 result=process_tcp_request(server_address,server_port,send_buffer,recv_buffer,sizeof(recv_buffer));
392 if(result!=STATE_OK) 392 if(result!=STATE_OK)
393 return result; 393 return result;
394 394
395 used_packet_receive_buffers=atoi(recv_buffer); 395 used_packet_receive_buffers=atoi(recv_buffer);
396 396
397 send_buffer = ssprintf(send_buffer,"S16\r\n",volume_name); 397 asprintf(&send_buffer,"S16\r\n",volume_name);
398 result=process_tcp_request(server_address,server_port,send_buffer,recv_buffer,sizeof(recv_buffer)); 398 result=process_tcp_request(server_address,server_port,send_buffer,recv_buffer,sizeof(recv_buffer));
399 if(result!=STATE_OK) 399 if(result!=STATE_OK)
400 return result; 400 return result;
@@ -415,15 +415,15 @@ int main(int argc, char **argv){
415 result=STATE_WARNING; 415 result=STATE_WARNING;
416 } 416 }
417 417
418 output_message = ssprintf(output_message,"%d of %d (%lu%%) packet receive buffers used",used_packet_receive_buffers,max_packet_receive_buffers,percent_used_packet_receive_buffers); 418 asprintf(&output_message,"%d of %d (%lu%%) packet receive buffers used",used_packet_receive_buffers,max_packet_receive_buffers,percent_used_packet_receive_buffers);
419 419
420 /* check SAP table entries */ 420 /* check SAP table entries */
421 } else if (vars_to_check==CHECK_SAPENTRIES) { 421 } else if (vars_to_check==CHECK_SAPENTRIES) {
422 422
423 if(sap_number==-1) 423 if(sap_number==-1)
424 send_buffer = ssprintf(send_buffer,"S9\r\n"); 424 asprintf(&send_buffer,"S9\r\n");
425 else 425 else
426 send_buffer = ssprintf(send_buffer,"S9.%d\r\n",sap_number); 426 asprintf(&send_buffer,"S9.%d\r\n",sap_number);
427 result=process_tcp_request(server_address,server_port,send_buffer,recv_buffer,sizeof(recv_buffer)); 427 result=process_tcp_request(server_address,server_port,send_buffer,recv_buffer,sizeof(recv_buffer));
428 if(result!=STATE_OK) 428 if(result!=STATE_OK)
429 return result; 429 return result;
@@ -436,20 +436,20 @@ int main(int argc, char **argv){
436 result=STATE_WARNING; 436 result=STATE_WARNING;
437 437
438 if(sap_number==-1) 438 if(sap_number==-1)
439 output_message = ssprintf(output_message,"%d entries in SAP table",sap_entries); 439 asprintf(&output_message,"%d entries in SAP table",sap_entries);
440 else 440 else
441 output_message = ssprintf(output_message,"%d entries in SAP table for SAP type %d",sap_entries,sap_number); 441 asprintf(&output_message,"%d entries in SAP table for SAP type %d",sap_entries,sap_number);
442 442
443 /* check KB purgeable space on volume */ 443 /* check KB purgeable space on volume */
444 } else if (vars_to_check==CHECK_VKP) { 444 } else if (vars_to_check==CHECK_VKP) {
445 445
446 send_buffer = ssprintf(send_buffer,"VKP%s\r\n",volume_name); 446 asprintf(&send_buffer,"VKP%s\r\n",volume_name);
447 result=process_tcp_request(server_address,server_port,send_buffer,recv_buffer,sizeof(recv_buffer)); 447 result=process_tcp_request(server_address,server_port,send_buffer,recv_buffer,sizeof(recv_buffer));
448 if(result!=STATE_OK) 448 if(result!=STATE_OK)
449 return result; 449 return result;
450 450
451 if (!strcmp(recv_buffer,"-1\n")) { 451 if (!strcmp(recv_buffer,"-1\n")) {
452 output_message = ssprintf(output_message,"Error: Volume '%s' does not exist!",volume_name); 452 asprintf(&output_message,"Error: Volume '%s' does not exist!",volume_name);
453 result=STATE_CRITICAL; 453 result=STATE_CRITICAL;
454 } else { 454 } else {
455 purgeable_disk_space=strtoul(recv_buffer,NULL,10); 455 purgeable_disk_space=strtoul(recv_buffer,NULL,10);
@@ -457,27 +457,27 @@ int main(int argc, char **argv){
457 result=STATE_CRITICAL; 457 result=STATE_CRITICAL;
458 else if(check_warning_value==TRUE && purgeable_disk_space >= warning_value) 458 else if(check_warning_value==TRUE && purgeable_disk_space >= warning_value)
459 result=STATE_WARNING; 459 result=STATE_WARNING;
460 output_message = ssprintf(output_message,"%s%lu KB purgeable on volume %s",(result==STATE_OK)?"":"Only ",purgeable_disk_space,volume_name); 460 asprintf(&output_message,"%s%lu KB purgeable on volume %s",(result==STATE_OK)?"":"Only ",purgeable_disk_space,volume_name);
461 } 461 }
462 462
463 /* check % purgeable space on volume */ 463 /* check % purgeable space on volume */
464 } else if (vars_to_check==CHECK_VPP) { 464 } else if (vars_to_check==CHECK_VPP) {
465 465
466 send_buffer = ssprintf(send_buffer,"VKP%s\r\n",volume_name); 466 asprintf(&send_buffer,"VKP%s\r\n",volume_name);
467 result=process_tcp_request(server_address,server_port,send_buffer,recv_buffer,sizeof(recv_buffer)); 467 result=process_tcp_request(server_address,server_port,send_buffer,recv_buffer,sizeof(recv_buffer));
468 if(result!=STATE_OK) 468 if(result!=STATE_OK)
469 return result; 469 return result;
470 470
471 if(!strcmp(recv_buffer,"-1\n")){ 471 if(!strcmp(recv_buffer,"-1\n")){
472 472
473 output_message = ssprintf(output_message,"Error: Volume '%s' does not exist!",volume_name); 473 asprintf(&output_message,"Error: Volume '%s' does not exist!",volume_name);
474 result=STATE_CRITICAL; 474 result=STATE_CRITICAL;
475 475
476 } else { 476 } else {
477 477
478 purgeable_disk_space=strtoul(recv_buffer,NULL,10); 478 purgeable_disk_space=strtoul(recv_buffer,NULL,10);
479 479
480 send_buffer = ssprintf(send_buffer,"VKS%s\r\n",volume_name); 480 asprintf(&send_buffer,"VKS%s\r\n",volume_name);
481 result=process_tcp_request(server_address,server_port,send_buffer,recv_buffer,sizeof(recv_buffer)); 481 result=process_tcp_request(server_address,server_port,send_buffer,recv_buffer,sizeof(recv_buffer));
482 if(result!=STATE_OK) 482 if(result!=STATE_OK)
483 return result; 483 return result;
@@ -490,19 +490,19 @@ int main(int argc, char **argv){
490 else if(check_warning_value==TRUE && percent_purgeable_space >= warning_value) 490 else if(check_warning_value==TRUE && percent_purgeable_space >= warning_value)
491 result=STATE_WARNING; 491 result=STATE_WARNING;
492 purgeable_disk_space/=1024; 492 purgeable_disk_space/=1024;
493 output_message = ssprintf(output_message,"%lu MB (%d%%) purgeable on volume %s",purgeable_disk_space,percent_purgeable_space,volume_name); 493 asprintf(&output_message,"%lu MB (%d%%) purgeable on volume %s",purgeable_disk_space,percent_purgeable_space,volume_name);
494 } 494 }
495 495
496 /* check KB not yet purgeable space on volume */ 496 /* check KB not yet purgeable space on volume */
497 } else if (vars_to_check==CHECK_VKNP) { 497 } else if (vars_to_check==CHECK_VKNP) {
498 498
499 send_buffer = ssprintf(send_buffer,"VKNP%s\r\n",volume_name); 499 asprintf(&send_buffer,"VKNP%s\r\n",volume_name);
500 result=process_tcp_request(server_address,server_port,send_buffer,recv_buffer,sizeof(recv_buffer)); 500 result=process_tcp_request(server_address,server_port,send_buffer,recv_buffer,sizeof(recv_buffer));
501 if(result!=STATE_OK) 501 if(result!=STATE_OK)
502 return result; 502 return result;
503 503
504 if (!strcmp(recv_buffer,"-1\n")) { 504 if (!strcmp(recv_buffer,"-1\n")) {
505 output_message = ssprintf(output_message,"Error: Volume '%s' does not exist!",volume_name); 505 asprintf(&output_message,"Error: Volume '%s' does not exist!",volume_name);
506 result=STATE_CRITICAL; 506 result=STATE_CRITICAL;
507 } else { 507 } else {
508 non_purgeable_disk_space=strtoul(recv_buffer,NULL,10); 508 non_purgeable_disk_space=strtoul(recv_buffer,NULL,10);
@@ -510,27 +510,27 @@ int main(int argc, char **argv){
510 result=STATE_CRITICAL; 510 result=STATE_CRITICAL;
511 else if(check_warning_value==TRUE && non_purgeable_disk_space >= warning_value) 511 else if(check_warning_value==TRUE && non_purgeable_disk_space >= warning_value)
512 result=STATE_WARNING; 512 result=STATE_WARNING;
513 output_message = ssprintf(output_message,"%s%lu KB not yet purgeable on volume %s",(result==STATE_OK)?"":"Only ",non_purgeable_disk_space,volume_name); 513 asprintf(&output_message,"%s%lu KB not yet purgeable on volume %s",(result==STATE_OK)?"":"Only ",non_purgeable_disk_space,volume_name);
514 } 514 }
515 515
516 /* check % not yet purgeable space on volume */ 516 /* check % not yet purgeable space on volume */
517 } else if (vars_to_check==CHECK_VPNP) { 517 } else if (vars_to_check==CHECK_VPNP) {
518 518
519 send_buffer = ssprintf(send_buffer,"VKNP%s\r\n",volume_name); 519 asprintf(&send_buffer,"VKNP%s\r\n",volume_name);
520 result=process_tcp_request(server_address,server_port,send_buffer,recv_buffer,sizeof(recv_buffer)); 520 result=process_tcp_request(server_address,server_port,send_buffer,recv_buffer,sizeof(recv_buffer));
521 if(result!=STATE_OK) 521 if(result!=STATE_OK)
522 return result; 522 return result;
523 523
524 if(!strcmp(recv_buffer,"-1\n")){ 524 if(!strcmp(recv_buffer,"-1\n")){
525 525
526 output_message = ssprintf(output_message,"Error: Volume '%s' does not exist!",volume_name); 526 asprintf(&output_message,"Error: Volume '%s' does not exist!",volume_name);
527 result=STATE_CRITICAL; 527 result=STATE_CRITICAL;
528 528
529 } else { 529 } else {
530 530
531 non_purgeable_disk_space=strtoul(recv_buffer,NULL,10); 531 non_purgeable_disk_space=strtoul(recv_buffer,NULL,10);
532 532
533 send_buffer = ssprintf(send_buffer,"VKS%s\r\n",volume_name); 533 asprintf(&send_buffer,"VKS%s\r\n",volume_name);
534 result=process_tcp_request(server_address,server_port,send_buffer,recv_buffer,sizeof(recv_buffer)); 534 result=process_tcp_request(server_address,server_port,send_buffer,recv_buffer,sizeof(recv_buffer));
535 if(result!=STATE_OK) 535 if(result!=STATE_OK)
536 return result; 536 return result;
@@ -543,13 +543,13 @@ int main(int argc, char **argv){
543 else if(check_warning_value==TRUE && percent_non_purgeable_space >= warning_value) 543 else if(check_warning_value==TRUE && percent_non_purgeable_space >= warning_value)
544 result=STATE_WARNING; 544 result=STATE_WARNING;
545 purgeable_disk_space/=1024; 545 purgeable_disk_space/=1024;
546 output_message = ssprintf(output_message,"%lu MB (%d%%) not yet purgeable on volume %s",non_purgeable_disk_space,percent_non_purgeable_space,volume_name); 546 asprintf(&output_message,"%lu MB (%d%%) not yet purgeable on volume %s",non_purgeable_disk_space,percent_non_purgeable_space,volume_name);
547 } 547 }
548 548
549 /* check # of open files */ 549 /* check # of open files */
550 } else if (vars_to_check==CHECK_OFILES) { 550 } else if (vars_to_check==CHECK_OFILES) {
551 551
552 send_buffer = ssprintf(send_buffer,"S18\r\n"); 552 asprintf(&send_buffer,"S18\r\n");
553 result=process_tcp_request(server_address,server_port,send_buffer,recv_buffer,sizeof(recv_buffer)); 553 result=process_tcp_request(server_address,server_port,send_buffer,recv_buffer,sizeof(recv_buffer));
554 if(result!=STATE_OK) 554 if(result!=STATE_OK)
555 return result; 555 return result;
@@ -561,12 +561,12 @@ int main(int argc, char **argv){
561 else if(check_warning_value==TRUE && open_files >= warning_value) 561 else if(check_warning_value==TRUE && open_files >= warning_value)
562 result=STATE_WARNING; 562 result=STATE_WARNING;
563 563
564 output_message = ssprintf(output_message,"%d open files",open_files); 564 asprintf(&output_message,"%d open files",open_files);
565 565
566 /* check # of abended threads (Netware 5.x only) */ 566 /* check # of abended threads (Netware 5.x only) */
567 } else if (vars_to_check==CHECK_ABENDS) { 567 } else if (vars_to_check==CHECK_ABENDS) {
568 568
569 send_buffer = ssprintf(send_buffer,"S17\r\n"); 569 asprintf(&send_buffer,"S17\r\n");
570 result=process_tcp_request(server_address,server_port,send_buffer,recv_buffer,sizeof(recv_buffer)); 570 result=process_tcp_request(server_address,server_port,send_buffer,recv_buffer,sizeof(recv_buffer));
571 if(result!=STATE_OK) 571 if(result!=STATE_OK)
572 return result; 572 return result;
@@ -578,19 +578,19 @@ int main(int argc, char **argv){
578 else if(check_warning_value==TRUE && abended_threads >= warning_value) 578 else if(check_warning_value==TRUE && abended_threads >= warning_value)
579 result=STATE_WARNING; 579 result=STATE_WARNING;
580 580
581 output_message = ssprintf(output_message,"%d abended threads",abended_threads); 581 asprintf(&output_message,"%d abended threads",abended_threads);
582 582
583 /* check # of current service processes (Netware 5.x only) */ 583 /* check # of current service processes (Netware 5.x only) */
584 } else if (vars_to_check==CHECK_CSPROCS) { 584 } else if (vars_to_check==CHECK_CSPROCS) {
585 585
586 send_buffer = ssprintf(send_buffer,"S20\r\n"); 586 asprintf(&send_buffer,"S20\r\n");
587 result=process_tcp_request(server_address,server_port,send_buffer,recv_buffer,sizeof(recv_buffer)); 587 result=process_tcp_request(server_address,server_port,send_buffer,recv_buffer,sizeof(recv_buffer));
588 if(result!=STATE_OK) 588 if(result!=STATE_OK)
589 return result; 589 return result;
590 590
591 max_service_processes=atoi(recv_buffer); 591 max_service_processes=atoi(recv_buffer);
592 592
593 send_buffer = ssprintf(send_buffer,"S21\r\n"); 593 sprintf(&send_buffer,"S21\r\n");
594 result=process_tcp_request(server_address,server_port,send_buffer,recv_buffer,sizeof(recv_buffer)); 594 result=process_tcp_request(server_address,server_port,send_buffer,recv_buffer,sizeof(recv_buffer));
595 if(result!=STATE_OK) 595 if(result!=STATE_OK)
596 return result; 596 return result;
@@ -602,7 +602,7 @@ int main(int argc, char **argv){
602 else if(check_warning_value==TRUE && current_service_processes >= warning_value) 602 else if(check_warning_value==TRUE && current_service_processes >= warning_value)
603 result=STATE_WARNING; 603 result=STATE_WARNING;
604 604
605 output_message = ssprintf(output_message,"%d current service processes (%d max)",current_service_processes,max_service_processes); 605 asprintf(&output_message,"%d current service processes (%d max)",current_service_processes,max_service_processes);
606 606
607 } else { 607 } else {
608 608
diff --git a/plugins/check_ping.c b/plugins/check_ping.c
index df1d9eb..3602122 100644
--- a/plugins/check_ping.c
+++ b/plugins/check_ping.c
@@ -88,11 +88,9 @@ main (int argc, char **argv)
88 88
89 /* does the host address of number of packets argument come first? */ 89 /* does the host address of number of packets argument come first? */
90#ifdef PING_PACKETS_FIRST 90#ifdef PING_PACKETS_FIRST
91 command_line = 91 asprintf (&command_line, PING_COMMAND, max_packets, server_address);
92 ssprintf (command_line, PING_COMMAND, max_packets, server_address);
93#else 92#else
94 command_line = 93 asprintf (&command_line, PING_COMMAND, server_address, max_packets);
95 ssprintf (command_line, PING_COMMAND, server_address, max_packets);
96#endif 94#endif
97 95
98 /* Set signal handling and alarm */ 96 /* Set signal handling and alarm */
diff --git a/plugins/check_vsz.c b/plugins/check_vsz.c
index 2ec8775..7eeab22 100644
--- a/plugins/check_vsz.c
+++ b/plugins/check_vsz.c
@@ -61,7 +61,7 @@ main (int argc, char **argv)
61 int proc_size = -1; 61 int proc_size = -1;
62 char input_buffer[MAX_INPUT_BUFFER]; 62 char input_buffer[MAX_INPUT_BUFFER];
63 char proc_name[MAX_INPUT_BUFFER]; 63 char proc_name[MAX_INPUT_BUFFER];
64 char *message = NULL; 64 char *message = "";
65 65
66 if (!process_arguments (argc, argv)) { 66 if (!process_arguments (argc, argv)) {
67 printf ("%s: failure parsing arguments\n", my_basename (argv[0])); 67 printf ("%s: failure parsing arguments\n", my_basename (argv[0]));
@@ -80,8 +80,6 @@ main (int argc, char **argv)
80 if (child_stderr == NULL) 80 if (child_stderr == NULL)
81 printf ("Could not open stderr for %s\n", VSZ_COMMAND); 81 printf ("Could not open stderr for %s\n", VSZ_COMMAND);
82 82
83 message = malloc ((size_t) 1);
84 message[0] = 0;
85 while (fgets (input_buffer, MAX_INPUT_BUFFER - 1, child_process)) { 83 while (fgets (input_buffer, MAX_INPUT_BUFFER - 1, child_process)) {
86 84
87 line++; 85 line++;
@@ -93,12 +91,7 @@ main (int argc, char **argv)
93 if (sscanf (input_buffer, VSZ_FORMAT, &proc_size, proc_name) == 2) { 91 if (sscanf (input_buffer, VSZ_FORMAT, &proc_size, proc_name) == 2) {
94 if (proc == NULL) { 92 if (proc == NULL) {
95 if (proc_size > warn) { 93 if (proc_size > warn) {
96 len = strlen (message) + strlen (proc_name) + 23; 94 asprintf (&message, "%s %s(%d)", message, proc_name, proc_size);
97 message = realloc (message, len);
98 if (message == NULL)
99 terminate (STATE_UNKNOWN,
100 "check_vsz: could not malloc message (1)");
101 sprintf (message, "%s %s(%d)", message, proc_name, proc_size);
102 result = max_state (result, STATE_WARNING); 95 result = max_state (result, STATE_WARNING);
103 } 96 }
104 if (proc_size > crit) { 97 if (proc_size > crit) {
@@ -106,12 +99,7 @@ main (int argc, char **argv)
106 } 99 }
107 } 100 }
108 else if (strstr (proc_name, proc)) { 101 else if (strstr (proc_name, proc)) {
109 len = strlen (message) + 21; 102 asprintf (&message, "%s %d", message, proc_size);
110 message = realloc (message, len);
111 if (message == NULL)
112 terminate (STATE_UNKNOWN,
113 "check_vsz: could not malloc message (2)");
114 sprintf (message, "%s %d", message, proc_size);
115 if (proc_size > warn) { 103 if (proc_size > warn) {
116 result = max_state (result, STATE_WARNING); 104 result = max_state (result, STATE_WARNING);
117 } 105 }
@@ -206,11 +194,7 @@ process_arguments (int argc, char **argv)
206 warn = atoi (optarg); 194 warn = atoi (optarg);
207 break; 195 break;
208 case 'C': /* command name */ 196 case 'C': /* command name */
209 proc = malloc (strlen (optarg) + 1); 197 proc = optarg;
210 if (proc == NULL)
211 terminate (STATE_UNKNOWN,
212 "check_vsz: failed malloc of proc in process_arguments");
213 strcpy (proc, optarg);
214 break; 198 break;
215 } 199 }
216 } 200 }
@@ -236,13 +220,8 @@ process_arguments (int argc, char **argv)
236 crit = atoi (argv[c++]); 220 crit = atoi (argv[c++]);
237 } 221 }
238 222
239 if (proc == NULL) { 223 if (proc == NULL)
240 proc = malloc (strlen (argv[c]) + 1); 224 proc = argv[c];
241 if (proc == NULL)
242 terminate (STATE_UNKNOWN,
243 "check_vsz: failed malloc of proc in process_arguments");
244 strcpy (proc, argv[c]);
245 }
246 225
247 return c; 226 return c;
248} 227}
diff --git a/plugins/urlize.c b/plugins/urlize.c
index 9e02cb5..9835c82 100644
--- a/plugins/urlize.c
+++ b/plugins/urlize.c
@@ -71,9 +71,9 @@ main (int argc, char **argv)
71 exit (STATE_UNKNOWN); 71 exit (STATE_UNKNOWN);
72 } 72 }
73 73
74 cmd = ssprintf (cmd, "%s", argv[2]); 74 asprintf (&cmd, "%s", argv[2]);
75 for (i = 3; i < argc; i++) { 75 for (i = 3; i < argc; i++) {
76 cmd = ssprintf (cmd, "%s %s", cmd, argv[i]); 76 asprintf (&cmd, "%s %s", cmd, argv[i]);
77 } 77 }
78 78
79 child_process = spopen (cmd); 79 child_process = spopen (cmd);
diff --git a/plugins/utils.c b/plugins/utils.c
index bf1d204..5dc6cfd 100644
--- a/plugins/utils.c
+++ b/plugins/utils.c
@@ -50,7 +50,6 @@ void strip (char *);
50char *strscpy (char *dest, const char *src); 50char *strscpy (char *dest, const char *src);
51char *strscat (char *dest, const char *src); 51char *strscat (char *dest, const char *src);
52char *strnl (char *str); 52char *strnl (char *str);
53char *ssprintf (char *str, const char *fmt, ...);
54char *strpcpy (char *dest, const char *src, const char *str); 53char *strpcpy (char *dest, const char *src, const char *str);
55char *strpcat (char *dest, const char *src, const char *str); 54char *strpcat (char *dest, const char *src, const char *str);
56 55
@@ -496,72 +495,6 @@ strnl (char *str)
496 495
497/****************************************************************************** 496/******************************************************************************
498 * 497 *
499 * Does a formatted print to a string variable
500 *
501 * Given a pointer destination string, which may or may not already
502 * hold some text, and a source string with additional text (possibly
503 * NULL or empty), returns a pointer to a string that cntains the
504 * results of the specified formatted print
505 *
506 * Example:
507 *
508 * char *str=NULL;
509 * str = ssprintf(str,"%d %s",1,"string");
510 *
511 *****************************************************************************/
512
513char *
514ssprintf (char *ptr, const char *fmt, ...)
515{
516 va_list ap;
517 int nchars;
518 size_t size;
519 char *str = NULL;
520
521 if (str == NULL) {
522 str = malloc (TXTBLK);
523 if (str == NULL)
524 terminate (STATE_UNKNOWN, "malloc failed in ssprintf");
525 size = TXTBLK;
526 }
527 else
528 size = max (strlen (str), TXTBLK);
529
530 va_start (ap, fmt);
531
532 while (1) {
533
534 nchars = vsnprintf (str, size, fmt, ap);
535
536 if (nchars > -1)
537 if (nchars < (int) size) {
538 va_end (ap);
539 str[nchars] = '\0';
540 if (ptr)
541 free (ptr);
542 return str;
543 }
544 else {
545 size = (size_t) (nchars + 1);
546 }
547
548 else
549 size *= 2;
550
551 str = realloc (str, size);
552
553 if (str == NULL)
554 terminate (STATE_UNKNOWN, "realloc failed in ssprintf");
555 }
556
557}
558
559
560
561
562
563/******************************************************************************
564 *
565 * Like strscpy, except only the portion of the source string up to 498 * Like strscpy, except only the portion of the source string up to
566 * the provided delimiter is copied. 499 * the provided delimiter is copied.
567 * 500 *