[nagiosplug] check_tcp: don't ignore trailing options

Nagios Plugin Development nagios-plugins at users.sourceforge.net
Sun Feb 10 23:20:26 CET 2013


 Module: nagiosplug
 Branch: master
 Commit: 5fce5ceaeb316a1701c49a9c966d60b602101ed9
 Author: Sven Nierlein <sven at nierlein.de>
   Date: Sun Feb 10 22:57:55 2013 +0100
    URL: http://nagiosplug.git.sf.net/git/gitweb.cgi?p=nagiosplug/nagiosplug;a=commit;h=5fce5ce

check_tcp: don't ignore trailing options

"./check_tcp -6 -p 80 host" leads to an error:
TCP CRITICAL - Invalid hostname, address or socket: 127.0.0.1
because 127.0.0.1 is the fallback host, the tailing hostname
was ignored.

---

 plugins/check_tcp.c   |   25 +++++++++++++++----------
 plugins/t/check_tcp.t |    4 +++-
 2 files changed, 18 insertions(+), 11 deletions(-)

diff --git a/plugins/check_tcp.c b/plugins/check_tcp.c
index af3ae24..ce966c3 100644
--- a/plugins/check_tcp.c
+++ b/plugins/check_tcp.c
@@ -1,30 +1,30 @@
 /*****************************************************************************
-* 
+*
 * Nagios check_tcp plugin
-* 
+*
 * License: GPL
 * Copyright (c) 1999-2008 Nagios Plugins Development Team
-* 
+*
 * Description:
-* 
+*
 * This file contains the check_tcp plugin
-* 
-* 
+*
+*
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
-* 
+*
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
-* 
+*
 * You should have received a copy of the GNU General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 *
 * $Id$
-* 
+*
 *****************************************************************************/
 
 /* progname "check_tcp" changes depending on symlink called */
@@ -61,6 +61,7 @@ static int PORT = 0;
 
 static int server_port = 0;
 static char *server_address = NULL;
+static int host_specified = FALSE;
 static char *server_send = NULL;
 static char *server_quit = NULL;
 static char **server_expect;
@@ -462,6 +463,7 @@ process_arguments (int argc, char **argv)
 #endif
 			break;
 		case 'H':                 /* hostname */
+			host_specified = TRUE;
 			server_address = optarg;
 			break;
 		case 'c':                 /* critical */
@@ -588,6 +590,10 @@ process_arguments (int argc, char **argv)
 		}
 	}
 
+	c = optind;
+	if(host_specified == FALSE && c < argc)
+		server_address = strdup (argv[c++]);
+
 	if (server_address == NULL)
 		usage4 (_("You must provide a server address"));
 	else if (server_address[0] != '/' && is_host (server_address) == FALSE)
@@ -666,4 +672,3 @@ print_usage (void)
   printf ("[-t <timeout seconds>] [-r <refuse state>] [-M <mismatch state>] [-v] [-4|-6] [-j]\n");
   printf ("[-D <warn days cert expire>[,<crit days cert expire>]] [-S <use SSL>] [-E]\n");
 }
-
diff --git a/plugins/t/check_tcp.t b/plugins/t/check_tcp.t
index 75c1e5f..d6808bf 100644
--- a/plugins/t/check_tcp.t
+++ b/plugins/t/check_tcp.t
@@ -9,7 +9,7 @@ use Test;
 use NPTest;
 
 use vars qw($tests);
-BEGIN {$tests = 7; plan tests => $tests}
+BEGIN {$tests = 14; plan tests => $tests}
 
 my $host_tcp_http      = getTestParameter( "host_tcp_http",      "NP_HOST_TCP_HTTP",      "localhost",
 					   "A host providing the HTTP Service (a web server)" );
@@ -27,6 +27,7 @@ my $failedExpect = '/^TCP WARNING\s-\sUnexpected response from host/socket on po
 my $t;
 
 $t += checkCmd( "./check_tcp $host_tcp_http      -p 80 -wt 300 -ct 600",       0, $successOutput );
+$t += checkCmd( "./check_tcp $host_tcp_http      -p 80 -wt 300 -ct 600 -6 ",   0, $successOutput );
 $t += checkCmd( "./check_tcp $host_tcp_http      -p 81 -wt   0 -ct   0 -to 1", 2 ); # use invalid port for this test
 $t += checkCmd( "./check_tcp $host_nonresponsive -p 80 -wt   0 -ct   0 -to 1", 2 );
 $t += checkCmd( "./check_tcp $hostname_invalid   -p 80 -wt   0 -ct   0 -to 1", 2 );
@@ -34,6 +35,7 @@ $t += checkCmd( "./check_tcp -S -D 1 -H www.verisign.com -p 443",              0
 $t += checkCmd( "./check_tcp -S -D 9000,1    -H www.verisign.com -p 443",      0 );
 $t += checkCmd( "./check_tcp -S -D 9000      -H www.verisign.com -p 443",      1 );
 $t += checkCmd( "./check_tcp -S -D 9000,8999 -H www.verisign.com -p 443",      2 );
+$t += checkCmd( "./check_tcp -6 -p 80 www.heise.de",                           0 );
 
 # Need the \r\n to make it more standards compliant with web servers. Need the various quotes
 # so that perl doesn't interpret the \r\n and is passed onto command line correctly





More information about the Commits mailing list