diff options
-rw-r--r-- | lib/tests/test_tcp.c | 16 | ||||
-rw-r--r-- | lib/utils_tcp.c | 19 | ||||
-rw-r--r-- | lib/utils_tcp.h | 6 | ||||
-rw-r--r-- | plugins/check_tcp.c | 23 |
4 files changed, 32 insertions, 32 deletions
diff --git a/lib/tests/test_tcp.c b/lib/tests/test_tcp.c index 6cf9394..8e9d43c 100644 --- a/lib/tests/test_tcp.c +++ b/lib/tests/test_tcp.c | |||
@@ -33,21 +33,21 @@ main (int argc, char **argv) | |||
33 | server_expect[1] = strdup("bb"); | 33 | server_expect[1] = strdup("bb"); |
34 | server_expect[2] = strdup("CC"); | 34 | server_expect[2] = strdup("CC"); |
35 | 35 | ||
36 | ok(np_expect_match("AA bb CC XX", server_expect, server_expect_count, FALSE, TRUE, FALSE) == TRUE, | 36 | ok(np_expect_match("AA bb CC XX", server_expect, server_expect_count, NP_MATCH_EXACT) == TRUE, |
37 | "Test matching any string at the beginning (first expect string)"); | 37 | "Test matching any string at the beginning (first expect string)"); |
38 | ok(np_expect_match("bb AA CC XX", server_expect, server_expect_count, FALSE, TRUE, FALSE) == TRUE, | 38 | ok(np_expect_match("bb AA CC XX", server_expect, server_expect_count, NP_MATCH_EXACT) == TRUE, |
39 | "Test matching any string at the beginning (second expect string)"); | 39 | "Test matching any string at the beginning (second expect string)"); |
40 | ok(np_expect_match("XX bb AA CC XX", server_expect, server_expect_count, FALSE, TRUE, FALSE) == FALSE, | 40 | ok(np_expect_match("XX bb AA CC XX", server_expect, server_expect_count, NP_MATCH_EXACT) == FALSE, |
41 | "Test with strings not matching at the beginning"); | 41 | "Test with strings not matching at the beginning"); |
42 | ok(np_expect_match("XX CC XX", server_expect, server_expect_count, FALSE, TRUE, FALSE) == FALSE, | 42 | ok(np_expect_match("XX CC XX", server_expect, server_expect_count, NP_MATCH_EXACT) == FALSE, |
43 | "Test matching any string"); | 43 | "Test matching any string"); |
44 | ok(np_expect_match("XX", server_expect, server_expect_count, FALSE, FALSE, FALSE) == FALSE, | 44 | ok(np_expect_match("XX", server_expect, server_expect_count, 0) == FALSE, |
45 | "Test not matching any string"); | 45 | "Test not matching any string"); |
46 | ok(np_expect_match("XX AA bb CC XX", server_expect, server_expect_count, TRUE, FALSE, FALSE) == TRUE, | 46 | ok(np_expect_match("XX AA bb CC XX", server_expect, server_expect_count, NP_MATCH_ALL) == TRUE, |
47 | "Test matching all strings"); | 47 | "Test matching all strings"); |
48 | ok(np_expect_match("XX bb CC XX", server_expect, server_expect_count, TRUE, FALSE, FALSE) == FALSE, | 48 | ok(np_expect_match("XX bb CC XX", server_expect, server_expect_count, NP_MATCH_ALL) == FALSE, |
49 | "Test not matching all strings"); | 49 | "Test not matching all strings"); |
50 | ok(np_expect_match("XX XX", server_expect, server_expect_count, TRUE, FALSE, FALSE) == FALSE, | 50 | ok(np_expect_match("XX XX", server_expect, server_expect_count, NP_MATCH_ALL) == FALSE, |
51 | "Test not matching any string (testing all)"); | 51 | "Test not matching any string (testing all)"); |
52 | 52 | ||
53 | 53 | ||
diff --git a/lib/utils_tcp.c b/lib/utils_tcp.c index 8589ce6..cf67b11 100644 --- a/lib/utils_tcp.c +++ b/lib/utils_tcp.c | |||
@@ -30,26 +30,27 @@ | |||
30 | #include "utils_tcp.h" | 30 | #include "utils_tcp.h" |
31 | 31 | ||
32 | int | 32 | int |
33 | np_expect_match(char* status, char** server_expect, int expect_count, int all, int exact_match, int verbose) | 33 | np_expect_match(char* status, char** server_expect, int expect_count, int flags) |
34 | { | 34 | { |
35 | int match = 0; | 35 | int match = 0; |
36 | int i; | 36 | int i; |
37 | for (i = 0; i < expect_count; i++) { | 37 | for (i = 0; i < expect_count; i++) { |
38 | if (verbose) | 38 | if (flags & NP_MATCH_VERBOSE) |
39 | printf ("looking for [%s] %s [%s]\n", server_expect[i], | 39 | printf ("looking for [%s] %s [%s]\n", server_expect[i], |
40 | (exact_match) ? "in beginning of" : "anywhere in", | 40 | (flags & NP_MATCH_EXACT) ? "in beginning of" : "anywhere in", |
41 | status); | 41 | status); |
42 | 42 | ||
43 | if ((exact_match && !strncmp(status, server_expect[i], strlen(server_expect[i]))) || | 43 | if ((flags & NP_MATCH_EXACT && |
44 | (! exact_match && strstr(status, server_expect[i]))) | 44 | !strncmp(status, server_expect[i], strlen(server_expect[i]))) || |
45 | (!(flags & NP_MATCH_EXACT) && strstr(status, server_expect[i]))) | ||
45 | { | 46 | { |
46 | if(verbose) puts("found it"); | 47 | if(flags & NP_MATCH_VERBOSE) puts("found it"); |
47 | match += 1; | 48 | match += 1; |
48 | } else | 49 | } else |
49 | if(verbose) puts("couldn't find it"); | 50 | if(flags & NP_MATCH_VERBOSE) puts("couldn't find it"); |
50 | } | 51 | } |
51 | if ((all == TRUE && match == expect_count) || | 52 | if ((flags & NP_MATCH_ALL && match == expect_count) || |
52 | (! all && match >= 1)) { | 53 | (!(flags & NP_MATCH_ALL) && match >= 1)) { |
53 | return TRUE; | 54 | return TRUE; |
54 | } else | 55 | } else |
55 | return FALSE; | 56 | return FALSE; |
diff --git a/lib/utils_tcp.h b/lib/utils_tcp.h index b0eb8be..34b771d 100644 --- a/lib/utils_tcp.h +++ b/lib/utils_tcp.h | |||
@@ -1,4 +1,8 @@ | |||
1 | /* Header file for utils_tcp */ | 1 | /* Header file for utils_tcp */ |
2 | 2 | ||
3 | #define NP_MATCH_ALL 0x1 | ||
4 | #define NP_MATCH_EXACT 0x2 | ||
5 | #define NP_MATCH_VERBOSE 0x4 | ||
6 | |||
3 | int np_expect_match(char* status, char** server_expect, int server_expect_count, | 7 | int np_expect_match(char* status, char** server_expect, int server_expect_count, |
4 | int all, int exact_match, int verbose); | 8 | int flags); |
diff --git a/plugins/check_tcp.c b/plugins/check_tcp.c index 9e62638..e8d7ec6 100644 --- a/plugins/check_tcp.c +++ b/plugins/check_tcp.c | |||
@@ -82,15 +82,14 @@ static int sd = 0; | |||
82 | #define MAXBUF 1024 | 82 | #define MAXBUF 1024 |
83 | static char buffer[MAXBUF]; | 83 | static char buffer[MAXBUF]; |
84 | static int expect_mismatch_state = STATE_WARNING; | 84 | static int expect_mismatch_state = STATE_WARNING; |
85 | static int match_flags = NP_MATCH_EXACT; | ||
85 | 86 | ||
86 | #define FLAG_SSL 0x01 | 87 | #define FLAG_SSL 0x01 |
87 | #define FLAG_VERBOSE 0x02 | 88 | #define FLAG_VERBOSE 0x02 |
88 | #define FLAG_EXACT_MATCH 0x04 | 89 | #define FLAG_TIME_WARN 0x04 |
89 | #define FLAG_TIME_WARN 0x08 | 90 | #define FLAG_TIME_CRIT 0x08 |
90 | #define FLAG_TIME_CRIT 0x10 | 91 | #define FLAG_HIDE_OUTPUT 0x10 |
91 | #define FLAG_HIDE_OUTPUT 0x20 | 92 | static size_t flags; |
92 | #define FLAG_MATCH_ALL 0x40 | ||
93 | static size_t flags = FLAG_EXACT_MATCH; | ||
94 | 93 | ||
95 | int | 94 | int |
96 | main (int argc, char **argv) | 95 | main (int argc, char **argv) |
@@ -296,12 +295,7 @@ main (int argc, char **argv) | |||
296 | (int)len + 1, status); | 295 | (int)len + 1, status); |
297 | while(isspace(status[len])) status[len--] = '\0'; | 296 | while(isspace(status[len])) status[len--] = '\0'; |
298 | 297 | ||
299 | match = np_expect_match(status, | 298 | match = np_expect_match(status, server_expect, server_expect_count, match_flags); |
300 | server_expect, | ||
301 | server_expect_count, | ||
302 | (flags & FLAG_MATCH_ALL ? TRUE : FALSE), | ||
303 | (flags & FLAG_EXACT_MATCH ? TRUE : FALSE), | ||
304 | (flags & FLAG_VERBOSE ? TRUE : FALSE)); | ||
305 | } | 299 | } |
306 | 300 | ||
307 | if (server_quit != NULL) { | 301 | if (server_quit != NULL) { |
@@ -450,6 +444,7 @@ process_arguments (int argc, char **argv) | |||
450 | exit (STATE_OK); | 444 | exit (STATE_OK); |
451 | case 'v': /* verbose mode */ | 445 | case 'v': /* verbose mode */ |
452 | flags |= FLAG_VERBOSE; | 446 | flags |= FLAG_VERBOSE; |
447 | match_flags |= NP_MATCH_VERBOSE; | ||
453 | break; | 448 | break; |
454 | case '4': | 449 | case '4': |
455 | address_family = AF_INET; | 450 | address_family = AF_INET; |
@@ -506,7 +501,7 @@ process_arguments (int argc, char **argv) | |||
506 | xasprintf(&server_send, "%s", optarg); | 501 | xasprintf(&server_send, "%s", optarg); |
507 | break; | 502 | break; |
508 | case 'e': /* expect string (may be repeated) */ | 503 | case 'e': /* expect string (may be repeated) */ |
509 | flags &= ~FLAG_EXACT_MATCH; | 504 | match_flags &= ~NP_MATCH_EXACT; |
510 | if (server_expect_count == 0) | 505 | if (server_expect_count == 0) |
511 | server_expect = malloc (sizeof (char *) * (++server_expect_count)); | 506 | server_expect = malloc (sizeof (char *) * (++server_expect_count)); |
512 | else | 507 | else |
@@ -584,7 +579,7 @@ process_arguments (int argc, char **argv) | |||
584 | #endif | 579 | #endif |
585 | break; | 580 | break; |
586 | case 'A': | 581 | case 'A': |
587 | flags |= FLAG_MATCH_ALL; | 582 | match_flags |= NP_MATCH_ALL; |
588 | break; | 583 | break; |
589 | } | 584 | } |
590 | } | 585 | } |