[pkg-nagios-changes] [Git][nagios-team/monitoring-plugins][master] Adding d/p/10_check_http_chunked_wo_actual_content from upstream

Jan Wagner (@waja) gitlab at salsa.debian.org
Mon Feb 6 13:07:16 GMT 2023



Jan Wagner pushed to branch master at Debian Nagios Maintainer Group / monitoring-plugins


Commits:
01c9312d by Jan Wagner at 2023-02-06T13:03:47+00:00
Adding d/p/10_check_http_chunked_wo_actual_content from upstream

- - - - -


2 changed files:

- + debian/patches/10_check_http_chunked_wo_actual_content
- debian/patches/series


Changes:

=====================================
debian/patches/10_check_http_chunked_wo_actual_content
=====================================
@@ -0,0 +1,166 @@
+From 6d3e44d2d8395076060e9c741e9b173dc5d57b76 Mon Sep 17 00:00:00 2001
+From: RincewindsHat <12514511+RincewindsHat at users.noreply.github.com>
+Date: Mon, 6 Feb 2023 11:39:44 +0100
+Subject: [PATCH 1/2] check_http: Handle chunked encoding without actual
+ content correctly
+
+---
+ plugins/check_http.c | 8 +++++++-
+ 1 file changed, 7 insertions(+), 1 deletion(-)
+
+diff --git a/plugins/check_http.c b/plugins/check_http.c
+index 5fa310f5d..8dda046ff 100644
+--- a/plugins/check_http.c
++++ b/plugins/check_http.c
+@@ -1462,7 +1462,13 @@ char *unchunk_content(const char *content) {
+     memcpy(result + (overall_size - size_of_chunk), start_of_chunk, size_of_chunk);
+   }
+ 
+-  result[overall_size] = '\0';
++  if (overall_size == 0 && result == NULL) {
++    // We might just have received the end chunk without previous content, so result is never allocated
++    result = calloc(1, sizeof(char));
++    // No error handling here, we can only return NULL anyway
++  } else {
++    result[overall_size] = '\0';
++  }
+   return result;
+ }
+ 
+
+From 03efbb8e4f736bf2df5d9477dd4191501fe035ea Mon Sep 17 00:00:00 2001
+From: RincewindsHat <12514511+RincewindsHat at users.noreply.github.com>
+Date: Mon, 6 Feb 2023 12:15:46 +0100
+Subject: [PATCH 2/2] check_http: Implement special case test for zero size
+ chunk only
+
+---
+ plugins/tests/check_http.t | 70 +++++++++++++++++++++++++++++++++++++-
+ 1 file changed, 69 insertions(+), 1 deletion(-)
+
+diff --git a/plugins/tests/check_http.t b/plugins/tests/check_http.t
+index d766ac372..6078b2745 100755
+--- a/plugins/tests/check_http.t
++++ b/plugins/tests/check_http.t
+@@ -9,12 +9,14 @@ use strict;
+ use Test::More;
+ use NPTest;
+ use FindBin qw($Bin);
++use IO::Socket::INET;
+ 
+ $ENV{'LC_TIME'} = "C";
+ 
+ my $common_tests = 71;
+ my $virtual_port_tests = 8;
+ my $ssl_only_tests = 12;
++my $chunked_encoding_special_tests = 1;
+ # Check that all dependent modules are available
+ eval "use HTTP::Daemon 6.01;";
+ plan skip_all => 'HTTP::Daemon >= 6.01 required' if $@;
+@@ -30,7 +32,7 @@ if ($@) {
+ 	plan skip_all => "Missing required module for test: $@";
+ } else {
+ 	if (-x "./$plugin") {
+-		plan tests => $common_tests * 2 + $ssl_only_tests + $virtual_port_tests;
++		plan tests => $common_tests * 2 + $ssl_only_tests + $virtual_port_tests + $chunked_encoding_special_tests;
+ 	} else {
+ 		plan skip_all => "No $plugin compiled";
+ 	}
+@@ -51,6 +53,7 @@ my $port_http = 50000 + int(rand(1000));
+ my $port_https = $port_http + 1;
+ my $port_https_expired = $port_http + 2;
+ my $port_https_clientcert = $port_http + 3;
++my $port_hacked_http = $port_http + 4;
+ 
+ # This array keeps sockets around for implementing timeouts
+ my @persist;
+@@ -72,6 +75,28 @@ if (!$pid) {
+ }
+ push @pids, $pid;
+ 
++# Fork the hacked HTTP server
++undef $pid;
++$pid = fork;
++defined $pid or die "Failed to fork";
++if (!$pid) {
++	# this is the fork
++	undef @pids;
++	my $socket = new IO::Socket::INET (
++		LocalHost => '0.0.0.0',
++		LocalPort => $port_hacked_http,
++		Proto => 'tcp',
++		Listen => 5,
++		Reuse => 1
++	);
++	die "cannot create socket $!n" unless $socket;
++	my $local_sock = $socket->sockport();
++	print "server waiting for client connection on port $local_sock\n";
++	run_hacked_http_server ( $socket );
++	die "hacked http server stopped";
++}
++push @pids, $pid;
++
+ if (exists $servers->{https}) {
+ 	# Fork a normal HTTPS server
+ 	$pid = fork;
+@@ -207,6 +232,37 @@ sub run_server {
+ 	}
+ }
+ 
++sub run_hacked_http_server {
++	my $socket = shift;
++
++	# auto-flush on socket
++	$| = 1;
++
++
++	while(1)
++	{
++		# waiting for a new client connection
++		my $client_socket = $socket->accept();
++
++		# get information about a newly connected client
++		my $client_address = $client_socket->peerhost();
++		my $client_portn = $client_socket->peerport();
++		print "connection from $client_address:$client_portn";
++
++		# read up to 1024 characters from the connected client
++		my $data = "";
++		$client_socket->recv($data, 1024);
++		print "received data: $data";
++
++		# write response data to the connected client
++		$data = "HTTP/1.1 200 OK\r\nTransfer-Encoding: chunked\r\n\r\n0\r\n\r\n";
++		$client_socket->send($data);
++
++		# notify client that response has been sent
++		shutdown($client_socket, 1);
++	}
++}
++
+ END {
+ 	foreach my $pid (@pids) {
+ 		if ($pid) { print "Killing $pid\n"; kill "INT", $pid }
+@@ -222,6 +278,7 @@ if ($ARGV[0] && $ARGV[0] eq "-d") {
+ my $result;
+ my $command = "./$plugin -H 127.0.0.1";
+ 
++run_chunked_encoding_special_test( {command => "$command -p $port_hacked_http"});
+ run_common_tests( { command => "$command -p $port_http" } );
+ SKIP: {
+ 	skip "HTTP::Daemon::SSL not installed", $common_tests + $ssl_only_tests if ! exists $servers->{https};
+@@ -511,3 +568,14 @@ sub run_common_tests {
+ 	};
+ 	is( $@, "", $cmd );
+ }
++
++sub run_chunked_encoding_special_test {
++	my ($opts) = @_;
++	my $command = $opts->{command};
++
++	$cmd = "$command -u / -s 'ChunkedEncodingSpecialTest'";
++	eval {
++		$result = NPTest->testCmd( $cmd, 5 );
++	};
++	is( $@, "", $cmd );
++}


=====================================
debian/patches/series
=====================================
@@ -1,3 +1,4 @@
 02_check_icmp_links
 03_epn
 # commited upstream
+10_check_http_chunked_wo_actual_content



View it on GitLab: https://salsa.debian.org/nagios-team/monitoring-plugins/-/commit/01c9312d4bb9c6f569a15b88b0b294b90d0dde5d

-- 
View it on GitLab: https://salsa.debian.org/nagios-team/monitoring-plugins/-/commit/01c9312d4bb9c6f569a15b88b0b294b90d0dde5d
You're receiving this email because of your account on salsa.debian.org.


-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://alioth-lists.debian.net/pipermail/pkg-nagios-changes/attachments/20230206/30183168/attachment-0001.htm>


More information about the pkg-nagios-changes mailing list