tags 375096 fixed-upstream
thanks
Note this is fixed in upstream CVS, but they call it "invert-regex". I thought
my patch can still be used as a "backport", so I replaced the argument to match
with upstream's.
--
Robert Millan
ACK STORM, S.L. - http://www.ackstorm.es/
--- ../../old/nagios-plugins-1.4.3/plugins/check_http.c 2006-04-05 09:58:27.000000000 +0200
+++ check_http.c 2006-06-23 11:45:26.000000000 +0200
@@ -49,6 +49,7 @@
# define my_send(buf, len) send(sd, buf, len, 0)
#endif /* HAVE_SSL */
int no_body = FALSE;
+int invert_match = FALSE;
int maximum_age = -1;
#ifdef HAVE_REGEX_H
@@ -174,6 +175,7 @@
{"ereg", required_argument, 0, 'r'},
{"eregi", required_argument, 0, 'R'},
{"linespan", no_argument, 0, 'l'},
+ {"invert-regex", no_argument, 0, 'i'},
{"onredirect", required_argument, 0, 'f'},
{"certificate", required_argument, 0, 'C'},
{"useragent", required_argument, 0, 'A'},
@@ -204,7 +206,7 @@
}
while (1) {
- c = getopt_long (argc, argv, "Vvh46t:c:w:A:k:H:P:T:I:a:e:p:s:R:r:u:f:C:nlLSm:M:N", longopts, &option);
+ c = getopt_long (argc, argv, "Vvh46t:c:w:A:k:H:P:T:I:a:e:p:s:R:r:iu:f:C:nlLSm:M:N", longopts, &option);
if (c == -1 || c == EOF)
break;
@@ -333,6 +335,9 @@
case 'T': /* Content-type */
asprintf (&http_content_type, "%s", optarg);
break;
+ case 'i': /* invert-regex */
+ invert_match = TRUE;
+ break;
#ifndef HAVE_REGEX_H
case 'l': /* linespan */
case 'r': /* linespan */
@@ -978,7 +983,7 @@
/* these checks should be last */
if (strlen (string_expect)) {
- if (strstr (page, string_expect)) {
+ if (strstr (page, string_expect) && !invert_match) {
printf (_("HTTP OK %s - %.3f second response time %s%s|%s %s\n"),
status_line, elapsed_time,
timestamp, (display_html ? "</A>" : ""),
@@ -986,7 +991,7 @@
exit (STATE_OK);
}
else {
- printf (_("CRITICAL - string not found%s|%s %s\n"),
+ printf (invert_match ? _("CRITICAL - string found%s|%s %s\n") : _("CRITICAL - string not found%s|%s %s\n"),
(display_html ? "</A>" : ""),
perfd_time (elapsed_time), perfd_size (pagesize));
exit (STATE_CRITICAL);
@@ -995,6 +1000,15 @@
#ifdef HAVE_REGEX_H
if (strlen (regexp)) {
errcode = regexec (&preg, page, REGS, pmatch, 0);
+
+ if (invert_match)
+ {
+ if (errcode == 0)
+ errcode = REG_NOMATCH;
+ else if (errcode == REG_NOMATCH)
+ errcode = 0;
+ }
+
if (errcode == 0) {
printf (_("HTTP OK %s - %.3f second response time %s%s|%s %s\n"),
status_line, elapsed_time,
@@ -1004,7 +1018,7 @@
}
else {
if (errcode == REG_NOMATCH) {
- printf (_("CRITICAL - pattern not found%s|%s %s\n"),
+ printf (invert_match ? _("CRITICAL - pattern found%s|%s %s\n") : _("CRITICAL - pattern not found%s|%s %s\n"),
(display_html ? "</A>" : ""),
perfd_time (elapsed_time), perfd_size (pagesize));
exit (STATE_CRITICAL);
@@ -1268,7 +1282,9 @@
Warn if document is more than SECONDS old. the number can also be of \n\
the form \"10m\" for minutes, \"10h\" for hours, or \"10d\" for days.\n\
-T, --content-type=STRING\n\
- specify Content-Type header media type when POSTing\n"), HTTP_EXPECT);
+ specify Content-Type header media type when POSTing\n\
+ -i, --invert-regex\n\
+ Select non-matching lines.\n"), HTTP_EXPECT);
#ifdef HAVE_REGEX_H
printf (_("\