From 5fce5ceaeb316a1701c49a9c966d60b602101ed9 Mon Sep 17 00:00:00 2001 From: Sven Nierlein Date: Sun, 10 Feb 2013 22:57:55 +0100 Subject: 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. 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 . * * $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 ] [-r ] [-M ] [-v] [-4|-6] [-j]\n"); printf ("[-D [,]] [-S ] [-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 -- cgit v0.10-9-g596f