SF.net SVN: nagiosplug:[2075] nagiosplug/trunk

[email protected]
Newsgroups gmane.network.nagios.plugins.cvs
Message-ID <[email protected]>
Revision: 2075
          http://nagiosplug.svn.sourceforge.net/nagiosplug/?rev=2075&view=rev
Author:   tonvoon
Date:     2008-11-08 02:08:56 +0000 (Sat, 08 Nov 2008)

Log Message:
-----------
check_http now has options to specify the HTTP method (Jan - 2155152)

Modified Paths:
--------------
    nagiosplug/trunk/NEWS
    nagiosplug/trunk/plugins/check_http.c
    nagiosplug/trunk/plugins/tests/check_http.t

Modified: nagiosplug/trunk/NEWS
===================================================================
--- nagiosplug/trunk/NEWS	2008-11-08 01:03:39 UTC (rev 2074)
+++ nagiosplug/trunk/NEWS	2008-11-08 02:08:56 UTC (rev 2075)
@@ -1,6 +1,7 @@
 This file documents the major additions and syntax changes between releases.
 
 1.4.14 ...
+	check_http has options to specify the HTTP method (#2155152)
 	check_users thresholds were not working excatly as documented (>= rather than >)
 	Updated tinderbox_build script to point to new tinderbox server
 	check_ifoperstatus -n flag now works as expected (sf.net #1569488)

Modified: nagiosplug/trunk/plugins/check_http.c
===================================================================
--- nagiosplug/trunk/plugins/check_http.c	2008-11-08 01:03:39 UTC (rev 2074)
+++ nagiosplug/trunk/plugins/check_http.c	2008-11-08 02:08:56 UTC (rev 2075)
@@ -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,17 @@
       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;
-      http_method = strdup("POST");
-      http_post_data = strdup (optarg);
+    case 'P': /* HTTP POST data in URL encoded format; ignored if settings already */
+      if (! http_post_data)
+        http_post_data = strdup (optarg);
+      if (! http_method)
+        http_method = strdup("POST");
       break;
+    case 'j': /* Set HTTP method */
+      if (http_method)
+        free(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 +824,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);
@@ -1313,6 +1320,8 @@
   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", "-j, --method=STRING  (for example: HEAD, 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 +1405,5 @@
   printf ("       [-a auth] [-f <ok | warn | critcal | follow>] [-e <expect>]\n");
   printf ("       [-s string] [-l] [-r <regex> | -R <case-insensitive regex>] [-P string]\n");
   printf ("       [-m <min_pg_size>:<max_pg_size>] [-4|-6] [-N] [-M <age>] [-A string]\n");
-  printf ("       [-k string] [-S] [-C <age>] [-T <content-type>]\n");
+  printf ("       [-k string] [-S] [-C <age>] [-T <content-type>] [-j method]\n");
 }

Modified: nagiosplug/trunk/plugins/tests/check_http.t
===================================================================
--- nagiosplug/trunk/plugins/tests/check_http.t	2008-11-08 01:03:39 UTC (rev 2074)
+++ nagiosplug/trunk/plugins/tests/check_http.t	2008-11-08 02:08:56 UTC (rev 2075)
@@ -33,9 +33,7 @@
 	print "Please contact me at: <URL:", $d->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/(.*)^) {
@@ -47,6 +45,18 @@
 				$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);
+				}
+			} elsif ($r->url->path eq "/postdata") {
+				$c->send_basic_header;
+				$c->send_crlf;
+				$c->send_response($r->method.":".$r->content);
 			} else {
 				$c->send_error(RC_FORBIDDEN);
 			}
@@ -63,7 +73,7 @@
 }
 
 if (-x "./check_http") {
-	plan tests => 19;
+	plan tests => 39;
 } else {
 	plan skip_all => "No check_http compiled";
 }
@@ -119,3 +129,54 @@
 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 );
+
+$cmd = "$command -P stufftoinclude -u /postdata -s POST:stufftoinclude";
+$result = NPTest->testCmd( $cmd );
+is( $result->return_code, 0, $cmd);
+like( $result->output, '/^HTTP OK HTTP/1.1 200 OK - ([\d\.]+) second/', "Output correct: ".$result->output );
+
+$cmd = "$command -j PUT -P stufftoinclude -u /postdata -s PUT:stufftoinclude";
+$result = NPTest->testCmd( $cmd );
+is( $result->return_code, 0, $cmd);
+like( $result->output, '/^HTTP OK HTTP/1.1 200 OK - ([\d\.]+) second/', "Output correct: ".$result->output );
+
+# To confirm that the free doesn't segfault
+$cmd = "$command -P stufftoinclude -j PUT -u /postdata -s PUT:stufftoinclude";
+$result = NPTest->testCmd( $cmd );
+is( $result->return_code, 0, $cmd);
+like( $result->output, '/^HTTP OK HTTP/1.1 200 OK - ([\d\.]+) second/', "Output correct: ".$result->output );
+


This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.

-------------------------------------------------------------------------
This SF.Net email is sponsored by the Moblin Your Move Developer's challenge
Build the coolest Linux based applications with Moblin SDK & win great prizes
Grand prize is a trip for two to an Open Source event anywhere in the world
http://moblin-contest.org/redirect.php?banner_id=100&url=/
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.