From 0b6423f9c99d9edf8c96fefd0f6c453859395aa1 Mon Sep 17 00:00:00 2001 From: Holger Weiss Date: Mon, 30 Sep 2013 00:03:24 +0200 Subject: Import Nagios Plugins site Import the Nagios Plugins web site, Cronjobs, infrastructure scripts, and configuration files. --- web/attachments/296709-check_http.patch | 158 ++++++++++++++++++++++++++++++++ 1 file changed, 158 insertions(+) create mode 100644 web/attachments/296709-check_http.patch (limited to 'web/attachments/296709-check_http.patch') diff --git a/web/attachments/296709-check_http.patch b/web/attachments/296709-check_http.patch new file mode 100644 index 0000000..04d83f1 --- /dev/null +++ b/web/attachments/296709-check_http.patch @@ -0,0 +1,158 @@ +Index: check_http.c +=================================================================== +--- check_http.c (revision 2059) ++++ check_http.c (working copy) +@@ -187,6 +187,7 @@ + {"nohtml", no_argument, 0, 'n'}, + {"ssl", no_argument, 0, 'S'}, + {"post", required_argument, 0, 'P'}, ++ {"method", required_argument, 0, 'j'}, + {"IP-address", required_argument, 0, 'I'}, + {"url", required_argument, 0, 'u'}, + {"port", required_argument, 0, 'p'}, +@@ -228,7 +229,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:j:T:I:a:e:p:s:R:r:u:f:C:nlLSm:M:N", longopts, &option); + if (c == -1 || c == EOF) + break; + +@@ -344,11 +345,19 @@ + strncpy (user_auth, optarg, MAX_INPUT_BUFFER - 1); + user_auth[MAX_INPUT_BUFFER - 1] = 0; + break; +- case 'P': /* HTTP POST data in URL encoded format */ +- if (http_method || http_post_data) break; ++ case 'P': /* HTTP POST data in URL encoded format; only sets data when method already set*/ ++ if (http_post_data) break; ++ if (http_method) ++ { ++ http_post_data = strdup (optarg); ++ break; ++ } + http_method = strdup("POST"); + http_post_data = strdup (optarg); + break; ++ case 'j': /* SET HTTP METHOD */ ++ http_method = strdup (optarg); ++ break; + case 's': /* string or substring */ + strncpy (string_expect, optarg, MAX_INPUT_BUFFER - 1); + string_expect[MAX_INPUT_BUFFER - 1] = 0; +@@ -817,7 +826,7 @@ + asprintf (&buf, "%sAuthorization: Basic %s\r\n", buf, auth); + } + +- /* either send http POST data */ ++ /* either send http POST data (any data, not only POST)*/ + if (http_post_data) { + if (http_content_type) { + asprintf (&buf, "%sContent-Type: %s\r\n", buf, http_content_type); +@@ -1312,7 +1321,9 @@ + printf (" %s\n", "-u, --url=PATH"); + printf (" %s\n", _("URL to GET or POST (default: /)")); + printf (" %s\n", "-P, --post=STRING"); +- printf (" %s\n", _("URL encoded http POST data")); ++ printf (" %s\n", _("URL encoded http POST data. When used with -j only sets data.")); ++ printf (" %s\n", "-j, --method=STRING (ex. OPTIONS, TRACE, PUT, DELETE)"); ++ printf (" %s\n", _("Set HTTP method.")); + printf (" %s\n", "-N, --no-body"); + printf (" %s\n", _("Don't wait for document body: stop reading after headers.")); + printf (" %s\n", _("(Note that this still does an HTTP GET or POST, not a HEAD.)")); +@@ -1396,5 +1407,5 @@ + printf (" [-a auth] [-f ] [-e ]\n"); + printf (" [-s string] [-l] [-r | -R ] [-P string]\n"); + printf (" [-m :] [-4|-6] [-N] [-M ] [-A string]\n"); +- printf (" [-k string] [-S] [-C ] [-T ]\n"); ++ printf (" [-k string] [-S] [-C ] [-T ] [-j string]\n"); + } +Index: tests/check_http.t +=================================================================== +--- tests/check_http.t (revision 2059) ++++ tests/check_http.t (working copy) +@@ -33,9 +33,7 @@ + print "Please contact me at: url, ">\n"; + while (my $c = $d->accept ) { + while (my $r = $c->get_request) { +- if ($r->method eq "GET" and $r->url->path eq "/xyzzy") { +- $c->send_file_response("/etc/passwd"); +- } elsif ($r->method eq "GET" and $r->url->path =~ m^/statuscode/(\d+)^) { ++ if ($r->method eq "GET" and $r->url->path =~ m^/statuscode/(\d+)^) { + $c->send_basic_header($1); + $c->send_crlf; + } elsif ($r->method eq "GET" and $r->url->path =~ m^/file/(.*)^) { +@@ -46,8 +44,15 @@ + $c->send_basic_header; + $c->send_crlf; + sleep 1; +- $c->send_response("slow"); ++ } elsif ($r->url->path eq "/method") { ++ if ($r->method eq "DELETE") { ++ $c->send_error(RC_METHOD_NOT_ALLOWED); ++ } elsif ($r->method eq "foo") { ++ $c->send_error(RC_NOT_IMPLEMENTED); + } else { ++ $c->send_status_line(200, $r->method); ++ } ++ } else { + $c->send_error(RC_FORBIDDEN); + } + $c->close; +@@ -63,7 +68,7 @@ + } + + if (-x "./check_http") { +- plan tests => 19; ++ plan tests => 33; + } else { + plan skip_all => "No check_http compiled"; + } +@@ -84,7 +89,7 @@ + + $result = NPTest->testCmd( "$command -u /slow" ); + is( $result->return_code, 0, "/file/root"); +-like( $result->output, '/^HTTP OK HTTP/1.1 200 OK - 177 bytes in ([\d\.]+) seconds/', "Output correct" ); ++like( $result->output, '/^HTTP OK HTTP/1.1 200 OK - 89 bytes in ([\d\.]+) seconds/', "Output correct" ); + $result->output =~ /in ([\d\.]+) seconds/; + cmp_ok( $1, ">", 1, "Time is > 1 second" ); + +@@ -119,3 +124,37 @@ + is( $result->return_code, 2, $cmd); + like( $result->output, '/^HTTP CRITICAL - Invalid HTTP response received from host on port (\d+): HTTP/1.1 203 Non-Authoritative Information/', "Output correct: ".$result->output ); + ++$cmd = "$command -j HEAD -u /method"; ++$result = NPTest->testCmd( $cmd ); ++is( $result->return_code, 0, $cmd); ++like( $result->output, '/^HTTP OK HTTP/1.1 200 HEAD - 19 bytes in ([\d\.]+) seconds/', "Output correct: ".$result->output ); ++ ++$cmd = "$command -j POST -u /method"; ++$result = NPTest->testCmd( $cmd ); ++is( $result->return_code, 0, $cmd); ++like( $result->output, '/^HTTP OK HTTP/1.1 200 POST - 19 bytes in ([\d\.]+) seconds/', "Output correct: ".$result->output ); ++ ++$cmd = "$command -j GET -u /method"; ++$result = NPTest->testCmd( $cmd ); ++is( $result->return_code, 0, $cmd); ++like( $result->output, '/^HTTP OK HTTP/1.1 200 GET - 18 bytes in ([\d\.]+) seconds/', "Output correct: ".$result->output ); ++ ++$cmd = "$command -u /method"; ++$result = NPTest->testCmd( $cmd ); ++is( $result->return_code, 0, $cmd); ++like( $result->output, '/^HTTP OK HTTP/1.1 200 GET - 18 bytes in ([\d\.]+) seconds/', "Output correct: ".$result->output ); ++ ++$cmd = "$command -P foo -u /method"; ++$result = NPTest->testCmd( $cmd ); ++is( $result->return_code, 0, $cmd); ++like( $result->output, '/^HTTP OK HTTP/1.1 200 POST - 19 bytes in ([\d\.]+) seconds/', "Output correct: ".$result->output ); ++ ++$cmd = "$command -j DELETE -u /method"; ++$result = NPTest->testCmd( $cmd ); ++is( $result->return_code, 1, $cmd); ++like( $result->output, '/^HTTP WARNING: HTTP/1.1 405 Method Not Allowed/', "Output correct: ".$result->output ); ++ ++$cmd = "$command -j foo -u /method"; ++$result = NPTest->testCmd( $cmd ); ++is( $result->return_code, 2, $cmd); ++like( $result->output, '/^HTTP CRITICAL: HTTP/1.1 501 Not Implemented/', "Output correct: ".$result->output ); -- cgit v1.2.3-74-g34f1