summary | shortlog | log | commit | commitdiff | tree
raw | patch | inline | side by side (parent: a0f3874)
raw | patch | inline | side by side (parent: a0f3874)
author | Ton Voon <tonvoon@users.sourceforge.net> | |
Wed, 29 Mar 2006 16:33:36 +0000 (16:33 +0000) | ||
committer | Ton Voon <tonvoon@users.sourceforge.net> | |
Wed, 29 Mar 2006 16:33:36 +0000 (16:33 +0000) |
Adapted from Sebastian Wiesinger's patch (1292404)
git-svn-id: https://nagiosplug.svn.sourceforge.net/svnroot/nagiosplug/nagiosplug/trunk@1365 f882894a-f735-0410-b71e-b25c423dba1c
git-svn-id: https://nagiosplug.svn.sourceforge.net/svnroot/nagiosplug/nagiosplug/trunk@1365 f882894a-f735-0410-b71e-b25c423dba1c
diff --git a/THANKS.in b/THANKS.in
index 3b2405d25e9790e7fb522a17859c41a6b7d63df3..3fb69c8678c5cfd7a5e5c69b4e8570c7a7a40f2c 100644 (file)
--- a/THANKS.in
+++ b/THANKS.in
Johan Fischer
Sakari Lehtonen
John Rouillard
+Sebastian Wiesinger
diff --git a/plugins/check_tcp.c b/plugins/check_tcp.c
index d8fc26e7d3e7aee3f273c3f536ac0c8b27111ccf..5fe024bec4914a0f8650b32235f8d909dc55fc49 100644 (file)
--- a/plugins/check_tcp.c
+++ b/plugins/check_tcp.c
static char *server_address = NULL;
static char *server_send = NULL;
static char *server_quit = NULL;
-char *lineend = "";
-char *lineendquit = "\r\n";
static char **server_expect;
static size_t server_expect_count = 0;
static size_t maxbytes = 0;
}
if(flags & FLAG_VERBOSE) {
+ if (server_send) {
+ printf("Send string: %s\n", server_send);
+ }
+ if (server_quit) {
+ printf("Quit string: %s\n", server_quit);
+ }
printf("server_expect_count: %d\n", (int)server_expect_count);
for(i = 0; i < server_expect_count; i++)
printf("\t%d: %s\n", i, server_expect[i]);
process_arguments (int argc, char **argv)
{
int c;
+ int escape = 0;
int option = 0;
static struct option longopts[] = {
{"timeout", required_argument, 0, 't'},
{"protocol", required_argument, 0, 'P'},
{"port", required_argument, 0, 'p'},
- {"lineend", required_argument, 0, 'l'},
+ {"escape", required_argument, 0, 'E'},
{"send", required_argument, 0, 's'},
{"expect", required_argument, 0, 'e'},
{"maxbytes", required_argument, 0, 'm'},
}
while (1) {
- c = getopt_long (argc, argv, "+hVv46H:l:s:e:q:m:c:w:t:p:C:W:d:Sr:jD:M:",
+ c = getopt_long (argc, argv, "+hVv46EH:s:e:q:m:c:w:t:p:C:W:d:Sr:jD:M:",
longopts, &option);
if (c == -1 || c == EOF || c == 1)
else
server_port = atoi (optarg);
break;
- case 'l':
- switch (*optarg) {
- case 'n':
- lineend = strdup("\n");
- lineendquit = lineend;
- break;
- case 'r':
- lineend = strdup("\r");
- lineendquit = lineend;
- break;
- case 'b':
- lineend = strdup("\r\n");
- lineendquit = lineend;
- break;
- case 'e':
- lineend = strdup("");
- lineendquit = lineend;
- break;
- default:
- usage4 (_("Unrecognized option to -l, must be r, n, b or e"));
- }
+ case 'E':
+ escape = 1;
break;
case 's':
- asprintf(&server_send, "%s%s", optarg, lineend);
+ if (escape)
+ server_send = np_escaped_string(optarg);
+ else
+ asprintf(&server_send, "%s", optarg);
break;
case 'e': /* expect string (may be repeated) */
EXPECT = NULL;
else
maxbytes = strtol (optarg, NULL, 0);
case 'q':
- asprintf(&server_quit, "%s%s", optarg, lineendquit);
+ if (escape)
+ server_quit = np_escaped_string(optarg);
+ else
+ asprintf(&server_quit, "%s\r\n", optarg);
break;
case 'r':
if (!strncmp(optarg,"ok",2))
printf (_(UT_IPv46));
printf (_("\
- -l, --lineend=b|e|n|r\n\
- Ending on -s and -q strings. b - both: <cr><lf> style, e - empty no\n\
- end, n - newline: newline end, r - return: carriage return end\n\
- Default is \"-l e -s <send> -l b -q <quit>\".\n\
+ -E, --escape\n\
+ Can use \\n, \\r, \\t or \\ in send or quit string.\n\
+ Default: nothing added to send, \\r\\n added to end of quit\n\
-s, --send=STRING\n\
String to send to the server\n\
-e, --expect=STRING\n\
[-s <send string>] [-e <expect string>] [-q <quit string>]\n\
[-m <maximum bytes>] [-d <delay>] [-t <timeout seconds>]\n\
[-r <refuse state>] [-M <mismatch state>] [-v] [-4|-6] [-j]\n\
- [-D <days to cert expiry>] [-S <use SSL>] [-l <n|r|b|e>]\n", progname);
+ [-D <days to cert expiry>] [-S <use SSL>] [-E]\n", progname);
}
index 27e28c7562ff3d0684d56acf99f3a60348caade9..5aa0028a8345dc14945a7df03d89bad4c387abb6 100644 (file)
thresholds *thresholds = NULL;
int rc;
- plan_tests(66);
+ plan_tests(73);
range = parse_range_string("6");
ok( range != NULL, "'6' is valid range");
ok( get_status(30.0001, thresholds) == STATE_WARNING, "30.0001 - warning");
ok( get_status(69, thresholds) == STATE_CRITICAL, "69 - critical");
+ char *test;
+ test = np_escaped_string("bob\\n");
+ ok( strcmp(test, "bob\n") == 0, "bob\\n ok");
+ free(test);
+
+ test = np_escaped_string("rhuba\\rb");
+ ok( strcmp(test, "rhuba\rb") == 0, "rhuba\\rb okay");
+ free(test);
+
+ test = np_escaped_string("ba\\nge\\r");
+ ok( strcmp(test, "ba\nge\r") == 0, "ba\\nge\\r okay");
+ free(test);
+
+ test = np_escaped_string("\\rabbi\\t");
+ ok( strcmp(test, "\rabbi\t") == 0, "\\rabbi\\t okay");
+ free(test);
+
+ test = np_escaped_string("and\\\\or");
+ ok( strcmp(test, "and\\or") == 0, "and\\\\or okay");
+ free(test);
+
+ test = np_escaped_string("bo\\gus");
+ ok( strcmp(test, "bogus") == 0, "bo\\gus okay");
+ free(test);
+
+ test = np_escaped_string("everything");
+ ok( strcmp(test, "everything") == 0, "everything okay");
+ free(test);
+
return exit_status();
}
diff --git a/plugins/utils.c b/plugins/utils.c
index 685a638a0e321974261028e4f6b50f6b1f8defea..a5245c67ae73fa34ea6eb41920d5052bb87df686 100644 (file)
--- a/plugins/utils.c
+++ b/plugins/utils.c
return data;
}
+
+char *np_escaped_string (const char *string) {
+ char *data;
+ int i, j=0;
+ data = strdup(string);
+ for (i=0; data[i]; i++) {
+ if (data[i] == '\\') {
+ switch(data[++i]) {
+ case 'n':
+ data[j++] = '\n';
+ break;
+ case 'r':
+ data[j++] = '\r';
+ break;
+ case 't':
+ data[j++] = '\t';
+ break;
+ case '\\':
+ data[j++] = '\\';
+ break;
+ default:
+ data[j++] = data[i];
+ }
+ } else {
+ data[j++] = data[i];
+ }
+ }
+ data[j] = '\0';
+ return data;
+}
diff --git a/plugins/utils.h b/plugins/utils.h
index 2345ed560d24ab694052fa19578a325f9af5e273..4bbe33d0fa351a1b9fba23f41bd2ac42a3f3287a 100644 (file)
--- a/plugins/utils.h
+++ b/plugins/utils.h
int,
double);
+char *np_escaped_string (const char *);
+
/* The idea here is that, although not every plugin will use all of these,
most will or should. Therefore, for consistency, these very common
options should have only these meanings throughout the overall suite */