From 39e0ee3dcd831ddd3a7777fe55e6788825babac7 Mon Sep 17 00:00:00 2001 From: Ton Voon 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=\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