From 39e0ee3dcd831ddd3a7777fe55e6788825babac7 Mon Sep 17 00:00:00 2001
From: Ton Voon <tonvoon@users.sourceforge.net>
Date: Wed, 5 Apr 2006 07:58:29 +0000
Subject: Allow multiple -k parameters (Gerd Mueller - 1457726)

git-svn-id: https://nagiosplug.svn.sourceforge.net/svnroot/nagiosplug/nagiosplug/trunk@1367 f882894a-f735-0410-b71e-b25c423dba1c

diff --git a/plugins/check_http.c b/plugins/check_http.c
index 58cf83c..e25e5db 100644
--- a/plugins/check_http.c
+++ b/plugins/check_http.c
@@ -89,7 +89,8 @@ double critical_time = 0;
 int check_critical_time = FALSE;
 char user_auth[MAX_INPUT_BUFFER] = "";
 int display_html = FALSE;
-char *http_opt_headers;
+char **http_opt_headers;
+int http_opt_headers_count = 0;
 int onredirect = STATE_OK;
 int use_ssl = FALSE;
 int verbose = FALSE;
@@ -245,7 +246,12 @@ process_arguments (int argc, char **argv)
       asprintf (&user_agent, "User-Agent: %s", optarg);
       break;
     case 'k': /* Additional headers */
-      asprintf (&http_opt_headers, "%s", optarg);
+      if (http_opt_headers_count == 0)
+        http_opt_headers = malloc (sizeof (char *) * (++http_opt_headers_count));
+      else
+        http_opt_headers = realloc (http_opt_headers, sizeof (char *) * (++http_opt_headers_count));
+      http_opt_headers[http_opt_headers_count - 1] = optarg;
+      //asprintf (&http_opt_headers, "%s", optarg);
       break;
     case 'L': /* show html link */
       display_html = TRUE;
@@ -767,9 +773,12 @@ check_http (void)
     asprintf (&buf, "%sHost: %s\r\n", buf, host_name);
 
   /* optionally send any other header tag */
-  if (http_opt_headers) {
-    for ((pos = strtok(http_opt_headers, INPUT_DELIMITER)); pos; (pos = strtok(NULL, INPUT_DELIMITER)))
-      asprintf (&buf, "%s%s\r\n", buf, pos);
+  if (http_opt_headers_count) {
+    for (i = 0; i < http_opt_headers_count ; i++) {
+      for ((pos = strtok(http_opt_headers[i], INPUT_DELIMITER)); pos; (pos = strtok(NULL, INPUT_DELIMITER)))
+        asprintf (&buf, "%s%s\r\n", buf, pos);
+    }
+    free(http_opt_headers);
   }
 
   /* optionally send the authentication info */
@@ -1277,7 +1286,7 @@ certificate expiration times."));
  -A, --useragent=STRING\n\
    String to be sent in http header as \"User Agent\"\n\
  -k, --header=STRING\n\
-   Any other tags to be sent in http header, separated by semicolon\n\
+   Any other tags to be sent in http header. Use multiple times for additional headers\n\
  -L, --link=URL\n\
    Wrap output in HTML link (obsoleted by urlize)\n\
  -f, --onredirect=<ok|warning|critical|follow>\n\
diff --git a/plugins/t/check_http.t b/plugins/t/check_http.t
index 408906d..3154151 100644
--- a/plugins/t/check_http.t
+++ b/plugins/t/check_http.t
@@ -9,7 +9,7 @@ use strict;
 use Test::More;
 use NPTest;
 
-plan tests => 12;
+plan tests => 14;
 
 my $successOutput = '/OK.*HTTP.*second/';
 
@@ -34,6 +34,16 @@ cmp_ok( $res->return_code, '==', 0, "Webserver $host_tcp_http responded" );
 like( $res->output, $successOutput, "Output OK" );
 
 $res = NPTest->testCmd(
+	"./check_http $host_tcp_http -wt 300 -ct 600 -v -v -v -k 'bob:there;fred:here'"
+	);
+like( $res->output, '/bob:there\r\nfred:here\r\n/', "Got headers, delimited with ';'" );
+
+$res = NPTest->testCmd(
+	"./check_http $host_tcp_http -wt 300 -ct 600 -v -v -v -k 'bob:there;fred:here' -k 'carl:frown'"
+	);
+like( $res->output, '/bob:there\r\nfred:here\r\ncarl:frown\r\n/', "Got headers with multiple -k options" );
+
+$res = NPTest->testCmd(
 	"./check_http $host_nonresponsive -wt 1 -ct 2"
 	);
 cmp_ok( $res->return_code, '==', 2, "Webserver $host_nonresponsive not responding" );
-- 
cgit v0.10-9-g596f

