summaryrefslogtreecommitdiffstats
path: root/lib/utils_tcp.c
diff options
context:
space:
mode:
Diffstat (limited to 'lib/utils_tcp.c')
-rw-r--r--lib/utils_tcp.c101
1 files changed, 52 insertions, 49 deletions
diff --git a/lib/utils_tcp.c b/lib/utils_tcp.c
index 23ee4a95..a82d5a3f 100644
--- a/lib/utils_tcp.c
+++ b/lib/utils_tcp.c
@@ -1,75 +1,78 @@
1/***************************************************************************** 1/*****************************************************************************
2* 2 *
3* Library for check_tcp 3 * Library for check_tcp
4* 4 *
5* License: GPL 5 * License: GPL
6* Copyright (c) 1999-2013 Monitoring Plugins Development Team 6 * Copyright (c) 1999-2024 Monitoring Plugins Development Team
7* 7 *
8* Description: 8 * Description:
9* 9 *
10* This file contains utilities for check_tcp. These are tested by libtap 10 * This file contains utilities for check_tcp. These are tested by libtap
11* 11 *
12* 12 *
13* This program is free software: you can redistribute it and/or modify 13 * This program is free software: you can redistribute it and/or modify
14* it under the terms of the GNU General Public License as published by 14 * it under the terms of the GNU General Public License as published by
15* the Free Software Foundation, either version 3 of the License, or 15 * the Free Software Foundation, either version 3 of the License, or
16* (at your option) any later version. 16 * (at your option) any later version.
17* 17 *
18* This program is distributed in the hope that it will be useful, 18 * This program is distributed in the hope that it will be useful,
19* but WITHOUT ANY WARRANTY; without even the implied warranty of 19 * but WITHOUT ANY WARRANTY; without even the implied warranty of
20* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 20 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21* GNU General Public License for more details. 21 * GNU General Public License for more details.
22* 22 *
23* You should have received a copy of the GNU General Public License 23 * You should have received a copy of the GNU General Public License
24* along with this program. If not, see <http://www.gnu.org/licenses/>. 24 * along with this program. If not, see <http://www.gnu.org/licenses/>.
25* 25 *
26* 26 *
27*****************************************************************************/ 27 *****************************************************************************/
28 28
29#include "common.h" 29#include "../config.h"
30#include "utils_tcp.h" 30#include "utils_tcp.h"
31#include <stdio.h>
32#include <string.h>
31 33
32#define VERBOSE(message) \ 34#define VERBOSE(message) \
33 do { \ 35 do { \
34 if (flags & NP_MATCH_VERBOSE) \ 36 if (flags & NP_MATCH_VERBOSE) \
35 puts(message); \ 37 puts(message); \
36 } while (0) 38 } while (0)
37 39
38enum np_match_result 40enum np_match_result np_expect_match(char *status, char **server_expect, int expect_count,
39np_expect_match(char *status, char **server_expect, int expect_count, int flags) 41 int flags) {
40{ 42 int match = 0;
41 int i, match = 0, partial = 0; 43 int partial = 0;
42 44 for (int i = 0; i < expect_count; i++) {
43 for (i = 0; i < expect_count; i++) { 45 if (flags & NP_MATCH_VERBOSE) {
44 if (flags & NP_MATCH_VERBOSE)
45 printf("looking for [%s] %s [%s]\n", server_expect[i], 46 printf("looking for [%s] %s [%s]\n", server_expect[i],
46 (flags & NP_MATCH_EXACT) ? 47 (flags & NP_MATCH_EXACT) ? "in beginning of" : "anywhere in", status);
47 "in beginning of" : "anywhere in", 48 }
48 status);
49 49
50 if (flags & NP_MATCH_EXACT) { 50 if (flags & NP_MATCH_EXACT) {
51 if (strncmp(status, server_expect[i], strlen(server_expect[i])) == 0) { 51 if (strncmp(status, server_expect[i], strlen(server_expect[i])) == 0) {
52 VERBOSE("found it"); 52 VERBOSE("found it");
53 match++; 53 match++;
54 continue; 54 continue;
55 } else if (strncmp(status, server_expect[i], strlen(status)) == 0) { 55 }
56
57 if (strncmp(status, server_expect[i], strlen(status)) == 0) {
56 VERBOSE("found a substring"); 58 VERBOSE("found a substring");
57 partial++; 59 partial++;
58 continue; 60 continue;
59 } 61 }
60 } else if (strstr(status, server_expect[i]) != NULL) { 62 } else if (strstr(status, server_expect[i]) != NULL) {
61 VERBOSE("found it"); 63 VERBOSE("found it");
62 match++; 64 match++;
63 continue; 65 continue;
64 } 66 }
65 VERBOSE("couldn't find it"); 67 VERBOSE("couldn't find it");
66 } 68 }
67 69
68 if ((flags & NP_MATCH_ALL && match == expect_count) || 70 if ((flags & NP_MATCH_ALL && match == expect_count) ||
69 (!(flags & NP_MATCH_ALL) && match >= 1)) 71 (!(flags & NP_MATCH_ALL) && match >= 1)) {
70 return NP_MATCH_SUCCESS; 72 return NP_MATCH_SUCCESS;
71 else if (partial > 0 || !(flags & NP_MATCH_EXACT)) 73 }
74 if (partial > 0 || !(flags & NP_MATCH_EXACT)) {
72 return NP_MATCH_RETRY; 75 return NP_MATCH_RETRY;
73 else 76 }
74 return NP_MATCH_FAILURE; 77 return NP_MATCH_FAILURE;
75} 78}