diff options
-rw-r--r-- | plugins/check_tcp.c | 27 |
1 files changed, 20 insertions, 7 deletions
diff --git a/plugins/check_tcp.c b/plugins/check_tcp.c index 1057fdc..13c34f9 100644 --- a/plugins/check_tcp.c +++ b/plugins/check_tcp.c | |||
@@ -27,8 +27,9 @@ const char *summary = "\ | |||
27 | This plugin tests %s connections with the specified host.\n"; | 27 | This plugin tests %s connections with the specified host.\n"; |
28 | 28 | ||
29 | const char *option_summary = "\ | 29 | const char *option_summary = "\ |
30 | -H host -p port [-w warn_time] [-c crit_time] [-s send]\n\ | 30 | -H host -p port [-w warn_time] [-c crit_time] [-s send_string]\n\ |
31 | [-e expect] [-W wait] [-t to_sec] [-r refuse_state] [-v]\n"; | 31 | [-e expect_string] [-q quit_string] [-m maxbytes] [-d delay]\n\ |
32 | [-t to_sec] [-r refuse_state] [-v]\n"; | ||
32 | 33 | ||
33 | const char *options = "\ | 34 | const char *options = "\ |
34 | -H, --hostname=ADDRESS\n\ | 35 | -H, --hostname=ADDRESS\n\ |
@@ -40,7 +41,11 @@ const char *options = "\ | |||
40 | String to send to the server\n\ | 41 | String to send to the server\n\ |
41 | -e, --expect=STRING\n\ | 42 | -e, --expect=STRING\n\ |
42 | String to expect in server response\n\ | 43 | String to expect in server response\n\ |
43 | -W, --wait=INTEGER\n\ | 44 | -q, --quit=STRING\n\ |
45 | String to send server to initiate a clean close of the connection\n\ | ||
46 | -m, --maxbytes=INTEGER\n\ | ||
47 | Close connection once more than this number of bytes are received\n\ | ||
48 | -d, --delay=INTEGER\n\ | ||
44 | Seconds to wait between sending string and polling for response\n\ | 49 | Seconds to wait between sending string and polling for response\n\ |
45 | -w, --warning=DOUBLE\n\ | 50 | -w, --warning=DOUBLE\n\ |
46 | Response time to result in warning status (seconds)\n\ | 51 | Response time to result in warning status (seconds)\n\ |
@@ -50,8 +55,8 @@ const char *options = "\ | |||
50 | Seconds before connection times out (default: %d)\n\ | 55 | Seconds before connection times out (default: %d)\n\ |
51 | -r, --refuse=ok|warn|crit\n\ | 56 | -r, --refuse=ok|warn|crit\n\ |
52 | Accept tcp refusals with states ok, warn, crit (default: crit)\n\ | 57 | Accept tcp refusals with states ok, warn, crit (default: crit)\n\ |
53 | -v\n\ | 58 | -v, --verbose\n\ |
54 | Show details for command-line debugging (do not use with nagios server)\n"; | 59 | Show details for command-line debugging (Nagios may truncate output)\n"; |
55 | 60 | ||
56 | const char *standard_options = "\ | 61 | const char *standard_options = "\ |
57 | -h, --help\n\ | 62 | -h, --help\n\ |
@@ -112,6 +117,7 @@ char *server_send = NULL; | |||
112 | char *server_quit = NULL; | 117 | char *server_quit = NULL; |
113 | char **server_expect = NULL; | 118 | char **server_expect = NULL; |
114 | int server_expect_count = 0; | 119 | int server_expect_count = 0; |
120 | int maxbytes = 0; | ||
115 | char **warn_codes = NULL; | 121 | char **warn_codes = NULL; |
116 | int warn_codes_count = 0; | 122 | int warn_codes_count = 0; |
117 | char **crit_codes = NULL; | 123 | char **crit_codes = NULL; |
@@ -291,6 +297,8 @@ main (int argc, char **argv) | |||
291 | asprintf (&status, "%s%s", status, buffer); | 297 | asprintf (&status, "%s%s", status, buffer); |
292 | if (buffer[i-2] == '\r' && buffer[i-1] == '\n') | 298 | if (buffer[i-2] == '\r' && buffer[i-1] == '\n') |
293 | break; | 299 | break; |
300 | if (maxbytes>0 && strlen(status)>maxbytes) | ||
301 | break; | ||
294 | } | 302 | } |
295 | 303 | ||
296 | /* return a CRITICAL status if we couldn't read any data */ | 304 | /* return a CRITICAL status if we couldn't read any data */ |
@@ -380,6 +388,7 @@ process_arguments (int argc, char **argv) | |||
380 | {"port", required_argument, 0, 'p'}, | 388 | {"port", required_argument, 0, 'p'}, |
381 | {"send", required_argument, 0, 's'}, | 389 | {"send", required_argument, 0, 's'}, |
382 | {"expect", required_argument, 0, 'e'}, | 390 | {"expect", required_argument, 0, 'e'}, |
391 | {"maxbytes", required_argument, 0, 'm'}, | ||
383 | {"quit", required_argument, 0, 'q'}, | 392 | {"quit", required_argument, 0, 'q'}, |
384 | {"delay", required_argument, 0, 'd'}, | 393 | {"delay", required_argument, 0, 'd'}, |
385 | {"refuse", required_argument, 0, 'r'}, | 394 | {"refuse", required_argument, 0, 'r'}, |
@@ -410,8 +419,8 @@ process_arguments (int argc, char **argv) | |||
410 | } | 419 | } |
411 | 420 | ||
412 | while (1) { | 421 | while (1) { |
413 | c = getopt_long (argc, argv, "+hVvH:s:e:q:c:w:t:p:C:W:d:Sr:", long_options, | 422 | c = getopt_long (argc, argv, "+hVvH:s:e:q:m:c:w:t:p:C:W:d:Sr:", |
414 | &option_index); | 423 | long_options, &option_index); |
415 | 424 | ||
416 | if (c == -1 || c == EOF || c == 1) | 425 | if (c == -1 || c == EOF || c == 1) |
417 | break; | 426 | break; |
@@ -476,6 +485,10 @@ process_arguments (int argc, char **argv) | |||
476 | server_expect = realloc (server_expect, ++server_expect_count); | 485 | server_expect = realloc (server_expect, ++server_expect_count); |
477 | server_expect[server_expect_count - 1] = optarg; | 486 | server_expect[server_expect_count - 1] = optarg; |
478 | break; | 487 | break; |
488 | case 'm': | ||
489 | if (!is_intpos (optarg)) | ||
490 | usage ("Maxbytes must be a positive integer\n"); | ||
491 | maxbytes = atoi (optarg); | ||
479 | case 'q': | 492 | case 'q': |
480 | server_quit = optarg; | 493 | server_quit = optarg; |
481 | break; | 494 | break; |