diff --git a/ACKNOWLEDGEMENTS b/ACKNOWLEDGEMENTS index 50c714c..d73be54 100644 --- a/ACKNOWLEDGEMENTS +++ b/ACKNOWLEDGEMENTS @@ -20,7 +20,7 @@ Using the DLPI support on SysV systems to get the host MAC address in check_dhcp Stenberg, Daniel Copyright (c) 1996 - 2004, Daniel Stenberg, http://curl.haxx.se/ -Use of duplication of macros in m4/np_curl.m4 +Use of duplication of macros in m4/np_curl.m4 (slighly adapted for m4/uriparser.m4 too) Coreutils team Copyright (C) 91, 1995-2004 Free Software Foundation, Inc. @@ -31,3 +31,9 @@ Gnulib team Copyright (C) 2001, 2003, 2004, 2006 Free Software Foundation, Inc http://www.gnu.org/software/gnulib/ Use of lib files that originally were used from coreutils + +Copyright (c) 2009-2014 Kazuho Oku, Tokuhiro Matsuno, Daisuke Murase, + Shigeo Mitsunari +picohttpparser +https://github.com/h2o/picohttpparser +Use of the library for HTTP header parsing in check_curl. diff --git a/Makefile.am b/Makefile.am index 218d569..df1bcbb 100644 --- a/Makefile.am +++ b/Makefile.am @@ -7,7 +7,7 @@ EXTRA_DIST = config.rpath \ NP-VERSION-GEN REQUIREMENTS SUPPORT THANKS \ NPTest.pm pkg \ config_test/Makefile config_test/run_tests config_test/child_test.c \ - tools/build_perl_modules \ + perlmods tools/build_perl_modules \ tools/tinderbox_build ACLOCAL_AMFLAGS = -I gl/m4 -I m4 @@ -31,9 +31,10 @@ install-root: test test-debug: cd lib && $(MAKE) $@ - if test "$(PERLMODS_DIR)" != ""; then cd && $(MAKE) $@; fi + if test "$(PERLMODS_DIR)" != ""; then cd perlmods && $(MAKE) $@; fi cd plugins && $(MAKE) $@ cd plugins-scripts && $(MAKE) $@ + cd plugins-root && $(MAKE) $@ # Solaris pkgmk BUILDDIR = build-solaris diff --git a/Makefile.in b/Makefile.in index 21b6b6d..a84d557 100644 --- a/Makefile.in +++ b/Makefile.in @@ -60,8 +60,10 @@ DIST_COMMON = README $(am__configure_deps) $(srcdir)/Makefile.am \ build-aux/ltmain.sh build-aux/missing build-aux/mkinstalldirs \ config.rpath mkinstalldirs ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/m4/np_mysqlclient.m4 \ - $(top_srcdir)/gl/m4/00gnulib.m4 $(top_srcdir)/gl/m4/alloca.m4 \ +am__aclocal_m4_deps = $(top_srcdir)/m4/libcurl.m4 \ + $(top_srcdir)/m4/np_mysqlclient.m4 \ + $(top_srcdir)/m4/uriparser.m4 $(top_srcdir)/gl/m4/00gnulib.m4 \ + $(top_srcdir)/gl/m4/alloca.m4 \ $(top_srcdir)/gl/m4/arpa_inet_h.m4 \ $(top_srcdir)/gl/m4/base64.m4 $(top_srcdir)/gl/m4/btowc.m4 \ $(top_srcdir)/gl/m4/codeset.m4 \ @@ -941,6 +943,11 @@ LD = @LD@ LDAPINCLUDE = @LDAPINCLUDE@ LDAPLIBS = @LDAPLIBS@ LDFLAGS = @LDFLAGS@ +LIBCURL = @LIBCURL@ +LIBCURLCFLAGS = @LIBCURLCFLAGS@ +LIBCURLINCLUDE = @LIBCURLINCLUDE@ +LIBCURLLIBS = @LIBCURLLIBS@ +LIBCURL_CPPFLAGS = @LIBCURL_CPPFLAGS@ LIBGNU_LIBDEPS = @LIBGNU_LIBDEPS@ LIBGNU_LTLIBDEPS = @LIBGNU_LTLIBDEPS@ LIBICONV = @LIBICONV@ @@ -1066,6 +1073,7 @@ PERL = @PERL@ PERLMODS_DIR = @PERLMODS_DIR@ PGINCLUDE = @PGINCLUDE@ PGLIBS = @PGLIBS@ +PKGCONFIG = @PKGCONFIG@ PKG_ARCH = @PKG_ARCH@ PLUGIN_TEST = @PLUGIN_TEST@ POSUB = @POSUB@ @@ -1283,6 +1291,11 @@ TIME_H_DEFINES_STRUCT_TIMESPEC = @TIME_H_DEFINES_STRUCT_TIMESPEC@ UNDEFINE_STRTOK_R = @UNDEFINE_STRTOK_R@ UNISTD_H_HAVE_WINSOCK2_H = @UNISTD_H_HAVE_WINSOCK2_H@ UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS = @UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS@ +URIPARSER = @URIPARSER@ +URIPARSERCFLAGS = @URIPARSERCFLAGS@ +URIPARSERINCLUDE = @URIPARSERINCLUDE@ +URIPARSERLIBS = @URIPARSERLIBS@ +URIPARSER_CPPFLAGS = @URIPARSER_CPPFLAGS@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ WARRANTY = @WARRANTY@ @@ -1293,6 +1306,7 @@ WTSAPI32LIBS = @WTSAPI32LIBS@ XGETTEXT = @XGETTEXT@ XGETTEXT_015 = @XGETTEXT_015@ XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ +_libcurl_config = @_libcurl_config@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ @@ -1360,7 +1374,7 @@ EXTRA_DIST = config.rpath \ NP-VERSION-GEN REQUIREMENTS SUPPORT THANKS \ NPTest.pm pkg \ config_test/Makefile config_test/run_tests config_test/child_test.c \ - tools/build_perl_modules \ + perlmods tools/build_perl_modules \ tools/tinderbox_build ACLOCAL_AMFLAGS = -I gl/m4 -I m4 @@ -1903,9 +1917,10 @@ install-root: test test-debug: cd lib && $(MAKE) $@ - if test "$(PERLMODS_DIR)" != ""; then cd && $(MAKE) $@; fi + if test "$(PERLMODS_DIR)" != ""; then cd perlmods && $(MAKE) $@; fi cd plugins && $(MAKE) $@ cd plugins-scripts && $(MAKE) $@ + cd plugins-root && $(MAKE) $@ solpkg: if [ ! -d $(BUILDDIR) ] ; then mkdir $(BUILDDIR); fi diff --git a/NEWS b/NEWS index b094470..f9f2da6 100644 --- a/NEWS +++ b/NEWS @@ -1,5 +1,52 @@ This file documents the major additions and syntax changes between releases. +2.3 10th December 2020 + ENHANCEMENTS + check_dns: allow 'expected address' (-a) to be specified in CIDR notation + (IPv4 only). + check_dns: allow for IPv6 RDNS + check_dns: Accept CIDR + check_dns: allow unsorted addresses + check_dns: allow forcing complete match of all addresses + check_apt: add --only-critical switch + check_apt: add -l/--list option to print packages + check_file_age: add range checking + check_file_age: enable to test for maximum file size + check_apt: adding packages-warning option + check_load: Adding top consuming processes option + check_http: Adding Proxy-Authorization and extra headers + check_snmp: make calcualtion of timeout value in help output more clear + check_uptime: new plugin for checking uptime to see how long the system is running + check_curl: check_http replacement based on libcurl + check_http: Allow user to specify HTTP method after proxy CONNECT + check_http: Add new flag --show-body/-B to print body + check_cluster: Added data argument validation + check_icmp: Add IPv6 support + check_icmp: Automatically detect IP protocol + check_icmp: emit error if multiple protocol version + check_disk: add support to display inodes usage in perfdata + check_hpjd: Added -D option to disable warning on 'out of paper' + check_http: support the --show-body/-B flag when --expect is used + check_mysql: allow mariadbclient to be used + check_tcp: add --sni + check_dns: detect unreachable dns service in nslookup output + + FIXES + Fix regression where check_dhcp was rereading response in a tight loop + check_dns: fix error detection on sles nslookup + check_disk_smb: fix timeout issue + check_swap: repaired "-n" behaviour + check_icmp: Correctly set address_family on lookup + check_icmp: Do not overwrite -4,-6 on lookup + check_smtp: initializes n before it is used + check_dns: fix typo in parameter description + check_by_ssh: fix child process leak on timeouts + check_mysql: Allow sockets to be specified to -H + check_procs: improve command examples for 'at least' processes + check_swap: repaired "-n" behaviour + check_disk: include -P switch in help + check_mailq: restore accidentially removed options + 2.2 29th November 2016 ENHANCEMENTS The check_http -S/--ssl option now accepts the arguments "1.1" and "1.2" diff --git a/NP-VERSION-GEN b/NP-VERSION-GEN index cf78d69..dd74d0c 100755 --- a/NP-VERSION-GEN +++ b/NP-VERSION-GEN @@ -6,7 +6,7 @@ SRC_ROOT=`dirname $0` NPVF=NP-VERSION-FILE -DEF_VER=2.2.git +DEF_VER=2.3 LF=' ' diff --git a/NPTest.pm b/NPTest.pm index f72ed2d..4b2de39 100644 --- a/NPTest.pm +++ b/NPTest.pm @@ -53,8 +53,8 @@ developer to interactively request test parameter information from the user. The user can accept the developer's default value or reply "none" which will then be returned as "" for the test to skip if appropriate. -If a parameter needs to be entered and the test is run without a tty -attached (such as a cronjob), the parameter will be assigned as if it +If a parameter needs to be entered and the test is run without a tty +attached (such as a cronjob), the parameter will be assigned as if it was "none". Tests can check for the parameter and skip if not set. Responses are stored in an external, file-based cache so subsequent test @@ -62,17 +62,6 @@ runs will use these values. The user is able to change the values by amending the values in the file /var/tmp/NPTest.cache, or by setting the appropriate environment variable before running the test. -The option exists to store parameters in a scoped means, allowing a -test harness to a localise a parameter should the need arise. This -allows a parameter of the same name to exist in a test harness -specific scope, while not affecting the globally scoped parameter. The -scoping identifier is the name of the test harness sans the trailing -".t". All cache searches first look to a scoped parameter before -looking for the parameter at global scope. Thus for a test harness -called "check_disk.t" requesting the parameter "mountpoint_valid", the -cache is first searched for "check_disk"/"mountpoint_valid", if this -fails, then a search is conducted for "mountpoint_valid". - To facilitate quick testing setup, it is possible to accept all the developer provided defaults by setting the environment variable "NPTEST_ACCEPTDEFAULT" to "1" (or any other perl truth value). Note @@ -249,26 +238,26 @@ sub checkCmd { if ( scalar( grep { $_ == $exitStatus } @{$desiredExitStatus} ) ) { - $desiredExitStatus = $exitStatus; + $desiredExitStatus = $exitStatus; } else { - $desiredExitStatus = -1; + $desiredExitStatus = -1; } } elsif ( ref $desiredExitStatus eq "HASH" ) { if ( exists( ${$desiredExitStatus}{$exitStatus} ) ) { - if ( defined( ${$desiredExitStatus}{$exitStatus} ) ) - { - $testOutput = ${$desiredExitStatus}{$exitStatus}; - } - $desiredExitStatus = $exitStatus; + if ( defined( ${$desiredExitStatus}{$exitStatus} ) ) + { + $testOutput = ${$desiredExitStatus}{$exitStatus}; + } + $desiredExitStatus = $exitStatus; } else { - $desiredExitStatus = -1; + $desiredExitStatus = -1; } } @@ -327,78 +316,51 @@ sub skipMsg return $testStatus; } -sub getTestParameter -{ - my( $param, $envvar, $default, $brief, $scoped ); - my $new_style; - if (scalar @_ <= 3) { - ($param, $brief, $default) = @_; - $envvar = $param; - $new_style = 1; - } else { - ( $param, $envvar, $default, $brief, $scoped ) = @_; - $new_style = 0; +sub getTestParameter { + my($param, $description, $default) = @_; + + if($param !~ m/^NP_[A-Z0-9_]+$/mx) { + die("parameter should be all uppercase and start with NP_ (requested from ".(caller(0))[1].")"); } - # Apply default values for optional arguments - $scoped = ( defined( $scoped ) && $scoped ); + return $ENV{$param} if $ENV{$param}; - my $testharness = basename( (caller(0))[1], ".t" ); # used for scoping - - if ( defined( $envvar ) && exists( $ENV{$envvar} ) && $ENV{$envvar} ) - { - return $ENV{$envvar}; - } - - my $cachedValue = SearchCache( $param, $testharness ); - if ( defined( $cachedValue ) ) - { - # This save required to convert to new style because the key required is - # changing to the environment variable - if ($new_style == 0) { - SetCacheParameter( $envvar, undef, $cachedValue ); - } + my $cachedValue = SearchCache($param); + if(defined $cachedValue) { return $cachedValue; } - my $defaultValid = ( defined( $default ) && $default ); - my $autoAcceptDefault = ( exists( $ENV{'NPTEST_ACCEPTDEFAULT'} ) && $ENV{'NPTEST_ACCEPTDEFAULT'} ); - - if ( $autoAcceptDefault && $defaultValid ) - { - return $default; + if($ENV{'NPTEST_ACCEPTDEFAULT'}) { + return $default if $default; + return ""; } # Set "none" if no terminal attached (eg, tinderbox build servers when new variables set) return "" unless (-t STDIN); my $userResponse = ""; - - while ( $userResponse eq "" ) - { + while($userResponse eq "") { print STDERR "\n"; - print STDERR "Test Harness : $testharness\n"; - print STDERR "Test Parameter : $param\n"; - print STDERR "Environment Variable : $envvar\n" if ($param ne $envvar); - print STDERR "Brief Description : $brief\n"; - print STDERR "Enter value (or 'none') ", ($defaultValid ? "[${default}]" : "[]"), " => "; + print STDERR "Test File : ".(caller(0))[1]."\n"; + print STDERR "Test Parameter : $param\n"; + print STDERR "Description : $description\n"; + print STDERR "Enter value (or 'none') ", ($default ? "[${default}]" : "[]"), " => "; $userResponse = ; $userResponse = "" if ! defined( $userResponse ); # Handle EOF - chomp( $userResponse ); - if ( $defaultValid && $userResponse eq "" ) - { + chomp($userResponse); + if($default && $userResponse eq "") { $userResponse = $default; } } print STDERR "\n"; - if ($userResponse =~ /^(na|none)$/) { - $userResponse = ""; + if($userResponse =~ /^(na|none)$/) { + $userResponse = ""; } - # define all user responses at global scope - SetCacheParameter( $param, ( $scoped ? $testharness : undef ), $userResponse ); + # store user responses + SetCacheParameter($param, $userResponse); return $userResponse; } @@ -407,37 +369,20 @@ sub getTestParameter # Internal Cache Management Functions # -sub SearchCache -{ - my( $param, $scope ) = @_; +sub SearchCache { + my($param) = @_; LoadCache(); - if ( exists( $CACHE{$scope} ) && exists( $CACHE{$scope}{$param} ) ) - { - return $CACHE{$scope}{$param}; - } - - if ( exists( $CACHE{$param} ) ) - { + if(exists $CACHE{$param}) { return $CACHE{$param}; } - return undef; # Need this to say "nothing found" + return undef; # Need this to say "nothing found" } -sub SetCacheParameter -{ - my( $param, $scope, $value ) = @_; - - if ( defined( $scope ) ) - { - $CACHE{$scope}{$param} = $value; - } - else - { - $CACHE{$param} = $value; - } - +sub SetCacheParameter { + my($param, $value) = @_; + $CACHE{$param} = $value; SaveCache(); } @@ -475,6 +420,11 @@ sub SaveCache delete $CACHE{'_cache_loaded_'}; my $oldFileContents = delete $CACHE{'_original_cache'}; + # clean up old style params + for my $key (keys %CACHE) { + delete $CACHE{$key} if $key !~ m/^NP_[A-Z0-9_]+$/mx; + } + my($dataDumper) = new Data::Dumper([\%CACHE]); $dataDumper->Terse(1); $dataDumper->Sortkeys(1); @@ -486,7 +436,7 @@ sub SaveCache if($oldFileContents ne $data) { my($fileHandle) = new IO::File; if (!$fileHandle->open( "> ${CACHEFILENAME}")) { - print STDERR "NPTest::LoadCache() : Problem saving ${CACHEFILENAME} : $!\n"; + print STDERR "NPTest::SaveCache() : Problem saving ${CACHEFILENAME} : $!\n"; return; } print $fileHandle $data; @@ -542,10 +492,10 @@ sub DetermineTestHarnessDirectory push ( @dirs, "./tests"); } - if ( @dirs > 0 ) - { - return @dirs; - } + if ( @dirs > 0 ) + { + return @dirs; + } # To be honest I don't understand which case satisfies the # original code in test.pl : when $tstdir == `pwd` w.r.t. @@ -611,73 +561,73 @@ sub TestsFrom # All the new object oriented stuff below -sub new { - my $type = shift; - my $self = {}; - return bless $self, $type; +sub new { + my $type = shift; + my $self = {}; + return bless $self, $type; } # Accessors sub return_code { - my $self = shift; - if (@_) { - return $self->{return_code} = shift; - } else { - return $self->{return_code}; - } + my $self = shift; + if (@_) { + return $self->{return_code} = shift; + } else { + return $self->{return_code}; + } } sub output { - my $self = shift; - if (@_) { - return $self->{output} = shift; - } else { - return $self->{output}; - } + my $self = shift; + if (@_) { + return $self->{output} = shift; + } else { + return $self->{output}; + } } sub perf_output { - my $self = shift; - $_ = $self->{output}; - /\|(.*)$/; - return $1 || ""; + my $self = shift; + $_ = $self->{output}; + /\|(.*)$/; + return $1 || ""; } sub only_output { - my $self = shift; - $_ = $self->{output}; - /(.*?)\|/; - return $1 || ""; + my $self = shift; + $_ = $self->{output}; + /(.*?)\|/; + return $1 || ""; } sub testCmd { - my $class = shift; - my $command = shift or die "No command passed to testCmd"; - my $timeout = shift || 120; - my $object = $class->new; + my $class = shift; + my $command = shift or die "No command passed to testCmd"; + my $timeout = shift || 120; + my $object = $class->new; - local $SIG{'ALRM'} = sub { die("timeout in command: $command"); }; - alarm($timeout); # no test should take longer than 120 seconds + local $SIG{'ALRM'} = sub { die("timeout in command: $command"); }; + alarm($timeout); # no test should take longer than 120 seconds - my $output = `$command`; - $object->return_code($? >> 8); - $_ = $? & 127; - if ($_) { - die "Got signal $_ for command $command"; - } - chomp $output; - $object->output($output); + my $output = `$command`; + $object->return_code($? >> 8); + $_ = $? & 127; + if ($_) { + die "Got signal $_ for command $command"; + } + chomp $output; + $object->output($output); - alarm(0); + alarm(0); - my ($pkg, $file, $line) = caller(0); - print "Testing: $command", $/; - if ($ENV{'NPTEST_DEBUG'}) { - print "testCmd: Called from line $line in $file", $/; - print "Output: ", $object->output, $/; - print "Return code: ", $object->return_code, $/; - } + my ($pkg, $file, $line) = caller(0); + print "Testing: $command", $/; + if ($ENV{'NPTEST_DEBUG'}) { + print "testCmd: Called from line $line in $file", $/; + print "Output: ", $object->output, $/; + print "Return code: ", $object->return_code, $/; + } - return $object; + return $object; } # do we have ipv6 diff --git a/README b/README index beb7769..71b4d37 100644 --- a/README +++ b/README @@ -10,7 +10,7 @@ Monitoring Plugins * For information on detailed changes that have been made or plugins that have been added, read the `ChangeLog` file. -* Some plugins require that you have additional programs and/or +* Some plugins require that you have additional programs or libraries installed on your system before they can be used. Plugins that are dependent on other programs/libraries that are missing are usually not compiled. Read the `REQUIREMENTS` file for more information. @@ -19,7 +19,7 @@ Monitoring Plugins the basic guidelines for development will provide detailed help when invoked with the `-h` or `--help` options. -You can check for the latest plugins at: +You can check the latest plugins at: * diff --git a/REQUIREMENTS b/REQUIREMENTS index ac7b593..f3b1c01 100644 --- a/REQUIREMENTS +++ b/REQUIREMENTS @@ -11,6 +11,22 @@ check_ldaps, check_http --ssl, check_tcp --ssl, check_smtp --starttls - Requires openssl or gnutls libraries for SSL connections http://www.openssl.org, http://www.gnu.org/software/gnutls +check_curl: + - Requires libcurl 7.15.2 or later + http://www.haxx.se + - --ssl/-S and -C requires OpenSSL for certificate checks, otherwise + libcurl must be quite new to support CURLINFO_CERTINFO with + GnuTLS and NSS libraries: + - 7.42.0 or newer for GnuTLS + - 7.34.0 or newer for NSS + GnuTLS is known to create problems on some distributions with + self-signed certificate chains + http://www.openssl.org, http://www.gnu.org/software/gnutls, + http://www.mozilla.org/projects/security/pki/nss/, + other SSL implementations are currently not supported + - uriparser 0.7.5 or later + https://uriparser.github.io/ + check_fping: - Requires the fping utility distributed with SATAN. Either download and install SATAN or grab the fping program from diff --git a/THANKS b/THANKS index 66fcc5f..dd8b6af 100644 --- a/THANKS +++ b/THANKS @@ -5,6 +5,8 @@ raising bug reports, creating patches or contributing new plugins. Diego Elio Pettenò fabiodds Elan Ruusamäe +Nicolai Søborg +Marc Sánchez dag rob?le Matthias Hähnel Randy O'Meara @@ -18,16 +20,20 @@ Felipe Gustavo de Almeida Michael Almond Michael Anthon Bernd Apfel +Bernd Arnold Paula Arnold Kondoros Attila Daniel Austin +Karol Babioch Markus Baertschi Bradley Baetz Michael Bakker Nobuhiro Ban John Barbuto +Andreas Baumann Jeremy Baumgartner Marco Beck +Rolf Eike Beer Andreas Behal Lutz Behnke Marlo Bell @@ -42,6 +48,7 @@ Jimmy Bergman Jochen Bern Tom Bertelston Gunnar Beutner +Prathamesh Bhanuse Daniel Bimschas Jeffery Blank Tom De Blende @@ -57,6 +64,7 @@ Tobias Brox Tilmann Bubeck Dick van den Burg Jason Burnett +Lucas Bussey Grant Byers Carlos Canau Jethro Carr @@ -79,6 +87,7 @@ Greg Cox Jason Crawford David Croft Robert Dale +Vincent Danjean Rok Debevc Marcos Della Phil Dibowitz @@ -103,6 +112,7 @@ O'Shaughnessy Evans Merijn Evertse Karl Ewald Mikael Falkvidd +Guido Falsi Paul Farrall Reuben Farrelly Mark Favas @@ -120,6 +130,7 @@ Felix Frank Dann Frazier Rick Frey John C. Frickson +Markus Frosch Matt Garrett Sven Geggus Jonas Genannt @@ -139,6 +150,7 @@ Steven Grimm Sebastien Guay Jon Hallett Steve Hanselman +Jacob Hansen Ask Bjoern Hansen Sebastian Harl Michael Haro @@ -152,6 +164,7 @@ Jason Hoos Richard Edward Horner Chester Hosey Marc Huffnagle +Kostyantyn Hushchyn Bob Ingraham Cire Iriarte Bryan Irvine @@ -171,9 +184,12 @@ Matthieu Kermagoret Bo Kersey Konstantin Khomoutov Serhan Kiymaz +Alexander A. Klimov Denis Knauf +Harald Koch Tilman Koschnick John Koyle +Michael Kraus Steven Kreuzer Julius Kriukas Christoph Kron @@ -224,6 +240,7 @@ Stefan Meier Michael Melcher Jan-Piet Mens Sven Meyer +Lars Michelsen Emil Michles Christian Mies Jonathan Milby @@ -256,6 +273,7 @@ William Pietri Tomasz Pilat Myke Place Ari Pollak +Iustin Pop Marc Poulin Matt Pounsett Peter Pramberger @@ -266,8 +284,10 @@ Darian Rackham Peter Radcliffe Steve Rader Olivier 'Babar' Raginel +Jean-François Rameau Phil Randal Abid Rasheed +Patrick Rauscher Jeremy Reed Spenser Reinhardt Marc Remy @@ -291,6 +311,7 @@ Sven Schaffranneck Christoph Schell Thomas Schimpke Benjamin Schmid +Christian Schmidt Sebastian Schmidt Henning Schmiedehausen Christian Schneemann @@ -311,12 +332,14 @@ John Sivak Nik Soggia Robin Sonefors Erwan Ben Souiden +Bernard Spil Lars Stavholm Daniel Stirnimann Nikolay Sturm David Sullivan Kjell Sundtjonn Ziya Suzen +Christian Tacke Michael Tiernan Ben Timby Ronald Tin @@ -334,6 +357,7 @@ Laurent Vaslin Matej Vela Carole Verdon Ludse Verhoeven +Valentin Vidic Robert August Vincent Dave Viner Lars Vogdt @@ -356,6 +380,8 @@ Shawn Wills Rob Windsor Mario Witte Alexander Wittig +Tobias Wolf Brian De Wolf Patric Wust Jamie Zawinski +Vadim Zhukov diff --git a/aclocal.m4 b/aclocal.m4 index ca9a786..e4a2f42 100644 --- a/aclocal.m4 +++ b/aclocal.m4 @@ -1044,7 +1044,9 @@ AC_SUBST([am__tar]) AC_SUBST([am__untar]) ]) # _AM_PROG_TAR +m4_include([m4/libcurl.m4]) m4_include([m4/np_mysqlclient.m4]) +m4_include([m4/uriparser.m4]) m4_include([gl/m4/00gnulib.m4]) m4_include([gl/m4/alloca.m4]) m4_include([gl/m4/arpa_inet_h.m4]) diff --git a/config.h.in b/config.h.in index 32c2683..3e3d15b 100644 --- a/config.h.in +++ b/config.h.in @@ -452,6 +452,9 @@ /* Define to 1 if you have the `crypto' library (-lcrypto). */ #undef HAVE_LIBCRYPTO +/* Define to 1 if you have a functional curl library. */ +#undef HAVE_LIBCURL + /* Define to 1 if you have the `dbi' library (-ldbi). */ #undef HAVE_LIBDBI @@ -550,7 +553,7 @@ concept. */ #undef HAVE_MSVC_INVALID_PARAMETER_HANDLER -/* Defined if mysqlclient is found and can compile */ +/* Defined if mariadbclient is found and can compile */ #undef HAVE_MYSQLCLIENT /* Define to 1 if you have the header file. */ @@ -1670,6 +1673,9 @@ /* Define to 1 if the system has the type 'unsigned long long int'. */ #undef HAVE_UNSIGNED_LONG_LONG_INT +/* Define to 1 if you have a functional uriparser library. */ +#undef HAVE_URIPARSER + /* Define to 1 if you have the header file. */ #undef HAVE_UTMPX_H @@ -1742,6 +1748,69 @@ /* Define HOST_NAME_MAX when does not define it. */ #undef HOST_NAME_MAX +/* Defined if libcurl supports AsynchDNS */ +#undef LIBCURL_FEATURE_ASYNCHDNS + +/* Defined if libcurl supports IDN */ +#undef LIBCURL_FEATURE_IDN + +/* Defined if libcurl supports IPv6 */ +#undef LIBCURL_FEATURE_IPV6 + +/* Defined if libcurl supports KRB4 */ +#undef LIBCURL_FEATURE_KRB4 + +/* Defined if libcurl supports libz */ +#undef LIBCURL_FEATURE_LIBZ + +/* Defined if libcurl supports NTLM */ +#undef LIBCURL_FEATURE_NTLM + +/* Defined if libcurl supports SSL */ +#undef LIBCURL_FEATURE_SSL + +/* Defined if libcurl supports SSPI */ +#undef LIBCURL_FEATURE_SSPI + +/* Defined if libcurl supports DICT */ +#undef LIBCURL_PROTOCOL_DICT + +/* Defined if libcurl supports FILE */ +#undef LIBCURL_PROTOCOL_FILE + +/* Defined if libcurl supports FTP */ +#undef LIBCURL_PROTOCOL_FTP + +/* Defined if libcurl supports FTPS */ +#undef LIBCURL_PROTOCOL_FTPS + +/* Defined if libcurl supports HTTP */ +#undef LIBCURL_PROTOCOL_HTTP + +/* Defined if libcurl supports HTTPS */ +#undef LIBCURL_PROTOCOL_HTTPS + +/* Defined if libcurl supports IMAP */ +#undef LIBCURL_PROTOCOL_IMAP + +/* Defined if libcurl supports LDAP */ +#undef LIBCURL_PROTOCOL_LDAP + +/* Defined if libcurl supports POP3 */ +#undef LIBCURL_PROTOCOL_POP3 + +/* Defined if libcurl supports RTSP */ +#undef LIBCURL_PROTOCOL_RTSP + +/* Defined if libcurl supports SMTP */ +#undef LIBCURL_PROTOCOL_SMTP + +/* Defined if libcurl supports TELNET */ +#undef LIBCURL_PROTOCOL_TELNET + +/* Defined if libcurl supports TFTP */ +#undef LIBCURL_PROTOCOL_TFTP + /* Define to the sub-directory in which libtool stores uninstalled libraries. */ #undef LT_OBJDIR @@ -1925,6 +1994,9 @@ /* Whether the ps utility uses the "procetime" field */ #undef PS_USES_PROCETIME +/* Whether the ps utility uses the "procpcpu" field */ +#undef PS_USES_PROCPCPU + /* Variable list for sscanf of 'ps' output */ #undef PS_VARLIST @@ -2213,6 +2285,9 @@ /* Define to empty if `const' does not conform to ANSI C. */ #undef const +/* Define curl_free() as free() if our version of curl lacks curl_free. */ +#undef curl_free + /* Please see the Gnulib manual for how to use these macros. Suppress extern inline with HP-UX cc, as it appears to be broken; see diff --git a/configure b/configure index 4d1083f..bf033ce 100755 --- a/configure +++ b/configure @@ -1,6 +1,6 @@ #! /bin/sh # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.69 for monitoring-plugins 2.2. +# Generated by GNU Autoconf 2.69 for monitoring-plugins 2.3. # # # Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc. @@ -587,8 +587,8 @@ MAKEFLAGS= # Identity of this package. PACKAGE_NAME='monitoring-plugins' PACKAGE_TARNAME='monitoring-plugins' -PACKAGE_VERSION='2.2' -PACKAGE_STRING='monitoring-plugins 2.2' +PACKAGE_VERSION='2.3' +PACKAGE_STRING='monitoring-plugins 2.3' PACKAGE_BUGREPORT='' PACKAGE_URL='' @@ -1641,6 +1641,18 @@ check_tcp_ssl SSLINCLUDE KRBINCLUDE PATH_TO_WHO +URIPARSERCFLAGS +URIPARSERLIBS +URIPARSERINCLUDE +URIPARSER +URIPARSER_CPPFLAGS +PKGCONFIG +LIBCURLCFLAGS +LIBCURLLIBS +LIBCURLINCLUDE +LIBCURL +LIBCURL_CPPFLAGS +_libcurl_config WTSAPI32LIBS HAVE_WTS32API_FALSE HAVE_WTS32API_TRUE @@ -1822,6 +1834,8 @@ with_dbi with_radius with_ldap with_mysql +with_libcurl +with_uriparser with_ipv6 with_ps_command with_ps_format @@ -2403,7 +2417,7 @@ if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF -\`configure' configures monitoring-plugins 2.2 to adapt to many kinds of systems. +\`configure' configures monitoring-plugins 2.3 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -2474,7 +2488,7 @@ fi if test -n "$ac_init_help"; then case $ac_init_help in - short | recursive ) echo "Configuration of monitoring-plugins 2.2:";; + short | recursive ) echo "Configuration of monitoring-plugins 2.3:";; esac cat <<\_ACEOF @@ -2530,6 +2544,10 @@ Optional Packages: --with-mysql=DIR Locates mysql libraries. Expects DIR/bin/mysql_config. Default to search for mysql_config in PATH + --with-libcurl=PREFIX look for the curl library in PREFIX/lib and headers + in PREFIX/include + --with-uriparser=PREFIX look for the uriparser library in PREFIX/lib and + headers in PREFIX/include --with-ipv6 support IPv6 [default=check] --with-ps-command=PATH Verbatim command to execute for ps --with-ps-format=FORMAT Format string for scanning ps output @@ -2641,7 +2659,7 @@ fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF -monitoring-plugins configure 2.2 +monitoring-plugins configure 2.3 generated by GNU Autoconf 2.69 Copyright (C) 2012 Free Software Foundation, Inc. @@ -3346,7 +3364,7 @@ cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. -It was created by monitoring-plugins $as_me 2.2, which was +It was created by monitoring-plugins $as_me 2.3, which was generated by GNU Autoconf 2.69. Invocation command line was $ $0 $@ @@ -4217,7 +4235,7 @@ fi # Define the identity of the package. PACKAGE='monitoring-plugins' - VERSION='2.2' + VERSION='2.3' cat >>confdefs.h <<_ACEOF @@ -15410,7 +15428,8 @@ fi _savedcppflags="$CPPFLAGS" CPPFLAGS="$CPPFLAGS $np_mysql_include" - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for mysql_init in -lmysqlclient" >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for mysql_init in -lmysqlclient" >&5 $as_echo_n "checking for mysql_init in -lmysqlclient... " >&6; } if ${ac_cv_lib_mysqlclient_mysql_init+:} false; then : $as_echo_n "(cached) " >&6 @@ -15448,7 +15467,52 @@ fi $as_echo "$ac_cv_lib_mysqlclient_mysql_init" >&6; } if test "x$ac_cv_lib_mysqlclient_mysql_init" = xyes; then : - with_mysql=$np_mysql_config + with_mysql=$np_mysql_config + +$as_echo "#define HAVE_MYSQLCLIENT 1" >>confdefs.h + + +else + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for mysql_init in -lmariadbclient" >&5 +$as_echo_n "checking for mysql_init in -lmariadbclient... " >&6; } +if ${ac_cv_lib_mariadbclient_mysql_init+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lmariadbclient $np_mysql_libs $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char mysql_init (); +int +main () +{ +return mysql_init (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_mariadbclient_mysql_init=yes +else + ac_cv_lib_mariadbclient_mysql_init=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_mariadbclient_mysql_init" >&5 +$as_echo "$ac_cv_lib_mariadbclient_mysql_init" >&6; } +if test "x$ac_cv_lib_mariadbclient_mysql_init" = xyes; then : + + with_mysql=$np_mysql_config $as_echo "#define HAVE_MYSQLCLIENT 1" >>confdefs.h @@ -15457,6 +15521,11 @@ else with_mysql=no fi + +fi + + + CPPFLAGS=$_savedcppflags fi @@ -15525,6 +15594,662 @@ if test "$ac_cv_header_wtsapi32_h" = "yes"; then fi +_can_enable_check_curl=no + + + + + + + + + + + + + + + + + + + + + + + + + +# Check whether --with-libcurl was given. +if test "${with_libcurl+set}" = set; then : + withval=$with_libcurl; _libcurl_with=$withval +else + _libcurl_with=yes +fi + + + if test "$_libcurl_with" != "no" ; then + + for ac_prog in gawk mawk nawk awk +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_AWK+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$AWK"; then + ac_cv_prog_AWK="$AWK" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_AWK="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +AWK=$ac_cv_prog_AWK +if test -n "$AWK"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5 +$as_echo "$AWK" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$AWK" && break +done + + + _libcurl_version_parse="eval $AWK '{split(\$NF,A,\".\"); X=256*256*A[1]+256*A[2]+A[3]; print X;}'" + + _libcurl_try_link=yes + + if test -d "$_libcurl_with" ; then + LIBCURL_CPPFLAGS="-I$withval/include" + _libcurl_ldflags="-L$withval/lib" + # Extract the first word of "curl-config", so it can be a program name with args. +set dummy curl-config; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path__libcurl_config+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $_libcurl_config in + [\\/]* | ?:[\\/]*) + ac_cv_path__libcurl_config="$_libcurl_config" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in "$withval/bin" +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path__libcurl_config="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +_libcurl_config=$ac_cv_path__libcurl_config +if test -n "$_libcurl_config"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $_libcurl_config" >&5 +$as_echo "$_libcurl_config" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + else + # Extract the first word of "curl-config", so it can be a program name with args. +set dummy curl-config; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path__libcurl_config+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $_libcurl_config in + [\\/]* | ?:[\\/]*) + ac_cv_path__libcurl_config="$_libcurl_config" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path__libcurl_config="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +_libcurl_config=$ac_cv_path__libcurl_config +if test -n "$_libcurl_config"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $_libcurl_config" >&5 +$as_echo "$_libcurl_config" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + fi + + if test x$_libcurl_config != "x" ; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for the version of libcurl" >&5 +$as_echo_n "checking for the version of libcurl... " >&6; } +if ${libcurl_cv_lib_curl_version+:} false; then : + $as_echo_n "(cached) " >&6 +else + libcurl_cv_lib_curl_version=`$_libcurl_config --version | $AWK '{print $2}'` +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $libcurl_cv_lib_curl_version" >&5 +$as_echo "$libcurl_cv_lib_curl_version" >&6; } + + _libcurl_version=`echo $libcurl_cv_lib_curl_version | $_libcurl_version_parse` + _libcurl_wanted=`echo 7.15.2 | $_libcurl_version_parse` + + if test $_libcurl_wanted -gt 0 ; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for libcurl >= version 7.15.2" >&5 +$as_echo_n "checking for libcurl >= version 7.15.2... " >&6; } +if ${libcurl_cv_lib_version_ok+:} false; then : + $as_echo_n "(cached) " >&6 +else + + if test $_libcurl_version -ge $_libcurl_wanted ; then + libcurl_cv_lib_version_ok=yes + else + libcurl_cv_lib_version_ok=no + fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $libcurl_cv_lib_version_ok" >&5 +$as_echo "$libcurl_cv_lib_version_ok" >&6; } + fi + + if test $_libcurl_wanted -eq 0 || test x$libcurl_cv_lib_version_ok = xyes ; then + if test x"$LIBCURL_CPPFLAGS" = "x" ; then + LIBCURL_CPPFLAGS=`$_libcurl_config --cflags` + fi + if test x"$LIBCURL" = "x" ; then + LIBCURL=`$_libcurl_config --libs` + + # This is so silly, but Apple actually has a bug in their + # curl-config script. Fixed in Tiger, but there are still + # lots of Panther installs around. + case "${host}" in + powerpc-apple-darwin7*) + LIBCURL=`echo $LIBCURL | sed -e 's|-arch i386||g'` + ;; + esac + fi + + # All curl-config scripts support --feature + _libcurl_features=`$_libcurl_config --feature` + + # Is it modern enough to have --protocols? (7.12.4) + if test $_libcurl_version -ge 461828 ; then + _libcurl_protocols=`$_libcurl_config --protocols` + fi + else + _libcurl_try_link=no + fi + + unset _libcurl_wanted + fi + + if test $_libcurl_try_link = yes ; then + + # we didn't find curl-config, so let's see if the user-supplied + # link line (or failing that, "-lcurl") is enough. + LIBCURL=${LIBCURL-"$_libcurl_ldflags -lcurl"} + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether libcurl is usable" >&5 +$as_echo_n "checking whether libcurl is usable... " >&6; } +if ${libcurl_cv_lib_curl_usable+:} false; then : + $as_echo_n "(cached) " >&6 +else + + _libcurl_save_cppflags=$CPPFLAGS + CPPFLAGS="$LIBCURL_CPPFLAGS $CPPFLAGS" + _libcurl_save_libs=$LIBS + LIBS="$LIBCURL $LIBS" + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +int +main () +{ + +/* Try and use a few common options to force a failure if we are + missing symbols or can't link. */ +int x; +curl_easy_setopt(NULL,CURLOPT_URL,NULL); +x=CURL_ERROR_SIZE; +x=CURLOPT_WRITEFUNCTION; +x=CURLOPT_WRITEDATA; +x=CURLOPT_ERRORBUFFER; +x=CURLOPT_STDERR; +x=CURLOPT_VERBOSE; +if (x) {;} + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + libcurl_cv_lib_curl_usable=yes +else + libcurl_cv_lib_curl_usable=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + + CPPFLAGS=$_libcurl_save_cppflags + LIBS=$_libcurl_save_libs + unset _libcurl_save_cppflags + unset _libcurl_save_libs + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $libcurl_cv_lib_curl_usable" >&5 +$as_echo "$libcurl_cv_lib_curl_usable" >&6; } + + if test $libcurl_cv_lib_curl_usable = yes ; then + + # Does curl_free() exist in this version of libcurl? + # If not, fake it with free() + + _libcurl_save_cppflags=$CPPFLAGS + CPPFLAGS="$CPPFLAGS $LIBCURL_CPPFLAGS" + _libcurl_save_libs=$LIBS + LIBS="$LIBS $LIBCURL" + + ac_fn_c_check_func "$LINENO" "curl_free" "ac_cv_func_curl_free" +if test "x$ac_cv_func_curl_free" = xyes; then : + +else + +$as_echo "#define curl_free free" >>confdefs.h + +fi + + + CPPFLAGS=$_libcurl_save_cppflags + LIBS=$_libcurl_save_libs + unset _libcurl_save_cppflags + unset _libcurl_save_libs + + +$as_echo "#define HAVE_LIBCURL 1" >>confdefs.h + + + + + for _libcurl_feature in $_libcurl_features ; do + cat >>confdefs.h <<_ACEOF +#define `$as_echo "libcurl_feature_$_libcurl_feature" | $as_tr_cpp` 1 +_ACEOF + + eval `$as_echo "libcurl_feature_$_libcurl_feature" | $as_tr_sh`=yes + done + + if test "x$_libcurl_protocols" = "x" ; then + + # We don't have --protocols, so just assume that all + # protocols are available + _libcurl_protocols="HTTP FTP FILE TELNET LDAP DICT TFTP" + + if test x$libcurl_feature_SSL = xyes ; then + _libcurl_protocols="$_libcurl_protocols HTTPS" + + # FTPS wasn't standards-compliant until version + # 7.11.0 (0x070b00 == 461568) + if test $_libcurl_version -ge 461568; then + _libcurl_protocols="$_libcurl_protocols FTPS" + fi + fi + + # RTSP, IMAP, POP3 and SMTP were added in + # 7.20.0 (0x071400 == 463872) + if test $_libcurl_version -ge 463872; then + _libcurl_protocols="$_libcurl_protocols RTSP IMAP POP3 SMTP" + fi + fi + + for _libcurl_protocol in $_libcurl_protocols ; do + cat >>confdefs.h <<_ACEOF +#define `$as_echo "libcurl_protocol_$_libcurl_protocol" | $as_tr_cpp` 1 +_ACEOF + + eval `$as_echo "libcurl_protocol_$_libcurl_protocol" | $as_tr_sh`=yes + done + else + unset LIBCURL + unset LIBCURL_CPPFLAGS + fi + fi + + unset _libcurl_try_link + unset _libcurl_version_parse + unset _libcurl_config + unset _libcurl_feature + unset _libcurl_features + unset _libcurl_protocol + unset _libcurl_protocols + unset _libcurl_version + unset _libcurl_ldflags + fi + + if test x$_libcurl_with = xno || test x$libcurl_cv_lib_curl_usable != xyes ; then + # This is the IF-NO path + + _can_enable_check_curl=no + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Skipping curl plugin" >&5 +$as_echo "$as_me: WARNING: Skipping curl plugin" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: install libcurl libs to compile this plugin (see REQUIREMENTS)." >&5 +$as_echo "$as_me: WARNING: install libcurl libs to compile this plugin (see REQUIREMENTS)." >&2;} + + else + # This is the IF-YES path + + _can_enable_check_curl=yes + LIBCURLINCLUDE="$LIBCURL_CPPFLAGS" + LIBCURLLIBS="$LIBCURL" + LIBCURLCFLAGS="$LIBCURL_CPPFLAGS" + + + + + fi + + unset _libcurl_with + + + + +# Check whether --with-uriparser was given. +if test "${with_uriparser+set}" = set; then : + withval=$with_uriparser; _uriparser_with=$withval +else + _uriparser_with=yes +fi + + + if test "$_uriparser_with" != "no" ; then + + _uriparser_try_link=yes + + # Extract the first word of "pkg-config", so it can be a program name with args. +set dummy pkg-config; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_PKGCONFIG+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$PKGCONFIG"; then + ac_cv_prog_PKGCONFIG="$PKGCONFIG" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_PKGCONFIG="pkg-config" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + test -z "$ac_cv_prog_PKGCONFIG" && ac_cv_prog_PKGCONFIG="no" +fi +fi +PKGCONFIG=$ac_cv_prog_PKGCONFIG +if test -n "$PKGCONFIG"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PKGCONFIG" >&5 +$as_echo "$PKGCONFIG" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + + if test "x$URIPARSER" != "x" || test "x$URIPARSER_CPPFLAGS" != "x"; then + : + elif test -d "$_uriparser_with" ; then + URIPARSER_CPPFLAGS="-I$withval/include" + _uriparser_ldflags="-L$withval/lib" + + elif test x$PKGCONFIG != xno; then + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for the version of uriparser" >&5 +$as_echo_n "checking for the version of uriparser... " >&6; } +if ${uriparser_cv_uriparser_version+:} false; then : + $as_echo_n "(cached) " >&6 +else + uriparser_cv_uriparser_version=`$PKGCONFIG liburiparser --modversion` +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $uriparser_cv_uriparser_version" >&5 +$as_echo "$uriparser_cv_uriparser_version" >&6; } + + for ac_prog in gawk mawk nawk awk +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_AWK+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$AWK"; then + ac_cv_prog_AWK="$AWK" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_AWK="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +AWK=$ac_cv_prog_AWK +if test -n "$AWK"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5 +$as_echo "$AWK" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$AWK" && break +done + + + _uriparser_version_parse="eval $AWK '{split(\$NF,A,\".\"); X=256*256*A[1]+256*A[2]+A[3]; print X;}'" + + _uriparser_version=`echo $uriparser_cv_uriparser_version | $_uriparser_version_parse` + _uriparser_wanted=`echo 0.7.5 | $_uriparser_version_parse` + + if test $_uriparser_wanted -gt 0 ; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for uriparser >= version 0.7.5" >&5 +$as_echo_n "checking for uriparser >= version 0.7.5... " >&6; } +if ${uriparser_cv_lib_version_ok+:} false; then : + $as_echo_n "(cached) " >&6 +else + + if test $_uriparser_version -ge $_uriparser_wanted ; then + uriparser_cv_lib_version_ok=yes + else + uriparser_cv_lib_version_ok=no + fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $uriparser_cv_lib_version_ok" >&5 +$as_echo "$uriparser_cv_lib_version_ok" >&6; } + fi + + if test $_uriparser_wanted -eq 0 || test x$uriparser_cv_lib_version_ok = xyes ; then + if test x"$URIPARSER_CPPFLAGS" = "x" ; then + URIPARSER_CPPFLAGS=`$PKGCONFIG liburiparser --cflags` + fi + if test x"$URIPARSER" = "x" ; then + URIPARSER=`$PKGCONFIG liburiparser --libs` + fi + else + _uriparser_try_link=no + fi + + unset _uriparser_wanted + else + URIPARSER_CPPFLAGS="-I/usr/include" + URIPARSER="-luriparser -L/usr/lib -L/usr/lib64 -L/usr/lib/x86_64-linux-gnu -L/usr/lib/i686-linux-gnu" + fi + + if test $_uriparser_try_link = yes ; then + + # let's see if the user-supplied + # link line (or failing that, "-luriparser") is enough. + URIPARSER=${URIPARSER-"$_uriparser_ldflags -luriparser"} + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether uriparser is usable" >&5 +$as_echo_n "checking whether uriparser is usable... " >&6; } +if ${uriparser_cv_lib_uriparser_usable+:} false; then : + $as_echo_n "(cached) " >&6 +else + + _liburiparser_save_cppflags=$CPPFLAGS + CPPFLAGS="$URIPARSER_CPPFLAGS $CPPFLAGS" + _liburiparser_save_libs=$LIBS + LIBS="$URIPARSER $LIBS" + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +int +main () +{ + +/* Try and use a few common options to force a failure if we are + missing symbols or cannot link. */ +UriParserStateA state; +UriUriA uri; +state.uri = &uri; +char *location = "http://test.dom/dir/file.ext"; +int x = uriParseUriA (&state, location); +if (x == URI_SUCCESS) {;} + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + uriparser_cv_lib_uriparser_usable=yes +else + uriparser_cv_lib_uriparser_usable=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + + CPPFLAGS=$_liburiparser_save_cppflags + LIBS=$_liburiparser_save_libs + unset _liburiparser_save_cppflags + unset _liburiparser_save_libs + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $uriparser_cv_lib_uriparser_usable" >&5 +$as_echo "$uriparser_cv_lib_uriparser_usable" >&6; } + + if test $uriparser_cv_lib_uriparser_usable = yes ; then + +$as_echo "#define HAVE_URIPARSER 1" >>confdefs.h + + + + else + unset URIPARSER + unset URIPARSER_CPPFLAGS + fi + fi + + unset _uriparser_try_link + unset _uriparser_version_parse + unset _uriparser_version + unset _uriparser_ldflags + fi + + if test x$_uriparser_with = xno || test x$uriparser_cv_lib_uriparser_usable != xyes ; then + # This is the IF-NO path + + _can_enable_check_curl=no + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Skipping curl plugin" >&5 +$as_echo "$as_me: WARNING: Skipping curl plugin" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: install the uriparser library to compile this plugin (see REQUIREMENTS)." >&5 +$as_echo "$as_me: WARNING: install the uriparser library to compile this plugin (see REQUIREMENTS)." >&2;} + + else + # This is the IF-YES path + + URIPARSERINCLUDE="$URIPARSER_CPPFLAGS" + URIPARSERLIBS="$URIPARSER" + URIPARSERCFLAGS="$URIPARSER_CPPFLAGS" + + + + + fi + + unset _uriparser_with + + +if test x$_can_enable_check_curl = xyes; then + EXTRAS="$EXTRAS check_curl\$(EXEEXT)" +fi +ac_config_files="$ac_config_files plugins/picohttpparser/Makefile" + + if test "$ac_cv_header_utmpx_h" = "no" -a "$ac_cv_header_wtsapi32_h" = "no" then # Extract the first word of "who", so it can be a program name with args. @@ -17000,6 +17725,11 @@ _ACEOF $as_echo "#define PS_USES_PROCETIME \"yes\"" >>confdefs.h + fi + if echo "$ac_cv_ps_varlist" | grep "procpcpu" >/dev/null; then + +$as_echo "#define PS_USES_PROCPCPU \"yes\"" >>confdefs.h + fi fi @@ -17129,6 +17859,15 @@ then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $with_ping_command" >&5 $as_echo "$with_ping_command" >&6; } +elif $PATH_TO_PING -4 -n -U -w 10 -c 1 127.0.0.1 2>/dev/null | \ + egrep -i "^round-trip|^rtt" >/dev/null +then + # check if -4 is supported - issue #1550 + with_ping_command="$PATH_TO_PING -4 -n -U -w %d -c %d %s" + ac_cv_ping_packets_first=yes + ac_cv_ping_has_timeout=yes + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $with_ping_command" >&5 +$as_echo "$with_ping_command" >&6; } elif $PATH_TO_PING -n -U -w 10 -c 1 127.0.0.1 2>/dev/null | \ egrep -i "^round-trip|^rtt" >/dev/null then @@ -40815,7 +41554,7 @@ if test "$ac_cv_uname_s" = 'SunOS' -a \( "x$ac_cv_prog_ac_ct_AR" = "x" -o "$ac_c as_fn_error $? "No ar found for Solaris - is /usr/ccs/bin in PATH?" "$LINENO" 5 fi -ac_config_files="$ac_config_files Makefile tap/Makefile lib/Makefile plugins/Makefile lib/tests/Makefile plugins-root/Makefile plugins-scripts/Makefile plugins-scripts/utils.pm plugins-scripts/utils.sh test.pl pkg/solaris/pkginfo po/Makefile.in" +ac_config_files="$ac_config_files Makefile tap/Makefile lib/Makefile plugins/Makefile lib/tests/Makefile plugins-root/Makefile plugins-scripts/Makefile plugins-scripts/utils.pm plugins-scripts/utils.sh perlmods/Makefile test.pl pkg/solaris/pkginfo po/Makefile.in" cat >confcache <<\_ACEOF # This file is a shell script that caches the results of configure @@ -41437,7 +42176,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" -This file was extended by monitoring-plugins $as_me 2.2, which was +This file was extended by monitoring-plugins $as_me 2.3, which was generated by GNU Autoconf 2.69. Invocation command line was CONFIG_FILES = $CONFIG_FILES @@ -41503,7 +42242,7 @@ _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ -monitoring-plugins config.status 2.2 +monitoring-plugins config.status 2.3 configured by $0, generated by GNU Autoconf 2.69, with options \\"\$ac_cs_config\\" @@ -41920,6 +42659,7 @@ do "config.h") CONFIG_HEADERS="$CONFIG_HEADERS config.h" ;; "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;; "libtool") CONFIG_COMMANDS="$CONFIG_COMMANDS libtool" ;; + "plugins/picohttpparser/Makefile") CONFIG_FILES="$CONFIG_FILES plugins/picohttpparser/Makefile" ;; "po-directories") CONFIG_COMMANDS="$CONFIG_COMMANDS po-directories" ;; "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; "tap/Makefile") CONFIG_FILES="$CONFIG_FILES tap/Makefile" ;; @@ -41930,6 +42670,7 @@ do "plugins-scripts/Makefile") CONFIG_FILES="$CONFIG_FILES plugins-scripts/Makefile" ;; "plugins-scripts/utils.pm") CONFIG_FILES="$CONFIG_FILES plugins-scripts/utils.pm" ;; "plugins-scripts/utils.sh") CONFIG_FILES="$CONFIG_FILES plugins-scripts/utils.sh" ;; + "perlmods/Makefile") CONFIG_FILES="$CONFIG_FILES perlmods/Makefile" ;; "test.pl") CONFIG_FILES="$CONFIG_FILES test.pl" ;; "pkg/solaris/pkginfo") CONFIG_FILES="$CONFIG_FILES pkg/solaris/pkginfo" ;; "po/Makefile.in") CONFIG_FILES="$CONFIG_FILES po/Makefile.in" ;; @@ -43422,4 +44163,5 @@ echo " --enable-perl-modules: $enable_perl_modules" echo " --with-cgiurl: $with_cgiurl" echo " --with-trusted-path: $with_trusted_path" echo " --enable-libtap: $enable_libtap" - +echo " --with-libcurl: $with_libcurl" +echo " --with-uriparser: $with_uriparser" diff --git a/configure.ac b/configure.ac index ba40239..562efcd 100644 --- a/configure.ac +++ b/configure.ac @@ -1,6 +1,6 @@ dnl Process this file with autoconf to produce a configure script. AC_PREREQ(2.59) -AC_INIT(monitoring-plugins,2.2) +AC_INIT(monitoring-plugins,2.3) AC_CONFIG_SRCDIR(NPTest.pm) AC_CONFIG_FILES([gl/Makefile]) AC_CONFIG_AUX_DIR(build-aux) @@ -385,6 +385,42 @@ if test "$ac_cv_header_wtsapi32_h" = "yes"; then AC_SUBST(WTSAPI32LIBS) fi +_can_enable_check_curl=no +dnl Check for cURL library +LIBCURL_CHECK_CONFIG(yes, 7.15.2, [ + _can_enable_check_curl=yes + LIBCURLINCLUDE="$LIBCURL_CPPFLAGS" + LIBCURLLIBS="$LIBCURL" + LIBCURLCFLAGS="$LIBCURL_CPPFLAGS" + AC_SUBST(LIBCURLINCLUDE) + AC_SUBST(LIBCURLLIBS) + AC_SUBST(LIBCURLCFLAGS) + ], [ + _can_enable_check_curl=no + AC_MSG_WARN([Skipping curl plugin]) + AC_MSG_WARN([install libcurl libs to compile this plugin (see REQUIREMENTS).]) +]) + +dnl Check for uriparser library +URIPARSER_CHECK(yes, 0.7.5, [ + URIPARSERINCLUDE="$URIPARSER_CPPFLAGS" + URIPARSERLIBS="$URIPARSER" + URIPARSERCFLAGS="$URIPARSER_CPPFLAGS" + AC_SUBST(URIPARSERINCLUDE) + AC_SUBST(URIPARSERLIBS) + AC_SUBST(URIPARSERCFLAGS) + ], [ + _can_enable_check_curl=no + AC_MSG_WARN([Skipping curl plugin]) + AC_MSG_WARN([install the uriparser library to compile this plugin (see REQUIREMENTS).]) +]) + +dnl prerequisites met, enable the plugin +if test x$_can_enable_check_curl = xyes; then + EXTRAS="$EXTRAS check_curl\$(EXEEXT)" +fi +AC_CONFIG_FILES([plugins/picohttpparser/Makefile]) + dnl Fallback to who(1) if the system doesn't provide an utmpx(5) interface if test "$ac_cv_header_utmpx_h" = "no" -a "$ac_cv_header_wtsapi32_h" = "no" then @@ -1016,6 +1052,10 @@ if test -n "$ac_cv_ps_varlist" ; then AC_DEFINE(PS_USES_PROCETIME,"yes", [Whether the ps utility uses the "procetime" field]) fi + if echo "$ac_cv_ps_varlist" | grep "procpcpu" >/dev/null; then + AC_DEFINE(PS_USES_PROCPCPU,"yes", + [Whether the ps utility uses the "procpcpu" field]) + fi fi AC_PATH_PROG(PATH_TO_PING,ping) @@ -1060,6 +1100,14 @@ then ac_cv_ping_packets_first=yes AC_MSG_RESULT([$with_ping_command]) +elif $PATH_TO_PING -4 -n -U -w 10 -c 1 127.0.0.1 2>/dev/null | \ + egrep -i "^round-trip|^rtt" >/dev/null +then + # check if -4 is supported - issue #1550 + with_ping_command="$PATH_TO_PING -4 -n -U -w %d -c %d %s" + ac_cv_ping_packets_first=yes + ac_cv_ping_has_timeout=yes + AC_MSG_RESULT([$with_ping_command]) elif $PATH_TO_PING -n -U -w 10 -c 1 127.0.0.1 2>/dev/null | \ egrep -i "^round-trip|^rtt" >/dev/null then @@ -1840,6 +1888,7 @@ AC_OUTPUT( plugins-scripts/Makefile plugins-scripts/utils.pm plugins-scripts/utils.sh + perlmods/Makefile test.pl pkg/solaris/pkginfo po/Makefile.in @@ -1881,4 +1930,5 @@ ACX_FEATURE([enable],[perl-modules]) ACX_FEATURE([with],[cgiurl]) ACX_FEATURE([with],[trusted-path]) ACX_FEATURE([enable],[libtap]) - +ACX_FEATURE([with],[libcurl]) +ACX_FEATURE([with],[uriparser]) diff --git a/gl/Makefile.in b/gl/Makefile.in index 887e408..975db03 100644 --- a/gl/Makefile.in +++ b/gl/Makefile.in @@ -79,8 +79,10 @@ subdir = gl DIST_COMMON = $(noinst_HEADERS) $(srcdir)/Makefile.am \ $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/m4/np_mysqlclient.m4 \ - $(top_srcdir)/gl/m4/00gnulib.m4 $(top_srcdir)/gl/m4/alloca.m4 \ +am__aclocal_m4_deps = $(top_srcdir)/m4/libcurl.m4 \ + $(top_srcdir)/m4/np_mysqlclient.m4 \ + $(top_srcdir)/m4/uriparser.m4 $(top_srcdir)/gl/m4/00gnulib.m4 \ + $(top_srcdir)/gl/m4/alloca.m4 \ $(top_srcdir)/gl/m4/arpa_inet_h.m4 \ $(top_srcdir)/gl/m4/base64.m4 $(top_srcdir)/gl/m4/btowc.m4 \ $(top_srcdir)/gl/m4/codeset.m4 \ @@ -974,6 +976,11 @@ LD = @LD@ LDAPINCLUDE = @LDAPINCLUDE@ LDAPLIBS = @LDAPLIBS@ LDFLAGS = @LDFLAGS@ +LIBCURL = @LIBCURL@ +LIBCURLCFLAGS = @LIBCURLCFLAGS@ +LIBCURLINCLUDE = @LIBCURLINCLUDE@ +LIBCURLLIBS = @LIBCURLLIBS@ +LIBCURL_CPPFLAGS = @LIBCURL_CPPFLAGS@ LIBGNU_LIBDEPS = @LIBGNU_LIBDEPS@ LIBGNU_LTLIBDEPS = @LIBGNU_LTLIBDEPS@ LIBICONV = @LIBICONV@ @@ -1099,6 +1106,7 @@ PERL = @PERL@ PERLMODS_DIR = @PERLMODS_DIR@ PGINCLUDE = @PGINCLUDE@ PGLIBS = @PGLIBS@ +PKGCONFIG = @PKGCONFIG@ PKG_ARCH = @PKG_ARCH@ PLUGIN_TEST = @PLUGIN_TEST@ POSUB = @POSUB@ @@ -1316,6 +1324,11 @@ TIME_H_DEFINES_STRUCT_TIMESPEC = @TIME_H_DEFINES_STRUCT_TIMESPEC@ UNDEFINE_STRTOK_R = @UNDEFINE_STRTOK_R@ UNISTD_H_HAVE_WINSOCK2_H = @UNISTD_H_HAVE_WINSOCK2_H@ UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS = @UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS@ +URIPARSER = @URIPARSER@ +URIPARSERCFLAGS = @URIPARSERCFLAGS@ +URIPARSERINCLUDE = @URIPARSERINCLUDE@ +URIPARSERLIBS = @URIPARSERLIBS@ +URIPARSER_CPPFLAGS = @URIPARSER_CPPFLAGS@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ WARRANTY = @WARRANTY@ @@ -1326,6 +1339,7 @@ WTSAPI32LIBS = @WTSAPI32LIBS@ XGETTEXT = @XGETTEXT@ XGETTEXT_015 = @XGETTEXT_015@ XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ +_libcurl_config = @_libcurl_config@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ diff --git a/gl/fsusage.c b/gl/fsusage.c index 0657555..6103ecf 100644 --- a/gl/fsusage.c +++ b/gl/fsusage.c @@ -143,6 +143,7 @@ get_fs_usage (char const *file, char const *disk, struct fs_usage *fsp) fsp->fsu_bavail_top_bit_set = EXTRACT_TOP_BIT (vfsd.f_bavail) != 0; fsp->fsu_files = PROPAGATE_ALL_ONES (vfsd.f_files); fsp->fsu_ffree = PROPAGATE_ALL_ONES (vfsd.f_ffree); + fsp->fsu_favail = PROPAGATE_ALL_ONES (vfsd.f_favail); return 0; } @@ -174,6 +175,7 @@ get_fs_usage (char const *file, char const *disk, struct fs_usage *fsp) fsp->fsu_bavail_top_bit_set = EXTRACT_TOP_BIT (fsd.fd_req.bfreen) != 0; fsp->fsu_files = PROPAGATE_ALL_ONES (fsd.fd_req.gtot); fsp->fsu_ffree = PROPAGATE_ALL_ONES (fsd.fd_req.gfree); + fsp->fsu_favail = PROPAGATE_ALL_ONES (fsd.fd_req.gfree); #elif defined STAT_READ_FILSYS /* SVR2 */ # ifndef SUPERBOFF @@ -209,6 +211,7 @@ get_fs_usage (char const *file, char const *disk, struct fs_usage *fsp) ? UINTMAX_MAX : (fsd.s_isize - 2) * INOPB * (fsd.s_type == Fs2b ? 2 : 1)); fsp->fsu_ffree = PROPAGATE_ALL_ONES (fsd.s_tinode); + fsp->fsu_favail = PROPAGATE_ALL_ONES (fsd.s_tinode); #elif defined STAT_STATFS3_OSF1 /* OSF/1 */ @@ -296,6 +299,7 @@ get_fs_usage (char const *file, char const *disk, struct fs_usage *fsp) fsp->fsu_bavail_top_bit_set = EXTRACT_TOP_BIT (fsd.f_bavail) != 0; fsp->fsu_files = PROPAGATE_ALL_ONES (fsd.f_files); fsp->fsu_ffree = PROPAGATE_ALL_ONES (fsd.f_ffree); + fsp->fsu_favail = PROPAGATE_ALL_ONES (fsd.f_ffree); #endif @@ -323,6 +327,7 @@ statfs (char *file, struct statfs *fsb) fsb->f_bavail = fsd.du_tfree; fsb->f_files = (fsd.du_isize - 2) * fsd.du_inopb; fsb->f_ffree = fsd.du_tinode; + fsb->f_favail = fsd.du_tinode; fsb->f_fsid.val[0] = fsd.du_site; fsb->f_fsid.val[1] = fsd.du_pckno; return 0; diff --git a/gl/fsusage.h b/gl/fsusage.h index 7810fc0..e2654fd 100644 --- a/gl/fsusage.h +++ b/gl/fsusage.h @@ -32,7 +32,8 @@ struct fs_usage uintmax_t fsu_bavail; /* Free blocks available to non-superuser. */ bool fsu_bavail_top_bit_set; /* 1 if fsu_bavail represents a value < 0. */ uintmax_t fsu_files; /* Total file nodes. */ - uintmax_t fsu_ffree; /* Free file nodes. */ + uintmax_t fsu_ffree; /* Free file nodes to superuser. */ + uintmax_t fsu_favail; /* Free file nodes to non-superuser. */ }; int get_fs_usage (char const *file, char const *disk, struct fs_usage *fsp); diff --git a/lib/Makefile.in b/lib/Makefile.in index 4e4d911..d4daaf7 100644 --- a/lib/Makefile.in +++ b/lib/Makefile.in @@ -54,8 +54,10 @@ host_triplet = @host@ subdir = lib DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/m4/np_mysqlclient.m4 \ - $(top_srcdir)/gl/m4/00gnulib.m4 $(top_srcdir)/gl/m4/alloca.m4 \ +am__aclocal_m4_deps = $(top_srcdir)/m4/libcurl.m4 \ + $(top_srcdir)/m4/np_mysqlclient.m4 \ + $(top_srcdir)/m4/uriparser.m4 $(top_srcdir)/gl/m4/00gnulib.m4 \ + $(top_srcdir)/gl/m4/alloca.m4 \ $(top_srcdir)/gl/m4/arpa_inet_h.m4 \ $(top_srcdir)/gl/m4/base64.m4 $(top_srcdir)/gl/m4/btowc.m4 \ $(top_srcdir)/gl/m4/codeset.m4 \ @@ -943,6 +945,11 @@ LD = @LD@ LDAPINCLUDE = @LDAPINCLUDE@ LDAPLIBS = @LDAPLIBS@ LDFLAGS = @LDFLAGS@ +LIBCURL = @LIBCURL@ +LIBCURLCFLAGS = @LIBCURLCFLAGS@ +LIBCURLINCLUDE = @LIBCURLINCLUDE@ +LIBCURLLIBS = @LIBCURLLIBS@ +LIBCURL_CPPFLAGS = @LIBCURL_CPPFLAGS@ LIBGNU_LIBDEPS = @LIBGNU_LIBDEPS@ LIBGNU_LTLIBDEPS = @LIBGNU_LTLIBDEPS@ LIBICONV = @LIBICONV@ @@ -1068,6 +1075,7 @@ PERL = @PERL@ PERLMODS_DIR = @PERLMODS_DIR@ PGINCLUDE = @PGINCLUDE@ PGLIBS = @PGLIBS@ +PKGCONFIG = @PKGCONFIG@ PKG_ARCH = @PKG_ARCH@ PLUGIN_TEST = @PLUGIN_TEST@ POSUB = @POSUB@ @@ -1285,6 +1293,11 @@ TIME_H_DEFINES_STRUCT_TIMESPEC = @TIME_H_DEFINES_STRUCT_TIMESPEC@ UNDEFINE_STRTOK_R = @UNDEFINE_STRTOK_R@ UNISTD_H_HAVE_WINSOCK2_H = @UNISTD_H_HAVE_WINSOCK2_H@ UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS = @UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS@ +URIPARSER = @URIPARSER@ +URIPARSERCFLAGS = @URIPARSERCFLAGS@ +URIPARSERINCLUDE = @URIPARSERINCLUDE@ +URIPARSERLIBS = @URIPARSERLIBS@ +URIPARSER_CPPFLAGS = @URIPARSER_CPPFLAGS@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ WARRANTY = @WARRANTY@ @@ -1295,6 +1308,7 @@ WTSAPI32LIBS = @WTSAPI32LIBS@ XGETTEXT = @XGETTEXT@ XGETTEXT_015 = @XGETTEXT_015@ XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ +_libcurl_config = @_libcurl_config@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ diff --git a/lib/tests/Makefile.in b/lib/tests/Makefile.in index 2b6a1e2..1864d3e 100644 --- a/lib/tests/Makefile.in +++ b/lib/tests/Makefile.in @@ -57,8 +57,10 @@ EXTRA_PROGRAMS = test_utils$(EXEEXT) test_disk$(EXEEXT) \ subdir = lib/tests DIST_COMMON = README $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/m4/np_mysqlclient.m4 \ - $(top_srcdir)/gl/m4/00gnulib.m4 $(top_srcdir)/gl/m4/alloca.m4 \ +am__aclocal_m4_deps = $(top_srcdir)/m4/libcurl.m4 \ + $(top_srcdir)/m4/np_mysqlclient.m4 \ + $(top_srcdir)/m4/uriparser.m4 $(top_srcdir)/gl/m4/00gnulib.m4 \ + $(top_srcdir)/gl/m4/alloca.m4 \ $(top_srcdir)/gl/m4/arpa_inet_h.m4 \ $(top_srcdir)/gl/m4/base64.m4 $(top_srcdir)/gl/m4/btowc.m4 \ $(top_srcdir)/gl/m4/codeset.m4 \ @@ -951,6 +953,11 @@ LD = @LD@ LDAPINCLUDE = @LDAPINCLUDE@ LDAPLIBS = @LDAPLIBS@ LDFLAGS = @LDFLAGS@ +LIBCURL = @LIBCURL@ +LIBCURLCFLAGS = @LIBCURLCFLAGS@ +LIBCURLINCLUDE = @LIBCURLINCLUDE@ +LIBCURLLIBS = @LIBCURLLIBS@ +LIBCURL_CPPFLAGS = @LIBCURL_CPPFLAGS@ LIBGNU_LIBDEPS = @LIBGNU_LIBDEPS@ LIBGNU_LTLIBDEPS = @LIBGNU_LTLIBDEPS@ LIBICONV = @LIBICONV@ @@ -1076,6 +1083,7 @@ PERL = @PERL@ PERLMODS_DIR = @PERLMODS_DIR@ PGINCLUDE = @PGINCLUDE@ PGLIBS = @PGLIBS@ +PKGCONFIG = @PKGCONFIG@ PKG_ARCH = @PKG_ARCH@ PLUGIN_TEST = @PLUGIN_TEST@ POSUB = @POSUB@ @@ -1293,6 +1301,11 @@ TIME_H_DEFINES_STRUCT_TIMESPEC = @TIME_H_DEFINES_STRUCT_TIMESPEC@ UNDEFINE_STRTOK_R = @UNDEFINE_STRTOK_R@ UNISTD_H_HAVE_WINSOCK2_H = @UNISTD_H_HAVE_WINSOCK2_H@ UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS = @UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS@ +URIPARSER = @URIPARSER@ +URIPARSERCFLAGS = @URIPARSERCFLAGS@ +URIPARSERINCLUDE = @URIPARSERINCLUDE@ +URIPARSERLIBS = @URIPARSERLIBS@ +URIPARSER_CPPFLAGS = @URIPARSER_CPPFLAGS@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ WARRANTY = @WARRANTY@ @@ -1303,6 +1316,7 @@ WTSAPI32LIBS = @WTSAPI32LIBS@ XGETTEXT = @XGETTEXT@ XGETTEXT_015 = @XGETTEXT_015@ XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ +_libcurl_config = @_libcurl_config@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ diff --git a/lib/utils_base.c b/lib/utils_base.c index 3822bcf..fd7058d 100644 --- a/lib/utils_base.c +++ b/lib/utils_base.c @@ -37,6 +37,9 @@ monitoring_plugin *this_monitoring_plugin=NULL; +unsigned int timeout_state = STATE_CRITICAL; +unsigned int timeout_interval = DEFAULT_SOCKET_TIMEOUT; + int _np_state_read_file(FILE *); void np_init( char *plugin_name, int argc, char **argv ) { @@ -87,10 +90,13 @@ void _get_monitoring_plugin( monitoring_plugin **pointer ){ void die (int result, const char *fmt, ...) { - va_list ap; - va_start (ap, fmt); - vprintf (fmt, ap); - va_end (ap); + if(fmt!=NULL) { + va_list ap; + va_start (ap, fmt); + vprintf (fmt, ap); + va_end (ap); + } + if(this_monitoring_plugin!=NULL) { np_cleanup(); } @@ -356,6 +362,22 @@ char *np_extract_value(const char *varlist, const char *name, char sep) { return value; } +const char * +state_text (int result) +{ + switch (result) { + case STATE_OK: + return "OK"; + case STATE_WARNING: + return "WARNING"; + case STATE_CRITICAL: + return "CRITICAL"; + case STATE_DEPENDENT: + return "DEPENDENT"; + default: + return "UNKNOWN"; + } +} /* * Read a string representing a state (ok, warning... or numeric: 0, 1) and diff --git a/lib/utils_base.h b/lib/utils_base.h index 42ae0c0..d7e7dff 100644 --- a/lib/utils_base.h +++ b/lib/utils_base.h @@ -61,6 +61,10 @@ void print_thresholds(const char *, thresholds *); int check_range(double, range *); int get_status(double, thresholds *); +/* Handle timeouts */ +extern unsigned int timeout_state; +extern unsigned int timeout_interval; + /* All possible characters in a threshold range */ #define NP_THRESHOLDS_CHARS "-0123456789.:@~" @@ -107,5 +111,6 @@ void np_state_write_string(time_t, char *); void np_init(char *, int argc, char **argv); void np_set_args(int argc, char **argv); void np_cleanup(); +const char *state_text (int); #endif /* _UTILS_BASE_ */ diff --git a/lib/utils_cmd.c b/lib/utils_cmd.c index 7eb9a3a..795840d 100644 --- a/lib/utils_cmd.c +++ b/lib/utils_cmd.c @@ -40,6 +40,7 @@ /** includes **/ #include "common.h" +#include "utils.h" #include "utils_cmd.h" #include "utils_base.h" #include @@ -65,31 +66,6 @@ extern char **environ; # define SIG_ERR ((Sigfunc *)-1) #endif -/* This variable must be global, since there's no way the caller - * can forcibly slay a dead or ungainly running program otherwise. - * Multithreading apps and plugins can initialize it (via CMD_INIT) - * in an async safe manner PRIOR to calling cmd_run() or cmd_run_array() - * for the first time. - * - * The check for initialized values is atomic and can - * occur in any number of threads simultaneously. */ -static pid_t *_cmd_pids = NULL; - -/* Try sysconf(_SC_OPEN_MAX) first, as it can be higher than OPEN_MAX. - * If that fails and the macro isn't defined, we fall back to an educated - * guess. There's no guarantee that our guess is adequate and the program - * will die with SIGSEGV if it isn't and the upper boundary is breached. */ -#define DEFAULT_MAXFD 256 /* fallback value if no max open files value is set */ -#define MAXFD_LIMIT 8192 /* upper limit of open files */ -#ifdef _SC_OPEN_MAX -static long maxfd = 0; -#elif defined(OPEN_MAX) -# define maxfd OPEN_MAX -#else /* sysconf macro unavailable, so guess (may be wildly inaccurate) */ -# define maxfd DEFAULT_MAXFD -#endif - - /** prototypes **/ static int _cmd_open (char *const *, int *, int *) __attribute__ ((__nonnull__ (1, 2, 3))); @@ -406,3 +382,19 @@ cmd_file_read ( char *filename, output *out, int flags) return 0; } + +void +timeout_alarm_handler (int signo) +{ + size_t i; + if (signo == SIGALRM) { + printf (_("%s - Plugin timed out after %d seconds\n"), + state_text(timeout_state), timeout_interval); + + if(_cmd_pids) for(i = 0; i < maxfd; i++) { + if(_cmd_pids[i] != 0) kill(_cmd_pids[i], SIGKILL); + } + + exit (timeout_state); + } +} diff --git a/lib/utils_cmd.h b/lib/utils_cmd.h index ebaf15b..6f3aeb8 100644 --- a/lib/utils_cmd.h +++ b/lib/utils_cmd.h @@ -32,4 +32,17 @@ void cmd_init (void); #define CMD_NO_ARRAYS 0x01 /* don't populate arrays at all */ #define CMD_NO_ASSOC 0x02 /* output.line won't point to buf */ +/* This variable must be global, since there's no way the caller + * can forcibly slay a dead or ungainly running program otherwise. + * Multithreading apps and plugins can initialize it (via CMD_INIT) + * in an async safe manner PRIOR to calling cmd_run() or cmd_run_array() + * for the first time. + * + * The check for initialized values is atomic and can + * occur in any number of threads simultaneously. */ +static pid_t *_cmd_pids = NULL; + +RETSIGTYPE timeout_alarm_handler (int); + + #endif /* _UTILS_CMD_ */ diff --git a/lib/utils_disk.c b/lib/utils_disk.c index efe35fc..c7c9126 100644 --- a/lib/utils_disk.c +++ b/lib/utils_disk.c @@ -69,6 +69,8 @@ np_add_parameter(struct parameter_list **list, const char *name) new_path->dtotal_units = 0; new_path->inodes_total = 0; new_path->inodes_free = 0; + new_path->inodes_free_to_root = 0; + new_path->inodes_used = 0; new_path->dused_inodes_percent = 0; new_path->dfree_inodes_percent = 0; diff --git a/lib/utils_disk.h b/lib/utils_disk.h index 83a3763..999270c 100644 --- a/lib/utils_disk.h +++ b/lib/utils_disk.h @@ -24,7 +24,8 @@ struct parameter_list char *group; struct mount_entry *best_match; struct parameter_list *name_next; - uintmax_t total, available, available_to_root, used, inodes_free, inodes_total; + uintmax_t total, available, available_to_root, used, + inodes_free, inodes_free_to_root, inodes_used, inodes_total; double dfree_pct, dused_pct; double dused_units, dfree_units, dtotal_units; double dused_inodes_percent, dfree_inodes_percent; diff --git a/m4/libcurl.m4 b/m4/libcurl.m4 new file mode 100644 index 0000000..53d694d --- /dev/null +++ b/m4/libcurl.m4 @@ -0,0 +1,272 @@ +#*************************************************************************** +# _ _ ____ _ +# Project ___| | | | _ \| | +# / __| | | | |_) | | +# | (__| |_| | _ <| |___ +# \___|\___/|_| \_\_____| +# +# Copyright (C) 2006, David Shaw +# +# This software is licensed as described in the file COPYING, which +# you should have received as part of this distribution. The terms +# are also available at https://curl.haxx.se/docs/copyright.html. +# +# You may opt to use, copy, modify, merge, publish, distribute and/or sell +# copies of the Software, and permit persons to whom the Software is +# furnished to do so, under the terms of the COPYING file. +# +# This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY +# KIND, either express or implied. +# +########################################################################### +# LIBCURL_CHECK_CONFIG ([DEFAULT-ACTION], [MINIMUM-VERSION], +# [ACTION-IF-YES], [ACTION-IF-NO]) +# ---------------------------------------------------------- +# David Shaw May-09-2006 +# +# Checks for libcurl. DEFAULT-ACTION is the string yes or no to +# specify whether to default to --with-libcurl or --without-libcurl. +# If not supplied, DEFAULT-ACTION is yes. MINIMUM-VERSION is the +# minimum version of libcurl to accept. Pass the version as a regular +# version number like 7.10.1. If not supplied, any version is +# accepted. ACTION-IF-YES is a list of shell commands to run if +# libcurl was successfully found and passed the various tests. +# ACTION-IF-NO is a list of shell commands that are run otherwise. +# Note that using --without-libcurl does run ACTION-IF-NO. +# +# This macro #defines HAVE_LIBCURL if a working libcurl setup is +# found, and sets @LIBCURL@ and @LIBCURL_CPPFLAGS@ to the necessary +# values. Other useful defines are LIBCURL_FEATURE_xxx where xxx are +# the various features supported by libcurl, and LIBCURL_PROTOCOL_yyy +# where yyy are the various protocols supported by libcurl. Both xxx +# and yyy are capitalized. See the list of AH_TEMPLATEs at the top of +# the macro for the complete list of possible defines. Shell +# variables $libcurl_feature_xxx and $libcurl_protocol_yyy are also +# defined to 'yes' for those features and protocols that were found. +# Note that xxx and yyy keep the same capitalization as in the +# curl-config list (e.g. it's "HTTP" and not "http"). +# +# Users may override the detected values by doing something like: +# LIBCURL="-lcurl" LIBCURL_CPPFLAGS="-I/usr/myinclude" ./configure +# +# For the sake of sanity, this macro assumes that any libcurl that is +# found is after version 7.7.2, the first version that included the +# curl-config script. Note that it is very important for people +# packaging binary versions of libcurl to include this script! +# Without curl-config, we can only guess what protocols are available, +# or use curl_version_info to figure it out at runtime. + +AC_DEFUN([LIBCURL_CHECK_CONFIG], +[ + AH_TEMPLATE([LIBCURL_FEATURE_SSL],[Defined if libcurl supports SSL]) + AH_TEMPLATE([LIBCURL_FEATURE_KRB4],[Defined if libcurl supports KRB4]) + AH_TEMPLATE([LIBCURL_FEATURE_IPV6],[Defined if libcurl supports IPv6]) + AH_TEMPLATE([LIBCURL_FEATURE_LIBZ],[Defined if libcurl supports libz]) + AH_TEMPLATE([LIBCURL_FEATURE_ASYNCHDNS],[Defined if libcurl supports AsynchDNS]) + AH_TEMPLATE([LIBCURL_FEATURE_IDN],[Defined if libcurl supports IDN]) + AH_TEMPLATE([LIBCURL_FEATURE_SSPI],[Defined if libcurl supports SSPI]) + AH_TEMPLATE([LIBCURL_FEATURE_NTLM],[Defined if libcurl supports NTLM]) + + AH_TEMPLATE([LIBCURL_PROTOCOL_HTTP],[Defined if libcurl supports HTTP]) + AH_TEMPLATE([LIBCURL_PROTOCOL_HTTPS],[Defined if libcurl supports HTTPS]) + AH_TEMPLATE([LIBCURL_PROTOCOL_FTP],[Defined if libcurl supports FTP]) + AH_TEMPLATE([LIBCURL_PROTOCOL_FTPS],[Defined if libcurl supports FTPS]) + AH_TEMPLATE([LIBCURL_PROTOCOL_FILE],[Defined if libcurl supports FILE]) + AH_TEMPLATE([LIBCURL_PROTOCOL_TELNET],[Defined if libcurl supports TELNET]) + AH_TEMPLATE([LIBCURL_PROTOCOL_LDAP],[Defined if libcurl supports LDAP]) + AH_TEMPLATE([LIBCURL_PROTOCOL_DICT],[Defined if libcurl supports DICT]) + AH_TEMPLATE([LIBCURL_PROTOCOL_TFTP],[Defined if libcurl supports TFTP]) + AH_TEMPLATE([LIBCURL_PROTOCOL_RTSP],[Defined if libcurl supports RTSP]) + AH_TEMPLATE([LIBCURL_PROTOCOL_POP3],[Defined if libcurl supports POP3]) + AH_TEMPLATE([LIBCURL_PROTOCOL_IMAP],[Defined if libcurl supports IMAP]) + AH_TEMPLATE([LIBCURL_PROTOCOL_SMTP],[Defined if libcurl supports SMTP]) + + AC_ARG_WITH(libcurl, + AS_HELP_STRING([--with-libcurl=PREFIX],[look for the curl library in PREFIX/lib and headers in PREFIX/include]), + [_libcurl_with=$withval],[_libcurl_with=ifelse([$1],,[yes],[$1])]) + + if test "$_libcurl_with" != "no" ; then + + AC_PROG_AWK + + _libcurl_version_parse="eval $AWK '{split(\$NF,A,\".\"); X=256*256*A[[1]]+256*A[[2]]+A[[3]]; print X;}'" + + _libcurl_try_link=yes + + if test -d "$_libcurl_with" ; then + LIBCURL_CPPFLAGS="-I$withval/include" + _libcurl_ldflags="-L$withval/lib" + AC_PATH_PROG([_libcurl_config],[curl-config],[], + ["$withval/bin"]) + else + AC_PATH_PROG([_libcurl_config],[curl-config],[],[$PATH]) + fi + + if test x$_libcurl_config != "x" ; then + AC_CACHE_CHECK([for the version of libcurl], + [libcurl_cv_lib_curl_version], + [libcurl_cv_lib_curl_version=`$_libcurl_config --version | $AWK '{print $[]2}'`]) + + _libcurl_version=`echo $libcurl_cv_lib_curl_version | $_libcurl_version_parse` + _libcurl_wanted=`echo ifelse([$2],,[0],[$2]) | $_libcurl_version_parse` + + if test $_libcurl_wanted -gt 0 ; then + AC_CACHE_CHECK([for libcurl >= version $2], + [libcurl_cv_lib_version_ok], + [ + if test $_libcurl_version -ge $_libcurl_wanted ; then + libcurl_cv_lib_version_ok=yes + else + libcurl_cv_lib_version_ok=no + fi + ]) + fi + + if test $_libcurl_wanted -eq 0 || test x$libcurl_cv_lib_version_ok = xyes ; then + if test x"$LIBCURL_CPPFLAGS" = "x" ; then + LIBCURL_CPPFLAGS=`$_libcurl_config --cflags` + fi + if test x"$LIBCURL" = "x" ; then + LIBCURL=`$_libcurl_config --libs` + + # This is so silly, but Apple actually has a bug in their + # curl-config script. Fixed in Tiger, but there are still + # lots of Panther installs around. + case "${host}" in + powerpc-apple-darwin7*) + LIBCURL=`echo $LIBCURL | sed -e 's|-arch i386||g'` + ;; + esac + fi + + # All curl-config scripts support --feature + _libcurl_features=`$_libcurl_config --feature` + + # Is it modern enough to have --protocols? (7.12.4) + if test $_libcurl_version -ge 461828 ; then + _libcurl_protocols=`$_libcurl_config --protocols` + fi + else + _libcurl_try_link=no + fi + + unset _libcurl_wanted + fi + + if test $_libcurl_try_link = yes ; then + + # we didn't find curl-config, so let's see if the user-supplied + # link line (or failing that, "-lcurl") is enough. + LIBCURL=${LIBCURL-"$_libcurl_ldflags -lcurl"} + + AC_CACHE_CHECK([whether libcurl is usable], + [libcurl_cv_lib_curl_usable], + [ + _libcurl_save_cppflags=$CPPFLAGS + CPPFLAGS="$LIBCURL_CPPFLAGS $CPPFLAGS" + _libcurl_save_libs=$LIBS + LIBS="$LIBCURL $LIBS" + + AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include ]],[[ +/* Try and use a few common options to force a failure if we are + missing symbols or can't link. */ +int x; +curl_easy_setopt(NULL,CURLOPT_URL,NULL); +x=CURL_ERROR_SIZE; +x=CURLOPT_WRITEFUNCTION; +x=CURLOPT_WRITEDATA; +x=CURLOPT_ERRORBUFFER; +x=CURLOPT_STDERR; +x=CURLOPT_VERBOSE; +if (x) {;} +]])],libcurl_cv_lib_curl_usable=yes,libcurl_cv_lib_curl_usable=no) + + CPPFLAGS=$_libcurl_save_cppflags + LIBS=$_libcurl_save_libs + unset _libcurl_save_cppflags + unset _libcurl_save_libs + ]) + + if test $libcurl_cv_lib_curl_usable = yes ; then + + # Does curl_free() exist in this version of libcurl? + # If not, fake it with free() + + _libcurl_save_cppflags=$CPPFLAGS + CPPFLAGS="$CPPFLAGS $LIBCURL_CPPFLAGS" + _libcurl_save_libs=$LIBS + LIBS="$LIBS $LIBCURL" + + AC_CHECK_FUNC(curl_free,, + AC_DEFINE(curl_free,free, + [Define curl_free() as free() if our version of curl lacks curl_free.])) + + CPPFLAGS=$_libcurl_save_cppflags + LIBS=$_libcurl_save_libs + unset _libcurl_save_cppflags + unset _libcurl_save_libs + + AC_DEFINE(HAVE_LIBCURL,1, + [Define to 1 if you have a functional curl library.]) + AC_SUBST(LIBCURL_CPPFLAGS) + AC_SUBST(LIBCURL) + + for _libcurl_feature in $_libcurl_features ; do + AC_DEFINE_UNQUOTED(AS_TR_CPP(libcurl_feature_$_libcurl_feature),[1]) + eval AS_TR_SH(libcurl_feature_$_libcurl_feature)=yes + done + + if test "x$_libcurl_protocols" = "x" ; then + + # We don't have --protocols, so just assume that all + # protocols are available + _libcurl_protocols="HTTP FTP FILE TELNET LDAP DICT TFTP" + + if test x$libcurl_feature_SSL = xyes ; then + _libcurl_protocols="$_libcurl_protocols HTTPS" + + # FTPS wasn't standards-compliant until version + # 7.11.0 (0x070b00 == 461568) + if test $_libcurl_version -ge 461568; then + _libcurl_protocols="$_libcurl_protocols FTPS" + fi + fi + + # RTSP, IMAP, POP3 and SMTP were added in + # 7.20.0 (0x071400 == 463872) + if test $_libcurl_version -ge 463872; then + _libcurl_protocols="$_libcurl_protocols RTSP IMAP POP3 SMTP" + fi + fi + + for _libcurl_protocol in $_libcurl_protocols ; do + AC_DEFINE_UNQUOTED(AS_TR_CPP(libcurl_protocol_$_libcurl_protocol),[1]) + eval AS_TR_SH(libcurl_protocol_$_libcurl_protocol)=yes + done + else + unset LIBCURL + unset LIBCURL_CPPFLAGS + fi + fi + + unset _libcurl_try_link + unset _libcurl_version_parse + unset _libcurl_config + unset _libcurl_feature + unset _libcurl_features + unset _libcurl_protocol + unset _libcurl_protocols + unset _libcurl_version + unset _libcurl_ldflags + fi + + if test x$_libcurl_with = xno || test x$libcurl_cv_lib_curl_usable != xyes ; then + # This is the IF-NO path + ifelse([$4],,:,[$4]) + else + # This is the IF-YES path + ifelse([$3],,:,[$3]) + fi + + unset _libcurl_with +])dnl diff --git a/m4/np_mysqlclient.m4 b/m4/np_mysqlclient.m4 index c2a4d2a..5099a02 100644 --- a/m4/np_mysqlclient.m4 +++ b/m4/np_mysqlclient.m4 @@ -53,18 +53,34 @@ AC_DEFUN([np_mysqlclient], _savedcppflags="$CPPFLAGS" CPPFLAGS="$CPPFLAGS $np_mysql_include" - dnl Putting $np_mysql_libs as other libraries ensures that all mysql dependencies are linked in - dnl Although -lmysqlclient is duplicated, it is not a problem - AC_CHECK_LIB([mysqlclient], [mysql_init], [ - with_mysql=$np_mysql_config - AC_DEFINE(HAVE_MYSQLCLIENT, 1, [Defined if mysqlclient is found and can compile]) - ], [with_mysql=no], [$np_mysql_libs]) + np_check_lib_mysqlclient + CPPFLAGS=$_savedcppflags fi fi ]) +dnl Test mysql_init using mysqlclient +AC_DEFUN([np_check_lib_mysqlclient], +[ + dnl Putting $np_mysql_libs as other libraries ensures that all mysql dependencies are linked in + dnl Although -lmysqlclient is duplicated, it is not a problem + AC_CHECK_LIB([mysqlclient], [mysql_init], [ + with_mysql=$np_mysql_config + AC_DEFINE(HAVE_MYSQLCLIENT, 1, [Defined if mysqlclient is found and can compile]) + ], [np_check_lib_mariadbclient], [$np_mysql_libs]) +]) + +dnl Test mysql_init using mariadbclient +AC_DEFUN([np_check_lib_mariadbclient], +[ + AC_CHECK_LIB([mariadbclient], [mysql_init], [ + with_mysql=$np_mysql_config + AC_DEFINE(HAVE_MYSQLCLIENT, 1, [Defined if mariadbclient is found and can compile]) + ], [with_mysql=no], [$np_mysql_libs]) +]) + dnl Will take $1, find last occurrance of -LDIR and add DIR to LD_RUN_PATH AC_DEFUN([np_add_to_runpath], [ diff --git a/m4/uriparser.m4 b/m4/uriparser.m4 new file mode 100644 index 0000000..dbb8a55 --- /dev/null +++ b/m4/uriparser.m4 @@ -0,0 +1,140 @@ +# (this check is rougly based on and inspired libcurl.m4) +# URIPARSER_CHECK ([DEFAULT-ACTION], [MINIMUM-VERSION], +# [ACTION-IF-YES], [ACTION-IF-NO]) +# Checks for uriparser library. DEFAULT-ACTION is the string yes or no to +# specify whether to default to --with-uriparser or --without-liburiparser. +# If not supplied, DEFAULT-ACTION is yes. MINIMUM-VERSION is the +# minimum version of uriparser to accept. Pass the version as a regular +# version number like 0.8.5. If not supplied, any version is +# accepted. ACTION-IF-YES is a list of shell commands to run if +# uriparser was successfully found and passed the various tests. +# ACTION-IF-NO is a list of shell commands that are run otherwise. +# Note that using --without-uriparser does run ACTION-IF-NO. +# +# This macro #defines HAVE_URIPARSER if a working uriparser setup is +# found, and sets @URIPARSER@ and @URIPARSER_CPPFLAGS@ to the necessary +# values. +# +# Users may override the detected values by doing something like: +# URIPARSER="-luriparser" URIPARSER_CPPFLAGS="-I/usr/myinclude" ./configure +# + +AC_DEFUN([URIPARSER_CHECK], +[ + AC_ARG_WITH(uriparser, + AS_HELP_STRING([--with-uriparser=PREFIX],[look for the uriparser library in PREFIX/lib and headers in PREFIX/include]), + [_uriparser_with=$withval],[_uriparser_with=ifelse([$1],,[yes],[$1])]) + + if test "$_uriparser_with" != "no" ; then + + _uriparser_try_link=yes + + AC_CHECK_PROG(PKGCONFIG,pkg-config,pkg-config,no) + + if test "x$URIPARSER" != "x" || test "x$URIPARSER_CPPFLAGS" != "x"; then + : + elif test -d "$_uriparser_with" ; then + URIPARSER_CPPFLAGS="-I$withval/include" + _uriparser_ldflags="-L$withval/lib" + + elif test x$PKGCONFIG != xno; then + + AC_CACHE_CHECK([for the version of uriparser], + [uriparser_cv_uriparser_version], + [uriparser_cv_uriparser_version=`$PKGCONFIG liburiparser --modversion`]) + + AC_PROG_AWK + + _uriparser_version_parse="eval $AWK '{split(\$NF,A,\".\"); X=256*256*A[[1]]+256*A[[2]]+A[[3]]; print X;}'" + + _uriparser_version=`echo $uriparser_cv_uriparser_version | $_uriparser_version_parse` + _uriparser_wanted=`echo ifelse([$2],,[0],[$2]) | $_uriparser_version_parse` + + if test $_uriparser_wanted -gt 0 ; then + AC_CACHE_CHECK([for uriparser >= version $2], + [uriparser_cv_lib_version_ok], + [ + if test $_uriparser_version -ge $_uriparser_wanted ; then + uriparser_cv_lib_version_ok=yes + else + uriparser_cv_lib_version_ok=no + fi + ]) + fi + + if test $_uriparser_wanted -eq 0 || test x$uriparser_cv_lib_version_ok = xyes ; then + if test x"$URIPARSER_CPPFLAGS" = "x" ; then + URIPARSER_CPPFLAGS=`$PKGCONFIG liburiparser --cflags` + fi + if test x"$URIPARSER" = "x" ; then + URIPARSER=`$PKGCONFIG liburiparser --libs` + fi + else + _uriparser_try_link=no + fi + + unset _uriparser_wanted + else + dnl no pkg-config, ok, do our best and set some defaults + URIPARSER_CPPFLAGS="-I/usr/include" + URIPARSER="-luriparser -L/usr/lib -L/usr/lib64 -L/usr/lib/x86_64-linux-gnu -L/usr/lib/i686-linux-gnu" + fi + + if test $_uriparser_try_link = yes ; then + + # let's see if the user-supplied + # link line (or failing that, "-luriparser") is enough. + URIPARSER=${URIPARSER-"$_uriparser_ldflags -luriparser"} + + AC_CACHE_CHECK([whether uriparser is usable], + [uriparser_cv_lib_uriparser_usable], + [ + _liburiparser_save_cppflags=$CPPFLAGS + CPPFLAGS="$URIPARSER_CPPFLAGS $CPPFLAGS" + _liburiparser_save_libs=$LIBS + LIBS="$URIPARSER $LIBS" + + AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include ]],[[ +/* Try and use a few common options to force a failure if we are + missing symbols or cannot link. */ +UriParserStateA state; +UriUriA uri; +state.uri = &uri; +char *location = "http://test.dom/dir/file.ext"; +int x = uriParseUriA (&state, location); +if (x == URI_SUCCESS) {;} +]])],uriparser_cv_lib_uriparser_usable=yes,uriparser_cv_lib_uriparser_usable=no) + + CPPFLAGS=$_liburiparser_save_cppflags + LIBS=$_liburiparser_save_libs + unset _liburiparser_save_cppflags + unset _liburiparser_save_libs + ]) + + if test $uriparser_cv_lib_uriparser_usable = yes ; then + AC_DEFINE(HAVE_URIPARSER,1, + [Define to 1 if you have a functional uriparser library.]) + AC_SUBST(URIPARSER_CPPFLAGS) + AC_SUBST(URIPARSER) + else + unset URIPARSER + unset URIPARSER_CPPFLAGS + fi + fi + + unset _uriparser_try_link + unset _uriparser_version_parse + unset _uriparser_version + unset _uriparser_ldflags + fi + + if test x$_uriparser_with = xno || test x$uriparser_cv_lib_uriparser_usable != xyes ; then + # This is the IF-NO path + ifelse([$4],,:,[$4]) + else + # This is the IF-YES path + ifelse([$3],,:,[$3]) + fi + + unset _uriparser_with +])dnl diff --git a/perlmods/Class-Accessor-0.34.tar.gz b/perlmods/Class-Accessor-0.34.tar.gz new file mode 100644 index 0000000..53de057 Binary files /dev/null and b/perlmods/Class-Accessor-0.34.tar.gz differ diff --git a/perlmods/Config-Tiny-2.14.tar.gz b/perlmods/Config-Tiny-2.14.tar.gz new file mode 100644 index 0000000..f0c49d9 Binary files /dev/null and b/perlmods/Config-Tiny-2.14.tar.gz differ diff --git a/perlmods/Makefile b/perlmods/Makefile new file mode 100644 index 0000000..506fb39 --- /dev/null +++ b/perlmods/Makefile @@ -0,0 +1,1514 @@ +# Makefile.in generated by automake 1.11.6 from Makefile.am. +# perlmods/Makefile. Generated from Makefile.in by configure. + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software +# Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + + + +am__make_dryrun = \ + { \ + am__dry=no; \ + case $$MAKEFLAGS in \ + *\\[\ \ ]*) \ + echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \ + | grep '^AM OK$$' >/dev/null || am__dry=yes;; \ + *) \ + for am__flg in $$MAKEFLAGS; do \ + case $$am__flg in \ + *=*|--*) ;; \ + *n*) am__dry=yes; break;; \ + esac; \ + done;; \ + esac; \ + test $$am__dry = yes; \ + } +pkgdatadir = $(datadir)/monitoring-plugins +pkgincludedir = $(includedir)/monitoring-plugins +pkglibdir = $(libdir)/monitoring-plugins +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = x86_64-unknown-linux-gnu +host_triplet = x86_64-unknown-linux-gnu +subdir = perlmods +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/m4/libcurl.m4 \ + $(top_srcdir)/m4/np_mysqlclient.m4 \ + $(top_srcdir)/m4/uriparser.m4 $(top_srcdir)/gl/m4/00gnulib.m4 \ + $(top_srcdir)/gl/m4/alloca.m4 \ + $(top_srcdir)/gl/m4/arpa_inet_h.m4 \ + $(top_srcdir)/gl/m4/base64.m4 $(top_srcdir)/gl/m4/btowc.m4 \ + $(top_srcdir)/gl/m4/codeset.m4 \ + $(top_srcdir)/gl/m4/configmake.m4 \ + $(top_srcdir)/gl/m4/dirname.m4 \ + $(top_srcdir)/gl/m4/double-slash-root.m4 \ + $(top_srcdir)/gl/m4/eealloc.m4 $(top_srcdir)/gl/m4/environ.m4 \ + $(top_srcdir)/gl/m4/errno_h.m4 $(top_srcdir)/gl/m4/error.m4 \ + $(top_srcdir)/gl/m4/exponentd.m4 \ + $(top_srcdir)/gl/m4/extensions.m4 \ + $(top_srcdir)/gl/m4/extern-inline.m4 \ + $(top_srcdir)/gl/m4/fcntl-o.m4 $(top_srcdir)/gl/m4/float_h.m4 \ + $(top_srcdir)/gl/m4/floorf.m4 \ + $(top_srcdir)/gl/m4/fstypename.m4 \ + $(top_srcdir)/gl/m4/fsusage.m4 \ + $(top_srcdir)/gl/m4/getaddrinfo.m4 \ + $(top_srcdir)/gl/m4/gethostname.m4 \ + $(top_srcdir)/gl/m4/getloadavg.m4 \ + $(top_srcdir)/gl/m4/getopt.m4 $(top_srcdir)/gl/m4/gettext.m4 \ + $(top_srcdir)/gl/m4/glibc21.m4 \ + $(top_srcdir)/gl/m4/gnulib-common.m4 \ + $(top_srcdir)/gl/m4/gnulib-comp.m4 \ + $(top_srcdir)/gl/m4/hostent.m4 $(top_srcdir)/gl/m4/iconv.m4 \ + $(top_srcdir)/gl/m4/idpriv.m4 \ + $(top_srcdir)/gl/m4/include_next.m4 \ + $(top_srcdir)/gl/m4/inet_ntop.m4 \ + $(top_srcdir)/gl/m4/intlmacosx.m4 \ + $(top_srcdir)/gl/m4/intmax_t.m4 \ + $(top_srcdir)/gl/m4/inttypes_h.m4 \ + $(top_srcdir)/gl/m4/langinfo_h.m4 \ + $(top_srcdir)/gl/m4/largefile.m4 $(top_srcdir)/gl/m4/lib-ld.m4 \ + $(top_srcdir)/gl/m4/lib-link.m4 \ + $(top_srcdir)/gl/m4/lib-prefix.m4 \ + $(top_srcdir)/gl/m4/libtool.m4 \ + $(top_srcdir)/gl/m4/localcharset.m4 \ + $(top_srcdir)/gl/m4/locale-fr.m4 \ + $(top_srcdir)/gl/m4/locale-ja.m4 \ + $(top_srcdir)/gl/m4/locale-zh.m4 \ + $(top_srcdir)/gl/m4/locale_h.m4 \ + $(top_srcdir)/gl/m4/localeconv.m4 $(top_srcdir)/gl/m4/lock.m4 \ + $(top_srcdir)/gl/m4/longlong.m4 \ + $(top_srcdir)/gl/m4/ls-mntd-fs.m4 \ + $(top_srcdir)/gl/m4/ltoptions.m4 \ + $(top_srcdir)/gl/m4/ltsugar.m4 \ + $(top_srcdir)/gl/m4/ltversion.m4 \ + $(top_srcdir)/gl/m4/lt~obsolete.m4 \ + $(top_srcdir)/gl/m4/malloc.m4 $(top_srcdir)/gl/m4/malloca.m4 \ + $(top_srcdir)/gl/m4/math_h.m4 $(top_srcdir)/gl/m4/mbrtowc.m4 \ + $(top_srcdir)/gl/m4/mbsinit.m4 \ + $(top_srcdir)/gl/m4/mbstate_t.m4 $(top_srcdir)/gl/m4/mbtowc.m4 \ + $(top_srcdir)/gl/m4/memchr.m4 $(top_srcdir)/gl/m4/mktime.m4 \ + $(top_srcdir)/gl/m4/mmap-anon.m4 \ + $(top_srcdir)/gl/m4/mountlist.m4 \ + $(top_srcdir)/gl/m4/msvc-inval.m4 \ + $(top_srcdir)/gl/m4/msvc-nothrow.m4 \ + $(top_srcdir)/gl/m4/multiarch.m4 \ + $(top_srcdir)/gl/m4/netdb_h.m4 \ + $(top_srcdir)/gl/m4/netinet_in_h.m4 \ + $(top_srcdir)/gl/m4/nl_langinfo.m4 $(top_srcdir)/gl/m4/nls.m4 \ + $(top_srcdir)/gl/m4/nocrash.m4 $(top_srcdir)/gl/m4/off_t.m4 \ + $(top_srcdir)/gl/m4/onceonly.m4 $(top_srcdir)/gl/m4/po.m4 \ + $(top_srcdir)/gl/m4/printf.m4 $(top_srcdir)/gl/m4/progtest.m4 \ + $(top_srcdir)/gl/m4/read.m4 $(top_srcdir)/gl/m4/regex.m4 \ + $(top_srcdir)/gl/m4/safe-read.m4 \ + $(top_srcdir)/gl/m4/servent.m4 $(top_srcdir)/gl/m4/setenv.m4 \ + $(top_srcdir)/gl/m4/sha1.m4 $(top_srcdir)/gl/m4/size_max.m4 \ + $(top_srcdir)/gl/m4/snprintf.m4 \ + $(top_srcdir)/gl/m4/socketlib.m4 \ + $(top_srcdir)/gl/m4/sockets.m4 $(top_srcdir)/gl/m4/socklen.m4 \ + $(top_srcdir)/gl/m4/sockpfaf.m4 $(top_srcdir)/gl/m4/ssize_t.m4 \ + $(top_srcdir)/gl/m4/stdalign.m4 $(top_srcdir)/gl/m4/stdbool.m4 \ + $(top_srcdir)/gl/m4/stddef_h.m4 $(top_srcdir)/gl/m4/stdint.m4 \ + $(top_srcdir)/gl/m4/stdint_h.m4 $(top_srcdir)/gl/m4/stdio_h.m4 \ + $(top_srcdir)/gl/m4/stdlib_h.m4 $(top_srcdir)/gl/m4/strcase.m4 \ + $(top_srcdir)/gl/m4/strcasestr.m4 \ + $(top_srcdir)/gl/m4/strerror.m4 \ + $(top_srcdir)/gl/m4/string_h.m4 \ + $(top_srcdir)/gl/m4/strings_h.m4 \ + $(top_srcdir)/gl/m4/strndup.m4 $(top_srcdir)/gl/m4/strnlen.m4 \ + $(top_srcdir)/gl/m4/strsep.m4 $(top_srcdir)/gl/m4/strstr.m4 \ + $(top_srcdir)/gl/m4/sys_socket_h.m4 \ + $(top_srcdir)/gl/m4/sys_types_h.m4 \ + $(top_srcdir)/gl/m4/sys_uio_h.m4 \ + $(top_srcdir)/gl/m4/threadlib.m4 $(top_srcdir)/gl/m4/time_h.m4 \ + $(top_srcdir)/gl/m4/time_r.m4 $(top_srcdir)/gl/m4/timegm.m4 \ + $(top_srcdir)/gl/m4/unistd_h.m4 \ + $(top_srcdir)/gl/m4/vasnprintf.m4 \ + $(top_srcdir)/gl/m4/vasprintf.m4 \ + $(top_srcdir)/gl/m4/vsnprintf.m4 \ + $(top_srcdir)/gl/m4/warn-on-use.m4 \ + $(top_srcdir)/gl/m4/wchar_h.m4 $(top_srcdir)/gl/m4/wchar_t.m4 \ + $(top_srcdir)/gl/m4/wcrtomb.m4 $(top_srcdir)/gl/m4/wctype_h.m4 \ + $(top_srcdir)/gl/m4/wint_t.m4 $(top_srcdir)/gl/m4/xalloc.m4 \ + $(top_srcdir)/gl/m4/xsize.m4 $(top_srcdir)/gl/m4/xstrndup.m4 \ + $(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(SHELL) $(top_srcdir)/build-aux/mkinstalldirs +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +SOURCES = +DIST_SOURCES = +am__can_run_installinfo = \ + case $$AM_UPDATE_INFO_DIR in \ + n|no|NO) false;; \ + *) (install-info --version) >/dev/null 2>&1;; \ + esac +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +pkglibexecdir = ${libexecdir}/${PACKAGE} +ACLOCAL = ${SHELL} /tmp/plugins/build-aux/missing --run aclocal-1.11 +ALLOCA = +ALLOCA_H = alloca.h +AMTAR = $${TAR-tar} +APPLE_UNIVERSAL_BUILD = 0 +AR = ar +ARFLAGS = cru +AUTOCONF = ${SHELL} /tmp/plugins/build-aux/missing --run autoconf +AUTOHEADER = ${SHELL} /tmp/plugins/build-aux/missing --run autoheader +AUTOMAKE = ${SHELL} /tmp/plugins/build-aux/missing --run automake-1.11 +AWK = mawk +BASENAME = /usr/bin/basename +BITSIZEOF_PTRDIFF_T = +BITSIZEOF_SIG_ATOMIC_T = +BITSIZEOF_SIZE_T = +BITSIZEOF_WCHAR_T = +BITSIZEOF_WINT_T = +CC = gcc +CCDEPMODE = depmode=gcc3 +CFLAGS = -g -O2 +CPP = gcc -E +CPPFLAGS = +CYGPATH_W = echo +DBILIBS = -ldbi +DEFS = -DHAVE_CONFIG_H +DEPDIR = .deps +DEPLIBS = +DLLTOOL = false +DSYMUTIL = +DUMPBIN = +ECHO_C = +ECHO_N = -n +ECHO_T = +EGREP = /bin/grep -E +EMULTIHOP_HIDDEN = +EMULTIHOP_VALUE = +ENOLINK_HIDDEN = +ENOLINK_VALUE = +EOVERFLOW_HIDDEN = +EOVERFLOW_VALUE = +ERRNO_H = +EXEEXT = +EXTRAS = check_pgsql$(EXEEXT) check_dbi$(EXEEXT) check_radius$(EXEEXT) check_ldap$(EXEEXT) check_ide_smart$(EXEEXT) check_mysql$(EXEEXT) check_mysql_query$(EXEEXT) check_procs check_nagios$(EXEEXT) check_dns$(EXEEXT) check_hpjd check_snmp$(EXEEXT) check_game$(EXEEXT) check_fping$(EXEEXT) check_by_ssh$(EXEEXT) check_swap$(EXEEXT) check_dig$(EXEEXT) check_apt$(EXEEXT) check_nt$(EXEEXT) +EXTRAS_ROOT = +EXTRA_NETOBJS = +EXTRA_TEST = +FGREP = /bin/grep -F +FLOAT_H = +FLOORF_LIBM = -lm +GETADDRINFO_LIB = +GETHOSTNAME_LIB = +GETLOADAVG_LIBS = +GETOPT_H = getopt.h +GETTEXT_MACRO_VERSION = 0.18 +GLIBC21 = yes +GMSGFMT = /usr/bin/msgfmt +GMSGFMT_015 = /usr/bin/msgfmt +GNULIB_ACCEPT = 0 +GNULIB_ACCEPT4 = 0 +GNULIB_ACOSF = 0 +GNULIB_ACOSL = 0 +GNULIB_ASINF = 0 +GNULIB_ASINL = 0 +GNULIB_ATAN2F = 0 +GNULIB_ATANF = 0 +GNULIB_ATANL = 0 +GNULIB_ATOLL = 0 +GNULIB_BIND = 0 +GNULIB_BTOWC = 1 +GNULIB_CALLOC_POSIX = 0 +GNULIB_CANONICALIZE_FILE_NAME = 0 +GNULIB_CBRT = 0 +GNULIB_CBRTF = 0 +GNULIB_CBRTL = 0 +GNULIB_CEIL = 0 +GNULIB_CEILF = 0 +GNULIB_CEILL = 0 +GNULIB_CHDIR = 0 +GNULIB_CHOWN = 0 +GNULIB_CLOSE = 0 +GNULIB_CONNECT = 0 +GNULIB_COPYSIGN = 0 +GNULIB_COPYSIGNF = 0 +GNULIB_COPYSIGNL = 0 +GNULIB_COSF = 0 +GNULIB_COSHF = 0 +GNULIB_COSL = 0 +GNULIB_DPRINTF = 0 +GNULIB_DUP = 0 +GNULIB_DUP2 = 0 +GNULIB_DUP3 = 0 +GNULIB_DUPLOCALE = 0 +GNULIB_ENVIRON = 1 +GNULIB_EUIDACCESS = 0 +GNULIB_EXP2 = 0 +GNULIB_EXP2F = 0 +GNULIB_EXP2L = 0 +GNULIB_EXPF = 0 +GNULIB_EXPL = 0 +GNULIB_EXPM1 = 0 +GNULIB_EXPM1F = 0 +GNULIB_EXPM1L = 0 +GNULIB_FABSF = 0 +GNULIB_FABSL = 0 +GNULIB_FACCESSAT = 0 +GNULIB_FCHDIR = 0 +GNULIB_FCHOWNAT = 0 +GNULIB_FCLOSE = 0 +GNULIB_FDATASYNC = 0 +GNULIB_FDOPEN = 0 +GNULIB_FFLUSH = 0 +GNULIB_FFS = 0 +GNULIB_FFSL = 0 +GNULIB_FFSLL = 0 +GNULIB_FGETC = 1 +GNULIB_FGETS = 1 +GNULIB_FLOOR = 0 +GNULIB_FLOORF = 1 +GNULIB_FLOORL = 0 +GNULIB_FMA = 0 +GNULIB_FMAF = 0 +GNULIB_FMAL = 0 +GNULIB_FMOD = 0 +GNULIB_FMODF = 0 +GNULIB_FMODL = 0 +GNULIB_FOPEN = 0 +GNULIB_FPRINTF = 1 +GNULIB_FPRINTF_POSIX = 0 +GNULIB_FPURGE = 0 +GNULIB_FPUTC = 1 +GNULIB_FPUTS = 1 +GNULIB_FREAD = 1 +GNULIB_FREOPEN = 0 +GNULIB_FREXP = 0 +GNULIB_FREXPF = 0 +GNULIB_FREXPL = 0 +GNULIB_FSCANF = 1 +GNULIB_FSEEK = 0 +GNULIB_FSEEKO = 0 +GNULIB_FSYNC = 0 +GNULIB_FTELL = 0 +GNULIB_FTELLO = 0 +GNULIB_FTRUNCATE = 0 +GNULIB_FWRITE = 1 +GNULIB_GETADDRINFO = 1 +GNULIB_GETC = 1 +GNULIB_GETCHAR = 1 +GNULIB_GETCWD = 0 +GNULIB_GETDELIM = 0 +GNULIB_GETDOMAINNAME = 0 +GNULIB_GETDTABLESIZE = 0 +GNULIB_GETGROUPS = 0 +GNULIB_GETHOSTNAME = 1 +GNULIB_GETLINE = 0 +GNULIB_GETLOADAVG = 1 +GNULIB_GETLOGIN = 0 +GNULIB_GETLOGIN_R = 0 +GNULIB_GETPAGESIZE = 0 +GNULIB_GETPEERNAME = 0 +GNULIB_GETSOCKNAME = 0 +GNULIB_GETSOCKOPT = 0 +GNULIB_GETSUBOPT = 0 +GNULIB_GETUSERSHELL = 0 +GNULIB_GL_UNISTD_H_GETOPT = 1 +GNULIB_GRANTPT = 0 +GNULIB_GROUP_MEMBER = 0 +GNULIB_HYPOT = 0 +GNULIB_HYPOTF = 0 +GNULIB_HYPOTL = 0 +GNULIB_ILOGB = 0 +GNULIB_ILOGBF = 0 +GNULIB_ILOGBL = 0 +GNULIB_INET_NTOP = 1 +GNULIB_INET_PTON = 0 +GNULIB_ISATTY = 0 +GNULIB_ISFINITE = 0 +GNULIB_ISINF = 0 +GNULIB_ISNAN = 0 +GNULIB_ISNAND = 0 +GNULIB_ISNANF = 0 +GNULIB_ISNANL = 0 +GNULIB_ISWBLANK = 0 +GNULIB_ISWCTYPE = 0 +GNULIB_LCHOWN = 0 +GNULIB_LDEXPF = 0 +GNULIB_LDEXPL = 0 +GNULIB_LINK = 0 +GNULIB_LINKAT = 0 +GNULIB_LISTEN = 0 +GNULIB_LOCALECONV = 1 +GNULIB_LOG = 0 +GNULIB_LOG10 = 0 +GNULIB_LOG10F = 0 +GNULIB_LOG10L = 0 +GNULIB_LOG1P = 0 +GNULIB_LOG1PF = 0 +GNULIB_LOG1PL = 0 +GNULIB_LOG2 = 0 +GNULIB_LOG2F = 0 +GNULIB_LOG2L = 0 +GNULIB_LOGB = 0 +GNULIB_LOGBF = 0 +GNULIB_LOGBL = 0 +GNULIB_LOGF = 0 +GNULIB_LOGL = 0 +GNULIB_LSEEK = 0 +GNULIB_MALLOC_POSIX = 1 +GNULIB_MBRLEN = 0 +GNULIB_MBRTOWC = 1 +GNULIB_MBSCASECMP = 0 +GNULIB_MBSCASESTR = 0 +GNULIB_MBSCHR = 0 +GNULIB_MBSCSPN = 0 +GNULIB_MBSINIT = 1 +GNULIB_MBSLEN = 0 +GNULIB_MBSNCASECMP = 0 +GNULIB_MBSNLEN = 0 +GNULIB_MBSNRTOWCS = 0 +GNULIB_MBSPBRK = 0 +GNULIB_MBSPCASECMP = 0 +GNULIB_MBSRCHR = 0 +GNULIB_MBSRTOWCS = 0 +GNULIB_MBSSEP = 0 +GNULIB_MBSSPN = 0 +GNULIB_MBSSTR = 0 +GNULIB_MBSTOK_R = 0 +GNULIB_MBTOWC = 1 +GNULIB_MEMCHR = 1 +GNULIB_MEMMEM = 0 +GNULIB_MEMPCPY = 0 +GNULIB_MEMRCHR = 0 +GNULIB_MKDTEMP = 0 +GNULIB_MKOSTEMP = 0 +GNULIB_MKOSTEMPS = 0 +GNULIB_MKSTEMP = 0 +GNULIB_MKSTEMPS = 0 +GNULIB_MKTIME = 1 +GNULIB_MODF = 0 +GNULIB_MODFF = 0 +GNULIB_MODFL = 0 +GNULIB_NANOSLEEP = 0 +GNULIB_NL_LANGINFO = 1 +GNULIB_OBSTACK_PRINTF = 0 +GNULIB_OBSTACK_PRINTF_POSIX = 0 +GNULIB_PCLOSE = 0 +GNULIB_PERROR = 0 +GNULIB_PIPE = 0 +GNULIB_PIPE2 = 0 +GNULIB_POPEN = 0 +GNULIB_POSIX_OPENPT = 0 +GNULIB_POWF = 0 +GNULIB_PREAD = 0 +GNULIB_PRINTF = 1 +GNULIB_PRINTF_POSIX = 0 +GNULIB_PTSNAME = 0 +GNULIB_PTSNAME_R = 0 +GNULIB_PUTC = 1 +GNULIB_PUTCHAR = 1 +GNULIB_PUTENV = 0 +GNULIB_PUTS = 1 +GNULIB_PWRITE = 0 +GNULIB_RANDOM = 0 +GNULIB_RANDOM_R = 0 +GNULIB_RAWMEMCHR = 0 +GNULIB_READ = 1 +GNULIB_READLINK = 0 +GNULIB_READLINKAT = 0 +GNULIB_REALLOC_POSIX = 0 +GNULIB_REALPATH = 0 +GNULIB_RECV = 0 +GNULIB_RECVFROM = 0 +GNULIB_REMAINDER = 0 +GNULIB_REMAINDERF = 0 +GNULIB_REMAINDERL = 0 +GNULIB_REMOVE = 0 +GNULIB_RENAME = 0 +GNULIB_RENAMEAT = 0 +GNULIB_RINT = 0 +GNULIB_RINTF = 0 +GNULIB_RINTL = 0 +GNULIB_RMDIR = 0 +GNULIB_ROUND = 0 +GNULIB_ROUNDF = 0 +GNULIB_ROUNDL = 0 +GNULIB_RPMATCH = 0 +GNULIB_SCANF = 1 +GNULIB_SECURE_GETENV = 0 +GNULIB_SEND = 0 +GNULIB_SENDTO = 0 +GNULIB_SETENV = 1 +GNULIB_SETHOSTNAME = 0 +GNULIB_SETLOCALE = 0 +GNULIB_SETSOCKOPT = 0 +GNULIB_SHUTDOWN = 0 +GNULIB_SIGNBIT = 0 +GNULIB_SINF = 0 +GNULIB_SINHF = 0 +GNULIB_SINL = 0 +GNULIB_SLEEP = 0 +GNULIB_SNPRINTF = 1 +GNULIB_SOCKET = 0 +GNULIB_SPRINTF_POSIX = 0 +GNULIB_SQRTF = 0 +GNULIB_SQRTL = 0 +GNULIB_STDIO_H_NONBLOCKING = 0 +GNULIB_STDIO_H_SIGPIPE = 0 +GNULIB_STPCPY = 0 +GNULIB_STPNCPY = 0 +GNULIB_STRCASESTR = 1 +GNULIB_STRCHRNUL = 0 +GNULIB_STRDUP = 0 +GNULIB_STRERROR = 1 +GNULIB_STRERROR_R = 0 +GNULIB_STRNCAT = 0 +GNULIB_STRNDUP = 1 +GNULIB_STRNLEN = 1 +GNULIB_STRPBRK = 0 +GNULIB_STRPTIME = 0 +GNULIB_STRSEP = 1 +GNULIB_STRSIGNAL = 0 +GNULIB_STRSTR = 1 +GNULIB_STRTOD = 0 +GNULIB_STRTOK_R = 0 +GNULIB_STRTOLL = 0 +GNULIB_STRTOULL = 0 +GNULIB_STRVERSCMP = 0 +GNULIB_SYMLINK = 0 +GNULIB_SYMLINKAT = 0 +GNULIB_SYSTEM_POSIX = 0 +GNULIB_TANF = 0 +GNULIB_TANHF = 0 +GNULIB_TANL = 0 +GNULIB_TIMEGM = 1 +GNULIB_TIME_R = 1 +GNULIB_TMPFILE = 0 +GNULIB_TOWCTRANS = 0 +GNULIB_TRUNC = 0 +GNULIB_TRUNCF = 0 +GNULIB_TRUNCL = 0 +GNULIB_TTYNAME_R = 0 +GNULIB_UNISTD_H_NONBLOCKING = 0 +GNULIB_UNISTD_H_SIGPIPE = 0 +GNULIB_UNLINK = 0 +GNULIB_UNLINKAT = 0 +GNULIB_UNLOCKPT = 0 +GNULIB_UNSETENV = 1 +GNULIB_USLEEP = 0 +GNULIB_VASPRINTF = 1 +GNULIB_VDPRINTF = 0 +GNULIB_VFPRINTF = 1 +GNULIB_VFPRINTF_POSIX = 0 +GNULIB_VFSCANF = 0 +GNULIB_VPRINTF = 1 +GNULIB_VPRINTF_POSIX = 0 +GNULIB_VSCANF = 0 +GNULIB_VSNPRINTF = 1 +GNULIB_VSPRINTF_POSIX = 0 +GNULIB_WCPCPY = 0 +GNULIB_WCPNCPY = 0 +GNULIB_WCRTOMB = 1 +GNULIB_WCSCASECMP = 0 +GNULIB_WCSCAT = 0 +GNULIB_WCSCHR = 0 +GNULIB_WCSCMP = 0 +GNULIB_WCSCOLL = 0 +GNULIB_WCSCPY = 0 +GNULIB_WCSCSPN = 0 +GNULIB_WCSDUP = 0 +GNULIB_WCSLEN = 0 +GNULIB_WCSNCASECMP = 0 +GNULIB_WCSNCAT = 0 +GNULIB_WCSNCMP = 0 +GNULIB_WCSNCPY = 0 +GNULIB_WCSNLEN = 0 +GNULIB_WCSNRTOMBS = 0 +GNULIB_WCSPBRK = 0 +GNULIB_WCSRCHR = 0 +GNULIB_WCSRTOMBS = 0 +GNULIB_WCSSPN = 0 +GNULIB_WCSSTR = 0 +GNULIB_WCSTOK = 0 +GNULIB_WCSWIDTH = 0 +GNULIB_WCSXFRM = 0 +GNULIB_WCTOB = 0 +GNULIB_WCTOMB = 0 +GNULIB_WCTRANS = 0 +GNULIB_WCTYPE = 0 +GNULIB_WCWIDTH = 0 +GNULIB_WMEMCHR = 0 +GNULIB_WMEMCMP = 0 +GNULIB_WMEMCPY = 0 +GNULIB_WMEMMOVE = 0 +GNULIB_WMEMSET = 0 +GNULIB_WRITE = 0 +GNULIB__EXIT = 0 +GREP = /bin/grep +HAVE_ACCEPT4 = 1 +HAVE_ACOSF = 1 +HAVE_ACOSL = 1 +HAVE_ARPA_INET_H = 1 +HAVE_ASINF = 1 +HAVE_ASINL = 1 +HAVE_ATAN2F = 1 +HAVE_ATANF = 1 +HAVE_ATANL = 1 +HAVE_ATOLL = 1 +HAVE_BTOWC = 1 +HAVE_CANONICALIZE_FILE_NAME = 1 +HAVE_CBRT = 1 +HAVE_CBRTF = 1 +HAVE_CBRTL = 1 +HAVE_CHOWN = 1 +HAVE_COPYSIGN = 1 +HAVE_COPYSIGNL = 1 +HAVE_COSF = 1 +HAVE_COSHF = 1 +HAVE_COSL = 1 +HAVE_DECL_ACOSL = 1 +HAVE_DECL_ASINL = 1 +HAVE_DECL_ATANL = 1 +HAVE_DECL_CBRTF = 1 +HAVE_DECL_CBRTL = 1 +HAVE_DECL_CEILF = 1 +HAVE_DECL_CEILL = 1 +HAVE_DECL_COPYSIGNF = 1 +HAVE_DECL_COSL = 1 +HAVE_DECL_ENVIRON = 1 +HAVE_DECL_EXP2 = 1 +HAVE_DECL_EXP2F = 1 +HAVE_DECL_EXP2L = 1 +HAVE_DECL_EXPL = 1 +HAVE_DECL_EXPM1L = 1 +HAVE_DECL_FCHDIR = 1 +HAVE_DECL_FDATASYNC = 1 +HAVE_DECL_FLOORF = 1 +HAVE_DECL_FLOORL = 1 +HAVE_DECL_FPURGE = 1 +HAVE_DECL_FREEADDRINFO = 1 +HAVE_DECL_FREXPL = 1 +HAVE_DECL_FSEEKO = 1 +HAVE_DECL_FTELLO = 1 +HAVE_DECL_GAI_STRERROR = 1 +HAVE_DECL_GETADDRINFO = 1 +HAVE_DECL_GETDELIM = 1 +HAVE_DECL_GETDOMAINNAME = 1 +HAVE_DECL_GETLINE = 1 +HAVE_DECL_GETLOADAVG = 1 +HAVE_DECL_GETLOGIN_R = 1 +HAVE_DECL_GETNAMEINFO = 1 +HAVE_DECL_GETPAGESIZE = 1 +HAVE_DECL_GETUSERSHELL = 1 +HAVE_DECL_INET_NTOP = 1 +HAVE_DECL_INET_PTON = 1 +HAVE_DECL_LDEXPL = 1 +HAVE_DECL_LOCALTIME_R = 1 +HAVE_DECL_LOG10L = 1 +HAVE_DECL_LOG2 = 1 +HAVE_DECL_LOG2F = 1 +HAVE_DECL_LOG2L = 1 +HAVE_DECL_LOGB = 1 +HAVE_DECL_LOGL = 1 +HAVE_DECL_MEMMEM = 1 +HAVE_DECL_MEMRCHR = 1 +HAVE_DECL_OBSTACK_PRINTF = 1 +HAVE_DECL_REMAINDER = 1 +HAVE_DECL_REMAINDERL = 1 +HAVE_DECL_RINTF = 1 +HAVE_DECL_ROUND = 1 +HAVE_DECL_ROUNDF = 1 +HAVE_DECL_ROUNDL = 1 +HAVE_DECL_SETENV = 1 +HAVE_DECL_SETHOSTNAME = 1 +HAVE_DECL_SINL = 1 +HAVE_DECL_SNPRINTF = 1 +HAVE_DECL_SQRTL = 1 +HAVE_DECL_STRDUP = 1 +HAVE_DECL_STRERROR_R = 1 +HAVE_DECL_STRNCASECMP = 1 +HAVE_DECL_STRNDUP = 1 +HAVE_DECL_STRNLEN = 1 +HAVE_DECL_STRSIGNAL = 1 +HAVE_DECL_STRTOK_R = 1 +HAVE_DECL_TANL = 1 +HAVE_DECL_TRUNC = 1 +HAVE_DECL_TRUNCF = 1 +HAVE_DECL_TRUNCL = 1 +HAVE_DECL_TTYNAME_R = 1 +HAVE_DECL_UNSETENV = 1 +HAVE_DECL_VSNPRINTF = 1 +HAVE_DECL_WCTOB = 1 +HAVE_DECL_WCWIDTH = 1 +HAVE_DPRINTF = 1 +HAVE_DUP2 = 1 +HAVE_DUP3 = 1 +HAVE_DUPLOCALE = 1 +HAVE_EUIDACCESS = 1 +HAVE_EXPF = 1 +HAVE_EXPL = 1 +HAVE_EXPM1 = 1 +HAVE_EXPM1F = 1 +HAVE_FABSF = 1 +HAVE_FABSL = 1 +HAVE_FACCESSAT = 1 +HAVE_FCHDIR = 1 +HAVE_FCHOWNAT = 1 +HAVE_FDATASYNC = 1 +HAVE_FEATURES_H = 1 +HAVE_FFS = 1 +HAVE_FFSL = 1 +HAVE_FFSLL = 1 +HAVE_FMA = 1 +HAVE_FMAF = 1 +HAVE_FMAL = 1 +HAVE_FMODF = 1 +HAVE_FMODL = 1 +HAVE_FREXPF = 1 +HAVE_FSEEKO = 1 +HAVE_FSYNC = 1 +HAVE_FTELLO = 1 +HAVE_FTRUNCATE = 1 +HAVE_GETDTABLESIZE = 1 +HAVE_GETGROUPS = 1 +HAVE_GETHOSTNAME = 1 +HAVE_GETLOGIN = 1 +HAVE_GETOPT_H = 1 +HAVE_GETPAGESIZE = 1 +HAVE_GETSUBOPT = 1 +HAVE_GRANTPT = 1 +HAVE_GROUP_MEMBER = 1 +HAVE_HYPOTF = 1 +HAVE_HYPOTL = 1 +HAVE_ILOGB = 1 +HAVE_ILOGBF = 1 +HAVE_ILOGBL = 1 +HAVE_INTTYPES_H = 1 +HAVE_ISNAND = 1 +HAVE_ISNANF = 1 +HAVE_ISNANL = 1 +HAVE_ISWBLANK = 1 +HAVE_ISWCNTRL = 1 +HAVE_LANGINFO_CODESET = 1 +HAVE_LANGINFO_ERA = 1 +HAVE_LANGINFO_H = 1 +HAVE_LANGINFO_T_FMT_AMPM = 1 +HAVE_LANGINFO_YESEXPR = 1 +HAVE_LCHOWN = 1 +HAVE_LDEXPF = 1 +HAVE_LINK = 1 +HAVE_LINKAT = 1 +HAVE_LOG10F = 1 +HAVE_LOG10L = 1 +HAVE_LOG1P = 1 +HAVE_LOG1PF = 1 +HAVE_LOG1PL = 1 +HAVE_LOGBF = 1 +HAVE_LOGBL = 1 +HAVE_LOGF = 1 +HAVE_LOGL = 1 +HAVE_LONG_LONG_INT = 1 +HAVE_MBRLEN = 1 +HAVE_MBRTOWC = 1 +HAVE_MBSINIT = 1 +HAVE_MBSLEN = 0 +HAVE_MBSNRTOWCS = 1 +HAVE_MBSRTOWCS = 1 +HAVE_MEMCHR = 1 +HAVE_MEMPCPY = 1 +HAVE_MKDTEMP = 1 +HAVE_MKOSTEMP = 1 +HAVE_MKOSTEMPS = 1 +HAVE_MKSTEMP = 1 +HAVE_MKSTEMPS = 1 +HAVE_MODFF = 1 +HAVE_MODFL = 1 +HAVE_MSVC_INVALID_PARAMETER_HANDLER = 0 +HAVE_NANOSLEEP = 1 +HAVE_NETDB_H = 1 +HAVE_NETINET_IN_H = +HAVE_NL_LANGINFO = 1 +HAVE_OS_H = 0 +HAVE_PCLOSE = 1 +HAVE_PIPE = 1 +HAVE_PIPE2 = 1 +HAVE_POPEN = 1 +HAVE_POSIX_OPENPT = 1 +HAVE_POWF = 1 +HAVE_PREAD = 1 +HAVE_PTSNAME = 1 +HAVE_PTSNAME_R = 1 +HAVE_PWRITE = 1 +HAVE_RANDOM = 1 +HAVE_RANDOM_H = 1 +HAVE_RANDOM_R = 1 +HAVE_RAWMEMCHR = 1 +HAVE_READLINK = 1 +HAVE_READLINKAT = 1 +HAVE_REALPATH = 1 +HAVE_REMAINDER = 1 +HAVE_REMAINDERF = 1 +HAVE_RENAMEAT = 1 +HAVE_RINT = 1 +HAVE_RINTL = 1 +HAVE_RPMATCH = 1 +HAVE_SA_FAMILY_T = 1 +HAVE_SECURE_GETENV = 1 +HAVE_SETENV = 1 +HAVE_SETHOSTNAME = 1 +HAVE_SIGNED_SIG_ATOMIC_T = +HAVE_SIGNED_WCHAR_T = +HAVE_SIGNED_WINT_T = +HAVE_SINF = 1 +HAVE_SINHF = 1 +HAVE_SINL = 1 +HAVE_SLEEP = 1 +HAVE_SQRTF = 1 +HAVE_SQRTL = 1 +HAVE_STDINT_H = 1 +HAVE_STPCPY = 1 +HAVE_STPNCPY = 1 +HAVE_STRCASECMP = 1 +HAVE_STRCASESTR = 1 +HAVE_STRCHRNUL = 1 +HAVE_STRINGS_H = 1 +HAVE_STRPBRK = 1 +HAVE_STRPTIME = 1 +HAVE_STRSEP = 1 +HAVE_STRTOD = 1 +HAVE_STRTOLL = 1 +HAVE_STRTOULL = 1 +HAVE_STRUCT_ADDRINFO = 1 +HAVE_STRUCT_RANDOM_DATA = 1 +HAVE_STRUCT_SOCKADDR_STORAGE = 1 +HAVE_STRUCT_SOCKADDR_STORAGE_SS_FAMILY = 1 +HAVE_STRVERSCMP = 1 +HAVE_SYMLINK = 1 +HAVE_SYMLINKAT = 1 +HAVE_SYS_BITYPES_H = +HAVE_SYS_INTTYPES_H = +HAVE_SYS_LOADAVG_H = 0 +HAVE_SYS_PARAM_H = 0 +HAVE_SYS_SOCKET_H = 1 +HAVE_SYS_TYPES_H = 1 +HAVE_SYS_UIO_H = 1 +HAVE_TANF = 1 +HAVE_TANHF = 1 +HAVE_TANL = 1 +HAVE_TIMEGM = 1 +HAVE_UNISTD_H = 1 +HAVE_UNLINKAT = 1 +HAVE_UNLOCKPT = 1 +HAVE_UNSIGNED_LONG_LONG_INT = 1 +HAVE_USLEEP = 1 +HAVE_VASPRINTF = 1 +HAVE_VDPRINTF = 1 +HAVE_WCHAR_H = 1 +HAVE_WCHAR_T = 1 +HAVE_WCPCPY = 1 +HAVE_WCPNCPY = 1 +HAVE_WCRTOMB = 1 +HAVE_WCSCASECMP = 1 +HAVE_WCSCAT = 1 +HAVE_WCSCHR = 1 +HAVE_WCSCMP = 1 +HAVE_WCSCOLL = 1 +HAVE_WCSCPY = 1 +HAVE_WCSCSPN = 1 +HAVE_WCSDUP = 1 +HAVE_WCSLEN = 1 +HAVE_WCSNCASECMP = 1 +HAVE_WCSNCAT = 1 +HAVE_WCSNCMP = 1 +HAVE_WCSNCPY = 1 +HAVE_WCSNLEN = 1 +HAVE_WCSNRTOMBS = 1 +HAVE_WCSPBRK = 1 +HAVE_WCSRCHR = 1 +HAVE_WCSRTOMBS = 1 +HAVE_WCSSPN = 1 +HAVE_WCSSTR = 1 +HAVE_WCSTOK = 1 +HAVE_WCSWIDTH = 1 +HAVE_WCSXFRM = 1 +HAVE_WCTRANS_T = 1 +HAVE_WCTYPE_H = 1 +HAVE_WCTYPE_T = 1 +HAVE_WINSOCK2_H = 0 +HAVE_WINT_T = 1 +HAVE_WMEMCHR = 1 +HAVE_WMEMCMP = 1 +HAVE_WMEMCPY = 1 +HAVE_WMEMMOVE = 1 +HAVE_WMEMSET = 1 +HAVE_WS2TCPIP_H = 0 +HAVE_XLOCALE_H = 1 +HAVE__BOOL = 1 +HAVE__EXIT = 1 +HOSTENT_LIB = +HOSTNAME = /bin/hostname +INCLUDE_NEXT = include_next +INCLUDE_NEXT_AS_FIRST_DIRECTIVE = include_next +INET_NTOP_LIB = +INSTALL = /usr/bin/install -c +INSTALL_DATA = ${INSTALL} -m 644 +INSTALL_PROGRAM = ${INSTALL} +INSTALL_SCRIPT = ${INSTALL} +INSTALL_STRIP_PROGRAM = $(install_sh) -c -s +INTLLIBS = +INTL_MACOSX_LIBS = +KRBINCLUDE = +LD = /usr/bin/ld -m elf_x86_64 +LDAPINCLUDE = -I/usr/include/ldap +LDAPLIBS = -lldap -llber +LDFLAGS = -L. +LIBCURL = +LIBCURLCFLAGS = +LIBCURLINCLUDE = +LIBCURLLIBS = +LIBCURL_CPPFLAGS = +LIBGNU_LIBDEPS = +LIBGNU_LTLIBDEPS = +LIBICONV = -liconv +LIBINTL = +LIBMULTITHREAD = -lpthread +LIBOBJS = +LIBPTH = +LIBPTH_PREFIX = +LIBS = -lpthread -ldl +LIBSOCKET = +LIBTHREAD = +LIBTOOL = $(SHELL) $(top_builddir)/libtool +LIPO = +LN_S = ln -s +LOCALCHARSET_TESTS_ENVIRONMENT = CHARSETALIASDIR="$(abs_top_builddir)/gl" +LOCALE_FR = none +LOCALE_FR_UTF8 = none +LOCALE_JA = none +LOCALE_ZH_CN = none +LTLIBICONV = -liconv +LTLIBINTL = +LTLIBMULTITHREAD = -lpthread +LTLIBOBJS = +LTLIBPTH = +LTLIBTHREAD = +MAINT = +MAKEINFO = ${SHELL} /tmp/plugins/build-aux/missing --run makeinfo +MANIFEST_TOOL = : +MATHLIBS = -lm +MKDIR_P = /bin/mkdir -p +MSGFMT = /usr/bin/msgfmt +MSGFMT_015 = /usr/bin/msgfmt +MSGMERGE = /usr/bin/msgmerge +MYSQLCFLAGS = -I/usr/include/mysql -DBIG_JOINS=1 -fno-strict-aliasing -g +MYSQLINCLUDE = -I/usr/include/mysql +MYSQLLIBS = -L/usr/lib/x86_64-linux-gnu -lmysqlclient -lpthread -lz -lm -lrt -ldl +NETINET_IN_H = +NEXT_ARPA_INET_H = +NEXT_AS_FIRST_DIRECTIVE_ARPA_INET_H = +NEXT_AS_FIRST_DIRECTIVE_ERRNO_H = +NEXT_AS_FIRST_DIRECTIVE_FLOAT_H = +NEXT_AS_FIRST_DIRECTIVE_GETOPT_H = +NEXT_AS_FIRST_DIRECTIVE_LANGINFO_H = +NEXT_AS_FIRST_DIRECTIVE_LOCALE_H = +NEXT_AS_FIRST_DIRECTIVE_MATH_H = +NEXT_AS_FIRST_DIRECTIVE_NETDB_H = +NEXT_AS_FIRST_DIRECTIVE_NETINET_IN_H = +NEXT_AS_FIRST_DIRECTIVE_STDDEF_H = +NEXT_AS_FIRST_DIRECTIVE_STDINT_H = +NEXT_AS_FIRST_DIRECTIVE_STDIO_H = +NEXT_AS_FIRST_DIRECTIVE_STDLIB_H = +NEXT_AS_FIRST_DIRECTIVE_STRINGS_H = +NEXT_AS_FIRST_DIRECTIVE_STRING_H = +NEXT_AS_FIRST_DIRECTIVE_SYS_SOCKET_H = +NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H = +NEXT_AS_FIRST_DIRECTIVE_SYS_UIO_H = +NEXT_AS_FIRST_DIRECTIVE_TIME_H = +NEXT_AS_FIRST_DIRECTIVE_UNISTD_H = +NEXT_AS_FIRST_DIRECTIVE_WCHAR_H = +NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H = +NEXT_ERRNO_H = +NEXT_FLOAT_H = +NEXT_GETOPT_H = +NEXT_LANGINFO_H = +NEXT_LOCALE_H = +NEXT_MATH_H = +NEXT_NETDB_H = +NEXT_NETINET_IN_H = +NEXT_STDDEF_H = +NEXT_STDINT_H = +NEXT_STDIO_H = +NEXT_STDLIB_H = +NEXT_STRINGS_H = +NEXT_STRING_H = +NEXT_SYS_SOCKET_H = +NEXT_SYS_TYPES_H = +NEXT_SYS_UIO_H = +NEXT_TIME_H = +NEXT_UNISTD_H = +NEXT_WCHAR_H = +NEXT_WCTYPE_H = +NM = /usr/bin/nm -B +NMEDIT = +NP_RELEASE = 2.3 +OBJDUMP = objdump +OBJEXT = o +OTOOL = +OTOOL64 = +PACKAGE = monitoring-plugins +PACKAGE_BUGREPORT = +PACKAGE_NAME = monitoring-plugins +PACKAGE_STRING = monitoring-plugins 2.3 +PACKAGE_TARNAME = monitoring-plugins +PACKAGE_URL = +PACKAGE_VERSION = 2.3 +PATH_SEPARATOR = : +PATH_TO_APTGET = /usr/bin/apt-get +PATH_TO_DIG = /usr/bin/dig +PATH_TO_ENV = /usr/bin/env +PATH_TO_FPING = /usr/bin/fping +PATH_TO_FPING6 = /usr/bin/fping6 +PATH_TO_LMSTAT = +PATH_TO_LSPS = +PATH_TO_MAILQ = /usr/bin/mailq +PATH_TO_NSLOOKUP = /usr/bin/nslookup +PATH_TO_PING = /bin/ping +PATH_TO_PING6 = /bin/ping6 +PATH_TO_PS = /bin/ps +PATH_TO_QMAIL_QSTAT = /usr/sbin/qmail-qstat +PATH_TO_QSTAT = +PATH_TO_QUAKESTAT = /usr/bin/quakestat +PATH_TO_RPCINFO = /usr/bin/rpcinfo +PATH_TO_SMBCLIENT = /usr/bin/smbclient +PATH_TO_SNMPGET = /usr/bin/snmpget +PATH_TO_SNMPGETNEXT = /usr/bin/snmpgetnext +PATH_TO_SSH = /usr/bin/ssh +PATH_TO_SUDO = /usr/bin/sudo +PATH_TO_SWAP = +PATH_TO_SWAPINFO = +PATH_TO_UPTIME = /usr/bin/uptime +PATH_TO_WHO = +PERL = /usr/bin/perl +PERLMODS_DIR = +PGINCLUDE = -I/usr/include/postgresql +PGLIBS = -L/lib -lpq -lcrypt +PKGCONFIG = pkg-config +PKG_ARCH = unknown +PLUGIN_TEST = t/check_apt.t t/check_by_ssh.t t/check_cluster.t t/check_curl.t t/check_dbi.t t/check_dig.t t/check_disk.t t/check_dns.t t/check_dummy.t t/check_fping.t t/check_ftp.t t/check_hpjd.t t/check_http.t t/check_imap.t t/check_jabber.t t/check_ldap.t t/check_load.t t/check_mysql.t t/check_mysql_query.t t/check_nagios.t t/check_ntp.t t/check_ping.t t/check_pop.t t/check_procs.t t/check_smtp.t t/check_snmp.t t/check_ssh.t t/check_swap.t t/check_tcp.t t/check_time.t t/check_udp.t t/check_users.t t/negate.t +POSUB = po +POW_LIB = +PRAGMA_COLUMNS = +PRAGMA_SYSTEM_HEADER = #pragma GCC system_header +PST3CFLAGS = +PTHREAD_H_DEFINES_STRUCT_TIMESPEC = 0 +PTRDIFF_T_SUFFIX = +RADIUSLIBS = -lfreeradius-client +RANLIB = ranlib +RELEASE = 1 +REPLACE_BTOWC = 0 +REPLACE_CALLOC = 0 +REPLACE_CANONICALIZE_FILE_NAME = 0 +REPLACE_CBRTF = 0 +REPLACE_CBRTL = 0 +REPLACE_CEIL = 0 +REPLACE_CEILF = 0 +REPLACE_CEILL = 0 +REPLACE_CHOWN = 0 +REPLACE_CLOSE = 0 +REPLACE_DPRINTF = 0 +REPLACE_DUP = 0 +REPLACE_DUP2 = 0 +REPLACE_DUPLOCALE = 0 +REPLACE_EXP2 = 0 +REPLACE_EXP2L = 0 +REPLACE_EXPM1 = 0 +REPLACE_EXPM1F = 0 +REPLACE_FABSL = 0 +REPLACE_FCHOWNAT = 0 +REPLACE_FCLOSE = 0 +REPLACE_FDOPEN = 0 +REPLACE_FFLUSH = 0 +REPLACE_FLOOR = 0 +REPLACE_FLOORF = 0 +REPLACE_FLOORL = 0 +REPLACE_FMA = 0 +REPLACE_FMAF = 0 +REPLACE_FMAL = 0 +REPLACE_FMOD = 0 +REPLACE_FMODF = 0 +REPLACE_FMODL = 0 +REPLACE_FOPEN = 0 +REPLACE_FPRINTF = 0 +REPLACE_FPURGE = 0 +REPLACE_FREOPEN = 0 +REPLACE_FREXP = 0 +REPLACE_FREXPF = 0 +REPLACE_FREXPL = 0 +REPLACE_FSEEK = 0 +REPLACE_FSEEKO = 0 +REPLACE_FTELL = 0 +REPLACE_FTELLO = 0 +REPLACE_FTRUNCATE = 0 +REPLACE_GAI_STRERROR = 0 +REPLACE_GETCWD = 0 +REPLACE_GETDELIM = 0 +REPLACE_GETDOMAINNAME = 0 +REPLACE_GETGROUPS = 0 +REPLACE_GETLINE = 0 +REPLACE_GETLOGIN_R = 0 +REPLACE_GETPAGESIZE = 0 +REPLACE_HUGE_VAL = 0 +REPLACE_HYPOT = 0 +REPLACE_HYPOTF = 0 +REPLACE_HYPOTL = 0 +REPLACE_ILOGB = 0 +REPLACE_ILOGBF = 0 +REPLACE_INET_NTOP = 0 +REPLACE_INET_PTON = 0 +REPLACE_ISATTY = 0 +REPLACE_ISFINITE = 0 +REPLACE_ISINF = 0 +REPLACE_ISNAN = 0 +REPLACE_ISWBLANK = 0 +REPLACE_ISWCNTRL = 0 +REPLACE_ITOLD = 0 +REPLACE_LCHOWN = 0 +REPLACE_LDEXPL = 0 +REPLACE_LINK = 0 +REPLACE_LINKAT = 0 +REPLACE_LOCALECONV = 0 +REPLACE_LOCALTIME_R = 0 +REPLACE_LOG = 0 +REPLACE_LOG10 = 0 +REPLACE_LOG10F = 0 +REPLACE_LOG10L = 0 +REPLACE_LOG1P = 0 +REPLACE_LOG1PF = 0 +REPLACE_LOG1PL = 0 +REPLACE_LOG2 = 0 +REPLACE_LOG2F = 0 +REPLACE_LOG2L = 0 +REPLACE_LOGB = 0 +REPLACE_LOGBF = 0 +REPLACE_LOGBL = 0 +REPLACE_LOGF = 0 +REPLACE_LOGL = 0 +REPLACE_LSEEK = 0 +REPLACE_MALLOC = 0 +REPLACE_MBRLEN = 0 +REPLACE_MBRTOWC = 0 +REPLACE_MBSINIT = 0 +REPLACE_MBSNRTOWCS = 0 +REPLACE_MBSRTOWCS = 0 +REPLACE_MBSTATE_T = 0 +REPLACE_MBTOWC = 0 +REPLACE_MEMCHR = 0 +REPLACE_MEMMEM = 0 +REPLACE_MKSTEMP = 0 +REPLACE_MKTIME = 1 +REPLACE_MODF = 0 +REPLACE_MODFF = 0 +REPLACE_MODFL = 0 +REPLACE_NAN = 0 +REPLACE_NANOSLEEP = GNULIB_PORTCHECK +REPLACE_NL_LANGINFO = 0 +REPLACE_NULL = 0 +REPLACE_OBSTACK_PRINTF = 0 +REPLACE_PERROR = 0 +REPLACE_POPEN = 0 +REPLACE_PREAD = 0 +REPLACE_PRINTF = 0 +REPLACE_PTSNAME = 0 +REPLACE_PTSNAME_R = 0 +REPLACE_PUTENV = 0 +REPLACE_PWRITE = 0 +REPLACE_RANDOM_R = 0 +REPLACE_READ = 0 +REPLACE_READLINK = 0 +REPLACE_REALLOC = 0 +REPLACE_REALPATH = 0 +REPLACE_REMAINDER = 0 +REPLACE_REMAINDERF = 0 +REPLACE_REMAINDERL = 0 +REPLACE_REMOVE = 0 +REPLACE_RENAME = 0 +REPLACE_RENAMEAT = 0 +REPLACE_RMDIR = 0 +REPLACE_ROUND = 0 +REPLACE_ROUNDF = 0 +REPLACE_ROUNDL = 0 +REPLACE_SETENV = 0 +REPLACE_SETLOCALE = 0 +REPLACE_SIGNBIT = 0 +REPLACE_SIGNBIT_USING_GCC = 0 +REPLACE_SLEEP = 0 +REPLACE_SNPRINTF = 0 +REPLACE_SPRINTF = 0 +REPLACE_SQRTL = 0 +REPLACE_STDIO_READ_FUNCS = 0 +REPLACE_STDIO_WRITE_FUNCS = 0 +REPLACE_STPNCPY = 0 +REPLACE_STRCASESTR = 0 +REPLACE_STRCHRNUL = 0 +REPLACE_STRDUP = 0 +REPLACE_STRERROR = 0 +REPLACE_STRERROR_R = 0 +REPLACE_STRNCAT = 0 +REPLACE_STRNDUP = 0 +REPLACE_STRNLEN = 0 +REPLACE_STRSIGNAL = 0 +REPLACE_STRSTR = 0 +REPLACE_STRTOD = 0 +REPLACE_STRTOK_R = 0 +REPLACE_STRUCT_LCONV = 0 +REPLACE_SYMLINK = 0 +REPLACE_TIMEGM = 0 +REPLACE_TMPFILE = 0 +REPLACE_TOWLOWER = 0 +REPLACE_TRUNC = 0 +REPLACE_TRUNCF = 0 +REPLACE_TRUNCL = 0 +REPLACE_TTYNAME_R = 0 +REPLACE_UNLINK = 0 +REPLACE_UNLINKAT = 0 +REPLACE_UNSETENV = 0 +REPLACE_USLEEP = 0 +REPLACE_VASPRINTF = 0 +REPLACE_VDPRINTF = 0 +REPLACE_VFPRINTF = 0 +REPLACE_VPRINTF = 0 +REPLACE_VSNPRINTF = 0 +REPLACE_VSPRINTF = 0 +REPLACE_WCRTOMB = 0 +REPLACE_WCSNRTOMBS = 0 +REPLACE_WCSRTOMBS = 0 +REPLACE_WCSWIDTH = 0 +REPLACE_WCTOB = 0 +REPLACE_WCTOMB = 0 +REPLACE_WCWIDTH = 0 +REPLACE_WRITE = 0 +REV_DATESTAMP = 2020.12.09.22.48 +REV_TIMESTAMP = 20201209224822 +SCRIPT_TEST = t/check_disk_smb.t t/check_file_age.t t/check_ifoperstatus.t t/check_ifstatus.t t/check_rpc.t t/check_uptime.t t/utils.t +SED = /bin/sed +SERVENT_LIB = +SET_MAKE = +SHELL = /bin/bash +SIG_ATOMIC_T_SUFFIX = +SIZE_T_SUFFIX = +SOCKETLIBS = -lnsl -lresolv +SSLINCLUDE = -I/usr/include +SSLLIBS = -lssl -lcrypto +STDALIGN_H = +STDBOOL_H = +STDDEF_H = +STDINT_H = +STRIP = strip +SUPPORT = Send email to help@monitoring-plugins.org if you have questions regarding use\nof this software. To submit patches or suggest improvements, send email to\ndevel@monitoring-plugins.org. Please include version information with all\ncorrespondence (when possible, use output from the --version option of the\nplugin itself).\n +SYS_TIME_H_DEFINES_STRUCT_TIMESPEC = 0 +TIME_H_DEFINES_STRUCT_TIMESPEC = 1 +UNDEFINE_STRTOK_R = 0 +UNISTD_H_HAVE_WINSOCK2_H = 0 +UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS = 0 +URIPARSER = +URIPARSERCFLAGS = +URIPARSERINCLUDE = +URIPARSERLIBS = +URIPARSER_CPPFLAGS = +USE_NLS = yes +VERSION = 2.3 +WARRANTY = The Monitoring Plugins come with ABSOLUTELY NO WARRANTY. You may redistribute\ncopies of the plugins under the terms of the GNU General Public License.\nFor more information about these matters, see the file named COPYING.\n +WCHAR_T_SUFFIX = +WINDOWS_64_BIT_OFF_T = 0 +WINT_T_SUFFIX = +WTSAPI32LIBS = +XGETTEXT = /usr/bin/xgettext +XGETTEXT_015 = /usr/bin/xgettext +XGETTEXT_EXTRA_OPTIONS = --flag=error:3:c-format --flag=error_at_line:5:c-format --flag=asprintf:2:c-format --flag=vasprintf:2:c-format +_libcurl_config = +abs_builddir = /tmp/plugins/perlmods +abs_srcdir = /tmp/plugins/perlmods +abs_top_builddir = /tmp/plugins +abs_top_srcdir = /tmp/plugins +ac_ct_AR = ar +ac_ct_CC = gcc +ac_ct_DUMPBIN = +am__include = include +am__leading_dot = . +am__quote = +am__tar = $${TAR-tar} chof - "$$tardir" +am__untar = $${TAR-tar} xf - +bindir = ${exec_prefix}/bin +build = x86_64-unknown-linux-gnu +build_alias = +build_cpu = x86_64 +build_os = linux-gnu +build_vendor = unknown +builddir = . +check_tcp_ssl = check_simap check_spop check_jabber check_nntps check_ssmtp +datadir = ${datarootdir} +datarootdir = ${prefix}/share +docdir = ${datarootdir}/doc/${PACKAGE_TARNAME} +dvidir = ${docdir} +exec_prefix = ${prefix} +gl_LIBOBJS = asnprintf.o fsusage.o getopt.o getopt1.o mktime.o mountlist.o printf-args.o printf-parse.o vasnprintf.o +gl_LTLIBOBJS = asnprintf.lo fsusage.lo getopt.lo getopt1.lo mktime.lo mountlist.lo printf-args.lo printf-parse.lo vasnprintf.lo +gltests_LIBOBJS = +gltests_LTLIBOBJS = +gltests_WITNESS = IN_MONITORING_PLUGINS_GNULIB_TESTS +host = x86_64-unknown-linux-gnu +host_alias = +host_cpu = x86_64 +host_os = linux-gnu +host_vendor = unknown +htmldir = ${docdir} +includedir = ${prefix}/include +infodir = ${datarootdir}/info +install_sh = ${SHELL} /tmp/plugins/build-aux/install-sh +libdir = ${exec_prefix}/lib +libexecdir = ${exec_prefix}/libexec +lispdir = ${datarootdir}/emacs/site-lisp +localedir = ${datarootdir}/locale +localstatedir = ${prefix}/var +mandir = ${datarootdir}/man +mkdir_p = /bin/mkdir -p +np_mysql_config = /usr/bin/mysql_config +oldincludedir = /usr/include +pdfdir = ${docdir} +prefix = /usr/local +program_transform_name = s,x,x, +psdir = ${docdir} +sbindir = ${exec_prefix}/sbin +sharedstatedir = ${prefix}/com +srcdir = . +sysconfdir = ${prefix}/etc +target_alias = +top_build_prefix = ../ +top_builddir = .. +top_srcdir = .. +with_trusted_path = /usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin +perlmoduledir = $(exec_prefix)/perl +all: all-am + +.SUFFIXES: +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu perlmods/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --gnu perlmods/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs +tags: TAGS +TAGS: + +ctags: CTAGS +CTAGS: + + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile all-local +installdirs: +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + if test -z '$(STRIP)'; then \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + install; \ + else \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ + fi +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic clean-libtool clean-local mostlyclean-am + +distclean: distclean-am + -rm -f Makefile +distclean-am: clean-am distclean-generic + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: install-exec-local + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: + +.MAKE: install-am install-strip + +.PHONY: all all-am all-local check check-am clean clean-generic \ + clean-libtool clean-local distclean distclean-generic \ + distclean-libtool distdir dvi dvi-am html html-am info info-am \ + install install-am install-data install-data-am install-dvi \ + install-dvi-am install-exec install-exec-am install-exec-local \ + install-html install-html-am install-info install-info-am \ + install-man install-pdf install-pdf-am install-ps \ + install-ps-am install-strip installcheck installcheck-am \ + installdirs maintainer-clean maintainer-clean-generic \ + mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \ + ps ps-am uninstall uninstall-am + + +all-local: + $(top_srcdir)/tools/build_perl_modules -d $(perlmoduledir) -em . + +install-exec-local: + $(top_srcdir)/tools/build_perl_modules -d $(perlmoduledir) -i . + +# Don't run test-debug differently here yet +test test-debug: + $(top_srcdir)/tools/build_perl_modules -d $(perlmoduledir) -t . + +clean-local: + $(top_srcdir)/tools/build_perl_modules -d $(perlmoduledir) -c . + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/perlmods/Makefile.am b/perlmods/Makefile.am new file mode 100644 index 0000000..1495900 --- /dev/null +++ b/perlmods/Makefile.am @@ -0,0 +1,14 @@ +perlmoduledir = $(exec_prefix)/perl + +all-local: + $(top_srcdir)/tools/build_perl_modules -d $(perlmoduledir) -em . + +install-exec-local: + $(top_srcdir)/tools/build_perl_modules -d $(perlmoduledir) -i . + +# Don't run test-debug differently here yet +test test-debug: + $(top_srcdir)/tools/build_perl_modules -d $(perlmoduledir) -t . + +clean-local: + $(top_srcdir)/tools/build_perl_modules -d $(perlmoduledir) -c . diff --git a/perlmods/Makefile.in b/perlmods/Makefile.in new file mode 100644 index 0000000..4969dc8 --- /dev/null +++ b/perlmods/Makefile.in @@ -0,0 +1,1514 @@ +# Makefile.in generated by automake 1.11.6 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software +# Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ +VPATH = @srcdir@ +am__make_dryrun = \ + { \ + am__dry=no; \ + case $$MAKEFLAGS in \ + *\\[\ \ ]*) \ + echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \ + | grep '^AM OK$$' >/dev/null || am__dry=yes;; \ + *) \ + for am__flg in $$MAKEFLAGS; do \ + case $$am__flg in \ + *=*|--*) ;; \ + *n*) am__dry=yes; break;; \ + esac; \ + done;; \ + esac; \ + test $$am__dry = yes; \ + } +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +subdir = perlmods +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/m4/libcurl.m4 \ + $(top_srcdir)/m4/np_mysqlclient.m4 \ + $(top_srcdir)/m4/uriparser.m4 $(top_srcdir)/gl/m4/00gnulib.m4 \ + $(top_srcdir)/gl/m4/alloca.m4 \ + $(top_srcdir)/gl/m4/arpa_inet_h.m4 \ + $(top_srcdir)/gl/m4/base64.m4 $(top_srcdir)/gl/m4/btowc.m4 \ + $(top_srcdir)/gl/m4/codeset.m4 \ + $(top_srcdir)/gl/m4/configmake.m4 \ + $(top_srcdir)/gl/m4/dirname.m4 \ + $(top_srcdir)/gl/m4/double-slash-root.m4 \ + $(top_srcdir)/gl/m4/eealloc.m4 $(top_srcdir)/gl/m4/environ.m4 \ + $(top_srcdir)/gl/m4/errno_h.m4 $(top_srcdir)/gl/m4/error.m4 \ + $(top_srcdir)/gl/m4/exponentd.m4 \ + $(top_srcdir)/gl/m4/extensions.m4 \ + $(top_srcdir)/gl/m4/extern-inline.m4 \ + $(top_srcdir)/gl/m4/fcntl-o.m4 $(top_srcdir)/gl/m4/float_h.m4 \ + $(top_srcdir)/gl/m4/floorf.m4 \ + $(top_srcdir)/gl/m4/fstypename.m4 \ + $(top_srcdir)/gl/m4/fsusage.m4 \ + $(top_srcdir)/gl/m4/getaddrinfo.m4 \ + $(top_srcdir)/gl/m4/gethostname.m4 \ + $(top_srcdir)/gl/m4/getloadavg.m4 \ + $(top_srcdir)/gl/m4/getopt.m4 $(top_srcdir)/gl/m4/gettext.m4 \ + $(top_srcdir)/gl/m4/glibc21.m4 \ + $(top_srcdir)/gl/m4/gnulib-common.m4 \ + $(top_srcdir)/gl/m4/gnulib-comp.m4 \ + $(top_srcdir)/gl/m4/hostent.m4 $(top_srcdir)/gl/m4/iconv.m4 \ + $(top_srcdir)/gl/m4/idpriv.m4 \ + $(top_srcdir)/gl/m4/include_next.m4 \ + $(top_srcdir)/gl/m4/inet_ntop.m4 \ + $(top_srcdir)/gl/m4/intlmacosx.m4 \ + $(top_srcdir)/gl/m4/intmax_t.m4 \ + $(top_srcdir)/gl/m4/inttypes_h.m4 \ + $(top_srcdir)/gl/m4/langinfo_h.m4 \ + $(top_srcdir)/gl/m4/largefile.m4 $(top_srcdir)/gl/m4/lib-ld.m4 \ + $(top_srcdir)/gl/m4/lib-link.m4 \ + $(top_srcdir)/gl/m4/lib-prefix.m4 \ + $(top_srcdir)/gl/m4/libtool.m4 \ + $(top_srcdir)/gl/m4/localcharset.m4 \ + $(top_srcdir)/gl/m4/locale-fr.m4 \ + $(top_srcdir)/gl/m4/locale-ja.m4 \ + $(top_srcdir)/gl/m4/locale-zh.m4 \ + $(top_srcdir)/gl/m4/locale_h.m4 \ + $(top_srcdir)/gl/m4/localeconv.m4 $(top_srcdir)/gl/m4/lock.m4 \ + $(top_srcdir)/gl/m4/longlong.m4 \ + $(top_srcdir)/gl/m4/ls-mntd-fs.m4 \ + $(top_srcdir)/gl/m4/ltoptions.m4 \ + $(top_srcdir)/gl/m4/ltsugar.m4 \ + $(top_srcdir)/gl/m4/ltversion.m4 \ + $(top_srcdir)/gl/m4/lt~obsolete.m4 \ + $(top_srcdir)/gl/m4/malloc.m4 $(top_srcdir)/gl/m4/malloca.m4 \ + $(top_srcdir)/gl/m4/math_h.m4 $(top_srcdir)/gl/m4/mbrtowc.m4 \ + $(top_srcdir)/gl/m4/mbsinit.m4 \ + $(top_srcdir)/gl/m4/mbstate_t.m4 $(top_srcdir)/gl/m4/mbtowc.m4 \ + $(top_srcdir)/gl/m4/memchr.m4 $(top_srcdir)/gl/m4/mktime.m4 \ + $(top_srcdir)/gl/m4/mmap-anon.m4 \ + $(top_srcdir)/gl/m4/mountlist.m4 \ + $(top_srcdir)/gl/m4/msvc-inval.m4 \ + $(top_srcdir)/gl/m4/msvc-nothrow.m4 \ + $(top_srcdir)/gl/m4/multiarch.m4 \ + $(top_srcdir)/gl/m4/netdb_h.m4 \ + $(top_srcdir)/gl/m4/netinet_in_h.m4 \ + $(top_srcdir)/gl/m4/nl_langinfo.m4 $(top_srcdir)/gl/m4/nls.m4 \ + $(top_srcdir)/gl/m4/nocrash.m4 $(top_srcdir)/gl/m4/off_t.m4 \ + $(top_srcdir)/gl/m4/onceonly.m4 $(top_srcdir)/gl/m4/po.m4 \ + $(top_srcdir)/gl/m4/printf.m4 $(top_srcdir)/gl/m4/progtest.m4 \ + $(top_srcdir)/gl/m4/read.m4 $(top_srcdir)/gl/m4/regex.m4 \ + $(top_srcdir)/gl/m4/safe-read.m4 \ + $(top_srcdir)/gl/m4/servent.m4 $(top_srcdir)/gl/m4/setenv.m4 \ + $(top_srcdir)/gl/m4/sha1.m4 $(top_srcdir)/gl/m4/size_max.m4 \ + $(top_srcdir)/gl/m4/snprintf.m4 \ + $(top_srcdir)/gl/m4/socketlib.m4 \ + $(top_srcdir)/gl/m4/sockets.m4 $(top_srcdir)/gl/m4/socklen.m4 \ + $(top_srcdir)/gl/m4/sockpfaf.m4 $(top_srcdir)/gl/m4/ssize_t.m4 \ + $(top_srcdir)/gl/m4/stdalign.m4 $(top_srcdir)/gl/m4/stdbool.m4 \ + $(top_srcdir)/gl/m4/stddef_h.m4 $(top_srcdir)/gl/m4/stdint.m4 \ + $(top_srcdir)/gl/m4/stdint_h.m4 $(top_srcdir)/gl/m4/stdio_h.m4 \ + $(top_srcdir)/gl/m4/stdlib_h.m4 $(top_srcdir)/gl/m4/strcase.m4 \ + $(top_srcdir)/gl/m4/strcasestr.m4 \ + $(top_srcdir)/gl/m4/strerror.m4 \ + $(top_srcdir)/gl/m4/string_h.m4 \ + $(top_srcdir)/gl/m4/strings_h.m4 \ + $(top_srcdir)/gl/m4/strndup.m4 $(top_srcdir)/gl/m4/strnlen.m4 \ + $(top_srcdir)/gl/m4/strsep.m4 $(top_srcdir)/gl/m4/strstr.m4 \ + $(top_srcdir)/gl/m4/sys_socket_h.m4 \ + $(top_srcdir)/gl/m4/sys_types_h.m4 \ + $(top_srcdir)/gl/m4/sys_uio_h.m4 \ + $(top_srcdir)/gl/m4/threadlib.m4 $(top_srcdir)/gl/m4/time_h.m4 \ + $(top_srcdir)/gl/m4/time_r.m4 $(top_srcdir)/gl/m4/timegm.m4 \ + $(top_srcdir)/gl/m4/unistd_h.m4 \ + $(top_srcdir)/gl/m4/vasnprintf.m4 \ + $(top_srcdir)/gl/m4/vasprintf.m4 \ + $(top_srcdir)/gl/m4/vsnprintf.m4 \ + $(top_srcdir)/gl/m4/warn-on-use.m4 \ + $(top_srcdir)/gl/m4/wchar_h.m4 $(top_srcdir)/gl/m4/wchar_t.m4 \ + $(top_srcdir)/gl/m4/wcrtomb.m4 $(top_srcdir)/gl/m4/wctype_h.m4 \ + $(top_srcdir)/gl/m4/wint_t.m4 $(top_srcdir)/gl/m4/xalloc.m4 \ + $(top_srcdir)/gl/m4/xsize.m4 $(top_srcdir)/gl/m4/xstrndup.m4 \ + $(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(SHELL) $(top_srcdir)/build-aux/mkinstalldirs +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +SOURCES = +DIST_SOURCES = +am__can_run_installinfo = \ + case $$AM_UPDATE_INFO_DIR in \ + n|no|NO) false;; \ + *) (install-info --version) >/dev/null 2>&1;; \ + esac +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +pkglibexecdir = @pkglibexecdir@ +ACLOCAL = @ACLOCAL@ +ALLOCA = @ALLOCA@ +ALLOCA_H = @ALLOCA_H@ +AMTAR = @AMTAR@ +APPLE_UNIVERSAL_BUILD = @APPLE_UNIVERSAL_BUILD@ +AR = @AR@ +ARFLAGS = @ARFLAGS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +BASENAME = @BASENAME@ +BITSIZEOF_PTRDIFF_T = @BITSIZEOF_PTRDIFF_T@ +BITSIZEOF_SIG_ATOMIC_T = @BITSIZEOF_SIG_ATOMIC_T@ +BITSIZEOF_SIZE_T = @BITSIZEOF_SIZE_T@ +BITSIZEOF_WCHAR_T = @BITSIZEOF_WCHAR_T@ +BITSIZEOF_WINT_T = @BITSIZEOF_WINT_T@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DBILIBS = @DBILIBS@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DEPLIBS = @DEPLIBS@ +DLLTOOL = @DLLTOOL@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EMULTIHOP_HIDDEN = @EMULTIHOP_HIDDEN@ +EMULTIHOP_VALUE = @EMULTIHOP_VALUE@ +ENOLINK_HIDDEN = @ENOLINK_HIDDEN@ +ENOLINK_VALUE = @ENOLINK_VALUE@ +EOVERFLOW_HIDDEN = @EOVERFLOW_HIDDEN@ +EOVERFLOW_VALUE = @EOVERFLOW_VALUE@ +ERRNO_H = @ERRNO_H@ +EXEEXT = @EXEEXT@ +EXTRAS = @EXTRAS@ +EXTRAS_ROOT = @EXTRAS_ROOT@ +EXTRA_NETOBJS = @EXTRA_NETOBJS@ +EXTRA_TEST = @EXTRA_TEST@ +FGREP = @FGREP@ +FLOAT_H = @FLOAT_H@ +FLOORF_LIBM = @FLOORF_LIBM@ +GETADDRINFO_LIB = @GETADDRINFO_LIB@ +GETHOSTNAME_LIB = @GETHOSTNAME_LIB@ +GETLOADAVG_LIBS = @GETLOADAVG_LIBS@ +GETOPT_H = @GETOPT_H@ +GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@ +GLIBC21 = @GLIBC21@ +GMSGFMT = @GMSGFMT@ +GMSGFMT_015 = @GMSGFMT_015@ +GNULIB_ACCEPT = @GNULIB_ACCEPT@ +GNULIB_ACCEPT4 = @GNULIB_ACCEPT4@ +GNULIB_ACOSF = @GNULIB_ACOSF@ +GNULIB_ACOSL = @GNULIB_ACOSL@ +GNULIB_ASINF = @GNULIB_ASINF@ +GNULIB_ASINL = @GNULIB_ASINL@ +GNULIB_ATAN2F = @GNULIB_ATAN2F@ +GNULIB_ATANF = @GNULIB_ATANF@ +GNULIB_ATANL = @GNULIB_ATANL@ +GNULIB_ATOLL = @GNULIB_ATOLL@ +GNULIB_BIND = @GNULIB_BIND@ +GNULIB_BTOWC = @GNULIB_BTOWC@ +GNULIB_CALLOC_POSIX = @GNULIB_CALLOC_POSIX@ +GNULIB_CANONICALIZE_FILE_NAME = @GNULIB_CANONICALIZE_FILE_NAME@ +GNULIB_CBRT = @GNULIB_CBRT@ +GNULIB_CBRTF = @GNULIB_CBRTF@ +GNULIB_CBRTL = @GNULIB_CBRTL@ +GNULIB_CEIL = @GNULIB_CEIL@ +GNULIB_CEILF = @GNULIB_CEILF@ +GNULIB_CEILL = @GNULIB_CEILL@ +GNULIB_CHDIR = @GNULIB_CHDIR@ +GNULIB_CHOWN = @GNULIB_CHOWN@ +GNULIB_CLOSE = @GNULIB_CLOSE@ +GNULIB_CONNECT = @GNULIB_CONNECT@ +GNULIB_COPYSIGN = @GNULIB_COPYSIGN@ +GNULIB_COPYSIGNF = @GNULIB_COPYSIGNF@ +GNULIB_COPYSIGNL = @GNULIB_COPYSIGNL@ +GNULIB_COSF = @GNULIB_COSF@ +GNULIB_COSHF = @GNULIB_COSHF@ +GNULIB_COSL = @GNULIB_COSL@ +GNULIB_DPRINTF = @GNULIB_DPRINTF@ +GNULIB_DUP = @GNULIB_DUP@ +GNULIB_DUP2 = @GNULIB_DUP2@ +GNULIB_DUP3 = @GNULIB_DUP3@ +GNULIB_DUPLOCALE = @GNULIB_DUPLOCALE@ +GNULIB_ENVIRON = @GNULIB_ENVIRON@ +GNULIB_EUIDACCESS = @GNULIB_EUIDACCESS@ +GNULIB_EXP2 = @GNULIB_EXP2@ +GNULIB_EXP2F = @GNULIB_EXP2F@ +GNULIB_EXP2L = @GNULIB_EXP2L@ +GNULIB_EXPF = @GNULIB_EXPF@ +GNULIB_EXPL = @GNULIB_EXPL@ +GNULIB_EXPM1 = @GNULIB_EXPM1@ +GNULIB_EXPM1F = @GNULIB_EXPM1F@ +GNULIB_EXPM1L = @GNULIB_EXPM1L@ +GNULIB_FABSF = @GNULIB_FABSF@ +GNULIB_FABSL = @GNULIB_FABSL@ +GNULIB_FACCESSAT = @GNULIB_FACCESSAT@ +GNULIB_FCHDIR = @GNULIB_FCHDIR@ +GNULIB_FCHOWNAT = @GNULIB_FCHOWNAT@ +GNULIB_FCLOSE = @GNULIB_FCLOSE@ +GNULIB_FDATASYNC = @GNULIB_FDATASYNC@ +GNULIB_FDOPEN = @GNULIB_FDOPEN@ +GNULIB_FFLUSH = @GNULIB_FFLUSH@ +GNULIB_FFS = @GNULIB_FFS@ +GNULIB_FFSL = @GNULIB_FFSL@ +GNULIB_FFSLL = @GNULIB_FFSLL@ +GNULIB_FGETC = @GNULIB_FGETC@ +GNULIB_FGETS = @GNULIB_FGETS@ +GNULIB_FLOOR = @GNULIB_FLOOR@ +GNULIB_FLOORF = @GNULIB_FLOORF@ +GNULIB_FLOORL = @GNULIB_FLOORL@ +GNULIB_FMA = @GNULIB_FMA@ +GNULIB_FMAF = @GNULIB_FMAF@ +GNULIB_FMAL = @GNULIB_FMAL@ +GNULIB_FMOD = @GNULIB_FMOD@ +GNULIB_FMODF = @GNULIB_FMODF@ +GNULIB_FMODL = @GNULIB_FMODL@ +GNULIB_FOPEN = @GNULIB_FOPEN@ +GNULIB_FPRINTF = @GNULIB_FPRINTF@ +GNULIB_FPRINTF_POSIX = @GNULIB_FPRINTF_POSIX@ +GNULIB_FPURGE = @GNULIB_FPURGE@ +GNULIB_FPUTC = @GNULIB_FPUTC@ +GNULIB_FPUTS = @GNULIB_FPUTS@ +GNULIB_FREAD = @GNULIB_FREAD@ +GNULIB_FREOPEN = @GNULIB_FREOPEN@ +GNULIB_FREXP = @GNULIB_FREXP@ +GNULIB_FREXPF = @GNULIB_FREXPF@ +GNULIB_FREXPL = @GNULIB_FREXPL@ +GNULIB_FSCANF = @GNULIB_FSCANF@ +GNULIB_FSEEK = @GNULIB_FSEEK@ +GNULIB_FSEEKO = @GNULIB_FSEEKO@ +GNULIB_FSYNC = @GNULIB_FSYNC@ +GNULIB_FTELL = @GNULIB_FTELL@ +GNULIB_FTELLO = @GNULIB_FTELLO@ +GNULIB_FTRUNCATE = @GNULIB_FTRUNCATE@ +GNULIB_FWRITE = @GNULIB_FWRITE@ +GNULIB_GETADDRINFO = @GNULIB_GETADDRINFO@ +GNULIB_GETC = @GNULIB_GETC@ +GNULIB_GETCHAR = @GNULIB_GETCHAR@ +GNULIB_GETCWD = @GNULIB_GETCWD@ +GNULIB_GETDELIM = @GNULIB_GETDELIM@ +GNULIB_GETDOMAINNAME = @GNULIB_GETDOMAINNAME@ +GNULIB_GETDTABLESIZE = @GNULIB_GETDTABLESIZE@ +GNULIB_GETGROUPS = @GNULIB_GETGROUPS@ +GNULIB_GETHOSTNAME = @GNULIB_GETHOSTNAME@ +GNULIB_GETLINE = @GNULIB_GETLINE@ +GNULIB_GETLOADAVG = @GNULIB_GETLOADAVG@ +GNULIB_GETLOGIN = @GNULIB_GETLOGIN@ +GNULIB_GETLOGIN_R = @GNULIB_GETLOGIN_R@ +GNULIB_GETPAGESIZE = @GNULIB_GETPAGESIZE@ +GNULIB_GETPEERNAME = @GNULIB_GETPEERNAME@ +GNULIB_GETSOCKNAME = @GNULIB_GETSOCKNAME@ +GNULIB_GETSOCKOPT = @GNULIB_GETSOCKOPT@ +GNULIB_GETSUBOPT = @GNULIB_GETSUBOPT@ +GNULIB_GETUSERSHELL = @GNULIB_GETUSERSHELL@ +GNULIB_GL_UNISTD_H_GETOPT = @GNULIB_GL_UNISTD_H_GETOPT@ +GNULIB_GRANTPT = @GNULIB_GRANTPT@ +GNULIB_GROUP_MEMBER = @GNULIB_GROUP_MEMBER@ +GNULIB_HYPOT = @GNULIB_HYPOT@ +GNULIB_HYPOTF = @GNULIB_HYPOTF@ +GNULIB_HYPOTL = @GNULIB_HYPOTL@ +GNULIB_ILOGB = @GNULIB_ILOGB@ +GNULIB_ILOGBF = @GNULIB_ILOGBF@ +GNULIB_ILOGBL = @GNULIB_ILOGBL@ +GNULIB_INET_NTOP = @GNULIB_INET_NTOP@ +GNULIB_INET_PTON = @GNULIB_INET_PTON@ +GNULIB_ISATTY = @GNULIB_ISATTY@ +GNULIB_ISFINITE = @GNULIB_ISFINITE@ +GNULIB_ISINF = @GNULIB_ISINF@ +GNULIB_ISNAN = @GNULIB_ISNAN@ +GNULIB_ISNAND = @GNULIB_ISNAND@ +GNULIB_ISNANF = @GNULIB_ISNANF@ +GNULIB_ISNANL = @GNULIB_ISNANL@ +GNULIB_ISWBLANK = @GNULIB_ISWBLANK@ +GNULIB_ISWCTYPE = @GNULIB_ISWCTYPE@ +GNULIB_LCHOWN = @GNULIB_LCHOWN@ +GNULIB_LDEXPF = @GNULIB_LDEXPF@ +GNULIB_LDEXPL = @GNULIB_LDEXPL@ +GNULIB_LINK = @GNULIB_LINK@ +GNULIB_LINKAT = @GNULIB_LINKAT@ +GNULIB_LISTEN = @GNULIB_LISTEN@ +GNULIB_LOCALECONV = @GNULIB_LOCALECONV@ +GNULIB_LOG = @GNULIB_LOG@ +GNULIB_LOG10 = @GNULIB_LOG10@ +GNULIB_LOG10F = @GNULIB_LOG10F@ +GNULIB_LOG10L = @GNULIB_LOG10L@ +GNULIB_LOG1P = @GNULIB_LOG1P@ +GNULIB_LOG1PF = @GNULIB_LOG1PF@ +GNULIB_LOG1PL = @GNULIB_LOG1PL@ +GNULIB_LOG2 = @GNULIB_LOG2@ +GNULIB_LOG2F = @GNULIB_LOG2F@ +GNULIB_LOG2L = @GNULIB_LOG2L@ +GNULIB_LOGB = @GNULIB_LOGB@ +GNULIB_LOGBF = @GNULIB_LOGBF@ +GNULIB_LOGBL = @GNULIB_LOGBL@ +GNULIB_LOGF = @GNULIB_LOGF@ +GNULIB_LOGL = @GNULIB_LOGL@ +GNULIB_LSEEK = @GNULIB_LSEEK@ +GNULIB_MALLOC_POSIX = @GNULIB_MALLOC_POSIX@ +GNULIB_MBRLEN = @GNULIB_MBRLEN@ +GNULIB_MBRTOWC = @GNULIB_MBRTOWC@ +GNULIB_MBSCASECMP = @GNULIB_MBSCASECMP@ +GNULIB_MBSCASESTR = @GNULIB_MBSCASESTR@ +GNULIB_MBSCHR = @GNULIB_MBSCHR@ +GNULIB_MBSCSPN = @GNULIB_MBSCSPN@ +GNULIB_MBSINIT = @GNULIB_MBSINIT@ +GNULIB_MBSLEN = @GNULIB_MBSLEN@ +GNULIB_MBSNCASECMP = @GNULIB_MBSNCASECMP@ +GNULIB_MBSNLEN = @GNULIB_MBSNLEN@ +GNULIB_MBSNRTOWCS = @GNULIB_MBSNRTOWCS@ +GNULIB_MBSPBRK = @GNULIB_MBSPBRK@ +GNULIB_MBSPCASECMP = @GNULIB_MBSPCASECMP@ +GNULIB_MBSRCHR = @GNULIB_MBSRCHR@ +GNULIB_MBSRTOWCS = @GNULIB_MBSRTOWCS@ +GNULIB_MBSSEP = @GNULIB_MBSSEP@ +GNULIB_MBSSPN = @GNULIB_MBSSPN@ +GNULIB_MBSSTR = @GNULIB_MBSSTR@ +GNULIB_MBSTOK_R = @GNULIB_MBSTOK_R@ +GNULIB_MBTOWC = @GNULIB_MBTOWC@ +GNULIB_MEMCHR = @GNULIB_MEMCHR@ +GNULIB_MEMMEM = @GNULIB_MEMMEM@ +GNULIB_MEMPCPY = @GNULIB_MEMPCPY@ +GNULIB_MEMRCHR = @GNULIB_MEMRCHR@ +GNULIB_MKDTEMP = @GNULIB_MKDTEMP@ +GNULIB_MKOSTEMP = @GNULIB_MKOSTEMP@ +GNULIB_MKOSTEMPS = @GNULIB_MKOSTEMPS@ +GNULIB_MKSTEMP = @GNULIB_MKSTEMP@ +GNULIB_MKSTEMPS = @GNULIB_MKSTEMPS@ +GNULIB_MKTIME = @GNULIB_MKTIME@ +GNULIB_MODF = @GNULIB_MODF@ +GNULIB_MODFF = @GNULIB_MODFF@ +GNULIB_MODFL = @GNULIB_MODFL@ +GNULIB_NANOSLEEP = @GNULIB_NANOSLEEP@ +GNULIB_NL_LANGINFO = @GNULIB_NL_LANGINFO@ +GNULIB_OBSTACK_PRINTF = @GNULIB_OBSTACK_PRINTF@ +GNULIB_OBSTACK_PRINTF_POSIX = @GNULIB_OBSTACK_PRINTF_POSIX@ +GNULIB_PCLOSE = @GNULIB_PCLOSE@ +GNULIB_PERROR = @GNULIB_PERROR@ +GNULIB_PIPE = @GNULIB_PIPE@ +GNULIB_PIPE2 = @GNULIB_PIPE2@ +GNULIB_POPEN = @GNULIB_POPEN@ +GNULIB_POSIX_OPENPT = @GNULIB_POSIX_OPENPT@ +GNULIB_POWF = @GNULIB_POWF@ +GNULIB_PREAD = @GNULIB_PREAD@ +GNULIB_PRINTF = @GNULIB_PRINTF@ +GNULIB_PRINTF_POSIX = @GNULIB_PRINTF_POSIX@ +GNULIB_PTSNAME = @GNULIB_PTSNAME@ +GNULIB_PTSNAME_R = @GNULIB_PTSNAME_R@ +GNULIB_PUTC = @GNULIB_PUTC@ +GNULIB_PUTCHAR = @GNULIB_PUTCHAR@ +GNULIB_PUTENV = @GNULIB_PUTENV@ +GNULIB_PUTS = @GNULIB_PUTS@ +GNULIB_PWRITE = @GNULIB_PWRITE@ +GNULIB_RANDOM = @GNULIB_RANDOM@ +GNULIB_RANDOM_R = @GNULIB_RANDOM_R@ +GNULIB_RAWMEMCHR = @GNULIB_RAWMEMCHR@ +GNULIB_READ = @GNULIB_READ@ +GNULIB_READLINK = @GNULIB_READLINK@ +GNULIB_READLINKAT = @GNULIB_READLINKAT@ +GNULIB_REALLOC_POSIX = @GNULIB_REALLOC_POSIX@ +GNULIB_REALPATH = @GNULIB_REALPATH@ +GNULIB_RECV = @GNULIB_RECV@ +GNULIB_RECVFROM = @GNULIB_RECVFROM@ +GNULIB_REMAINDER = @GNULIB_REMAINDER@ +GNULIB_REMAINDERF = @GNULIB_REMAINDERF@ +GNULIB_REMAINDERL = @GNULIB_REMAINDERL@ +GNULIB_REMOVE = @GNULIB_REMOVE@ +GNULIB_RENAME = @GNULIB_RENAME@ +GNULIB_RENAMEAT = @GNULIB_RENAMEAT@ +GNULIB_RINT = @GNULIB_RINT@ +GNULIB_RINTF = @GNULIB_RINTF@ +GNULIB_RINTL = @GNULIB_RINTL@ +GNULIB_RMDIR = @GNULIB_RMDIR@ +GNULIB_ROUND = @GNULIB_ROUND@ +GNULIB_ROUNDF = @GNULIB_ROUNDF@ +GNULIB_ROUNDL = @GNULIB_ROUNDL@ +GNULIB_RPMATCH = @GNULIB_RPMATCH@ +GNULIB_SCANF = @GNULIB_SCANF@ +GNULIB_SECURE_GETENV = @GNULIB_SECURE_GETENV@ +GNULIB_SEND = @GNULIB_SEND@ +GNULIB_SENDTO = @GNULIB_SENDTO@ +GNULIB_SETENV = @GNULIB_SETENV@ +GNULIB_SETHOSTNAME = @GNULIB_SETHOSTNAME@ +GNULIB_SETLOCALE = @GNULIB_SETLOCALE@ +GNULIB_SETSOCKOPT = @GNULIB_SETSOCKOPT@ +GNULIB_SHUTDOWN = @GNULIB_SHUTDOWN@ +GNULIB_SIGNBIT = @GNULIB_SIGNBIT@ +GNULIB_SINF = @GNULIB_SINF@ +GNULIB_SINHF = @GNULIB_SINHF@ +GNULIB_SINL = @GNULIB_SINL@ +GNULIB_SLEEP = @GNULIB_SLEEP@ +GNULIB_SNPRINTF = @GNULIB_SNPRINTF@ +GNULIB_SOCKET = @GNULIB_SOCKET@ +GNULIB_SPRINTF_POSIX = @GNULIB_SPRINTF_POSIX@ +GNULIB_SQRTF = @GNULIB_SQRTF@ +GNULIB_SQRTL = @GNULIB_SQRTL@ +GNULIB_STDIO_H_NONBLOCKING = @GNULIB_STDIO_H_NONBLOCKING@ +GNULIB_STDIO_H_SIGPIPE = @GNULIB_STDIO_H_SIGPIPE@ +GNULIB_STPCPY = @GNULIB_STPCPY@ +GNULIB_STPNCPY = @GNULIB_STPNCPY@ +GNULIB_STRCASESTR = @GNULIB_STRCASESTR@ +GNULIB_STRCHRNUL = @GNULIB_STRCHRNUL@ +GNULIB_STRDUP = @GNULIB_STRDUP@ +GNULIB_STRERROR = @GNULIB_STRERROR@ +GNULIB_STRERROR_R = @GNULIB_STRERROR_R@ +GNULIB_STRNCAT = @GNULIB_STRNCAT@ +GNULIB_STRNDUP = @GNULIB_STRNDUP@ +GNULIB_STRNLEN = @GNULIB_STRNLEN@ +GNULIB_STRPBRK = @GNULIB_STRPBRK@ +GNULIB_STRPTIME = @GNULIB_STRPTIME@ +GNULIB_STRSEP = @GNULIB_STRSEP@ +GNULIB_STRSIGNAL = @GNULIB_STRSIGNAL@ +GNULIB_STRSTR = @GNULIB_STRSTR@ +GNULIB_STRTOD = @GNULIB_STRTOD@ +GNULIB_STRTOK_R = @GNULIB_STRTOK_R@ +GNULIB_STRTOLL = @GNULIB_STRTOLL@ +GNULIB_STRTOULL = @GNULIB_STRTOULL@ +GNULIB_STRVERSCMP = @GNULIB_STRVERSCMP@ +GNULIB_SYMLINK = @GNULIB_SYMLINK@ +GNULIB_SYMLINKAT = @GNULIB_SYMLINKAT@ +GNULIB_SYSTEM_POSIX = @GNULIB_SYSTEM_POSIX@ +GNULIB_TANF = @GNULIB_TANF@ +GNULIB_TANHF = @GNULIB_TANHF@ +GNULIB_TANL = @GNULIB_TANL@ +GNULIB_TIMEGM = @GNULIB_TIMEGM@ +GNULIB_TIME_R = @GNULIB_TIME_R@ +GNULIB_TMPFILE = @GNULIB_TMPFILE@ +GNULIB_TOWCTRANS = @GNULIB_TOWCTRANS@ +GNULIB_TRUNC = @GNULIB_TRUNC@ +GNULIB_TRUNCF = @GNULIB_TRUNCF@ +GNULIB_TRUNCL = @GNULIB_TRUNCL@ +GNULIB_TTYNAME_R = @GNULIB_TTYNAME_R@ +GNULIB_UNISTD_H_NONBLOCKING = @GNULIB_UNISTD_H_NONBLOCKING@ +GNULIB_UNISTD_H_SIGPIPE = @GNULIB_UNISTD_H_SIGPIPE@ +GNULIB_UNLINK = @GNULIB_UNLINK@ +GNULIB_UNLINKAT = @GNULIB_UNLINKAT@ +GNULIB_UNLOCKPT = @GNULIB_UNLOCKPT@ +GNULIB_UNSETENV = @GNULIB_UNSETENV@ +GNULIB_USLEEP = @GNULIB_USLEEP@ +GNULIB_VASPRINTF = @GNULIB_VASPRINTF@ +GNULIB_VDPRINTF = @GNULIB_VDPRINTF@ +GNULIB_VFPRINTF = @GNULIB_VFPRINTF@ +GNULIB_VFPRINTF_POSIX = @GNULIB_VFPRINTF_POSIX@ +GNULIB_VFSCANF = @GNULIB_VFSCANF@ +GNULIB_VPRINTF = @GNULIB_VPRINTF@ +GNULIB_VPRINTF_POSIX = @GNULIB_VPRINTF_POSIX@ +GNULIB_VSCANF = @GNULIB_VSCANF@ +GNULIB_VSNPRINTF = @GNULIB_VSNPRINTF@ +GNULIB_VSPRINTF_POSIX = @GNULIB_VSPRINTF_POSIX@ +GNULIB_WCPCPY = @GNULIB_WCPCPY@ +GNULIB_WCPNCPY = @GNULIB_WCPNCPY@ +GNULIB_WCRTOMB = @GNULIB_WCRTOMB@ +GNULIB_WCSCASECMP = @GNULIB_WCSCASECMP@ +GNULIB_WCSCAT = @GNULIB_WCSCAT@ +GNULIB_WCSCHR = @GNULIB_WCSCHR@ +GNULIB_WCSCMP = @GNULIB_WCSCMP@ +GNULIB_WCSCOLL = @GNULIB_WCSCOLL@ +GNULIB_WCSCPY = @GNULIB_WCSCPY@ +GNULIB_WCSCSPN = @GNULIB_WCSCSPN@ +GNULIB_WCSDUP = @GNULIB_WCSDUP@ +GNULIB_WCSLEN = @GNULIB_WCSLEN@ +GNULIB_WCSNCASECMP = @GNULIB_WCSNCASECMP@ +GNULIB_WCSNCAT = @GNULIB_WCSNCAT@ +GNULIB_WCSNCMP = @GNULIB_WCSNCMP@ +GNULIB_WCSNCPY = @GNULIB_WCSNCPY@ +GNULIB_WCSNLEN = @GNULIB_WCSNLEN@ +GNULIB_WCSNRTOMBS = @GNULIB_WCSNRTOMBS@ +GNULIB_WCSPBRK = @GNULIB_WCSPBRK@ +GNULIB_WCSRCHR = @GNULIB_WCSRCHR@ +GNULIB_WCSRTOMBS = @GNULIB_WCSRTOMBS@ +GNULIB_WCSSPN = @GNULIB_WCSSPN@ +GNULIB_WCSSTR = @GNULIB_WCSSTR@ +GNULIB_WCSTOK = @GNULIB_WCSTOK@ +GNULIB_WCSWIDTH = @GNULIB_WCSWIDTH@ +GNULIB_WCSXFRM = @GNULIB_WCSXFRM@ +GNULIB_WCTOB = @GNULIB_WCTOB@ +GNULIB_WCTOMB = @GNULIB_WCTOMB@ +GNULIB_WCTRANS = @GNULIB_WCTRANS@ +GNULIB_WCTYPE = @GNULIB_WCTYPE@ +GNULIB_WCWIDTH = @GNULIB_WCWIDTH@ +GNULIB_WMEMCHR = @GNULIB_WMEMCHR@ +GNULIB_WMEMCMP = @GNULIB_WMEMCMP@ +GNULIB_WMEMCPY = @GNULIB_WMEMCPY@ +GNULIB_WMEMMOVE = @GNULIB_WMEMMOVE@ +GNULIB_WMEMSET = @GNULIB_WMEMSET@ +GNULIB_WRITE = @GNULIB_WRITE@ +GNULIB__EXIT = @GNULIB__EXIT@ +GREP = @GREP@ +HAVE_ACCEPT4 = @HAVE_ACCEPT4@ +HAVE_ACOSF = @HAVE_ACOSF@ +HAVE_ACOSL = @HAVE_ACOSL@ +HAVE_ARPA_INET_H = @HAVE_ARPA_INET_H@ +HAVE_ASINF = @HAVE_ASINF@ +HAVE_ASINL = @HAVE_ASINL@ +HAVE_ATAN2F = @HAVE_ATAN2F@ +HAVE_ATANF = @HAVE_ATANF@ +HAVE_ATANL = @HAVE_ATANL@ +HAVE_ATOLL = @HAVE_ATOLL@ +HAVE_BTOWC = @HAVE_BTOWC@ +HAVE_CANONICALIZE_FILE_NAME = @HAVE_CANONICALIZE_FILE_NAME@ +HAVE_CBRT = @HAVE_CBRT@ +HAVE_CBRTF = @HAVE_CBRTF@ +HAVE_CBRTL = @HAVE_CBRTL@ +HAVE_CHOWN = @HAVE_CHOWN@ +HAVE_COPYSIGN = @HAVE_COPYSIGN@ +HAVE_COPYSIGNL = @HAVE_COPYSIGNL@ +HAVE_COSF = @HAVE_COSF@ +HAVE_COSHF = @HAVE_COSHF@ +HAVE_COSL = @HAVE_COSL@ +HAVE_DECL_ACOSL = @HAVE_DECL_ACOSL@ +HAVE_DECL_ASINL = @HAVE_DECL_ASINL@ +HAVE_DECL_ATANL = @HAVE_DECL_ATANL@ +HAVE_DECL_CBRTF = @HAVE_DECL_CBRTF@ +HAVE_DECL_CBRTL = @HAVE_DECL_CBRTL@ +HAVE_DECL_CEILF = @HAVE_DECL_CEILF@ +HAVE_DECL_CEILL = @HAVE_DECL_CEILL@ +HAVE_DECL_COPYSIGNF = @HAVE_DECL_COPYSIGNF@ +HAVE_DECL_COSL = @HAVE_DECL_COSL@ +HAVE_DECL_ENVIRON = @HAVE_DECL_ENVIRON@ +HAVE_DECL_EXP2 = @HAVE_DECL_EXP2@ +HAVE_DECL_EXP2F = @HAVE_DECL_EXP2F@ +HAVE_DECL_EXP2L = @HAVE_DECL_EXP2L@ +HAVE_DECL_EXPL = @HAVE_DECL_EXPL@ +HAVE_DECL_EXPM1L = @HAVE_DECL_EXPM1L@ +HAVE_DECL_FCHDIR = @HAVE_DECL_FCHDIR@ +HAVE_DECL_FDATASYNC = @HAVE_DECL_FDATASYNC@ +HAVE_DECL_FLOORF = @HAVE_DECL_FLOORF@ +HAVE_DECL_FLOORL = @HAVE_DECL_FLOORL@ +HAVE_DECL_FPURGE = @HAVE_DECL_FPURGE@ +HAVE_DECL_FREEADDRINFO = @HAVE_DECL_FREEADDRINFO@ +HAVE_DECL_FREXPL = @HAVE_DECL_FREXPL@ +HAVE_DECL_FSEEKO = @HAVE_DECL_FSEEKO@ +HAVE_DECL_FTELLO = @HAVE_DECL_FTELLO@ +HAVE_DECL_GAI_STRERROR = @HAVE_DECL_GAI_STRERROR@ +HAVE_DECL_GETADDRINFO = @HAVE_DECL_GETADDRINFO@ +HAVE_DECL_GETDELIM = @HAVE_DECL_GETDELIM@ +HAVE_DECL_GETDOMAINNAME = @HAVE_DECL_GETDOMAINNAME@ +HAVE_DECL_GETLINE = @HAVE_DECL_GETLINE@ +HAVE_DECL_GETLOADAVG = @HAVE_DECL_GETLOADAVG@ +HAVE_DECL_GETLOGIN_R = @HAVE_DECL_GETLOGIN_R@ +HAVE_DECL_GETNAMEINFO = @HAVE_DECL_GETNAMEINFO@ +HAVE_DECL_GETPAGESIZE = @HAVE_DECL_GETPAGESIZE@ +HAVE_DECL_GETUSERSHELL = @HAVE_DECL_GETUSERSHELL@ +HAVE_DECL_INET_NTOP = @HAVE_DECL_INET_NTOP@ +HAVE_DECL_INET_PTON = @HAVE_DECL_INET_PTON@ +HAVE_DECL_LDEXPL = @HAVE_DECL_LDEXPL@ +HAVE_DECL_LOCALTIME_R = @HAVE_DECL_LOCALTIME_R@ +HAVE_DECL_LOG10L = @HAVE_DECL_LOG10L@ +HAVE_DECL_LOG2 = @HAVE_DECL_LOG2@ +HAVE_DECL_LOG2F = @HAVE_DECL_LOG2F@ +HAVE_DECL_LOG2L = @HAVE_DECL_LOG2L@ +HAVE_DECL_LOGB = @HAVE_DECL_LOGB@ +HAVE_DECL_LOGL = @HAVE_DECL_LOGL@ +HAVE_DECL_MEMMEM = @HAVE_DECL_MEMMEM@ +HAVE_DECL_MEMRCHR = @HAVE_DECL_MEMRCHR@ +HAVE_DECL_OBSTACK_PRINTF = @HAVE_DECL_OBSTACK_PRINTF@ +HAVE_DECL_REMAINDER = @HAVE_DECL_REMAINDER@ +HAVE_DECL_REMAINDERL = @HAVE_DECL_REMAINDERL@ +HAVE_DECL_RINTF = @HAVE_DECL_RINTF@ +HAVE_DECL_ROUND = @HAVE_DECL_ROUND@ +HAVE_DECL_ROUNDF = @HAVE_DECL_ROUNDF@ +HAVE_DECL_ROUNDL = @HAVE_DECL_ROUNDL@ +HAVE_DECL_SETENV = @HAVE_DECL_SETENV@ +HAVE_DECL_SETHOSTNAME = @HAVE_DECL_SETHOSTNAME@ +HAVE_DECL_SINL = @HAVE_DECL_SINL@ +HAVE_DECL_SNPRINTF = @HAVE_DECL_SNPRINTF@ +HAVE_DECL_SQRTL = @HAVE_DECL_SQRTL@ +HAVE_DECL_STRDUP = @HAVE_DECL_STRDUP@ +HAVE_DECL_STRERROR_R = @HAVE_DECL_STRERROR_R@ +HAVE_DECL_STRNCASECMP = @HAVE_DECL_STRNCASECMP@ +HAVE_DECL_STRNDUP = @HAVE_DECL_STRNDUP@ +HAVE_DECL_STRNLEN = @HAVE_DECL_STRNLEN@ +HAVE_DECL_STRSIGNAL = @HAVE_DECL_STRSIGNAL@ +HAVE_DECL_STRTOK_R = @HAVE_DECL_STRTOK_R@ +HAVE_DECL_TANL = @HAVE_DECL_TANL@ +HAVE_DECL_TRUNC = @HAVE_DECL_TRUNC@ +HAVE_DECL_TRUNCF = @HAVE_DECL_TRUNCF@ +HAVE_DECL_TRUNCL = @HAVE_DECL_TRUNCL@ +HAVE_DECL_TTYNAME_R = @HAVE_DECL_TTYNAME_R@ +HAVE_DECL_UNSETENV = @HAVE_DECL_UNSETENV@ +HAVE_DECL_VSNPRINTF = @HAVE_DECL_VSNPRINTF@ +HAVE_DECL_WCTOB = @HAVE_DECL_WCTOB@ +HAVE_DECL_WCWIDTH = @HAVE_DECL_WCWIDTH@ +HAVE_DPRINTF = @HAVE_DPRINTF@ +HAVE_DUP2 = @HAVE_DUP2@ +HAVE_DUP3 = @HAVE_DUP3@ +HAVE_DUPLOCALE = @HAVE_DUPLOCALE@ +HAVE_EUIDACCESS = @HAVE_EUIDACCESS@ +HAVE_EXPF = @HAVE_EXPF@ +HAVE_EXPL = @HAVE_EXPL@ +HAVE_EXPM1 = @HAVE_EXPM1@ +HAVE_EXPM1F = @HAVE_EXPM1F@ +HAVE_FABSF = @HAVE_FABSF@ +HAVE_FABSL = @HAVE_FABSL@ +HAVE_FACCESSAT = @HAVE_FACCESSAT@ +HAVE_FCHDIR = @HAVE_FCHDIR@ +HAVE_FCHOWNAT = @HAVE_FCHOWNAT@ +HAVE_FDATASYNC = @HAVE_FDATASYNC@ +HAVE_FEATURES_H = @HAVE_FEATURES_H@ +HAVE_FFS = @HAVE_FFS@ +HAVE_FFSL = @HAVE_FFSL@ +HAVE_FFSLL = @HAVE_FFSLL@ +HAVE_FMA = @HAVE_FMA@ +HAVE_FMAF = @HAVE_FMAF@ +HAVE_FMAL = @HAVE_FMAL@ +HAVE_FMODF = @HAVE_FMODF@ +HAVE_FMODL = @HAVE_FMODL@ +HAVE_FREXPF = @HAVE_FREXPF@ +HAVE_FSEEKO = @HAVE_FSEEKO@ +HAVE_FSYNC = @HAVE_FSYNC@ +HAVE_FTELLO = @HAVE_FTELLO@ +HAVE_FTRUNCATE = @HAVE_FTRUNCATE@ +HAVE_GETDTABLESIZE = @HAVE_GETDTABLESIZE@ +HAVE_GETGROUPS = @HAVE_GETGROUPS@ +HAVE_GETHOSTNAME = @HAVE_GETHOSTNAME@ +HAVE_GETLOGIN = @HAVE_GETLOGIN@ +HAVE_GETOPT_H = @HAVE_GETOPT_H@ +HAVE_GETPAGESIZE = @HAVE_GETPAGESIZE@ +HAVE_GETSUBOPT = @HAVE_GETSUBOPT@ +HAVE_GRANTPT = @HAVE_GRANTPT@ +HAVE_GROUP_MEMBER = @HAVE_GROUP_MEMBER@ +HAVE_HYPOTF = @HAVE_HYPOTF@ +HAVE_HYPOTL = @HAVE_HYPOTL@ +HAVE_ILOGB = @HAVE_ILOGB@ +HAVE_ILOGBF = @HAVE_ILOGBF@ +HAVE_ILOGBL = @HAVE_ILOGBL@ +HAVE_INTTYPES_H = @HAVE_INTTYPES_H@ +HAVE_ISNAND = @HAVE_ISNAND@ +HAVE_ISNANF = @HAVE_ISNANF@ +HAVE_ISNANL = @HAVE_ISNANL@ +HAVE_ISWBLANK = @HAVE_ISWBLANK@ +HAVE_ISWCNTRL = @HAVE_ISWCNTRL@ +HAVE_LANGINFO_CODESET = @HAVE_LANGINFO_CODESET@ +HAVE_LANGINFO_ERA = @HAVE_LANGINFO_ERA@ +HAVE_LANGINFO_H = @HAVE_LANGINFO_H@ +HAVE_LANGINFO_T_FMT_AMPM = @HAVE_LANGINFO_T_FMT_AMPM@ +HAVE_LANGINFO_YESEXPR = @HAVE_LANGINFO_YESEXPR@ +HAVE_LCHOWN = @HAVE_LCHOWN@ +HAVE_LDEXPF = @HAVE_LDEXPF@ +HAVE_LINK = @HAVE_LINK@ +HAVE_LINKAT = @HAVE_LINKAT@ +HAVE_LOG10F = @HAVE_LOG10F@ +HAVE_LOG10L = @HAVE_LOG10L@ +HAVE_LOG1P = @HAVE_LOG1P@ +HAVE_LOG1PF = @HAVE_LOG1PF@ +HAVE_LOG1PL = @HAVE_LOG1PL@ +HAVE_LOGBF = @HAVE_LOGBF@ +HAVE_LOGBL = @HAVE_LOGBL@ +HAVE_LOGF = @HAVE_LOGF@ +HAVE_LOGL = @HAVE_LOGL@ +HAVE_LONG_LONG_INT = @HAVE_LONG_LONG_INT@ +HAVE_MBRLEN = @HAVE_MBRLEN@ +HAVE_MBRTOWC = @HAVE_MBRTOWC@ +HAVE_MBSINIT = @HAVE_MBSINIT@ +HAVE_MBSLEN = @HAVE_MBSLEN@ +HAVE_MBSNRTOWCS = @HAVE_MBSNRTOWCS@ +HAVE_MBSRTOWCS = @HAVE_MBSRTOWCS@ +HAVE_MEMCHR = @HAVE_MEMCHR@ +HAVE_MEMPCPY = @HAVE_MEMPCPY@ +HAVE_MKDTEMP = @HAVE_MKDTEMP@ +HAVE_MKOSTEMP = @HAVE_MKOSTEMP@ +HAVE_MKOSTEMPS = @HAVE_MKOSTEMPS@ +HAVE_MKSTEMP = @HAVE_MKSTEMP@ +HAVE_MKSTEMPS = @HAVE_MKSTEMPS@ +HAVE_MODFF = @HAVE_MODFF@ +HAVE_MODFL = @HAVE_MODFL@ +HAVE_MSVC_INVALID_PARAMETER_HANDLER = @HAVE_MSVC_INVALID_PARAMETER_HANDLER@ +HAVE_NANOSLEEP = @HAVE_NANOSLEEP@ +HAVE_NETDB_H = @HAVE_NETDB_H@ +HAVE_NETINET_IN_H = @HAVE_NETINET_IN_H@ +HAVE_NL_LANGINFO = @HAVE_NL_LANGINFO@ +HAVE_OS_H = @HAVE_OS_H@ +HAVE_PCLOSE = @HAVE_PCLOSE@ +HAVE_PIPE = @HAVE_PIPE@ +HAVE_PIPE2 = @HAVE_PIPE2@ +HAVE_POPEN = @HAVE_POPEN@ +HAVE_POSIX_OPENPT = @HAVE_POSIX_OPENPT@ +HAVE_POWF = @HAVE_POWF@ +HAVE_PREAD = @HAVE_PREAD@ +HAVE_PTSNAME = @HAVE_PTSNAME@ +HAVE_PTSNAME_R = @HAVE_PTSNAME_R@ +HAVE_PWRITE = @HAVE_PWRITE@ +HAVE_RANDOM = @HAVE_RANDOM@ +HAVE_RANDOM_H = @HAVE_RANDOM_H@ +HAVE_RANDOM_R = @HAVE_RANDOM_R@ +HAVE_RAWMEMCHR = @HAVE_RAWMEMCHR@ +HAVE_READLINK = @HAVE_READLINK@ +HAVE_READLINKAT = @HAVE_READLINKAT@ +HAVE_REALPATH = @HAVE_REALPATH@ +HAVE_REMAINDER = @HAVE_REMAINDER@ +HAVE_REMAINDERF = @HAVE_REMAINDERF@ +HAVE_RENAMEAT = @HAVE_RENAMEAT@ +HAVE_RINT = @HAVE_RINT@ +HAVE_RINTL = @HAVE_RINTL@ +HAVE_RPMATCH = @HAVE_RPMATCH@ +HAVE_SA_FAMILY_T = @HAVE_SA_FAMILY_T@ +HAVE_SECURE_GETENV = @HAVE_SECURE_GETENV@ +HAVE_SETENV = @HAVE_SETENV@ +HAVE_SETHOSTNAME = @HAVE_SETHOSTNAME@ +HAVE_SIGNED_SIG_ATOMIC_T = @HAVE_SIGNED_SIG_ATOMIC_T@ +HAVE_SIGNED_WCHAR_T = @HAVE_SIGNED_WCHAR_T@ +HAVE_SIGNED_WINT_T = @HAVE_SIGNED_WINT_T@ +HAVE_SINF = @HAVE_SINF@ +HAVE_SINHF = @HAVE_SINHF@ +HAVE_SINL = @HAVE_SINL@ +HAVE_SLEEP = @HAVE_SLEEP@ +HAVE_SQRTF = @HAVE_SQRTF@ +HAVE_SQRTL = @HAVE_SQRTL@ +HAVE_STDINT_H = @HAVE_STDINT_H@ +HAVE_STPCPY = @HAVE_STPCPY@ +HAVE_STPNCPY = @HAVE_STPNCPY@ +HAVE_STRCASECMP = @HAVE_STRCASECMP@ +HAVE_STRCASESTR = @HAVE_STRCASESTR@ +HAVE_STRCHRNUL = @HAVE_STRCHRNUL@ +HAVE_STRINGS_H = @HAVE_STRINGS_H@ +HAVE_STRPBRK = @HAVE_STRPBRK@ +HAVE_STRPTIME = @HAVE_STRPTIME@ +HAVE_STRSEP = @HAVE_STRSEP@ +HAVE_STRTOD = @HAVE_STRTOD@ +HAVE_STRTOLL = @HAVE_STRTOLL@ +HAVE_STRTOULL = @HAVE_STRTOULL@ +HAVE_STRUCT_ADDRINFO = @HAVE_STRUCT_ADDRINFO@ +HAVE_STRUCT_RANDOM_DATA = @HAVE_STRUCT_RANDOM_DATA@ +HAVE_STRUCT_SOCKADDR_STORAGE = @HAVE_STRUCT_SOCKADDR_STORAGE@ +HAVE_STRUCT_SOCKADDR_STORAGE_SS_FAMILY = @HAVE_STRUCT_SOCKADDR_STORAGE_SS_FAMILY@ +HAVE_STRVERSCMP = @HAVE_STRVERSCMP@ +HAVE_SYMLINK = @HAVE_SYMLINK@ +HAVE_SYMLINKAT = @HAVE_SYMLINKAT@ +HAVE_SYS_BITYPES_H = @HAVE_SYS_BITYPES_H@ +HAVE_SYS_INTTYPES_H = @HAVE_SYS_INTTYPES_H@ +HAVE_SYS_LOADAVG_H = @HAVE_SYS_LOADAVG_H@ +HAVE_SYS_PARAM_H = @HAVE_SYS_PARAM_H@ +HAVE_SYS_SOCKET_H = @HAVE_SYS_SOCKET_H@ +HAVE_SYS_TYPES_H = @HAVE_SYS_TYPES_H@ +HAVE_SYS_UIO_H = @HAVE_SYS_UIO_H@ +HAVE_TANF = @HAVE_TANF@ +HAVE_TANHF = @HAVE_TANHF@ +HAVE_TANL = @HAVE_TANL@ +HAVE_TIMEGM = @HAVE_TIMEGM@ +HAVE_UNISTD_H = @HAVE_UNISTD_H@ +HAVE_UNLINKAT = @HAVE_UNLINKAT@ +HAVE_UNLOCKPT = @HAVE_UNLOCKPT@ +HAVE_UNSIGNED_LONG_LONG_INT = @HAVE_UNSIGNED_LONG_LONG_INT@ +HAVE_USLEEP = @HAVE_USLEEP@ +HAVE_VASPRINTF = @HAVE_VASPRINTF@ +HAVE_VDPRINTF = @HAVE_VDPRINTF@ +HAVE_WCHAR_H = @HAVE_WCHAR_H@ +HAVE_WCHAR_T = @HAVE_WCHAR_T@ +HAVE_WCPCPY = @HAVE_WCPCPY@ +HAVE_WCPNCPY = @HAVE_WCPNCPY@ +HAVE_WCRTOMB = @HAVE_WCRTOMB@ +HAVE_WCSCASECMP = @HAVE_WCSCASECMP@ +HAVE_WCSCAT = @HAVE_WCSCAT@ +HAVE_WCSCHR = @HAVE_WCSCHR@ +HAVE_WCSCMP = @HAVE_WCSCMP@ +HAVE_WCSCOLL = @HAVE_WCSCOLL@ +HAVE_WCSCPY = @HAVE_WCSCPY@ +HAVE_WCSCSPN = @HAVE_WCSCSPN@ +HAVE_WCSDUP = @HAVE_WCSDUP@ +HAVE_WCSLEN = @HAVE_WCSLEN@ +HAVE_WCSNCASECMP = @HAVE_WCSNCASECMP@ +HAVE_WCSNCAT = @HAVE_WCSNCAT@ +HAVE_WCSNCMP = @HAVE_WCSNCMP@ +HAVE_WCSNCPY = @HAVE_WCSNCPY@ +HAVE_WCSNLEN = @HAVE_WCSNLEN@ +HAVE_WCSNRTOMBS = @HAVE_WCSNRTOMBS@ +HAVE_WCSPBRK = @HAVE_WCSPBRK@ +HAVE_WCSRCHR = @HAVE_WCSRCHR@ +HAVE_WCSRTOMBS = @HAVE_WCSRTOMBS@ +HAVE_WCSSPN = @HAVE_WCSSPN@ +HAVE_WCSSTR = @HAVE_WCSSTR@ +HAVE_WCSTOK = @HAVE_WCSTOK@ +HAVE_WCSWIDTH = @HAVE_WCSWIDTH@ +HAVE_WCSXFRM = @HAVE_WCSXFRM@ +HAVE_WCTRANS_T = @HAVE_WCTRANS_T@ +HAVE_WCTYPE_H = @HAVE_WCTYPE_H@ +HAVE_WCTYPE_T = @HAVE_WCTYPE_T@ +HAVE_WINSOCK2_H = @HAVE_WINSOCK2_H@ +HAVE_WINT_T = @HAVE_WINT_T@ +HAVE_WMEMCHR = @HAVE_WMEMCHR@ +HAVE_WMEMCMP = @HAVE_WMEMCMP@ +HAVE_WMEMCPY = @HAVE_WMEMCPY@ +HAVE_WMEMMOVE = @HAVE_WMEMMOVE@ +HAVE_WMEMSET = @HAVE_WMEMSET@ +HAVE_WS2TCPIP_H = @HAVE_WS2TCPIP_H@ +HAVE_XLOCALE_H = @HAVE_XLOCALE_H@ +HAVE__BOOL = @HAVE__BOOL@ +HAVE__EXIT = @HAVE__EXIT@ +HOSTENT_LIB = @HOSTENT_LIB@ +HOSTNAME = @HOSTNAME@ +INCLUDE_NEXT = @INCLUDE_NEXT@ +INCLUDE_NEXT_AS_FIRST_DIRECTIVE = @INCLUDE_NEXT_AS_FIRST_DIRECTIVE@ +INET_NTOP_LIB = @INET_NTOP_LIB@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +INTLLIBS = @INTLLIBS@ +INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ +KRBINCLUDE = @KRBINCLUDE@ +LD = @LD@ +LDAPINCLUDE = @LDAPINCLUDE@ +LDAPLIBS = @LDAPLIBS@ +LDFLAGS = @LDFLAGS@ +LIBCURL = @LIBCURL@ +LIBCURLCFLAGS = @LIBCURLCFLAGS@ +LIBCURLINCLUDE = @LIBCURLINCLUDE@ +LIBCURLLIBS = @LIBCURLLIBS@ +LIBCURL_CPPFLAGS = @LIBCURL_CPPFLAGS@ +LIBGNU_LIBDEPS = @LIBGNU_LIBDEPS@ +LIBGNU_LTLIBDEPS = @LIBGNU_LTLIBDEPS@ +LIBICONV = @LIBICONV@ +LIBINTL = @LIBINTL@ +LIBMULTITHREAD = @LIBMULTITHREAD@ +LIBOBJS = @LIBOBJS@ +LIBPTH = @LIBPTH@ +LIBPTH_PREFIX = @LIBPTH_PREFIX@ +LIBS = @LIBS@ +LIBSOCKET = @LIBSOCKET@ +LIBTHREAD = @LIBTHREAD@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LOCALCHARSET_TESTS_ENVIRONMENT = @LOCALCHARSET_TESTS_ENVIRONMENT@ +LOCALE_FR = @LOCALE_FR@ +LOCALE_FR_UTF8 = @LOCALE_FR_UTF8@ +LOCALE_JA = @LOCALE_JA@ +LOCALE_ZH_CN = @LOCALE_ZH_CN@ +LTLIBICONV = @LTLIBICONV@ +LTLIBINTL = @LTLIBINTL@ +LTLIBMULTITHREAD = @LTLIBMULTITHREAD@ +LTLIBOBJS = @LTLIBOBJS@ +LTLIBPTH = @LTLIBPTH@ +LTLIBTHREAD = @LTLIBTHREAD@ +MAINT = @MAINT@ +MAKEINFO = @MAKEINFO@ +MANIFEST_TOOL = @MANIFEST_TOOL@ +MATHLIBS = @MATHLIBS@ +MKDIR_P = @MKDIR_P@ +MSGFMT = @MSGFMT@ +MSGFMT_015 = @MSGFMT_015@ +MSGMERGE = @MSGMERGE@ +MYSQLCFLAGS = @MYSQLCFLAGS@ +MYSQLINCLUDE = @MYSQLINCLUDE@ +MYSQLLIBS = @MYSQLLIBS@ +NETINET_IN_H = @NETINET_IN_H@ +NEXT_ARPA_INET_H = @NEXT_ARPA_INET_H@ +NEXT_AS_FIRST_DIRECTIVE_ARPA_INET_H = @NEXT_AS_FIRST_DIRECTIVE_ARPA_INET_H@ +NEXT_AS_FIRST_DIRECTIVE_ERRNO_H = @NEXT_AS_FIRST_DIRECTIVE_ERRNO_H@ +NEXT_AS_FIRST_DIRECTIVE_FLOAT_H = @NEXT_AS_FIRST_DIRECTIVE_FLOAT_H@ +NEXT_AS_FIRST_DIRECTIVE_GETOPT_H = @NEXT_AS_FIRST_DIRECTIVE_GETOPT_H@ +NEXT_AS_FIRST_DIRECTIVE_LANGINFO_H = @NEXT_AS_FIRST_DIRECTIVE_LANGINFO_H@ +NEXT_AS_FIRST_DIRECTIVE_LOCALE_H = @NEXT_AS_FIRST_DIRECTIVE_LOCALE_H@ +NEXT_AS_FIRST_DIRECTIVE_MATH_H = @NEXT_AS_FIRST_DIRECTIVE_MATH_H@ +NEXT_AS_FIRST_DIRECTIVE_NETDB_H = @NEXT_AS_FIRST_DIRECTIVE_NETDB_H@ +NEXT_AS_FIRST_DIRECTIVE_NETINET_IN_H = @NEXT_AS_FIRST_DIRECTIVE_NETINET_IN_H@ +NEXT_AS_FIRST_DIRECTIVE_STDDEF_H = @NEXT_AS_FIRST_DIRECTIVE_STDDEF_H@ +NEXT_AS_FIRST_DIRECTIVE_STDINT_H = @NEXT_AS_FIRST_DIRECTIVE_STDINT_H@ +NEXT_AS_FIRST_DIRECTIVE_STDIO_H = @NEXT_AS_FIRST_DIRECTIVE_STDIO_H@ +NEXT_AS_FIRST_DIRECTIVE_STDLIB_H = @NEXT_AS_FIRST_DIRECTIVE_STDLIB_H@ +NEXT_AS_FIRST_DIRECTIVE_STRINGS_H = @NEXT_AS_FIRST_DIRECTIVE_STRINGS_H@ +NEXT_AS_FIRST_DIRECTIVE_STRING_H = @NEXT_AS_FIRST_DIRECTIVE_STRING_H@ +NEXT_AS_FIRST_DIRECTIVE_SYS_SOCKET_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_SOCKET_H@ +NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H@ +NEXT_AS_FIRST_DIRECTIVE_SYS_UIO_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_UIO_H@ +NEXT_AS_FIRST_DIRECTIVE_TIME_H = @NEXT_AS_FIRST_DIRECTIVE_TIME_H@ +NEXT_AS_FIRST_DIRECTIVE_UNISTD_H = @NEXT_AS_FIRST_DIRECTIVE_UNISTD_H@ +NEXT_AS_FIRST_DIRECTIVE_WCHAR_H = @NEXT_AS_FIRST_DIRECTIVE_WCHAR_H@ +NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H = @NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H@ +NEXT_ERRNO_H = @NEXT_ERRNO_H@ +NEXT_FLOAT_H = @NEXT_FLOAT_H@ +NEXT_GETOPT_H = @NEXT_GETOPT_H@ +NEXT_LANGINFO_H = @NEXT_LANGINFO_H@ +NEXT_LOCALE_H = @NEXT_LOCALE_H@ +NEXT_MATH_H = @NEXT_MATH_H@ +NEXT_NETDB_H = @NEXT_NETDB_H@ +NEXT_NETINET_IN_H = @NEXT_NETINET_IN_H@ +NEXT_STDDEF_H = @NEXT_STDDEF_H@ +NEXT_STDINT_H = @NEXT_STDINT_H@ +NEXT_STDIO_H = @NEXT_STDIO_H@ +NEXT_STDLIB_H = @NEXT_STDLIB_H@ +NEXT_STRINGS_H = @NEXT_STRINGS_H@ +NEXT_STRING_H = @NEXT_STRING_H@ +NEXT_SYS_SOCKET_H = @NEXT_SYS_SOCKET_H@ +NEXT_SYS_TYPES_H = @NEXT_SYS_TYPES_H@ +NEXT_SYS_UIO_H = @NEXT_SYS_UIO_H@ +NEXT_TIME_H = @NEXT_TIME_H@ +NEXT_UNISTD_H = @NEXT_UNISTD_H@ +NEXT_WCHAR_H = @NEXT_WCHAR_H@ +NEXT_WCTYPE_H = @NEXT_WCTYPE_H@ +NM = @NM@ +NMEDIT = @NMEDIT@ +NP_RELEASE = @NP_RELEASE@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PATH_TO_APTGET = @PATH_TO_APTGET@ +PATH_TO_DIG = @PATH_TO_DIG@ +PATH_TO_ENV = @PATH_TO_ENV@ +PATH_TO_FPING = @PATH_TO_FPING@ +PATH_TO_FPING6 = @PATH_TO_FPING6@ +PATH_TO_LMSTAT = @PATH_TO_LMSTAT@ +PATH_TO_LSPS = @PATH_TO_LSPS@ +PATH_TO_MAILQ = @PATH_TO_MAILQ@ +PATH_TO_NSLOOKUP = @PATH_TO_NSLOOKUP@ +PATH_TO_PING = @PATH_TO_PING@ +PATH_TO_PING6 = @PATH_TO_PING6@ +PATH_TO_PS = @PATH_TO_PS@ +PATH_TO_QMAIL_QSTAT = @PATH_TO_QMAIL_QSTAT@ +PATH_TO_QSTAT = @PATH_TO_QSTAT@ +PATH_TO_QUAKESTAT = @PATH_TO_QUAKESTAT@ +PATH_TO_RPCINFO = @PATH_TO_RPCINFO@ +PATH_TO_SMBCLIENT = @PATH_TO_SMBCLIENT@ +PATH_TO_SNMPGET = @PATH_TO_SNMPGET@ +PATH_TO_SNMPGETNEXT = @PATH_TO_SNMPGETNEXT@ +PATH_TO_SSH = @PATH_TO_SSH@ +PATH_TO_SUDO = @PATH_TO_SUDO@ +PATH_TO_SWAP = @PATH_TO_SWAP@ +PATH_TO_SWAPINFO = @PATH_TO_SWAPINFO@ +PATH_TO_UPTIME = @PATH_TO_UPTIME@ +PATH_TO_WHO = @PATH_TO_WHO@ +PERL = @PERL@ +PERLMODS_DIR = @PERLMODS_DIR@ +PGINCLUDE = @PGINCLUDE@ +PGLIBS = @PGLIBS@ +PKGCONFIG = @PKGCONFIG@ +PKG_ARCH = @PKG_ARCH@ +PLUGIN_TEST = @PLUGIN_TEST@ +POSUB = @POSUB@ +POW_LIB = @POW_LIB@ +PRAGMA_COLUMNS = @PRAGMA_COLUMNS@ +PRAGMA_SYSTEM_HEADER = @PRAGMA_SYSTEM_HEADER@ +PST3CFLAGS = @PST3CFLAGS@ +PTHREAD_H_DEFINES_STRUCT_TIMESPEC = @PTHREAD_H_DEFINES_STRUCT_TIMESPEC@ +PTRDIFF_T_SUFFIX = @PTRDIFF_T_SUFFIX@ +RADIUSLIBS = @RADIUSLIBS@ +RANLIB = @RANLIB@ +RELEASE = @RELEASE@ +REPLACE_BTOWC = @REPLACE_BTOWC@ +REPLACE_CALLOC = @REPLACE_CALLOC@ +REPLACE_CANONICALIZE_FILE_NAME = @REPLACE_CANONICALIZE_FILE_NAME@ +REPLACE_CBRTF = @REPLACE_CBRTF@ +REPLACE_CBRTL = @REPLACE_CBRTL@ +REPLACE_CEIL = @REPLACE_CEIL@ +REPLACE_CEILF = @REPLACE_CEILF@ +REPLACE_CEILL = @REPLACE_CEILL@ +REPLACE_CHOWN = @REPLACE_CHOWN@ +REPLACE_CLOSE = @REPLACE_CLOSE@ +REPLACE_DPRINTF = @REPLACE_DPRINTF@ +REPLACE_DUP = @REPLACE_DUP@ +REPLACE_DUP2 = @REPLACE_DUP2@ +REPLACE_DUPLOCALE = @REPLACE_DUPLOCALE@ +REPLACE_EXP2 = @REPLACE_EXP2@ +REPLACE_EXP2L = @REPLACE_EXP2L@ +REPLACE_EXPM1 = @REPLACE_EXPM1@ +REPLACE_EXPM1F = @REPLACE_EXPM1F@ +REPLACE_FABSL = @REPLACE_FABSL@ +REPLACE_FCHOWNAT = @REPLACE_FCHOWNAT@ +REPLACE_FCLOSE = @REPLACE_FCLOSE@ +REPLACE_FDOPEN = @REPLACE_FDOPEN@ +REPLACE_FFLUSH = @REPLACE_FFLUSH@ +REPLACE_FLOOR = @REPLACE_FLOOR@ +REPLACE_FLOORF = @REPLACE_FLOORF@ +REPLACE_FLOORL = @REPLACE_FLOORL@ +REPLACE_FMA = @REPLACE_FMA@ +REPLACE_FMAF = @REPLACE_FMAF@ +REPLACE_FMAL = @REPLACE_FMAL@ +REPLACE_FMOD = @REPLACE_FMOD@ +REPLACE_FMODF = @REPLACE_FMODF@ +REPLACE_FMODL = @REPLACE_FMODL@ +REPLACE_FOPEN = @REPLACE_FOPEN@ +REPLACE_FPRINTF = @REPLACE_FPRINTF@ +REPLACE_FPURGE = @REPLACE_FPURGE@ +REPLACE_FREOPEN = @REPLACE_FREOPEN@ +REPLACE_FREXP = @REPLACE_FREXP@ +REPLACE_FREXPF = @REPLACE_FREXPF@ +REPLACE_FREXPL = @REPLACE_FREXPL@ +REPLACE_FSEEK = @REPLACE_FSEEK@ +REPLACE_FSEEKO = @REPLACE_FSEEKO@ +REPLACE_FTELL = @REPLACE_FTELL@ +REPLACE_FTELLO = @REPLACE_FTELLO@ +REPLACE_FTRUNCATE = @REPLACE_FTRUNCATE@ +REPLACE_GAI_STRERROR = @REPLACE_GAI_STRERROR@ +REPLACE_GETCWD = @REPLACE_GETCWD@ +REPLACE_GETDELIM = @REPLACE_GETDELIM@ +REPLACE_GETDOMAINNAME = @REPLACE_GETDOMAINNAME@ +REPLACE_GETGROUPS = @REPLACE_GETGROUPS@ +REPLACE_GETLINE = @REPLACE_GETLINE@ +REPLACE_GETLOGIN_R = @REPLACE_GETLOGIN_R@ +REPLACE_GETPAGESIZE = @REPLACE_GETPAGESIZE@ +REPLACE_HUGE_VAL = @REPLACE_HUGE_VAL@ +REPLACE_HYPOT = @REPLACE_HYPOT@ +REPLACE_HYPOTF = @REPLACE_HYPOTF@ +REPLACE_HYPOTL = @REPLACE_HYPOTL@ +REPLACE_ILOGB = @REPLACE_ILOGB@ +REPLACE_ILOGBF = @REPLACE_ILOGBF@ +REPLACE_INET_NTOP = @REPLACE_INET_NTOP@ +REPLACE_INET_PTON = @REPLACE_INET_PTON@ +REPLACE_ISATTY = @REPLACE_ISATTY@ +REPLACE_ISFINITE = @REPLACE_ISFINITE@ +REPLACE_ISINF = @REPLACE_ISINF@ +REPLACE_ISNAN = @REPLACE_ISNAN@ +REPLACE_ISWBLANK = @REPLACE_ISWBLANK@ +REPLACE_ISWCNTRL = @REPLACE_ISWCNTRL@ +REPLACE_ITOLD = @REPLACE_ITOLD@ +REPLACE_LCHOWN = @REPLACE_LCHOWN@ +REPLACE_LDEXPL = @REPLACE_LDEXPL@ +REPLACE_LINK = @REPLACE_LINK@ +REPLACE_LINKAT = @REPLACE_LINKAT@ +REPLACE_LOCALECONV = @REPLACE_LOCALECONV@ +REPLACE_LOCALTIME_R = @REPLACE_LOCALTIME_R@ +REPLACE_LOG = @REPLACE_LOG@ +REPLACE_LOG10 = @REPLACE_LOG10@ +REPLACE_LOG10F = @REPLACE_LOG10F@ +REPLACE_LOG10L = @REPLACE_LOG10L@ +REPLACE_LOG1P = @REPLACE_LOG1P@ +REPLACE_LOG1PF = @REPLACE_LOG1PF@ +REPLACE_LOG1PL = @REPLACE_LOG1PL@ +REPLACE_LOG2 = @REPLACE_LOG2@ +REPLACE_LOG2F = @REPLACE_LOG2F@ +REPLACE_LOG2L = @REPLACE_LOG2L@ +REPLACE_LOGB = @REPLACE_LOGB@ +REPLACE_LOGBF = @REPLACE_LOGBF@ +REPLACE_LOGBL = @REPLACE_LOGBL@ +REPLACE_LOGF = @REPLACE_LOGF@ +REPLACE_LOGL = @REPLACE_LOGL@ +REPLACE_LSEEK = @REPLACE_LSEEK@ +REPLACE_MALLOC = @REPLACE_MALLOC@ +REPLACE_MBRLEN = @REPLACE_MBRLEN@ +REPLACE_MBRTOWC = @REPLACE_MBRTOWC@ +REPLACE_MBSINIT = @REPLACE_MBSINIT@ +REPLACE_MBSNRTOWCS = @REPLACE_MBSNRTOWCS@ +REPLACE_MBSRTOWCS = @REPLACE_MBSRTOWCS@ +REPLACE_MBSTATE_T = @REPLACE_MBSTATE_T@ +REPLACE_MBTOWC = @REPLACE_MBTOWC@ +REPLACE_MEMCHR = @REPLACE_MEMCHR@ +REPLACE_MEMMEM = @REPLACE_MEMMEM@ +REPLACE_MKSTEMP = @REPLACE_MKSTEMP@ +REPLACE_MKTIME = @REPLACE_MKTIME@ +REPLACE_MODF = @REPLACE_MODF@ +REPLACE_MODFF = @REPLACE_MODFF@ +REPLACE_MODFL = @REPLACE_MODFL@ +REPLACE_NAN = @REPLACE_NAN@ +REPLACE_NANOSLEEP = @REPLACE_NANOSLEEP@ +REPLACE_NL_LANGINFO = @REPLACE_NL_LANGINFO@ +REPLACE_NULL = @REPLACE_NULL@ +REPLACE_OBSTACK_PRINTF = @REPLACE_OBSTACK_PRINTF@ +REPLACE_PERROR = @REPLACE_PERROR@ +REPLACE_POPEN = @REPLACE_POPEN@ +REPLACE_PREAD = @REPLACE_PREAD@ +REPLACE_PRINTF = @REPLACE_PRINTF@ +REPLACE_PTSNAME = @REPLACE_PTSNAME@ +REPLACE_PTSNAME_R = @REPLACE_PTSNAME_R@ +REPLACE_PUTENV = @REPLACE_PUTENV@ +REPLACE_PWRITE = @REPLACE_PWRITE@ +REPLACE_RANDOM_R = @REPLACE_RANDOM_R@ +REPLACE_READ = @REPLACE_READ@ +REPLACE_READLINK = @REPLACE_READLINK@ +REPLACE_REALLOC = @REPLACE_REALLOC@ +REPLACE_REALPATH = @REPLACE_REALPATH@ +REPLACE_REMAINDER = @REPLACE_REMAINDER@ +REPLACE_REMAINDERF = @REPLACE_REMAINDERF@ +REPLACE_REMAINDERL = @REPLACE_REMAINDERL@ +REPLACE_REMOVE = @REPLACE_REMOVE@ +REPLACE_RENAME = @REPLACE_RENAME@ +REPLACE_RENAMEAT = @REPLACE_RENAMEAT@ +REPLACE_RMDIR = @REPLACE_RMDIR@ +REPLACE_ROUND = @REPLACE_ROUND@ +REPLACE_ROUNDF = @REPLACE_ROUNDF@ +REPLACE_ROUNDL = @REPLACE_ROUNDL@ +REPLACE_SETENV = @REPLACE_SETENV@ +REPLACE_SETLOCALE = @REPLACE_SETLOCALE@ +REPLACE_SIGNBIT = @REPLACE_SIGNBIT@ +REPLACE_SIGNBIT_USING_GCC = @REPLACE_SIGNBIT_USING_GCC@ +REPLACE_SLEEP = @REPLACE_SLEEP@ +REPLACE_SNPRINTF = @REPLACE_SNPRINTF@ +REPLACE_SPRINTF = @REPLACE_SPRINTF@ +REPLACE_SQRTL = @REPLACE_SQRTL@ +REPLACE_STDIO_READ_FUNCS = @REPLACE_STDIO_READ_FUNCS@ +REPLACE_STDIO_WRITE_FUNCS = @REPLACE_STDIO_WRITE_FUNCS@ +REPLACE_STPNCPY = @REPLACE_STPNCPY@ +REPLACE_STRCASESTR = @REPLACE_STRCASESTR@ +REPLACE_STRCHRNUL = @REPLACE_STRCHRNUL@ +REPLACE_STRDUP = @REPLACE_STRDUP@ +REPLACE_STRERROR = @REPLACE_STRERROR@ +REPLACE_STRERROR_R = @REPLACE_STRERROR_R@ +REPLACE_STRNCAT = @REPLACE_STRNCAT@ +REPLACE_STRNDUP = @REPLACE_STRNDUP@ +REPLACE_STRNLEN = @REPLACE_STRNLEN@ +REPLACE_STRSIGNAL = @REPLACE_STRSIGNAL@ +REPLACE_STRSTR = @REPLACE_STRSTR@ +REPLACE_STRTOD = @REPLACE_STRTOD@ +REPLACE_STRTOK_R = @REPLACE_STRTOK_R@ +REPLACE_STRUCT_LCONV = @REPLACE_STRUCT_LCONV@ +REPLACE_SYMLINK = @REPLACE_SYMLINK@ +REPLACE_TIMEGM = @REPLACE_TIMEGM@ +REPLACE_TMPFILE = @REPLACE_TMPFILE@ +REPLACE_TOWLOWER = @REPLACE_TOWLOWER@ +REPLACE_TRUNC = @REPLACE_TRUNC@ +REPLACE_TRUNCF = @REPLACE_TRUNCF@ +REPLACE_TRUNCL = @REPLACE_TRUNCL@ +REPLACE_TTYNAME_R = @REPLACE_TTYNAME_R@ +REPLACE_UNLINK = @REPLACE_UNLINK@ +REPLACE_UNLINKAT = @REPLACE_UNLINKAT@ +REPLACE_UNSETENV = @REPLACE_UNSETENV@ +REPLACE_USLEEP = @REPLACE_USLEEP@ +REPLACE_VASPRINTF = @REPLACE_VASPRINTF@ +REPLACE_VDPRINTF = @REPLACE_VDPRINTF@ +REPLACE_VFPRINTF = @REPLACE_VFPRINTF@ +REPLACE_VPRINTF = @REPLACE_VPRINTF@ +REPLACE_VSNPRINTF = @REPLACE_VSNPRINTF@ +REPLACE_VSPRINTF = @REPLACE_VSPRINTF@ +REPLACE_WCRTOMB = @REPLACE_WCRTOMB@ +REPLACE_WCSNRTOMBS = @REPLACE_WCSNRTOMBS@ +REPLACE_WCSRTOMBS = @REPLACE_WCSRTOMBS@ +REPLACE_WCSWIDTH = @REPLACE_WCSWIDTH@ +REPLACE_WCTOB = @REPLACE_WCTOB@ +REPLACE_WCTOMB = @REPLACE_WCTOMB@ +REPLACE_WCWIDTH = @REPLACE_WCWIDTH@ +REPLACE_WRITE = @REPLACE_WRITE@ +REV_DATESTAMP = @REV_DATESTAMP@ +REV_TIMESTAMP = @REV_TIMESTAMP@ +SCRIPT_TEST = @SCRIPT_TEST@ +SED = @SED@ +SERVENT_LIB = @SERVENT_LIB@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SIG_ATOMIC_T_SUFFIX = @SIG_ATOMIC_T_SUFFIX@ +SIZE_T_SUFFIX = @SIZE_T_SUFFIX@ +SOCKETLIBS = @SOCKETLIBS@ +SSLINCLUDE = @SSLINCLUDE@ +SSLLIBS = @SSLLIBS@ +STDALIGN_H = @STDALIGN_H@ +STDBOOL_H = @STDBOOL_H@ +STDDEF_H = @STDDEF_H@ +STDINT_H = @STDINT_H@ +STRIP = @STRIP@ +SUPPORT = @SUPPORT@ +SYS_TIME_H_DEFINES_STRUCT_TIMESPEC = @SYS_TIME_H_DEFINES_STRUCT_TIMESPEC@ +TIME_H_DEFINES_STRUCT_TIMESPEC = @TIME_H_DEFINES_STRUCT_TIMESPEC@ +UNDEFINE_STRTOK_R = @UNDEFINE_STRTOK_R@ +UNISTD_H_HAVE_WINSOCK2_H = @UNISTD_H_HAVE_WINSOCK2_H@ +UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS = @UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS@ +URIPARSER = @URIPARSER@ +URIPARSERCFLAGS = @URIPARSERCFLAGS@ +URIPARSERINCLUDE = @URIPARSERINCLUDE@ +URIPARSERLIBS = @URIPARSERLIBS@ +URIPARSER_CPPFLAGS = @URIPARSER_CPPFLAGS@ +USE_NLS = @USE_NLS@ +VERSION = @VERSION@ +WARRANTY = @WARRANTY@ +WCHAR_T_SUFFIX = @WCHAR_T_SUFFIX@ +WINDOWS_64_BIT_OFF_T = @WINDOWS_64_BIT_OFF_T@ +WINT_T_SUFFIX = @WINT_T_SUFFIX@ +WTSAPI32LIBS = @WTSAPI32LIBS@ +XGETTEXT = @XGETTEXT@ +XGETTEXT_015 = @XGETTEXT_015@ +XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ +_libcurl_config = @_libcurl_config@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_AR = @ac_ct_AR@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +check_tcp_ssl = @check_tcp_ssl@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +gl_LIBOBJS = @gl_LIBOBJS@ +gl_LTLIBOBJS = @gl_LTLIBOBJS@ +gltests_LIBOBJS = @gltests_LIBOBJS@ +gltests_LTLIBOBJS = @gltests_LTLIBOBJS@ +gltests_WITNESS = @gltests_WITNESS@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +lispdir = @lispdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +np_mysql_config = @np_mysql_config@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +with_trusted_path = @with_trusted_path@ +perlmoduledir = $(exec_prefix)/perl +all: all-am + +.SUFFIXES: +$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu perlmods/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --gnu perlmods/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs +tags: TAGS +TAGS: + +ctags: CTAGS +CTAGS: + + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile all-local +installdirs: +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + if test -z '$(STRIP)'; then \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + install; \ + else \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ + fi +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic clean-libtool clean-local mostlyclean-am + +distclean: distclean-am + -rm -f Makefile +distclean-am: clean-am distclean-generic + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: install-exec-local + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: + +.MAKE: install-am install-strip + +.PHONY: all all-am all-local check check-am clean clean-generic \ + clean-libtool clean-local distclean distclean-generic \ + distclean-libtool distdir dvi dvi-am html html-am info info-am \ + install install-am install-data install-data-am install-dvi \ + install-dvi-am install-exec install-exec-am install-exec-local \ + install-html install-html-am install-info install-info-am \ + install-man install-pdf install-pdf-am install-ps \ + install-ps-am install-strip installcheck installcheck-am \ + installdirs maintainer-clean maintainer-clean-generic \ + mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \ + ps ps-am uninstall uninstall-am + + +all-local: + $(top_srcdir)/tools/build_perl_modules -d $(perlmoduledir) -em . + +install-exec-local: + $(top_srcdir)/tools/build_perl_modules -d $(perlmoduledir) -i . + +# Don't run test-debug differently here yet +test test-debug: + $(top_srcdir)/tools/build_perl_modules -d $(perlmoduledir) -t . + +clean-local: + $(top_srcdir)/tools/build_perl_modules -d $(perlmoduledir) -c . + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/perlmods/Math-Calc-Units-1.07.tar.gz b/perlmods/Math-Calc-Units-1.07.tar.gz new file mode 100644 index 0000000..cf26b50 Binary files /dev/null and b/perlmods/Math-Calc-Units-1.07.tar.gz differ diff --git a/perlmods/Module-Build-0.4007.tar.gz b/perlmods/Module-Build-0.4007.tar.gz new file mode 100644 index 0000000..e55375e Binary files /dev/null and b/perlmods/Module-Build-0.4007.tar.gz differ diff --git a/perlmods/Module-Implementation-0.07.tar.gz b/perlmods/Module-Implementation-0.07.tar.gz new file mode 100644 index 0000000..eb156dd Binary files /dev/null and b/perlmods/Module-Implementation-0.07.tar.gz differ diff --git a/perlmods/Module-Metadata-1.000014.tar.gz b/perlmods/Module-Metadata-1.000014.tar.gz new file mode 100644 index 0000000..7a2800c Binary files /dev/null and b/perlmods/Module-Metadata-1.000014.tar.gz differ diff --git a/perlmods/Module-Runtime-0.013.tar.gz b/perlmods/Module-Runtime-0.013.tar.gz new file mode 100644 index 0000000..c84b46e Binary files /dev/null and b/perlmods/Module-Runtime-0.013.tar.gz differ diff --git a/perlmods/Monitoring-Plugin-0.39.tar.gz b/perlmods/Monitoring-Plugin-0.39.tar.gz new file mode 100644 index 0000000..7a35d9e Binary files /dev/null and b/perlmods/Monitoring-Plugin-0.39.tar.gz differ diff --git a/perlmods/Params-Validate-1.08.tar.gz b/perlmods/Params-Validate-1.08.tar.gz new file mode 100644 index 0000000..418d2a1 Binary files /dev/null and b/perlmods/Params-Validate-1.08.tar.gz differ diff --git a/perlmods/Perl-OSType-1.003.tar.gz b/perlmods/Perl-OSType-1.003.tar.gz new file mode 100644 index 0000000..2bb819a Binary files /dev/null and b/perlmods/Perl-OSType-1.003.tar.gz differ diff --git a/perlmods/Test-Simple-0.98.tar.gz b/perlmods/Test-Simple-0.98.tar.gz new file mode 100644 index 0000000..de7d881 Binary files /dev/null and b/perlmods/Test-Simple-0.98.tar.gz differ diff --git a/perlmods/Try-Tiny-0.18.tar.gz b/perlmods/Try-Tiny-0.18.tar.gz new file mode 100644 index 0000000..cb8f67c Binary files /dev/null and b/perlmods/Try-Tiny-0.18.tar.gz differ diff --git a/perlmods/install_order b/perlmods/install_order new file mode 100644 index 0000000..287cf8f --- /dev/null +++ b/perlmods/install_order @@ -0,0 +1,16 @@ +# Modules installed in this order +default: +Test-Simple +Perl-OSType +Module-Implementation +Module-Metadata +version +Module-Build +Module-Runtime +parent +Try-Tiny +Params-Validate +Math-Calc-Units +Class-Accessor +Config-Tiny +Monitoring-Plugin diff --git a/perlmods/parent-0.226.tar.gz b/perlmods/parent-0.226.tar.gz new file mode 100644 index 0000000..f638b27 Binary files /dev/null and b/perlmods/parent-0.226.tar.gz differ diff --git a/perlmods/version-0.9903.tar.gz b/perlmods/version-0.9903.tar.gz new file mode 100644 index 0000000..ce5d91a Binary files /dev/null and b/perlmods/version-0.9903.tar.gz differ diff --git a/pkg/solaris/pkginfo b/pkg/solaris/pkginfo index e74ddfd..0f01cc1 100644 --- a/pkg/solaris/pkginfo +++ b/pkg/solaris/pkginfo @@ -2,11 +2,11 @@ PKG="NGOSplugin" NAME="monitoring-plugins" DESC="Network Monitoring Plugins for Nagios and compatible" ARCH="unknown" -VERSION="2.2,REV=2016.11.29.09.48" +VERSION="2.3,REV=2020.12.09.22.48" CATEGORY="application" VENDOR="Monitoring Plugins Development Team" EMAIL="devel@monitoring-plugins.org" -PSTAMP="nag20161129094818" +PSTAMP="nag20201209224822" BASEDIR="/" CLASSES="none" diff --git a/plugins-root/Makefile.in b/plugins-root/Makefile.in index 29bbc7c..ae1fe2d 100644 --- a/plugins-root/Makefile.in +++ b/plugins-root/Makefile.in @@ -55,8 +55,10 @@ EXTRA_PROGRAMS = pst3$(EXEEXT) subdir = plugins-root DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/m4/np_mysqlclient.m4 \ - $(top_srcdir)/gl/m4/00gnulib.m4 $(top_srcdir)/gl/m4/alloca.m4 \ +am__aclocal_m4_deps = $(top_srcdir)/m4/libcurl.m4 \ + $(top_srcdir)/m4/np_mysqlclient.m4 \ + $(top_srcdir)/m4/uriparser.m4 $(top_srcdir)/gl/m4/00gnulib.m4 \ + $(top_srcdir)/gl/m4/alloca.m4 \ $(top_srcdir)/gl/m4/arpa_inet_h.m4 \ $(top_srcdir)/gl/m4/base64.m4 $(top_srcdir)/gl/m4/btowc.m4 \ $(top_srcdir)/gl/m4/codeset.m4 \ @@ -913,6 +915,11 @@ LD = @LD@ LDAPINCLUDE = @LDAPINCLUDE@ LDAPLIBS = @LDAPLIBS@ LDFLAGS = @LDFLAGS@ +LIBCURL = @LIBCURL@ +LIBCURLCFLAGS = @LIBCURLCFLAGS@ +LIBCURLINCLUDE = @LIBCURLINCLUDE@ +LIBCURLLIBS = @LIBCURLLIBS@ +LIBCURL_CPPFLAGS = @LIBCURL_CPPFLAGS@ LIBGNU_LIBDEPS = @LIBGNU_LIBDEPS@ LIBGNU_LTLIBDEPS = @LIBGNU_LTLIBDEPS@ LIBICONV = @LIBICONV@ @@ -1038,6 +1045,7 @@ PERL = @PERL@ PERLMODS_DIR = @PERLMODS_DIR@ PGINCLUDE = @PGINCLUDE@ PGLIBS = @PGLIBS@ +PKGCONFIG = @PKGCONFIG@ PKG_ARCH = @PKG_ARCH@ PLUGIN_TEST = @PLUGIN_TEST@ POSUB = @POSUB@ @@ -1255,6 +1263,11 @@ TIME_H_DEFINES_STRUCT_TIMESPEC = @TIME_H_DEFINES_STRUCT_TIMESPEC@ UNDEFINE_STRTOK_R = @UNDEFINE_STRTOK_R@ UNISTD_H_HAVE_WINSOCK2_H = @UNISTD_H_HAVE_WINSOCK2_H@ UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS = @UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS@ +URIPARSER = @URIPARSER@ +URIPARSERCFLAGS = @URIPARSERCFLAGS@ +URIPARSERINCLUDE = @URIPARSERINCLUDE@ +URIPARSERLIBS = @URIPARSERLIBS@ +URIPARSER_CPPFLAGS = @URIPARSER_CPPFLAGS@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ WARRANTY = @WARRANTY@ @@ -1265,6 +1278,7 @@ WTSAPI32LIBS = @WTSAPI32LIBS@ XGETTEXT = @XGETTEXT@ XGETTEXT_015 = @XGETTEXT_015@ XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ +_libcurl_config = @_libcurl_config@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ diff --git a/plugins-root/check_dhcp.c b/plugins-root/check_dhcp.c index 88b7ca1..ad67323 100644 --- a/plugins-root/check_dhcp.c +++ b/plugins-root/check_dhcp.c @@ -323,7 +323,8 @@ int get_hardware_address(int sock,char *interface_name){ #elif defined(__bsd__) /* King 2004 see ACKNOWLEDGEMENTS */ - int mib[6], len; + size_t len; + int mib[6]; char *buf; unsigned char *ptr; struct if_msghdr *ifm; @@ -693,7 +694,7 @@ int receive_dhcp_packet(void *buffer, int buffer_size, int sock, int timeout, st else{ bzero(&source_address,sizeof(source_address)); address_size=sizeof(source_address); - recv_result=recvfrom(sock,(char *)buffer,buffer_size,MSG_PEEK,(struct sockaddr *)&source_address,&address_size); + recv_result=recvfrom(sock,(char *)buffer,buffer_size,0,(struct sockaddr *)&source_address,&address_size); if(verbose) printf("recv_result: %d\n",recv_result); diff --git a/plugins-root/check_icmp.c b/plugins-root/check_icmp.c index 9ed12ba..e45fdf6 100644 --- a/plugins-root/check_icmp.c +++ b/plugins-root/check_icmp.c @@ -67,7 +67,9 @@ const char *email = "devel@monitoring-plugins.org"; #include #include #include +#include #include +#include #include #include #include @@ -113,8 +115,8 @@ typedef struct rta_host { unsigned short id; /* id in **table, and icmp pkts */ char *name; /* arg used for adding this host */ char *msg; /* icmp error message, if any */ - struct sockaddr_in saddr_in; /* the address of this host */ - struct in_addr error_addr; /* stores address of error replies */ + struct sockaddr_storage saddr_in; /* the address of this host */ + struct sockaddr_storage error_addr; /* stores address of error replies */ unsigned long long time_waited; /* total time waited, in usecs */ unsigned int icmp_sent, icmp_recv, icmp_lost; /* counters */ unsigned char icmp_type, icmp_code; /* type and code from errors */ @@ -140,6 +142,18 @@ typedef struct icmp_ping_data { unsigned short ping_id; } icmp_ping_data; +typedef union ip_hdr { + struct ip ip; + struct ip6_hdr ip6; +} ip_hdr; + +typedef union icmp_packet { + void *buf; + struct icmp *icp; + struct icmp6_hdr *icp6; + u_short *cksum_in; +} icmp_packet; + /* the different modes of this program are as follows: * MODE_RTA: send all packets no matter what (mimic check_icmp and check_ping) * MODE_HOSTCHECK: Return immediately upon any sign of life @@ -190,8 +204,9 @@ static int get_threshold(char *str, threshold *th); static void run_checks(void); static void set_source_ip(char *); static int add_target(char *); -static int add_target_ip(char *, struct in_addr *); -static int handle_random_icmp(unsigned char *, struct sockaddr_in *); +static int add_target_ip(char *, struct sockaddr_storage *); +static int handle_random_icmp(unsigned char *, struct sockaddr_storage *); +static void parse_address(struct sockaddr_storage *, char *, int); static unsigned short icmp_checksum(unsigned short *, int); static void finish(int); static void crash(const char *, ...); @@ -300,7 +315,7 @@ get_icmp_error_msg(unsigned char icmp_type, unsigned char icmp_code) } static int -handle_random_icmp(unsigned char *packet, struct sockaddr_in *addr) +handle_random_icmp(unsigned char *packet, struct sockaddr_storage *addr) { struct icmp p, sent_icmp; struct rta_host *host = NULL; @@ -342,9 +357,11 @@ handle_random_icmp(unsigned char *packet, struct sockaddr_in *addr) /* it is indeed a response for us */ host = table[ntohs(sent_icmp.icmp_seq)/packets]; if(debug) { + char address[INET6_ADDRSTRLEN]; + parse_address(addr, address, sizeof(address)); printf("Received \"%s\" from %s for ICMP ECHO sent to %s.\n", - get_icmp_error_msg(p.icmp_type, p.icmp_code), - inet_ntoa(addr->sin_addr), host->name); + get_icmp_error_msg(p.icmp_type, p.icmp_code), + address, host->name); } icmp_lost++; @@ -364,11 +381,23 @@ handle_random_icmp(unsigned char *packet, struct sockaddr_in *addr) } host->icmp_type = p.icmp_type; host->icmp_code = p.icmp_code; - host->error_addr.s_addr = addr->sin_addr.s_addr; + host->error_addr = *addr; return 0; } +void parse_address(struct sockaddr_storage *addr, char *address, int size) +{ + switch (address_family) { + case AF_INET: + inet_ntop(address_family, &((struct sockaddr_in *)addr)->sin_addr, address, size); + break; + case AF_INET6: + inet_ntop(address_family, &((struct sockaddr_in6 *)addr)->sin6_addr, address, size); + break; + } +} + int main(int argc, char **argv) { @@ -381,6 +410,7 @@ main(int argc, char **argv) #ifdef SO_TIMESTAMP int on = 1; #endif + char * opts_str = "vhVw:c:n:p:t:H:s:i:b:I:l:m:64"; setlocale (LC_ALL, ""); bindtextdomain (PACKAGE, LOCALEDIR); @@ -390,33 +420,8 @@ main(int argc, char **argv) * that before pointer magic (esp. on network data) */ icmp_sockerrno = udp_sockerrno = tcp_sockerrno = sockets = 0; - if((icmp_sock = socket(PF_INET, SOCK_RAW, IPPROTO_ICMP)) != -1) - sockets |= HAVE_ICMP; - else icmp_sockerrno = errno; - - /* if((udp_sock = socket(PF_INET, SOCK_DGRAM, IPPROTO_UDP)) != -1) */ - /* sockets |= HAVE_UDP; */ - /* else udp_sockerrno = errno; */ - - /* if((tcp_sock = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP)) != -1) */ - /* sockets |= HAVE_TCP; */ - /* else tcp_sockerrno = errno; */ - - /* now drop privileges (no effect if not setsuid or geteuid() == 0) */ - setuid(getuid()); - -#ifdef SO_TIMESTAMP - if(setsockopt(icmp_sock, SOL_SOCKET, SO_TIMESTAMP, &on, sizeof(on))) - if(debug) printf("Warning: no SO_TIMESTAMP support\n"); -#endif // SO_TIMESTAMP - - /* POSIXLY_CORRECT might break things, so unset it (the portable way) */ - environ = NULL; - - /* use the pid to mark packets as ours */ - /* Some systems have 32-bit pid_t so mask off only 16 bits */ - pid = getpid() & 0xffff; - /* printf("pid = %u\n", pid); */ + address_family = -1; + int icmp_proto = IPPROTO_ICMP; /* get calling name the old-fashioned way for portability instead * of relying on the glibc-ism __progname */ @@ -456,20 +461,35 @@ main(int argc, char **argv) packets = 5; } - /* Parse extra opts if any */ - argv=np_extra_opts(&argc, argv, progname); - - /* support "--help" and "--version" */ - if(argc == 2) { - if(!strcmp(argv[1], "--help")) - strcpy(argv[1], "-h"); - if(!strcmp(argv[1], "--version")) - strcpy(argv[1], "-V"); + /* Parse protocol arguments first */ + for(i = 1; i < argc; i++) { + while((arg = getopt(argc, argv, opts_str)) != EOF) { + unsigned short size; + switch(arg) { + case '4': + if (address_family != -1) + crash("Multiple protocol versions not supported"); + address_family = AF_INET; + break; + case '6': +#ifdef USE_IPV6 + if (address_family != -1) + crash("Multiple protocol versions not supported"); + address_family = AF_INET6; +#else + usage (_("IPv6 support not available\n")); +#endif + break; + } + } } + /* Reset argument scanning */ + optind = 1; + /* parse the arguments */ for(i = 1; i < argc; i++) { - while((arg = getopt(argc, argv, "vhVw:c:n:p:t:H:s:i:b:I:l:m:")) != EOF) { + while((arg = getopt(argc, argv, opts_str)) != EOF) { unsigned short size; switch(arg) { case 'v': @@ -530,10 +550,30 @@ main(int argc, char **argv) case 'h': /* help */ print_help (); exit (STATE_UNKNOWN); + break; } } } + /* POSIXLY_CORRECT might break things, so unset it (the portable way) */ + environ = NULL; + + /* use the pid to mark packets as ours */ + /* Some systems have 32-bit pid_t so mask off only 16 bits */ + pid = getpid() & 0xffff; + /* printf("pid = %u\n", pid); */ + + /* Parse extra opts if any */ + argv=np_extra_opts(&argc, argv, progname); + + /* support "--help" and "--version" */ + if(argc == 2) { + if(!strcmp(argv[1], "--help")) + strcpy(argv[1], "-h"); + if(!strcmp(argv[1], "--version")) + strcpy(argv[1], "-V"); + } + argv = &argv[optind]; while(*argv) { add_target(*argv); @@ -545,6 +585,30 @@ main(int argc, char **argv) exit(3); } + // add_target might change address_family + switch ( address_family ){ + case AF_INET: icmp_proto = IPPROTO_ICMP; + break; + case AF_INET6: icmp_proto = IPPROTO_ICMPV6; + break; + default: crash("Address family not supported"); + } + if((icmp_sock = socket(address_family, SOCK_RAW, icmp_proto)) != -1) + sockets |= HAVE_ICMP; + else icmp_sockerrno = errno; + + +#ifdef SO_TIMESTAMP + if(setsockopt(icmp_sock, SOL_SOCKET, SO_TIMESTAMP, &on, sizeof(on))) + if(debug) printf("Warning: no SO_TIMESTAMP support\n"); +#endif // SO_TIMESTAMP + + /* now drop privileges (no effect if not setsuid or geteuid() == 0) */ + if (setuid(getuid()) == -1) { + printf("ERROR: Failed to drop privileges\n"); + return 1; + } + if(!sockets) { if(icmp_sock == -1) { errno = icmp_sockerrno; @@ -608,7 +672,7 @@ main(int argc, char **argv) if(max_completion_time > (u_int)timeout * 1000000) { printf("max_completion_time: %llu timeout: %u\n", max_completion_time, timeout); - printf("Timout must be at lest %llu\n", + printf("Timeout must be at least %llu\n", max_completion_time / 1000000 + 1); } } @@ -633,7 +697,7 @@ main(int argc, char **argv) } host = list; - table = malloc(sizeof(struct rta_host **) * targets); + table = (struct rta_host**)malloc(sizeof(struct rta_host **) * targets); i = 0; while(host) { host->id = i*packets; @@ -697,9 +761,15 @@ run_checks() } } + /* response structure: + * IPv4: * ip header : 20 bytes * icmp header : 28 bytes + * IPv6: + * ip header : 40 bytes + * icmp header : 28 bytes + * both: * icmp echo reply : the rest */ static int @@ -707,16 +777,27 @@ wait_for_reply(int sock, u_int t) { int n, hlen; static unsigned char buf[4096]; - struct sockaddr_in resp_addr; - struct ip *ip; - struct icmp icp; + struct sockaddr_storage resp_addr; + union ip_hdr *ip; + union icmp_packet packet; struct rta_host *host; struct icmp_ping_data data; struct timeval wait_start, now; u_int tdiff, i, per_pkt_wait; + if (!(packet.buf = malloc(icmp_pkt_size))) { + crash("send_icmp_ping(): failed to malloc %d bytes for send buffer", + icmp_pkt_size); + return -1; /* might be reached if we're in debug mode */ + } + + memset(packet.buf, 0, icmp_pkt_size); + /* if we can't listen or don't have anything to listen to, just return */ - if(!t || !icmp_pkts_en_route) return 0; + if(!t || !icmp_pkts_en_route) { + free(packet.buf); + return 0; + } gettimeofday(&wait_start, &tz); @@ -735,7 +816,7 @@ wait_for_reply(int sock, u_int t) /* reap responses until we hit a timeout */ n = recvfrom_wto(sock, buf, sizeof(buf), - (struct sockaddr *)&resp_addr, &t, &now); + (struct sockaddr *)&resp_addr, &t, &now); if(!n) { if(debug > 1) { printf("recvfrom_wto() timed out during a %u usecs wait\n", @@ -745,12 +826,23 @@ wait_for_reply(int sock, u_int t) } if(n < 0) { if(debug) printf("recvfrom_wto() returned errors\n"); + free(packet.buf); return n; } - ip = (struct ip *)buf; - if(debug > 1) printf("received %u bytes from %s\n", - ntohs(ip->ip_len), inet_ntoa(resp_addr.sin_addr)); + // FIXME: with ipv6 we don't have an ip header here + if (address_family != AF_INET6) { + ip = (union ip_hdr *)buf; + + if(debug > 1) { + char address[INET6_ADDRSTRLEN]; + parse_address(&resp_addr, address, sizeof(address)); + printf("received %u bytes from %s\n", + address_family == AF_INET6 ? ntohs(ip->ip6.ip6_plen) + : ntohs(ip->ip.ip_len), + address); + } + } /* obsolete. alpha on tru64 provides the necessary defines, but isn't broken */ /* #if defined( __alpha__ ) && __STDC__ && !defined( __GLIBC__ ) */ @@ -759,12 +851,14 @@ wait_for_reply(int sock, u_int t) * off the bottom 4 bits */ /* hlen = (ip->ip_vhl & 0x0f) << 2; */ /* #else */ - hlen = ip->ip_hl << 2; + hlen = (address_family == AF_INET6) ? 0 : ip->ip.ip_hl << 2; /* #endif */ if(n < (hlen + ICMP_MINLEN)) { + char address[INET6_ADDRSTRLEN]; + parse_address(&resp_addr, address, sizeof(address)); crash("received packet too short for ICMP (%d bytes, expected %d) from %s\n", - n, hlen + icmp_pkt_size, inet_ntoa(resp_addr.sin_addr)); + n, hlen + icmp_pkt_size, address); } /* else if(debug) { */ /* printf("ip header size: %u, packet size: %u (expected %u, %u)\n", */ @@ -773,23 +867,39 @@ wait_for_reply(int sock, u_int t) /* } */ /* check the response */ - memcpy(&icp, buf + hlen, sizeof(icp)); - if(ntohs(icp.icmp_id) != pid || icp.icmp_type != ICMP_ECHOREPLY || - ntohs(icp.icmp_seq) >= targets*packets) { + memcpy(packet.buf, buf + hlen, icmp_pkt_size); +/* address_family == AF_INET6 ? sizeof(struct icmp6_hdr) + : sizeof(struct icmp));*/ + + if( (address_family == PF_INET && + (ntohs(packet.icp->icmp_id) != pid || packet.icp->icmp_type != ICMP_ECHOREPLY + || ntohs(packet.icp->icmp_seq) >= targets * packets)) + || (address_family == PF_INET6 && + (ntohs(packet.icp6->icmp6_id) != pid || packet.icp6->icmp6_type != ICMP6_ECHO_REPLY + || ntohs(packet.icp6->icmp6_seq) >= targets * packets))) { if(debug > 2) printf("not a proper ICMP_ECHOREPLY\n"); handle_random_icmp(buf + hlen, &resp_addr); continue; } /* this is indeed a valid response */ - memcpy(&data, icp.icmp_data, sizeof(data)); - if (debug > 2) - printf("ICMP echo-reply of len %lu, id %u, seq %u, cksum 0x%X\n", - (unsigned long)sizeof(data), ntohs(icp.icmp_id), - ntohs(icp.icmp_seq), icp.icmp_cksum); + if (address_family == PF_INET) { + memcpy(&data, packet.icp->icmp_data, sizeof(data)); + if (debug > 2) + printf("ICMP echo-reply of len %lu, id %u, seq %u, cksum 0x%X\n", + (unsigned long)sizeof(data), ntohs(packet.icp->icmp_id), + ntohs(packet.icp->icmp_seq), packet.icp->icmp_cksum); + host = table[ntohs(packet.icp->icmp_seq)/packets]; + } else { + memcpy(&data, &packet.icp6->icmp6_dataun.icmp6_un_data8[4], sizeof(data)); + if (debug > 2) + printf("ICMP echo-reply of len %lu, id %u, seq %u, cksum 0x%X\n", + (unsigned long)sizeof(data), ntohs(packet.icp6->icmp6_id), + ntohs(packet.icp6->icmp6_seq), packet.icp6->icmp6_cksum); + host = table[ntohs(packet.icp6->icmp6_seq)/packets]; + } - host = table[ntohs(icp.icmp_seq)/packets]; tdiff = get_timevaldiff(&data.stime, &now); host->time_waited += tdiff; @@ -801,22 +911,25 @@ wait_for_reply(int sock, u_int t) host->rtmin = tdiff; if(debug) { + char address[INET6_ADDRSTRLEN]; + parse_address(&resp_addr, address, sizeof(address)); printf("%0.3f ms rtt from %s, outgoing ttl: %u, incoming ttl: %u, max: %0.3f, min: %0.3f\n", - (float)tdiff / 1000, inet_ntoa(resp_addr.sin_addr), - ttl, ip->ip_ttl, (float)host->rtmax / 1000, (float)host->rtmin / 1000); + (float)tdiff / 1000, address, + ttl, ip->ip.ip_ttl, (float)host->rtmax / 1000, (float)host->rtmin / 1000); } /* if we're in hostcheck mode, exit with limited printouts */ if(mode == MODE_HOSTCHECK) { printf("OK - %s responds to ICMP. Packet %u, rta %0.3fms|" - "pkt=%u;;0;%u rta=%0.3f;%0.3f;%0.3f;;\n", - host->name, icmp_recv, (float)tdiff / 1000, - icmp_recv, packets, (float)tdiff / 1000, - (float)warn.rta / 1000, (float)crit.rta / 1000); + "pkt=%u;;0;%u rta=%0.3f;%0.3f;%0.3f;;\n", + host->name, icmp_recv, (float)tdiff / 1000, + icmp_recv, packets, (float)tdiff / 1000, + (float)warn.rta / 1000, (float)crit.rta / 1000); exit(STATE_OK); } } + free(packet.buf); return 0; } @@ -824,62 +937,81 @@ wait_for_reply(int sock, u_int t) static int send_icmp_ping(int sock, struct rta_host *host) { - static union { - void *buf; /* re-use so we prevent leaks */ - struct icmp *icp; - u_short *cksum_in; - } packet = { NULL }; long int len; struct icmp_ping_data data; struct msghdr hdr; struct iovec iov; struct timeval tv; - struct sockaddr *addr; + void *buf = NULL; if(sock == -1) { errno = 0; crash("Attempt to send on bogus socket"); return -1; } - addr = (struct sockaddr *)&host->saddr_in; - if(!packet.buf) { - if (!(packet.buf = malloc(icmp_pkt_size))) { + if(!buf) { + if (!(buf = malloc(icmp_pkt_size))) { crash("send_icmp_ping(): failed to malloc %d bytes for send buffer", icmp_pkt_size); return -1; /* might be reached if we're in debug mode */ } } - memset(packet.buf, 0, icmp_pkt_size); + memset(buf, 0, icmp_pkt_size); - if((gettimeofday(&tv, &tz)) == -1) return -1; + if((gettimeofday(&tv, &tz)) == -1) { + free(buf); + return -1; + } data.ping_id = 10; /* host->icmp.icmp_sent; */ memcpy(&data.stime, &tv, sizeof(tv)); - memcpy(&packet.icp->icmp_data, &data, sizeof(data)); - packet.icp->icmp_type = ICMP_ECHO; - packet.icp->icmp_code = 0; - packet.icp->icmp_cksum = 0; - packet.icp->icmp_id = htons(pid); - packet.icp->icmp_seq = htons(host->id++); - packet.icp->icmp_cksum = icmp_checksum(packet.cksum_in, icmp_pkt_size); - if (debug > 2) - printf("Sending ICMP echo-request of len %lu, id %u, seq %u, cksum 0x%X to host %s\n", - (unsigned long)sizeof(data), ntohs(packet.icp->icmp_id), - ntohs(packet.icp->icmp_seq), packet.icp->icmp_cksum, - host->name); + if (address_family == AF_INET) { + struct icmp *icp = (struct icmp*)buf; + + memcpy(&icp->icmp_data, &data, sizeof(data)); + + icp->icmp_type = ICMP_ECHO; + icp->icmp_code = 0; + icp->icmp_cksum = 0; + icp->icmp_id = htons(pid); + icp->icmp_seq = htons(host->id++); + icp->icmp_cksum = icmp_checksum((unsigned short*)buf, icmp_pkt_size); + + if (debug > 2) + printf("Sending ICMP echo-request of len %lu, id %u, seq %u, cksum 0x%X to host %s\n", + (unsigned long)sizeof(data), ntohs(icp->icmp_id), ntohs(icp->icmp_seq), icp->icmp_cksum, host->name); + } + else { + struct icmp6_hdr *icp6 = (struct icmp6_hdr*)buf; + memcpy(&icp6->icmp6_dataun.icmp6_un_data8[4], &data, sizeof(data)); + icp6->icmp6_type = ICMP6_ECHO_REQUEST; + icp6->icmp6_code = 0; + icp6->icmp6_cksum = 0; + icp6->icmp6_id = htons(pid); + icp6->icmp6_seq = htons(host->id++); + // let checksum be calculated automatically + + if (debug > 2) { + printf("Sending ICMP echo-request of len %lu, id %u, seq %u, cksum 0x%X to host %s\n", + (unsigned long)sizeof(data), ntohs(icp6->icmp6_id), + ntohs(icp6->icmp6_seq), icp6->icmp6_cksum, host->name); + } + } memset(&iov, 0, sizeof(iov)); - iov.iov_base = packet.buf; + iov.iov_base = buf; iov.iov_len = icmp_pkt_size; memset(&hdr, 0, sizeof(hdr)); - hdr.msg_name = addr; - hdr.msg_namelen = sizeof(struct sockaddr); + hdr.msg_name = (struct sockaddr *)&host->saddr_in; + hdr.msg_namelen = sizeof(struct sockaddr_storage); hdr.msg_iov = &iov; hdr.msg_iovlen = 1; + errno = 0; + /* MSG_CONFIRM is a linux thing and only available on linux kernels >= 2.3.15, see send(2) */ #ifdef MSG_CONFIRM len = sendmsg(sock, &hdr, MSG_CONFIRM); @@ -887,9 +1019,15 @@ send_icmp_ping(int sock, struct rta_host *host) len = sendmsg(sock, &hdr, 0); #endif + free(buf); + if(len < 0 || (unsigned int)len != icmp_pkt_size) { - if(debug) printf("Failed to send ping to %s\n", - inet_ntoa(host->saddr_in.sin_addr)); + if(debug) { + char address[INET6_ADDRSTRLEN]; + parse_address((struct sockaddr_storage *)&host->saddr_in, address, sizeof(address)); + printf("Failed to send ping to %s: %s\n", address, strerror(errno)); + } + errno = 0; return -1; } @@ -934,7 +1072,7 @@ recvfrom_wto(int sock, void *buf, unsigned int len, struct sockaddr *saddr, if(!n) return 0; /* timeout */ - slen = sizeof(struct sockaddr); + slen = sizeof(struct sockaddr_storage); memset(&iov, 0, sizeof(iov)); iov.iov_base = buf; @@ -958,6 +1096,7 @@ recvfrom_wto(int sock, void *buf, unsigned int len, struct sockaddr *saddr, break ; } } + if (!chdr) #endif // SO_TIMESTAMP gettimeofday(tv, &tz); @@ -991,6 +1130,7 @@ finish(int sig) /* iterate thrice to calculate values, give output, and print perfparse */ host = list; + while(host) { if(!host->icmp_recv) { /* rta 0 is ofcourse not entirely correct, but will still show up @@ -1039,10 +1179,12 @@ finish(int sig) if(!host->icmp_recv) { status = STATE_CRITICAL; if(host->flags & FLAG_LOST_CAUSE) { + char address[INET6_ADDRSTRLEN]; + parse_address(&host->error_addr, address, sizeof(address)); printf("%s: %s @ %s. rta nan, lost %d%%", host->name, get_icmp_error_msg(host->icmp_type, host->icmp_code), - inet_ntoa(host->error_addr), + address, 100); } else { /* not marked as lost cause, so we have no flags for it */ @@ -1104,7 +1246,6 @@ get_timevaldiff(struct timeval *early, struct timeval *later) { return 0; } - ret = (later->tv_sec - early->tv_sec) * 1000000; ret += later->tv_usec - early->tv_usec; @@ -1112,18 +1253,35 @@ get_timevaldiff(struct timeval *early, struct timeval *later) } static int -add_target_ip(char *arg, struct in_addr *in) +add_target_ip(char *arg, struct sockaddr_storage *in) { struct rta_host *host; + struct sockaddr_in *sin, *host_sin; + struct sockaddr_in6 *sin6, *host_sin6; - /* disregard obviously stupid addresses */ - if(in->s_addr == INADDR_NONE || in->s_addr == INADDR_ANY) + if (address_family == AF_INET) + sin = (struct sockaddr_in *)in; + else + sin6 = (struct sockaddr_in6 *)in; + + + + /* disregard obviously stupid addresses + * (I didn't find an ipv6 equivalent to INADDR_NONE) */ + if (((address_family == AF_INET && (sin->sin_addr.s_addr == INADDR_NONE + || sin->sin_addr.s_addr == INADDR_ANY))) + || (address_family == AF_INET6 && (sin6->sin6_addr.s6_addr == in6addr_any.s6_addr))) { return -1; + } /* no point in adding two identical IP's, so don't. ;) */ host = list; while(host) { - if(host->saddr_in.sin_addr.s_addr == in->s_addr) { + host_sin = (struct sockaddr_in *)&host->saddr_in; + host_sin6 = (struct sockaddr_in6 *)&host->saddr_in; + + if( (address_family == AF_INET && host_sin->sin_addr.s_addr == sin->sin_addr.s_addr) + || (address_family == AF_INET6 && host_sin6->sin6_addr.s6_addr == sin6->sin6_addr.s6_addr)) { if(debug) printf("Identical IP already exists. Not adding %s\n", arg); return -1; } @@ -1131,19 +1289,29 @@ add_target_ip(char *arg, struct in_addr *in) } /* add the fresh ip */ - host = malloc(sizeof(struct rta_host)); + host = (struct rta_host*)malloc(sizeof(struct rta_host)); if(!host) { + char straddr[INET6_ADDRSTRLEN]; + parse_address((struct sockaddr_storage*)&in, straddr, sizeof(straddr)); crash("add_target_ip(%s, %s): malloc(%d) failed", - arg, inet_ntoa(*in), sizeof(struct rta_host)); + arg, straddr, sizeof(struct rta_host)); } memset(host, 0, sizeof(struct rta_host)); /* set the values. use calling name for output */ host->name = strdup(arg); - /* fill out the sockaddr_in struct */ - host->saddr_in.sin_family = AF_INET; - host->saddr_in.sin_addr.s_addr = in->s_addr; + /* fill out the sockaddr_storage struct */ + if(address_family == AF_INET) { + host_sin = (struct sockaddr_in *)&host->saddr_in; + host_sin->sin_family = AF_INET; + host_sin->sin_addr.s_addr = sin->sin_addr.s_addr; + } + else { + host_sin6 = (struct sockaddr_in6 *)&host->saddr_in; + host_sin6->sin6_family = AF_INET6; + memcpy(host_sin6->sin6_addr.s6_addr, sin6->sin6_addr.s6_addr, sizeof host_sin6->sin6_addr.s6_addr); + } host->rtmin = DBL_MAX; @@ -1160,31 +1328,67 @@ add_target_ip(char *arg, struct in_addr *in) static int add_target(char *arg) { - int i; - struct hostent *he; - struct in_addr *in, ip; + int error, result; + struct sockaddr_storage ip; + struct addrinfo hints, *res, *p; + struct sockaddr_in *sin; + struct sockaddr_in6 *sin6; + + switch (address_family) { + case -1: + /* -4 and -6 are not specified on cmdline */ + address_family = AF_INET; + sin = (struct sockaddr_in *)&ip; + result = inet_pton(address_family, arg, &sin->sin_addr); +#ifdef USE_IPV6 + if( result != 1 ){ + address_family = AF_INET6; + sin6 = (struct sockaddr_in6 *)&ip; + result = inet_pton(address_family, arg, &sin6->sin6_addr); + } +#endif + /* If we don't find any valid addresses, we still don't know the address_family */ + if ( result != 1) { + address_family = -1; + } + break; + case AF_INET: + sin = (struct sockaddr_in *)&ip; + result = inet_pton(address_family, arg, &sin->sin_addr); + break; + case AF_INET6: + sin6 = (struct sockaddr_in6 *)&ip; + result = inet_pton(address_family, arg, &sin6->sin6_addr); + break; + default: crash("Address family not supported"); + } /* don't resolve if we don't have to */ - if((ip.s_addr = inet_addr(arg)) != INADDR_NONE) { + if(result == 1) { /* don't add all ip's if we were given a specific one */ return add_target_ip(arg, &ip); - /* he = gethostbyaddr((char *)in, sizeof(struct in_addr), AF_INET); */ - /* if(!he) return add_target_ip(arg, in); */ } else { errno = 0; - he = gethostbyname(arg); - if(!he) { + memset(&hints, 0, sizeof(hints)); + if (address_family == -1) { + hints.ai_family = AF_UNSPEC; + } else { + hints.ai_family = address_family == AF_INET ? PF_INET : PF_INET6; + } + hints.ai_socktype = SOCK_RAW; + if((error = getaddrinfo(arg, NULL, &hints, &res)) != 0) { errno = 0; - crash("Failed to resolve %s", arg); + crash("Failed to resolve %s: %s", arg, gai_strerror(error)); return -1; } + address_family = res->ai_family; } /* possibly add all the IP's as targets */ - for(i = 0; he->h_addr_list[i]; i++) { - in = (struct in_addr *)he->h_addr_list[i]; - add_target_ip(arg, in); + for(p = res; p != NULL; p = p->ai_next) { + memcpy(&ip, p->ai_addr, p->ai_addrlen); + add_target_ip(arg, &ip); /* this is silly, but it works */ if(mode == MODE_HOSTCHECK || mode == MODE_ALL) { @@ -1193,6 +1397,7 @@ add_target(char *arg) } break; } + freeaddrinfo(res); return 0; } @@ -1203,7 +1408,7 @@ set_source_ip(char *arg) struct sockaddr_in src; memset(&src, 0, sizeof(src)); - src.sin_family = AF_INET; + src.sin_family = address_family; if((src.sin_addr.s_addr = inet_addr(arg)) == INADDR_NONE) src.sin_addr.s_addr = get_ip_address(arg); if(bind(icmp_sock, (struct sockaddr *)&src, sizeof(src)) == -1) @@ -1311,12 +1516,12 @@ get_threshold(char *str, threshold *th) unsigned short icmp_checksum(unsigned short *p, int n) { - register unsigned short cksum; - register long sum = 0; + unsigned short cksum; + long sum = 0; - while(n > 1) { + while(n > 2) { sum += *p++; - n -= 2; + n -= sizeof(unsigned short); } /* mop up the occasional odd byte */ @@ -1347,6 +1552,8 @@ print_help(void) printf (" %s\n", "-H"); printf (" %s\n", _("specify a target")); + printf (" %s\n", "[-4|-6]"); + printf (" %s\n", _("Use IPv4 (default) or IPv6 to communicate with the targets")); printf (" %s\n", "-w"); printf (" %s", _("warning threshold (currently ")); printf ("%0.3fms,%u%%)\n", (float)warn.rta / 1000, warn.pl); diff --git a/plugins-scripts/Makefile.am b/plugins-scripts/Makefile.am index ea65aed..088a445 100644 --- a/plugins-scripts/Makefile.am +++ b/plugins-scripts/Makefile.am @@ -16,11 +16,13 @@ VPATH=$(top_srcdir) $(top_srcdir)/plugins-scripts $(top_srcdir)/plugins-scripts/ libexec_SCRIPTS = check_breeze check_disk_smb check_flexlm check_ircd \ check_log check_oracle check_rpc check_sensors check_wave \ check_ifstatus check_ifoperstatus check_mailq check_file_age \ + check_uptime \ utils.sh utils.pm EXTRA_DIST=check_breeze.pl check_disk_smb.pl check_flexlm.pl check_ircd.pl \ check_log.sh check_oracle.sh check_rpc.pl check_sensors.sh \ check_ifstatus.pl check_ifoperstatus.pl check_wave.pl check_mailq.pl check_file_age.pl \ + check_uptime.pl \ utils.sh.in utils.pm.in t EDIT = sed \ diff --git a/plugins-scripts/Makefile.in b/plugins-scripts/Makefile.in index 207b30b..28f20ec 100644 --- a/plugins-scripts/Makefile.in +++ b/plugins-scripts/Makefile.in @@ -53,8 +53,10 @@ subdir = plugins-scripts DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ $(srcdir)/utils.pm.in $(srcdir)/utils.sh.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/m4/np_mysqlclient.m4 \ - $(top_srcdir)/gl/m4/00gnulib.m4 $(top_srcdir)/gl/m4/alloca.m4 \ +am__aclocal_m4_deps = $(top_srcdir)/m4/libcurl.m4 \ + $(top_srcdir)/m4/np_mysqlclient.m4 \ + $(top_srcdir)/m4/uriparser.m4 $(top_srcdir)/gl/m4/00gnulib.m4 \ + $(top_srcdir)/gl/m4/alloca.m4 \ $(top_srcdir)/gl/m4/arpa_inet_h.m4 \ $(top_srcdir)/gl/m4/base64.m4 $(top_srcdir)/gl/m4/btowc.m4 \ $(top_srcdir)/gl/m4/codeset.m4 \ @@ -910,6 +912,11 @@ LD = @LD@ LDAPINCLUDE = @LDAPINCLUDE@ LDAPLIBS = @LDAPLIBS@ LDFLAGS = @LDFLAGS@ +LIBCURL = @LIBCURL@ +LIBCURLCFLAGS = @LIBCURLCFLAGS@ +LIBCURLINCLUDE = @LIBCURLINCLUDE@ +LIBCURLLIBS = @LIBCURLLIBS@ +LIBCURL_CPPFLAGS = @LIBCURL_CPPFLAGS@ LIBGNU_LIBDEPS = @LIBGNU_LIBDEPS@ LIBGNU_LTLIBDEPS = @LIBGNU_LTLIBDEPS@ LIBICONV = @LIBICONV@ @@ -1035,6 +1042,7 @@ PERL = @PERL@ PERLMODS_DIR = @PERLMODS_DIR@ PGINCLUDE = @PGINCLUDE@ PGLIBS = @PGLIBS@ +PKGCONFIG = @PKGCONFIG@ PKG_ARCH = @PKG_ARCH@ PLUGIN_TEST = @PLUGIN_TEST@ POSUB = @POSUB@ @@ -1252,6 +1260,11 @@ TIME_H_DEFINES_STRUCT_TIMESPEC = @TIME_H_DEFINES_STRUCT_TIMESPEC@ UNDEFINE_STRTOK_R = @UNDEFINE_STRTOK_R@ UNISTD_H_HAVE_WINSOCK2_H = @UNISTD_H_HAVE_WINSOCK2_H@ UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS = @UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS@ +URIPARSER = @URIPARSER@ +URIPARSERCFLAGS = @URIPARSERCFLAGS@ +URIPARSERINCLUDE = @URIPARSERINCLUDE@ +URIPARSERLIBS = @URIPARSERLIBS@ +URIPARSER_CPPFLAGS = @URIPARSER_CPPFLAGS@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ WARRANTY = @WARRANTY@ @@ -1262,6 +1275,7 @@ WTSAPI32LIBS = @WTSAPI32LIBS@ XGETTEXT = @XGETTEXT@ XGETTEXT_015 = @XGETTEXT_015@ XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ +_libcurl_config = @_libcurl_config@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ @@ -1328,11 +1342,13 @@ SUFFIXES = .pl .sh libexec_SCRIPTS = check_breeze check_disk_smb check_flexlm check_ircd \ check_log check_oracle check_rpc check_sensors check_wave \ check_ifstatus check_ifoperstatus check_mailq check_file_age \ + check_uptime \ utils.sh utils.pm EXTRA_DIST = check_breeze.pl check_disk_smb.pl check_flexlm.pl check_ircd.pl \ check_log.sh check_oracle.sh check_rpc.pl check_sensors.sh \ check_ifstatus.pl check_ifoperstatus.pl check_wave.pl check_mailq.pl check_file_age.pl \ + check_uptime.pl \ utils.sh.in utils.pm.in t EDIT = sed \ diff --git a/plugins-scripts/check_disk_smb.pl b/plugins-scripts/check_disk_smb.pl index 9899226..28c49e8 100755 --- a/plugins-scripts/check_disk_smb.pl +++ b/plugins-scripts/check_disk_smb.pl @@ -19,7 +19,7 @@ # require 5.004; -use POSIX; +use POSIX qw(setsid); use strict; use Getopt::Long; use vars qw($opt_P $opt_V $opt_h $opt_H $opt_s $opt_W $opt_u $opt_p $opt_w $opt_c $opt_a $verbose); @@ -28,6 +28,9 @@ use FindBin; use lib "$FindBin::Bin"; use utils qw($TIMEOUT %ERRORS &print_revision &support &usage); +# make us session leader which makes all childs exit if we do +setsid; + sub print_help (); sub print_usage (); @@ -175,6 +178,8 @@ my @lines = undef; # Just in case of problems, let's not hang the monitoring system $SIG{'ALRM'} = sub { print "No Answer from Client\n"; + $SIG{'INT'} = 'IGNORE'; + kill(-2, $$); exit $ERRORS{"UNKNOWN"}; }; alarm($TIMEOUT); diff --git a/plugins-scripts/check_file_age.pl b/plugins-scripts/check_file_age.pl index 56b8e97..01b854a 100755 --- a/plugins-scripts/check_file_age.pl +++ b/plugins-scripts/check_file_age.pl @@ -43,8 +43,6 @@ $ENV{'ENV'}=''; $opt_w = 240; $opt_c = 600; -$opt_W = 0; -$opt_C = 0; $opt_f = ""; Getopt::Long::Configure('bundling'); @@ -53,10 +51,10 @@ GetOptions( "h" => \$opt_h, "help" => \$opt_h, "i" => \$opt_i, "ignore-missing" => \$opt_i, "f=s" => \$opt_f, "file" => \$opt_f, - "w=f" => \$opt_w, "warning-age=f" => \$opt_w, - "W=f" => \$opt_W, "warning-size=f" => \$opt_W, - "c=f" => \$opt_c, "critical-age=f" => \$opt_c, - "C=f" => \$opt_C, "critical-size=f" => \$opt_C); + "w=s" => \$opt_w, "warning-age=s" => \$opt_w, + "W=s" => \$opt_W, "warning-size=s" => \$opt_W, + "c=s" => \$opt_c, "critical-age=s" => \$opt_c, + "C=s" => \$opt_C, "critical-size=s" => \$opt_C); if ($opt_V) { print_revision($PROGNAME, '@NP_VERSION@'); @@ -91,18 +89,47 @@ unless (-e $opt_f) { $st = File::stat::stat($opt_f); $age = time - $st->mtime; $size = $st->size; -$perfdata = "age=${age}s;${opt_w};${opt_c} size=${size}B;${opt_W};${opt_C};0"; - $result = 'OK'; -if (($opt_c and $age > $opt_c) or ($opt_C and $size < $opt_C)) { - $result = 'CRITICAL'; +if ($opt_c !~ m/^\d+$/ or ($opt_C and $opt_C !~ m/^\d+$/) + or $opt_w !~ m/^\d+$/ or ($opt_W and $opt_W !~ m/^\d+$/)) { + # range has been specified so use M::P::R to process + require Monitoring::Plugin::Range; + # use permissive range defaults for size when none specified + $opt_W = "0:" unless ($opt_W); + $opt_C = "0:" unless ($opt_C); + + if (Monitoring::Plugin::Range->parse_range_string($opt_c) + ->check_range($age) == 1) { # 1 means it raises an alert because it's OUTSIDE the range + $result = 'CRITICAL'; + } + elsif (Monitoring::Plugin::Range->parse_range_string($opt_C) + ->check_range($size) == 1) { + $result = 'CRITICAL'; + } + elsif (Monitoring::Plugin::Range->parse_range_string($opt_w) + ->check_range($age) == 1) { + $result = 'WARNING'; + } + elsif (Monitoring::Plugin::Range->parse_range_string($opt_W) + ->check_range($size) == 1) { + $result = 'WARNING'; + } } -elsif (($opt_w and $age > $opt_w) or ($opt_W and $size < $opt_W)) { - $result = 'WARNING'; +else { + # use permissive defaults for size when none specified + $opt_W = 0 unless ($opt_W); + $opt_C = 0 unless ($opt_C); + if ($age > $opt_c or $size < $opt_C) { + $result = 'CRITICAL'; + } + elsif ($age > $opt_w or $size < $opt_W) { + $result = 'WARNING'; + } } +$perfdata = "age=${age}s;${opt_w};${opt_c} size=${size}B;${opt_W};${opt_C};0"; print "FILE_AGE $result: $opt_f is $age seconds old and $size bytes | $perfdata\n"; exit $ERRORS{$result}; @@ -120,7 +147,15 @@ sub print_help () { print "\n"; print " -i | --ignore-missing : return OK if the file does not exist\n"; print " File must be no more than this many seconds old (default: warn 240 secs, crit 600)\n"; - print " File must be at least this many bytes long (default: crit 0 bytes)\n"; + print " File must be at least this many bytes long (default: crit 0 bytes)\n\n"; + print " Both and can specify a range using the standard plugin syntax\n"; + print " If any of the warning and critical arguments are in range syntax (not just bare numbers)\n"; + print " then all warning and critical arguments will be interpreted as ranges.\n"; + print " To use range processing the perl module Monitoring::Plugin must be installed\n"; + print " For range syntax see https://www.monitoring-plugins.org/doc/guidelines.html#THRESHOLDFORMAT\n"; + print " It is strongly recommended when using range syntax that all four of -w, -W, -c and -C are specified\n"; + print " otherwise it is unlikely that the size test will be doing what is desired\n"; print "\n"; support(); } + diff --git a/plugins-scripts/check_mailq.pl b/plugins-scripts/check_mailq.pl index 32f498d..aac1310 100755 --- a/plugins-scripts/check_mailq.pl +++ b/plugins-scripts/check_mailq.pl @@ -568,7 +568,9 @@ sub process_arguments(){ "w=i" => \$opt_w, "warning=i" => \$opt_w, # warning if above this number "c=i" => \$opt_c, "critical=i" => \$opt_c, # critical if above this number "t=i" => \$opt_t, "timeout=i" => \$opt_t, - "s" => \$opt_s, "sudo" => \$opt_s + "s" => \$opt_s, "sudo" => \$opt_s, + "W=i" => \$opt_W, # warning if above this number + "C=i" => \$opt_C, # critical if above this number ); if ($opt_V) { @@ -662,8 +664,8 @@ sub print_help () { print " Feedback/patches to support non-sendmail mailqueue welcome\n\n"; print "-w (--warning) = Min. number of messages in queue to generate warning\n"; print "-c (--critical) = Min. number of messages in queue to generate critical alert ( w < c )\n"; - print "-W (--Warning) = Min. number of messages for same domain in queue to generate warning\n"; - print "-C (--Critical) = Min. number of messages for same domain in queue to generate critical alert ( W < C )\n"; + print "-W = Min. number of messages for same domain in queue to generate warning\n"; + print "-C = Min. number of messages for same domain in queue to generate critical alert ( W < C )\n"; print "-t (--timeout) = Plugin timeout in seconds (default = $utils::TIMEOUT)\n"; print "-M (--mailserver) = [ sendmail | qmail | postfix | exim | nullmailer ] (default = autodetect)\n"; print "-s (--sudo) = Use sudo to call the mailq command\n"; diff --git a/plugins-scripts/check_uptime.pl b/plugins-scripts/check_uptime.pl new file mode 100755 index 0000000..4c9f22d --- /dev/null +++ b/plugins-scripts/check_uptime.pl @@ -0,0 +1,315 @@ +#!@PERL@ -w + +# check_uptime - check uptime to see how long the system is running. +# + +# License Information: +# 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 2 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, write to the Free Software +# Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 +# USA +# +############################################################################ + +use POSIX; +use strict; +use Getopt::Long; +use vars qw($opt_V $opt_h $opt_v $verbose $PROGNAME $opt_w $opt_c + $opt_f $opt_s + $lower_warn_threshold $upper_warn_threshold + $lower_crit_threshold $upper_crit_threshold + $status $state $msg); +use FindBin; +use lib "$FindBin::Bin"; +use utils qw(%ERRORS &print_revision &support &usage ); + +sub print_help (); +sub print_usage (); +sub process_arguments (); + +$ENV{'PATH'}='@TRUSTED_PATH@'; +$ENV{'BASH_ENV'}=''; +$ENV{'ENV'}=''; +$PROGNAME = "check_uptime"; +$state = $ERRORS{'UNKNOWN'}; + +my $uptime_file = "/proc/uptime"; + + +# Process arguments + +Getopt::Long::Configure('bundling'); +$status = process_arguments(); +if ($status){ + print "ERROR: processing arguments\n"; + exit $ERRORS{"UNKNOWN"}; +} + + +# Get uptime info from file + +if ( ! -r $uptime_file ) { + print "ERROR: file '$uptime_file' is not readable\n"; + exit $ERRORS{"UNKNOWN"}; +} + +if ( ! open FILE, "<", $uptime_file ) { + print "ERROR: cannot read from file '$uptime_file'\n"; + exit $ERRORS{"UNKNOWN"}; +} + +chomp( my $file_content = ); +close FILE; + +print "$uptime_file: $file_content\n" if $verbose; + +# Get first digit value (without fraction) +my ( $uptime_seconds ) = $file_content =~ /^([\d]+)/; + +# Bail out if value is not numeric +if ( $uptime_seconds !~ /^\d+$/ ) { + print "ERROR: no numeric value: $uptime_seconds\n"; + exit $ERRORS{"UNKNOWN"}; +} + + +# Do calculations for a "pretty" format (2 weeks, 5 days, ...) + +my ( $secs, $mins, $hours, $days, $weeks ); +$secs = $uptime_seconds; +$mins = $hours = $days = $weeks = 0; +if ( $secs > 100 ) { + $mins = int( $secs / 60 ); + $secs -= $mins * 60; +} +if ( $mins > 100 ) { + $hours = int( $mins / 60 ); + $mins -= $hours * 60; +} +if ( $hours > 48 ) { + $days = int( $hours / 24 ); + $hours -= $days * 24; +} +if ( $days > 14 ) { + $weeks = int( $days / 7 ); + $days -= $weeks * 7; +} + +my $pretty_uptime = ""; +$pretty_uptime .= sprintf( "%d week%s, ", $weeks, $weeks == 1 ? "" : "s" ) if $weeks; +$pretty_uptime .= sprintf( "%d day%s, ", $days, $days == 1 ? "" : "s" ) if $days; +$pretty_uptime .= sprintf( "%d hour%s, ", $hours, $hours == 1 ? "" : "s" ) if $hours; +$pretty_uptime .= sprintf( "%d minute%s, ", $mins, $mins == 1 ? "" : "s" ) if $mins; +# Replace last occurence of comma with "and" +$pretty_uptime =~ s/, $/ and /; +# Always print the seconds (though it may be 0 seconds) +$pretty_uptime .= sprintf( "%d second%s", $secs, $secs == 1 ? "" : "s" ); + + +# Default to catch errors in program +my $state_str = "UNKNOWN"; + +# Check values +my $out_of_bounds_text = ""; +if ( $uptime_seconds > $upper_crit_threshold ) { + $state_str = "CRITICAL"; + $out_of_bounds_text = "upper crit"; +} elsif ( $uptime_seconds < $lower_crit_threshold ) { + $state_str = "CRITICAL"; + $out_of_bounds_text = "lower crit"; +} elsif ( $uptime_seconds > $upper_warn_threshold ) { + $state_str = "WARNING"; + $out_of_bounds_text = "upper warn"; +} elsif ( $uptime_seconds < $lower_warn_threshold ) { + $state_str = "WARNING"; + $out_of_bounds_text = "lower warn"; +} else { + $state_str = "OK"; +} + +$msg = "$state_str: "; + +$msg .= "uptime is $uptime_seconds seconds. "; +$msg .= "Exceeds $out_of_bounds_text threshold. " if $out_of_bounds_text; +$msg .= "Running for $pretty_uptime. " if $opt_f; +if ( $opt_s ) { + my $up_since = strftime( "%Y-%m-%d %H:%M:%S", localtime( time - $uptime_seconds ) ); + $msg .= "Running since $up_since. "; +} + +$state = $ERRORS{$state_str}; + +# Perfdata support +print "$msg|uptime=${uptime_seconds}s;$upper_warn_threshold;$upper_crit_threshold;0\n"; +exit $state; + + +##################################### +#### subs + + +sub process_arguments(){ + GetOptions + ("V" => \$opt_V, "version" => \$opt_V, + "v" => \$opt_v, "verbose" => \$opt_v, + "h" => \$opt_h, "help" => \$opt_h, + "w=s" => \$opt_w, "warning=s" => \$opt_w, # warning if above this number + "c=s" => \$opt_c, "critical=s" => \$opt_c, # critical if above this number + "f" => \$opt_f, "for" => \$opt_f, # show "running for ..." + "s" => \$opt_s, "since" => \$opt_s, # show "running since ..." + ); + + if ($opt_V) { + print_revision($PROGNAME,'@NP_VERSION@'); + exit $ERRORS{'UNKNOWN'}; + } + + if ($opt_h) { + print_help(); + exit $ERRORS{'UNKNOWN'}; + } + + if (defined $opt_v) { + $verbose = $opt_v; + } + + unless ( defined $opt_w && defined $opt_c ) { + print_usage(); + exit $ERRORS{'UNKNOWN'}; + } + + # Check if a range was supplied ("lowvalue:highvalue") for warning and critical + # Otherwise, set 0 as the lower threshold and the parameter value as upper threshold + # (the uptime should always be positive, so there should be no issue) + if ( $opt_w =~ /^(.+):(.+)$/ ) { + $lower_warn_threshold = $1; + $upper_warn_threshold = $2; + } else { + $lower_warn_threshold = 0; + $upper_warn_threshold = $opt_w; + } + if ( $opt_c =~ /^(.+):(.+)$/ ) { + $lower_crit_threshold = $1; + $upper_crit_threshold = $2; + } else { + $lower_crit_threshold = 0; + $upper_crit_threshold = $opt_c; + } + + # Set as seconds (calculate if suffix present) + $lower_warn_threshold = calc_as_seconds( $lower_warn_threshold ); + $lower_crit_threshold = calc_as_seconds( $lower_crit_threshold ); + $upper_warn_threshold = calc_as_seconds( $upper_warn_threshold ); + $upper_crit_threshold = calc_as_seconds( $upper_crit_threshold ); + + # Check for numeric value of warning parameter + if ( $lower_warn_threshold !~ /^\d+$/ ) { + print "Lower warning (-w) is not numeric\n"; + exit $ERRORS{'UNKNOWN'}; + } + if ( $upper_warn_threshold !~ /^\d+$/ ) { + print "Upper warning (-w) is not numeric\n"; + exit $ERRORS{'UNKNOWN'}; + } + # Check for numeric value of critical parameter + if ( $lower_crit_threshold !~ /^\d+$/ ) { + print "Lower critical (-c) is not numeric\n"; + exit $ERRORS{'UNKNOWN'}; + } + if ( $upper_crit_threshold !~ /^\d+$/ ) { + print "Upper critical (-c) is not numeric\n"; + exit $ERRORS{'UNKNOWN'}; + } + + # Check boundaries + if ( $upper_warn_threshold >= $upper_crit_threshold ) { + print "Upper Warning (-w) cannot be greater than Critical (-c)!\n"; + exit $ERRORS{'UNKNOWN'}; + } + # No "<=" since both values are zero if no range (only upper threshold values) is given + if ( $lower_warn_threshold < $lower_crit_threshold ) { + print "Lower Warning (-w) cannot be less than Critical (-c)!\n"; + exit $ERRORS{'UNKNOWN'}; + } + + return $ERRORS{'OK'}; +} + +sub print_usage () { + print "Usage: $PROGNAME -w -c [-v]\n"; +} + +sub print_help () { + print_revision($PROGNAME,'@NP_VERSION@'); + print "Copyright (c) 2002 Subhendu Ghosh/Carlos Canau/Benjamin Schmid\n"; + print "Copyright (c) 2018 Bernd Arnold\n"; + print "\n"; + print_usage(); + print "\n"; + print " Checks the uptime of the system using $uptime_file\n"; + print "\n"; + print "-w (--warning) = Min. number of uptime to generate warning\n"; + print "-c (--critical) = Min. number of uptime to generate critical alert ( w < c )\n"; + print "-f (--for) = Show uptime in a pretty format (Running for x weeks, x days, ...)\n"; + print "-s (--since) = Show last boot in yyyy-mm-dd HH:MM:SS format (output from 'uptime -s')\n"; + print "-h (--help)\n"; + print "-V (--version)\n"; + print "-v (--verbose) = debugging output\n"; + print "\n\n"; + print "Note: -w and -c are required arguments.\n"; + print " You can suffix both values with s for seconds (default), m (minutes), h (hours), d (days) or w (weeks).\n"; + print "\n"; + print "Range support: You may specify a range for both warning and critical thresholds.\n"; + print " This works without additional Perl modules.\n"; + print "Example: ./check_uptime -w 10m:4w -c 1m:8w\n"; + print " Results in a critical state when uptime is below 60 seconds or higher than 8 weeks,\n"; + print " and in a warning state when uptime is below 10 minutes or above 4 weeks.\n"; + print "\n\n"; + support(); +} + +sub calc_as_seconds () { + + my $parameter = shift; + + # Check if suffix is present + # Calculate parameter to seconds (to get an integer value finally) + # If no suffix is present, just return the value + + # Possible suffixes: + # s = seconds + # m = minutes + # h = hours + # d = days + # w = weeks + my %factor = ( "s" => 1, + "m" => 60, + "h" => 60 * 60, + "d" => 60 * 60 * 24, + "w" => 60 * 60 * 24 * 7, + ); + + if ( $parameter =~ /^(\d+)([a-z])$/ ) { + my $value = $1; + my $suffix = $2; + print "detected: value=$value, suffix=$suffix\n" if $verbose; + if ( ! defined $factor{$suffix} ) { + print "Error: wrong suffix ($suffix) for value '$parameter'"; + exit $ERRORS{'UNKNOWN'}; + } + $parameter = $value * $factor{$suffix}; + } + + return $parameter; + +} diff --git a/plugins-scripts/t/check_file_age.t b/plugins-scripts/t/check_file_age.t index 50a2e69..8b87670 100644 --- a/plugins-scripts/t/check_file_age.t +++ b/plugins-scripts/t/check_file_age.t @@ -5,14 +5,14 @@ # use strict; -use Test::More tests => 17; +use Test::More tests => 27; use NPTest; my $successOutput = '/^FILE_AGE OK: /'; my $warningOutput = '/^FILE_AGE WARNING: /'; my $criticalOutput = '/^FILE_AGE CRITICAL: /'; my $unknownOutput = '/^FILE_AGE UNKNOWN: /'; -my $performanceOutput = '/ \| age=[0-9]+s;[0-9]+;[0-9]+ size=[0-9]+B;[0-9]+;[0-9]+;0$/'; +my $performanceOutput = '/ \| age=[0-9]+s;[0-9:]+;[0-9:]+ size=[0-9]+B;[0-9:]+;[0-9:]+;0$/'; my $result; my $temp_file = "/tmp/check_file_age.tmp"; @@ -20,64 +20,75 @@ my $temp_link = "/tmp/check_file_age.link.tmp"; unlink $temp_file, $temp_link; -$result = NPTest->testCmd( - "./check_file_age" - ); +$result = NPTest->testCmd("./check_file_age"); cmp_ok( $result->return_code, '==', 3, "Missing parameters" ); like ( $result->output, $unknownOutput, "Output for unknown correct" ); -$result = NPTest->testCmd( - "./check_file_age -f $temp_file" - ); +$result = NPTest->testCmd("./check_file_age -f $temp_file"); cmp_ok( $result->return_code, '==', 2, "File not exists" ); like ( $result->output, $criticalOutput, "Output for file missing correct" ); write_chars(100); -$result = NPTest->testCmd( - "./check_file_age -f $temp_file" - ); +$result = NPTest->testCmd("./check_file_age -f $temp_file"); cmp_ok( $result->return_code, '==', 0, "File is new enough" ); like ( $result->output, $successOutput, "Output for success correct" ); sleep 2; -$result = NPTest->testCmd( - "./check_file_age -f $temp_file -w 1" - ); +$result = NPTest->testCmd("./check_file_age -f $temp_file -w 1"); cmp_ok( $result->return_code, '==', 1, "Warning for file over 1 second old" ); like ( $result->output, $warningOutput, "Output for warning correct" ); -$result = NPTest->testCmd( - "./check_file_age -f $temp_file -c 1" - ); +$result = NPTest->testCmd("./check_file_age -f $temp_file -c 1"); cmp_ok( $result->return_code, '==', 2, "Critical for file over 1 second old" ); like ( $result->output, $criticalOutput, "Output for critical correct" ); -$result = NPTest->testCmd( - "./check_file_age -f $temp_file -c 1000 -W 100" - ); +$result = NPTest->testCmd("./check_file_age -f $temp_file -c 1000 -W 100"); cmp_ok( $result->return_code, '==', 0, "Checking file size" ); -$result = NPTest->testCmd( - "./check_file_age -f $temp_file -c 1000 -W 100" - ); +$result = NPTest->testCmd("./check_file_age -f $temp_file -c 1000 -W 100"); like( $result->output, $performanceOutput, "Checking for performance Output" ); -$result = NPTest->testCmd( - "./check_file_age -f /non/existent --ignore-missing" - ); +$result = NPTest->testCmd("./check_file_age -f $temp_file -c 1000 -W 100"); +like( $result->output, $performanceOutput, "Checking for performance Output from range" ); + +$result = NPTest->testCmd("./check_file_age -f /non/existent --ignore-missing"); cmp_ok( $result->return_code, '==', 0, "Honours --ignore-missing" ); -$result = NPTest->testCmd( - "./check_file_age -f $temp_file -c 1000 -W 101" - ); +$result = NPTest->testCmd("./check_file_age -f $temp_file -c 1000 -W 101"); cmp_ok( $result->return_code, '==', 1, "One byte too short" ); -$result = NPTest->testCmd( - "./check_file_age -f $temp_file -c 1000 -C 101" - ); +$result = NPTest->testCmd("./check_file_age -f $temp_file -c 1000 -C 101"); cmp_ok( $result->return_code, '==', 2, "One byte too short - critical" ); +SKIP: { + eval 'use Monitoring::Plugin::Range'; + skip "Monitoring::Plugin::Range module require", 9 if $@; + + $result = NPTest->testCmd("./check_file_age -f $temp_file -w 0:1"); + cmp_ok( $result->return_code, '==', 1, "Warning for file over 1 second old by range" ); + like ( $result->output, $warningOutput, "Output for warning by range correct" ); + + $result = NPTest->testCmd("./check_file_age -f $temp_file -c 0:1"); + cmp_ok( $result->return_code, '==', 2, "Critical for file over 1 second old by range" ); + like ( $result->output, $criticalOutput, "Output for critical by range correct" ); + + $result = NPTest->testCmd("./check_file_age -f $temp_file -c 0:1000 -W 0:100"); + cmp_ok( $result->return_code, '==', 0, "Checking file size by range" ); + + $result = NPTest->testCmd("./check_file_age -f $temp_file -c 1000 -W 101:"); + cmp_ok( $result->return_code, '==', 1, "One byte too short by range" ); + + $result = NPTest->testCmd("./check_file_age -f $temp_file -c 1000 -W 0:99"); + cmp_ok( $result->return_code, '==', 1, "One byte too long by range" ); + + $result = NPTest->testCmd("./check_file_age -f $temp_file -c 1000 -C 101:"); + cmp_ok( $result->return_code, '==', 2, "One byte too short by range - critical" ); + + $result = NPTest->testCmd("./check_file_age -f $temp_file -c 1000 -C 0:99"); + cmp_ok( $result->return_code, '==', 2, "One byte too long by range - critical" ); +}; + symlink $temp_file, $temp_link or die "Cannot create symlink"; $result = NPTest->testCmd("./check_file_age -f $temp_link -c 10"); cmp_ok( $result->return_code, '==', 0, "Works for symlinks" ); diff --git a/plugins-scripts/t/check_uptime.t b/plugins-scripts/t/check_uptime.t new file mode 100644 index 0000000..c395307 --- /dev/null +++ b/plugins-scripts/t/check_uptime.t @@ -0,0 +1,129 @@ +#!/usr/bin/perl -w -I .. +# +# check_uptime tests +# +# + +use strict; +use Test::More tests => 40; +use NPTest; + +my $result; + +$result = NPTest->testCmd( + "./check_uptime" + ); +cmp_ok( $result->return_code, '==', 3, "Missing parameters" ); +like ( $result->output, '/^Usage: check_uptime -w/', "Output for missing parameters correct" ); + +$result = NPTest->testCmd( + "./check_uptime --help" + ); +cmp_ok( $result->return_code, '==', 3, "Help output requested" ); +like ( $result->output, '/ABSOLUTELY NO WARRANTY/', "Output for help correct" ); + +$result = NPTest->testCmd( + "./check_uptime -w 5 -c 2" + ); +cmp_ok( $result->return_code, '==', 3, "Warning greater than critical" ); +like ( $result->output, '/^Upper Warning .*cannot be greater than Critical/', "Output for warning greater than critical correct" ); + +$result = NPTest->testCmd( + "./check_uptime -c 1000 -W 100 2>&1" + ); +like ( $result->output, '/^Unknown option: W/', "Output with wrong parameter is correct" ); + +$result = NPTest->testCmd( + "./check_uptime -f -w 1 -c 2" + ); +cmp_ok( $result->return_code, '==', 2, "Uptime higher than 2 seconds" ); +like ( $result->output, '/Running for \d+/', "Output for the f parameter correct" ); + +$result = NPTest->testCmd( + "./check_uptime -s -w 1 -c 2" + ); +cmp_ok( $result->return_code, '==', 2, "Uptime higher than 2 seconds" ); +like ( $result->output, '/Running since \d+/', "Output for the s parameter correct" ); + +$result = NPTest->testCmd( + "./check_uptime -w 1 -c 2" + ); +cmp_ok( $result->return_code, '==', 2, "Uptime higher than 2 seconds" ); +like ( $result->output, '/^CRITICAL: uptime is \d+ seconds/', "Output for uptime higher than 2 seconds correct" ); + +$result = NPTest->testCmd( + "./check_uptime -w 1 -c 9999w" + ); +cmp_ok( $result->return_code, '==', 1, "Uptime lower than 9999 weeks" ); +like ( $result->output, '/^WARNING: uptime is \d+ seconds/', "Output for uptime lower than 9999 weeks correct" ); + +$result = NPTest->testCmd( + "./check_uptime -w 9998w -c 9999w" + ); +cmp_ok( $result->return_code, '==', 0, "Uptime lower than 9998 weeks" ); +like ( $result->output, '/^OK: uptime is \d+ seconds/', "Output for uptime lower than 9998 weeks correct" ); +like ( $result->output, '/\|uptime=[0-9]+s;6046790400;6047395200;/', "Checking for performance output" ); + +$result = NPTest->testCmd( + "./check_uptime -w 111222d -c 222333d" + ); +cmp_ok( $result->return_code, '==', 0, "Uptime lower than 111222 days" ); +like ( $result->output, '/^OK: uptime is \d+ seconds/', "Output for uptime lower than 111222 days correct" ); +like ( $result->output, '/\|uptime=[0-9]+s;9609580800;19209571200;/', "Checking for performance output" ); + +# Same as before, hopefully uptime is higher than 2 seconds so no warning +$result = NPTest->testCmd( + "./check_uptime -w 2:111222d -c 1:222333d" + ); +cmp_ok( $result->return_code, '==', 0, "Uptime lower than 111222 days, and higher 2 seconds" ); +like ( $result->output, '/^OK: uptime is \d+ seconds/', "Output for uptime lower than 111222 days, and higher 2 seconds correct" ); +like ( $result->output, '/\|uptime=[0-9]+s;9609580800;19209571200;/', "Checking for performance output" ); + +# Same as before, now the low warning should trigger +$result = NPTest->testCmd( + "./check_uptime -w 111221d:111222d -c 1:222333d" + ); +cmp_ok( $result->return_code, '==', 1, "Uptime lower than 111221 days raises warning" ); +like ( $result->output, '/^WARNING: uptime is \d+ seconds/', "Output for uptime lower than 111221 days correct" ); +like ( $result->output, '/Exceeds lower warn threshold/', "Exceeds text correct" ); +like ( $result->output, '/\|uptime=[0-9]+s;9609580800;19209571200;/', "Checking for performance output" ); + +# Same as before, now the low critical should trigger +$result = NPTest->testCmd( + "./check_uptime -w 111221d:111222d -c 111220d:222333d" + ); +cmp_ok( $result->return_code, '==', 2, "Uptime lower than 111220 days raises critical" ); +like ( $result->output, '/^CRITICAL: uptime is \d+ seconds/', "Output for uptime lower than 111220 days correct" ); +like ( $result->output, '/Exceeds lower crit threshold/', "Exceeds text correct" ); +like ( $result->output, '/\|uptime=[0-9]+s;9609580800;19209571200;/', "Checking for performance output" ); + + +# +# Range values using ":" without two parts ("a:b") is invalid +# Strings without two parts are always considered as upper threshold +# + +$result = NPTest->testCmd( + "./check_uptime -w 2: -c 1:4" + ); +cmp_ok( $result->return_code, '==', 3, "Wrong parameter format raises unknown" ); +like ( $result->output, '/^Upper warning .* is not numeric/', "Output for wrong parameter format correct" ); + +$result = NPTest->testCmd( + "./check_uptime -w 2:3 -c 1:" + ); +cmp_ok( $result->return_code, '==', 3, "Wrong parameter format raises unknown" ); +like ( $result->output, '/^Upper critical .* is not numeric/', "Output for wrong parameter format correct" ); + +$result = NPTest->testCmd( + "./check_uptime -w :3 -c 1:4" + ); +cmp_ok( $result->return_code, '==', 3, "Wrong parameter format raises unknown" ); +like ( $result->output, '/^Upper warning .* is not numeric/', "Output for wrong parameter format correct" ); + +$result = NPTest->testCmd( + "./check_uptime -w 2:3 -c :4" + ); +cmp_ok( $result->return_code, '==', 3, "Wrong parameter format raises unknown" ); +like ( $result->output, '/^Upper critical .* is not numeric/', "Output for wrong parameter format correct" ); + diff --git a/plugins-scripts/t/utils.t b/plugins-scripts/t/utils.t index 9c2c569..5c23179 100644 --- a/plugins-scripts/t/utils.t +++ b/plugins-scripts/t/utils.t @@ -10,6 +10,7 @@ use strict; use Test::More; use NPTest; +use lib "."; use lib ".."; use utils; diff --git a/plugins/Makefile.am b/plugins/Makefile.am index 0ddf9bd..3fde54d 100644 --- a/plugins/Makefile.am +++ b/plugins/Makefile.am @@ -38,7 +38,9 @@ check_tcp_programs = check_ftp check_imap check_nntp check_pop \ EXTRA_PROGRAMS = check_mysql check_radius check_pgsql check_snmp check_hpjd \ check_swap check_fping check_ldap check_game check_dig \ check_nagios check_by_ssh check_dns check_nt check_ide_smart \ - check_procs check_mysql_query check_apt check_dbi + check_procs check_mysql_query check_apt check_dbi check_curl + +SUBDIRS = picohttpparser EXTRA_DIST = t tests @@ -69,6 +71,9 @@ test-debug: check_apt_LDADD = $(BASEOBJS) check_cluster_LDADD = $(BASEOBJS) +check_curl_CFLAGS = $(AM_CFLAGS) $(LIBCURLCFLAGS) $(URIPARSERCFLAGS) $(LIBCURLINCLUDE) $(URIPARSERINCLUDE) -Ipicohttpparser +check_curl_CPPFLAGS = $(AM_CPPFLAGS) $(LIBCURLCFLAGS) $(URIPARSERCFLAGS) $(LIBCURLINCLUDE) $(URIPARSERINCLUDE) -Ipicohttpparser +check_curl_LDADD = $(NETLIBS) $(LIBCURLLIBS) $(SSLOBJS) $(URIPARSERLIBS) picohttpparser/libpicohttpparser.a check_dbi_LDADD = $(NETLIBS) $(DBILIBS) check_dig_LDADD = $(NETLIBS) check_disk_LDADD = $(BASEOBJS) @@ -89,7 +94,7 @@ check_mysql_query_CFLAGS = $(AM_CFLAGS) $(MYSQLCFLAGS) check_mysql_query_CPPFLAGS = $(AM_CPPFLAGS) $(MYSQLINCLUDE) check_mysql_query_LDADD = $(NETLIBS) $(MYSQLLIBS) check_nagios_LDADD = $(BASEOBJS) -check_nt_LDADD = $(NETLIBS) +check_nt_LDADD = $(NETLIBS) check_ntp_LDADD = $(NETLIBS) $(MATHLIBS) check_ntp_peer_LDADD = $(NETLIBS) $(MATHLIBS) check_nwstat_LDADD = $(NETLIBS) diff --git a/plugins/Makefile.in b/plugins/Makefile.in index 9b8717f..b3e9aff 100644 --- a/plugins/Makefile.in +++ b/plugins/Makefile.in @@ -66,13 +66,15 @@ EXTRA_PROGRAMS = check_mysql$(EXEEXT) check_radius$(EXEEXT) \ check_by_ssh$(EXEEXT) check_dns$(EXEEXT) check_nt$(EXEEXT) \ check_ide_smart$(EXEEXT) check_procs$(EXEEXT) \ check_mysql_query$(EXEEXT) check_apt$(EXEEXT) \ - check_dbi$(EXEEXT) + check_dbi$(EXEEXT) check_curl$(EXEEXT) @HAVE_UTMPX_FALSE@am__append_1 = popen.o subdir = plugins DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/m4/np_mysqlclient.m4 \ - $(top_srcdir)/gl/m4/00gnulib.m4 $(top_srcdir)/gl/m4/alloca.m4 \ +am__aclocal_m4_deps = $(top_srcdir)/m4/libcurl.m4 \ + $(top_srcdir)/m4/np_mysqlclient.m4 \ + $(top_srcdir)/m4/uriparser.m4 $(top_srcdir)/gl/m4/00gnulib.m4 \ + $(top_srcdir)/gl/m4/alloca.m4 \ $(top_srcdir)/gl/m4/arpa_inet_h.m4 \ $(top_srcdir)/gl/m4/base64.m4 $(top_srcdir)/gl/m4/btowc.m4 \ $(top_srcdir)/gl/m4/codeset.m4 \ @@ -194,9 +196,19 @@ check_by_ssh_DEPENDENCIES = $(am__DEPENDENCIES_2) check_cluster_SOURCES = check_cluster.c check_cluster_OBJECTS = check_cluster.$(OBJEXT) check_cluster_DEPENDENCIES = $(BASEOBJS) +check_curl_SOURCES = check_curl.c +check_curl_OBJECTS = check_curl-check_curl.$(OBJEXT) +am__DEPENDENCIES_3 = $(check_cluster_LDADD) $(am__DEPENDENCIES_1) +am__DEPENDENCIES_4 = $(BASEOBJS) $(am__DEPENDENCIES_3) \ + $(am__DEPENDENCIES_1) +check_curl_DEPENDENCIES = $(am__DEPENDENCIES_3) $(am__DEPENDENCIES_1) \ + $(am__DEPENDENCIES_4) $(am__DEPENDENCIES_1) \ + picohttpparser/libpicohttpparser.a +check_curl_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CCLD) $(check_curl_CFLAGS) \ + $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ check_dbi_SOURCES = check_dbi.c check_dbi_OBJECTS = check_dbi.$(OBJEXT) -am__DEPENDENCIES_3 = $(check_cluster_LDADD) $(am__DEPENDENCIES_1) check_dbi_DEPENDENCIES = $(am__DEPENDENCIES_3) $(am__DEPENDENCIES_1) check_dig_SOURCES = check_dig.c check_dig_OBJECTS = check_dig.$(OBJEXT) @@ -206,34 +218,34 @@ check_disk_OBJECTS = check_disk.$(OBJEXT) check_disk_DEPENDENCIES = $(BASEOBJS) check_dns_SOURCES = check_dns.c check_dns_OBJECTS = check_dns.$(OBJEXT) -am__DEPENDENCIES_4 = $(check_disk_LDADD) $(am__DEPENDENCIES_1) -check_dns_DEPENDENCIES = $(am__DEPENDENCIES_4) +am__DEPENDENCIES_5 = $(check_disk_LDADD) $(am__DEPENDENCIES_1) +check_dns_DEPENDENCIES = $(am__DEPENDENCIES_5) check_dummy_SOURCES = check_dummy.c check_dummy_OBJECTS = check_dummy.$(OBJEXT) check_dummy_DEPENDENCIES = $(BASEOBJS) check_fping_SOURCES = check_fping.c check_fping_OBJECTS = check_fping.$(OBJEXT) -am__DEPENDENCIES_5 = $(check_dummy_LDADD) $(am__DEPENDENCIES_1) -check_fping_DEPENDENCIES = $(am__DEPENDENCIES_5) +am__DEPENDENCIES_6 = $(check_dummy_LDADD) $(am__DEPENDENCIES_1) +check_fping_DEPENDENCIES = $(am__DEPENDENCIES_6) check_game_SOURCES = check_game.c check_game_OBJECTS = check_game.$(OBJEXT) check_game_DEPENDENCIES = $(BASEOBJS) check_hpjd_SOURCES = check_hpjd.c check_hpjd_OBJECTS = check_hpjd.$(OBJEXT) -am__DEPENDENCIES_6 = $(check_game_LDADD) $(am__DEPENDENCIES_1) -check_hpjd_DEPENDENCIES = $(am__DEPENDENCIES_6) +am__DEPENDENCIES_7 = $(check_game_LDADD) $(am__DEPENDENCIES_1) +check_hpjd_DEPENDENCIES = $(am__DEPENDENCIES_7) check_http_SOURCES = check_http.c check_http_OBJECTS = check_http.$(OBJEXT) -am__DEPENDENCIES_7 = $(BASEOBJS) $(am__DEPENDENCIES_6) \ +am__DEPENDENCIES_8 = $(BASEOBJS) $(am__DEPENDENCIES_7) \ $(am__DEPENDENCIES_1) -check_http_DEPENDENCIES = $(am__DEPENDENCIES_7) +check_http_DEPENDENCIES = $(am__DEPENDENCIES_8) check_ide_smart_SOURCES = check_ide_smart.c check_ide_smart_OBJECTS = check_ide_smart.$(OBJEXT) check_ide_smart_DEPENDENCIES = $(BASEOBJS) check_ldap_SOURCES = check_ldap.c check_ldap_OBJECTS = check_ldap.$(OBJEXT) -am__DEPENDENCIES_8 = $(check_ide_smart_LDADD) $(am__DEPENDENCIES_1) -check_ldap_DEPENDENCIES = $(am__DEPENDENCIES_8) $(am__DEPENDENCIES_1) +am__DEPENDENCIES_9 = $(check_ide_smart_LDADD) $(am__DEPENDENCIES_1) +check_ldap_DEPENDENCIES = $(am__DEPENDENCIES_9) $(am__DEPENDENCIES_1) check_load_SOURCES = check_load.c check_load_OBJECTS = check_load.$(OBJEXT) check_load_DEPENDENCIES = $(BASEOBJS) @@ -245,15 +257,16 @@ check_mrtgtraf_OBJECTS = check_mrtgtraf.$(OBJEXT) check_mrtgtraf_DEPENDENCIES = $(BASEOBJS) check_mysql_SOURCES = check_mysql.c check_mysql_OBJECTS = check_mysql-check_mysql.$(OBJEXT) -am__DEPENDENCIES_9 = $(check_mrtgtraf_LDADD) $(am__DEPENDENCIES_1) -check_mysql_DEPENDENCIES = $(am__DEPENDENCIES_9) $(am__DEPENDENCIES_1) +am__DEPENDENCIES_10 = $(check_mrtgtraf_LDADD) $(am__DEPENDENCIES_1) +check_mysql_DEPENDENCIES = $(am__DEPENDENCIES_10) \ + $(am__DEPENDENCIES_1) check_mysql_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(check_mysql_CFLAGS) \ $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ check_mysql_query_SOURCES = check_mysql_query.c check_mysql_query_OBJECTS = \ check_mysql_query-check_mysql_query.$(OBJEXT) -check_mysql_query_DEPENDENCIES = $(am__DEPENDENCIES_9) \ +check_mysql_query_DEPENDENCIES = $(am__DEPENDENCIES_10) \ $(am__DEPENDENCIES_1) check_mysql_query_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) \ @@ -264,69 +277,69 @@ check_nagios_OBJECTS = check_nagios.$(OBJEXT) check_nagios_DEPENDENCIES = $(BASEOBJS) check_nt_SOURCES = check_nt.c check_nt_OBJECTS = check_nt.$(OBJEXT) -am__DEPENDENCIES_10 = $(check_nagios_LDADD) $(am__DEPENDENCIES_1) -check_nt_DEPENDENCIES = $(am__DEPENDENCIES_10) +am__DEPENDENCIES_11 = $(check_nagios_LDADD) $(am__DEPENDENCIES_1) +check_nt_DEPENDENCIES = $(am__DEPENDENCIES_11) check_ntp_SOURCES = check_ntp.c check_ntp_OBJECTS = check_ntp.$(OBJEXT) -check_ntp_DEPENDENCIES = $(am__DEPENDENCIES_10) $(am__DEPENDENCIES_1) +check_ntp_DEPENDENCIES = $(am__DEPENDENCIES_11) $(am__DEPENDENCIES_1) check_ntp_peer_SOURCES = check_ntp_peer.c check_ntp_peer_OBJECTS = check_ntp_peer.$(OBJEXT) -check_ntp_peer_DEPENDENCIES = $(am__DEPENDENCIES_10) \ +check_ntp_peer_DEPENDENCIES = $(am__DEPENDENCIES_11) \ $(am__DEPENDENCIES_1) check_ntp_time_SOURCES = check_ntp_time.c check_ntp_time_OBJECTS = check_ntp_time.$(OBJEXT) -check_ntp_time_DEPENDENCIES = $(am__DEPENDENCIES_10) \ +check_ntp_time_DEPENDENCIES = $(am__DEPENDENCIES_11) \ $(am__DEPENDENCIES_1) check_nwstat_SOURCES = check_nwstat.c check_nwstat_OBJECTS = check_nwstat.$(OBJEXT) -check_nwstat_DEPENDENCIES = $(am__DEPENDENCIES_10) +check_nwstat_DEPENDENCIES = $(am__DEPENDENCIES_11) check_overcr_SOURCES = check_overcr.c check_overcr_OBJECTS = check_overcr.$(OBJEXT) -check_overcr_DEPENDENCIES = $(am__DEPENDENCIES_10) +check_overcr_DEPENDENCIES = $(am__DEPENDENCIES_11) check_pgsql_SOURCES = check_pgsql.c check_pgsql_OBJECTS = check_pgsql.$(OBJEXT) -check_pgsql_DEPENDENCIES = $(am__DEPENDENCIES_10) \ +check_pgsql_DEPENDENCIES = $(am__DEPENDENCIES_11) \ $(am__DEPENDENCIES_1) check_ping_SOURCES = check_ping.c check_ping_OBJECTS = check_ping.$(OBJEXT) -check_ping_DEPENDENCIES = $(am__DEPENDENCIES_10) +check_ping_DEPENDENCIES = $(am__DEPENDENCIES_11) check_procs_SOURCES = check_procs.c check_procs_OBJECTS = check_procs.$(OBJEXT) check_procs_DEPENDENCIES = $(BASEOBJS) check_radius_SOURCES = check_radius.c check_radius_OBJECTS = check_radius.$(OBJEXT) -am__DEPENDENCIES_11 = $(check_procs_LDADD) $(am__DEPENDENCIES_1) -check_radius_DEPENDENCIES = $(am__DEPENDENCIES_11) \ +am__DEPENDENCIES_12 = $(check_procs_LDADD) $(am__DEPENDENCIES_1) +check_radius_DEPENDENCIES = $(am__DEPENDENCIES_12) \ $(am__DEPENDENCIES_1) check_real_SOURCES = check_real.c check_real_OBJECTS = check_real.$(OBJEXT) -check_real_DEPENDENCIES = $(am__DEPENDENCIES_11) +check_real_DEPENDENCIES = $(am__DEPENDENCIES_12) check_smtp_SOURCES = check_smtp.c check_smtp_OBJECTS = check_smtp.$(OBJEXT) -am__DEPENDENCIES_12 = $(BASEOBJS) $(am__DEPENDENCIES_11) \ +am__DEPENDENCIES_13 = $(BASEOBJS) $(am__DEPENDENCIES_12) \ $(am__DEPENDENCIES_1) -check_smtp_DEPENDENCIES = $(am__DEPENDENCIES_12) +check_smtp_DEPENDENCIES = $(am__DEPENDENCIES_13) check_snmp_SOURCES = check_snmp.c check_snmp_OBJECTS = check_snmp.$(OBJEXT) check_snmp_DEPENDENCIES = $(BASEOBJS) check_ssh_SOURCES = check_ssh.c check_ssh_OBJECTS = check_ssh.$(OBJEXT) -am__DEPENDENCIES_13 = $(check_snmp_LDADD) $(am__DEPENDENCIES_1) -check_ssh_DEPENDENCIES = $(am__DEPENDENCIES_13) +am__DEPENDENCIES_14 = $(check_snmp_LDADD) $(am__DEPENDENCIES_1) +check_ssh_DEPENDENCIES = $(am__DEPENDENCIES_14) check_swap_SOURCES = check_swap.c check_swap_OBJECTS = check_swap.$(OBJEXT) check_swap_DEPENDENCIES = $(am__DEPENDENCIES_1) $(BASEOBJS) check_tcp_SOURCES = check_tcp.c check_tcp_OBJECTS = check_tcp.$(OBJEXT) -am__DEPENDENCIES_14 = $(BASEOBJS) $(am__DEPENDENCIES_13) \ +am__DEPENDENCIES_15 = $(BASEOBJS) $(am__DEPENDENCIES_14) \ $(am__DEPENDENCIES_1) -check_tcp_DEPENDENCIES = $(am__DEPENDENCIES_14) +check_tcp_DEPENDENCIES = $(am__DEPENDENCIES_15) check_time_SOURCES = check_time.c check_time_OBJECTS = check_time.$(OBJEXT) -check_time_DEPENDENCIES = $(am__DEPENDENCIES_13) +check_time_DEPENDENCIES = $(am__DEPENDENCIES_14) check_ups_SOURCES = check_ups.c check_ups_OBJECTS = check_ups.$(OBJEXT) -check_ups_DEPENDENCIES = $(am__DEPENDENCIES_13) +check_ups_DEPENDENCIES = $(am__DEPENDENCIES_14) check_users_SOURCES = check_users.c check_users_OBJECTS = check_users.$(OBJEXT) check_users_DEPENDENCIES = $(BASEOBJS) $(am__DEPENDENCIES_1) \ @@ -351,37 +364,75 @@ LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \ $(LDFLAGS) -o $@ SOURCES = $(libnpcommon_a_SOURCES) check_apt.c check_by_ssh.c \ - check_cluster.c check_dbi.c check_dig.c check_disk.c \ - check_dns.c check_dummy.c check_fping.c check_game.c \ - check_hpjd.c check_http.c check_ide_smart.c check_ldap.c \ - check_load.c check_mrtg.c check_mrtgtraf.c check_mysql.c \ - check_mysql_query.c check_nagios.c check_nt.c check_ntp.c \ - check_ntp_peer.c check_ntp_time.c check_nwstat.c \ + check_cluster.c check_curl.c check_dbi.c check_dig.c \ + check_disk.c check_dns.c check_dummy.c check_fping.c \ + check_game.c check_hpjd.c check_http.c check_ide_smart.c \ + check_ldap.c check_load.c check_mrtg.c check_mrtgtraf.c \ + check_mysql.c check_mysql_query.c check_nagios.c check_nt.c \ + check_ntp.c check_ntp_peer.c check_ntp_time.c check_nwstat.c \ check_overcr.c check_pgsql.c check_ping.c check_procs.c \ check_radius.c check_real.c check_smtp.c check_snmp.c \ check_ssh.c check_swap.c check_tcp.c check_time.c check_ups.c \ check_users.c negate.c urlize.c DIST_SOURCES = $(libnpcommon_a_SOURCES) check_apt.c check_by_ssh.c \ - check_cluster.c check_dbi.c check_dig.c check_disk.c \ - check_dns.c check_dummy.c check_fping.c check_game.c \ - check_hpjd.c check_http.c check_ide_smart.c check_ldap.c \ - check_load.c check_mrtg.c check_mrtgtraf.c check_mysql.c \ - check_mysql_query.c check_nagios.c check_nt.c check_ntp.c \ - check_ntp_peer.c check_ntp_time.c check_nwstat.c \ + check_cluster.c check_curl.c check_dbi.c check_dig.c \ + check_disk.c check_dns.c check_dummy.c check_fping.c \ + check_game.c check_hpjd.c check_http.c check_ide_smart.c \ + check_ldap.c check_load.c check_mrtg.c check_mrtgtraf.c \ + check_mysql.c check_mysql_query.c check_nagios.c check_nt.c \ + check_ntp.c check_ntp_peer.c check_ntp_time.c check_nwstat.c \ check_overcr.c check_pgsql.c check_ping.c check_procs.c \ check_radius.c check_real.c check_smtp.c check_snmp.c \ check_ssh.c check_swap.c check_tcp.c check_time.c check_ups.c \ check_users.c negate.c urlize.c +RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ + html-recursive info-recursive install-data-recursive \ + install-dvi-recursive install-exec-recursive \ + install-html-recursive install-info-recursive \ + install-pdf-recursive install-ps-recursive install-recursive \ + installcheck-recursive installdirs-recursive pdf-recursive \ + ps-recursive uninstall-recursive am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac +RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ + distclean-recursive maintainer-clean-recursive +AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \ + $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \ + distdir ETAGS = etags CTAGS = ctags am__tty_colors = \ red=; grn=; lgn=; blu=; std= +DIST_SUBDIRS = $(SUBDIRS) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +am__relativize = \ + dir0=`pwd`; \ + sed_first='s,^\([^/]*\)/.*$$,\1,'; \ + sed_rest='s,^[^/]*/*,,'; \ + sed_last='s,^.*/\([^/]*\)$$,\1,'; \ + sed_butlast='s,/*[^/]*$$,,'; \ + while test -n "$$dir1"; do \ + first=`echo "$$dir1" | sed -e "$$sed_first"`; \ + if test "$$first" != "."; then \ + if test "$$first" = ".."; then \ + dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ + dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ + else \ + first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ + if test "$$first2" = "$$first"; then \ + dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ + else \ + dir2="../$$dir2"; \ + fi; \ + dir0="$$dir0"/"$$first"; \ + fi; \ + fi; \ + dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ + done; \ + reldir="$$dir2" VPATH = $(top_srcdir) $(top_srcdir)/lib $(top_srcdir)/plugins $(top_srcdir)/plugins/t pkglibexecdir = @pkglibexecdir@ ACLOCAL = @ACLOCAL@ @@ -1098,6 +1149,11 @@ LD = @LD@ LDAPINCLUDE = @LDAPINCLUDE@ LDAPLIBS = @LDAPLIBS@ LDFLAGS = @LDFLAGS@ +LIBCURL = @LIBCURL@ +LIBCURLCFLAGS = @LIBCURLCFLAGS@ +LIBCURLINCLUDE = @LIBCURLINCLUDE@ +LIBCURLLIBS = @LIBCURLLIBS@ +LIBCURL_CPPFLAGS = @LIBCURL_CPPFLAGS@ LIBGNU_LIBDEPS = @LIBGNU_LIBDEPS@ LIBGNU_LTLIBDEPS = @LIBGNU_LTLIBDEPS@ LIBICONV = @LIBICONV@ @@ -1224,6 +1280,7 @@ PERL = @PERL@ PERLMODS_DIR = @PERLMODS_DIR@ PGINCLUDE = @PGINCLUDE@ PGLIBS = @PGLIBS@ +PKGCONFIG = @PKGCONFIG@ PKG_ARCH = @PKG_ARCH@ PLUGIN_TEST = @PLUGIN_TEST@ POSUB = @POSUB@ @@ -1441,6 +1498,11 @@ TIME_H_DEFINES_STRUCT_TIMESPEC = @TIME_H_DEFINES_STRUCT_TIMESPEC@ UNDEFINE_STRTOK_R = @UNDEFINE_STRTOK_R@ UNISTD_H_HAVE_WINSOCK2_H = @UNISTD_H_HAVE_WINSOCK2_H@ UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS = @UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS@ +URIPARSER = @URIPARSER@ +URIPARSERCFLAGS = @URIPARSERCFLAGS@ +URIPARSERINCLUDE = @URIPARSERINCLUDE@ +URIPARSERLIBS = @URIPARSERLIBS@ +URIPARSER_CPPFLAGS = @URIPARSER_CPPFLAGS@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ WARRANTY = @WARRANTY@ @@ -1451,6 +1513,7 @@ WTSAPI32LIBS = @WTSAPI32LIBS@ XGETTEXT = @XGETTEXT@ XGETTEXT_015 = @XGETTEXT_015@ XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ +_libcurl_config = @_libcurl_config@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ @@ -1520,6 +1583,7 @@ AM_CPPFLAGS = -I.. -I$(top_srcdir)/lib -I$(top_srcdir)/gl -I$(top_srcdir)/intl \ check_tcp_programs = check_ftp check_imap check_nntp check_pop \ check_udp check_clamd @check_tcp_ssl@ +SUBDIRS = picohttpparser EXTRA_DIST = t tests PLUGINHDRS = common.h noinst_LIBRARIES = libnpcommon.a @@ -1537,6 +1601,9 @@ TESTS = @PLUGIN_TEST@ # the actual targets check_apt_LDADD = $(BASEOBJS) check_cluster_LDADD = $(BASEOBJS) +check_curl_CFLAGS = $(AM_CFLAGS) $(LIBCURLCFLAGS) $(URIPARSERCFLAGS) $(LIBCURLINCLUDE) $(URIPARSERINCLUDE) -Ipicohttpparser +check_curl_CPPFLAGS = $(AM_CPPFLAGS) $(LIBCURLCFLAGS) $(URIPARSERCFLAGS) $(LIBCURLINCLUDE) $(URIPARSERINCLUDE) -Ipicohttpparser +check_curl_LDADD = $(NETLIBS) $(LIBCURLLIBS) $(SSLOBJS) $(URIPARSERLIBS) picohttpparser/libpicohttpparser.a check_dbi_LDADD = $(NETLIBS) $(DBILIBS) check_dig_LDADD = $(NETLIBS) check_disk_LDADD = $(BASEOBJS) @@ -1557,7 +1624,7 @@ check_mysql_query_CFLAGS = $(AM_CFLAGS) $(MYSQLCFLAGS) check_mysql_query_CPPFLAGS = $(AM_CPPFLAGS) $(MYSQLINCLUDE) check_mysql_query_LDADD = $(NETLIBS) $(MYSQLLIBS) check_nagios_LDADD = $(BASEOBJS) -check_nt_LDADD = $(NETLIBS) +check_nt_LDADD = $(NETLIBS) check_ntp_LDADD = $(NETLIBS) $(MATHLIBS) check_ntp_peer_LDADD = $(NETLIBS) $(MATHLIBS) check_nwstat_LDADD = $(NETLIBS) @@ -1580,7 +1647,7 @@ check_by_ssh_LDADD = $(NETLIBS) check_ide_smart_LDADD = $(BASEOBJS) negate_LDADD = $(BASEOBJS) urlize_LDADD = $(BASEOBJS) -all: all-am +all: all-recursive .SUFFIXES: .SUFFIXES: .c .lo .o .obj @@ -1676,6 +1743,9 @@ check_by_ssh$(EXEEXT): $(check_by_ssh_OBJECTS) $(check_by_ssh_DEPENDENCIES) $(EX check_cluster$(EXEEXT): $(check_cluster_OBJECTS) $(check_cluster_DEPENDENCIES) $(EXTRA_check_cluster_DEPENDENCIES) @rm -f check_cluster$(EXEEXT) $(LINK) $(check_cluster_OBJECTS) $(check_cluster_LDADD) $(LIBS) +check_curl$(EXEEXT): $(check_curl_OBJECTS) $(check_curl_DEPENDENCIES) $(EXTRA_check_curl_DEPENDENCIES) + @rm -f check_curl$(EXEEXT) + $(check_curl_LINK) $(check_curl_OBJECTS) $(check_curl_LDADD) $(LIBS) check_dbi$(EXEEXT): $(check_dbi_OBJECTS) $(check_dbi_DEPENDENCIES) $(EXTRA_check_dbi_DEPENDENCIES) @rm -f check_dbi$(EXEEXT) $(LINK) $(check_dbi_OBJECTS) $(check_dbi_LDADD) $(LIBS) @@ -1800,6 +1870,7 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/check_apt.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/check_by_ssh.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/check_cluster.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/check_curl-check_curl.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/check_dbi.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/check_dig.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/check_disk.Po@am__quote@ @@ -1865,6 +1936,20 @@ distclean-compile: @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $< +check_curl-check_curl.o: check_curl.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(check_curl_CPPFLAGS) $(CPPFLAGS) $(check_curl_CFLAGS) $(CFLAGS) -MT check_curl-check_curl.o -MD -MP -MF $(DEPDIR)/check_curl-check_curl.Tpo -c -o check_curl-check_curl.o `test -f 'check_curl.c' || echo '$(srcdir)/'`check_curl.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/check_curl-check_curl.Tpo $(DEPDIR)/check_curl-check_curl.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='check_curl.c' object='check_curl-check_curl.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(check_curl_CPPFLAGS) $(CPPFLAGS) $(check_curl_CFLAGS) $(CFLAGS) -c -o check_curl-check_curl.o `test -f 'check_curl.c' || echo '$(srcdir)/'`check_curl.c + +check_curl-check_curl.obj: check_curl.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(check_curl_CPPFLAGS) $(CPPFLAGS) $(check_curl_CFLAGS) $(CFLAGS) -MT check_curl-check_curl.obj -MD -MP -MF $(DEPDIR)/check_curl-check_curl.Tpo -c -o check_curl-check_curl.obj `if test -f 'check_curl.c'; then $(CYGPATH_W) 'check_curl.c'; else $(CYGPATH_W) '$(srcdir)/check_curl.c'; fi` +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/check_curl-check_curl.Tpo $(DEPDIR)/check_curl-check_curl.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='check_curl.c' object='check_curl-check_curl.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(check_curl_CPPFLAGS) $(CPPFLAGS) $(check_curl_CFLAGS) $(CFLAGS) -c -o check_curl-check_curl.obj `if test -f 'check_curl.c'; then $(CYGPATH_W) 'check_curl.c'; else $(CYGPATH_W) '$(srcdir)/check_curl.c'; fi` + check_mysql-check_mysql.o: check_mysql.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(check_mysql_CPPFLAGS) $(CPPFLAGS) $(check_mysql_CFLAGS) $(CFLAGS) -MT check_mysql-check_mysql.o -MD -MP -MF $(DEPDIR)/check_mysql-check_mysql.Tpo -c -o check_mysql-check_mysql.o `test -f 'check_mysql.c' || echo '$(srcdir)/'`check_mysql.c @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/check_mysql-check_mysql.Tpo $(DEPDIR)/check_mysql-check_mysql.Po @@ -1899,6 +1984,76 @@ mostlyclean-libtool: clean-libtool: -rm -rf .libs _libs +# This directory's subdirectories are mostly independent; you can cd +# into them and run `make' without going through this Makefile. +# To change the values of `make' variables: instead of editing Makefiles, +# (1) if the variable is set in `config.status', edit `config.status' +# (which will cause the Makefiles to be regenerated when you run `make'); +# (2) otherwise, pass the desired values on the `make' command line. +$(RECURSIVE_TARGETS): + @fail= failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ + *k*) failcom='fail=yes';; \ + esac; \ + done; \ + dot_seen=no; \ + target=`echo $@ | sed s/-recursive//`; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + dot_seen=yes; \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done; \ + if test "$$dot_seen" = "no"; then \ + $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ + fi; test -z "$$fail" + +$(RECURSIVE_CLEAN_TARGETS): + @fail= failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ + *k*) failcom='fail=yes';; \ + esac; \ + done; \ + dot_seen=no; \ + case "$@" in \ + distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ + *) list='$(SUBDIRS)' ;; \ + esac; \ + rev=''; for subdir in $$list; do \ + if test "$$subdir" = "."; then :; else \ + rev="$$subdir $$rev"; \ + fi; \ + done; \ + rev="$$rev ."; \ + target=`echo $@ | sed s/-recursive//`; \ + for subdir in $$rev; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done && test -z "$$fail" +tags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ + done +ctags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ + done + ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ @@ -1909,10 +2064,23 @@ ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) mkid -fID $$unique tags: TAGS -TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ +TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ + if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ + include_option=--etags-include; \ + empty_fix=.; \ + else \ + include_option=--include; \ + empty_fix=; \ + fi; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test ! -f $$subdir/TAGS || \ + set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ + fi; \ + done; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ @@ -1931,7 +2099,7 @@ TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ fi; \ fi ctags: CTAGS -CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ +CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ @@ -2074,23 +2242,49 @@ distdir: $(DISTFILES) || exit 1; \ fi; \ done + @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + $(am__make_dryrun) \ + || test -d "$(distdir)/$$subdir" \ + || $(MKDIR_P) "$(distdir)/$$subdir" \ + || exit 1; \ + dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ + $(am__relativize); \ + new_distdir=$$reldir; \ + dir1=$$subdir; dir2="$(top_distdir)"; \ + $(am__relativize); \ + new_top_distdir=$$reldir; \ + echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ + echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ + ($(am__cd) $$subdir && \ + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$$new_top_distdir" \ + distdir="$$new_distdir" \ + am__remove_distdir=: \ + am__skip_length_check=: \ + am__skip_mode_fix=: \ + distdir) \ + || exit 1; \ + fi; \ + done check-am: all-am $(MAKE) $(AM_MAKEFLAGS) check-TESTS -check: check-am +check: check-recursive all-am: Makefile $(LIBRARIES) $(PROGRAMS) all-local -installdirs: +installdirs: installdirs-recursive +installdirs-am: for dir in "$(DESTDIR)$(libexecdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done -install: install-am -install-exec: install-exec-am -install-data: install-data-am -uninstall: uninstall-am +install: install-recursive +install-exec: install-exec-recursive +install-data: install-data-recursive +uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am -installcheck: installcheck-am +installcheck: installcheck-recursive install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ @@ -2112,83 +2306,86 @@ distclean-generic: maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." -clean: clean-am +clean: clean-recursive clean-am: clean-generic clean-libexecPROGRAMS clean-libtool \ clean-local clean-noinstLIBRARIES mostlyclean-am -distclean: distclean-am +distclean: distclean-recursive -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags -dvi: dvi-am +dvi: dvi-recursive dvi-am: -html: html-am +html: html-recursive html-am: -info: info-am +info: info-recursive info-am: install-data-am: -install-dvi: install-dvi-am +install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-libexecPROGRAMS @$(NORMAL_INSTALL) $(MAKE) $(AM_MAKEFLAGS) install-exec-hook -install-html: install-html-am +install-html: install-html-recursive install-html-am: -install-info: install-info-am +install-info: install-info-recursive install-info-am: install-man: -install-pdf: install-pdf-am +install-pdf: install-pdf-recursive install-pdf-am: -install-ps: install-ps-am +install-ps: install-ps-recursive install-ps-am: installcheck-am: -maintainer-clean: maintainer-clean-am +maintainer-clean: maintainer-clean-recursive -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic -mostlyclean: mostlyclean-am +mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool -pdf: pdf-am +pdf: pdf-recursive pdf-am: -ps: ps-am +ps: ps-recursive ps-am: uninstall-am: uninstall-libexecPROGRAMS uninstall-local -.MAKE: check-am install-am install-exec-am install-strip +.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) check-am \ + ctags-recursive install-am install-exec-am install-strip \ + tags-recursive -.PHONY: CTAGS GTAGS all all-am all-local check check-TESTS check-am \ - clean clean-generic clean-libexecPROGRAMS clean-libtool \ - clean-local clean-noinstLIBRARIES ctags distclean \ +.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ + all all-am all-local check check-TESTS check-am clean \ + clean-generic clean-libexecPROGRAMS clean-libtool clean-local \ + clean-noinstLIBRARIES ctags ctags-recursive distclean \ distclean-compile distclean-generic distclean-libtool \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ @@ -2196,11 +2393,11 @@ uninstall-am: uninstall-libexecPROGRAMS uninstall-local install-html install-html-am install-info install-info-am \ install-libexecPROGRAMS install-man install-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ - installcheck-am installdirs maintainer-clean \ + installcheck-am installdirs installdirs-am maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ - tags uninstall uninstall-am uninstall-libexecPROGRAMS \ - uninstall-local + tags tags-recursive uninstall uninstall-am \ + uninstall-libexecPROGRAMS uninstall-local @RELEASE_PRESENT_FALSE@NP-VERSION-FILE: .FORCE-NP-VERSION-FILE @RELEASE_PRESENT_FALSE@ @$(SHELL_PATH) $(top_srcdir)/NP-VERSION-GEN diff --git a/plugins/check_apt.c b/plugins/check_apt.c index a639a41..d7be575 100644 --- a/plugins/check_apt.c +++ b/plugins/check_apt.c @@ -66,13 +66,19 @@ char* construct_cmdline(upgrade_type u, const char *opts); /* run an apt-get update */ int run_update(void); /* run an apt-get upgrade */ -int run_upgrade(int *pkgcount, int *secpkgcount); +int run_upgrade(int *pkgcount, int *secpkgcount, char ***pkglist, char ***secpkglist); /* add another clause to a regexp */ char* add_to_regexp(char *expr, const char *next); +/* extract package name from Inst line */ +char* pkg_name(char *line); +/* string comparison function for qsort */ +int cmpstringp(const void *p1, const void *p2); /* configuration variables */ static int verbose = 0; /* -v */ +static int list = 0; /* list packages available for upgrade */ static int do_update = 0; /* whether to call apt-get update */ +static int only_critical = 0; /* whether to warn about non-critical updates */ static upgrade_type upgrade = UPGRADE; /* which type of upgrade to do */ static char *upgrade_opts = NULL; /* options to override defaults for upgrade */ static char *update_opts = NULL; /* options to override defaults for update */ @@ -80,13 +86,16 @@ static char *do_include = NULL; /* regexp to only include certain packages */ static char *do_exclude = NULL; /* regexp to only exclude certain packages */ static char *do_critical = NULL; /* regexp specifying critical packages */ static char *input_filename = NULL; /* input filename for testing */ +/* number of packages available for upgrade to return WARNING status */ +static int packages_warning = 1; /* other global variables */ static int stderr_warning = 0; /* if a cmd issued output on stderr */ static int exec_warning = 0; /* if a cmd exited non-zero */ int main (int argc, char **argv) { - int result=STATE_UNKNOWN, packages_available=0, sec_count=0; + int result=STATE_UNKNOWN, packages_available=0, sec_count=0, i=0; + char **packages_list=NULL, **secpackages_list=NULL; /* Parse extra opts if any */ argv=np_extra_opts(&argc, argv, progname); @@ -106,11 +115,11 @@ int main (int argc, char **argv) { if(do_update) result = run_update(); /* apt-get upgrade */ - result = max_state(result, run_upgrade(&packages_available, &sec_count)); + result = max_state(result, run_upgrade(&packages_available, &sec_count, &packages_list, &secpackages_list)); if(sec_count > 0){ result = max_state(result, STATE_CRITICAL); - } else if(packages_available > 0){ + } else if(packages_available >= packages_warning && only_critical == 0){ result = max_state(result, STATE_WARNING); } else if(result > STATE_UNKNOWN){ result = STATE_UNKNOWN; @@ -129,6 +138,18 @@ int main (int argc, char **argv) { sec_count ); + if(list) { + qsort(secpackages_list, sec_count, sizeof(char*), cmpstringp); + qsort(packages_list, packages_available-sec_count, sizeof(char*), cmpstringp); + + for(i = 0; i < sec_count; i++) + printf("%s (security)\n", secpackages_list[i]); + if (only_critical == 0) { + for(i = 0; i < packages_available - sec_count; i++) + printf("%s\n", packages_list[i]); + } + } + return result; } @@ -145,15 +166,18 @@ int process_arguments (int argc, char **argv) { {"upgrade", optional_argument, 0, 'U'}, {"no-upgrade", no_argument, 0, 'n'}, {"dist-upgrade", optional_argument, 0, 'd'}, + {"list", no_argument, 0, 'l'}, {"include", required_argument, 0, 'i'}, {"exclude", required_argument, 0, 'e'}, {"critical", required_argument, 0, 'c'}, + {"only-critical", no_argument, 0, 'o'}, {"input-file", required_argument, 0, INPUT_FILE_OPT}, + {"packages-warning", required_argument, 0, 'w'}, {0, 0, 0, 0} }; while(1) { - c = getopt_long(argc, argv, "hVvt:u::U::d::ni:e:c:", longopts, NULL); + c = getopt_long(argc, argv, "hVvt:u::U::d::nli:e:c:ow:", longopts, NULL); if(c == -1 || c == EOF || c == 1) break; @@ -194,6 +218,9 @@ int process_arguments (int argc, char **argv) { if(update_opts==NULL) die(STATE_UNKNOWN, "strdup failed"); } break; + case 'l': + list=1; + break; case 'i': do_include=add_to_regexp(do_include, optarg); break; @@ -203,9 +230,15 @@ int process_arguments (int argc, char **argv) { case 'c': do_critical=add_to_regexp(do_critical, optarg); break; + case 'o': + only_critical=1; + break; case INPUT_FILE_OPT: input_filename = optarg; break; + case 'w': + packages_warning = atoi(optarg); + break; default: /* print short usage statement if args not parsable */ usage5(); @@ -217,7 +250,7 @@ int process_arguments (int argc, char **argv) { /* run an apt-get upgrade */ -int run_upgrade(int *pkgcount, int *secpkgcount){ +int run_upgrade(int *pkgcount, int *secpkgcount, char ***pkglist, char ***secpkglist){ int i=0, result=STATE_UNKNOWN, regres=0, pc=0, spc=0; struct output chld_out, chld_err; regex_t ireg, ereg, sreg; @@ -273,6 +306,11 @@ int run_upgrade(int *pkgcount, int *secpkgcount){ cmdline); } + *pkglist=malloc(sizeof(char *) * chld_out.lines); + if(!pkglist) die(STATE_UNKNOWN, "malloc failed!\n"); + *secpkglist=malloc(sizeof(char *) * chld_out.lines); + if(!secpkglist) die(STATE_UNKNOWN, "malloc failed!\n"); + /* parse the output, which should only consist of lines like * * Inst package .... @@ -297,6 +335,9 @@ int run_upgrade(int *pkgcount, int *secpkgcount){ if(regexec(&sreg, chld_out.line[i], 0, NULL, 0)==0){ spc++; if(verbose) printf("*"); + (*secpkglist)[spc-1] = pkg_name(chld_out.line[i]); + } else { + (*pkglist)[pc-spc-1] = pkg_name(chld_out.line[i]); } if(verbose){ printf("*%s\n", chld_out.line[i]); @@ -363,6 +404,31 @@ int run_update(void){ return result; } +char* pkg_name(char *line){ + char *start=NULL, *space=NULL, *pkg=NULL; + int len=0; + + start = line + strlen(PKGINST_PREFIX); + len = strlen(start); + + space = index(start, ' '); + if(space!=NULL){ + len = space - start; + } + + pkg=malloc(sizeof(char)*(len+1)); + if(!pkg) die(STATE_UNKNOWN, "malloc failed!\n"); + + strncpy(pkg, start, len); + pkg[len]='\0'; + + return pkg; +} + +int cmpstringp(const void *p1, const void *p2){ + return strcmp(* (char * const *) p1, * (char * const *) p2); +} + char* add_to_regexp(char *expr, const char *next){ char *re=NULL; @@ -445,8 +511,11 @@ print_help (void) printf (" %s\n", "-d, --dist-upgrade=OPTS"); printf (" %s\n", _("Perform a dist-upgrade instead of normal upgrade. Like with -U OPTS")); printf (" %s\n", _("can be provided to override the default options.")); - printf (" %s\n", " -n, --no-upgrade"); + printf (" %s\n", "-n, --no-upgrade"); printf (" %s\n", _("Do not run the upgrade. Probably not useful (without -u at least).")); + printf (" %s\n", "-l, --list"); + printf (" %s\n", _("List packages available for upgrade. Packages are printed sorted by")); + printf (" %s\n", _("name with security packages listed first.")); printf (" %s\n", "-i, --include=REGEXP"); printf (" %s\n", _("Include only packages matching REGEXP. Can be specified multiple times")); printf (" %s\n", _("the values will be combined together. Any packages matching this list")); @@ -463,7 +532,14 @@ print_help (void) printf (" %s\n", _("upgrades for Debian and Ubuntu:")); printf (" \t\%s\n", SECURITY_RE); printf (" %s\n", _("Note that the package must first match the include list before its")); - printf (" %s\n\n", _("information is compared against the critical list.")); + printf (" %s\n", _("information is compared against the critical list.")); + printf (" %s\n", "-o, --only-critical"); + printf (" %s\n", _("Only warn about upgrades matching the critical list. The total number")); + printf (" %s\n", _("of upgrades will be printed, but any non-critical upgrades will not cause")); + printf (" %s\n", _("the plugin to return WARNING status.")); + printf (" %s\n", "-w, --packages-warning"); + printf (" %s\n", _("Minumum number of packages available for upgrade to return WARNING status.")); + printf (" %s\n\n", _("Default is 1 package.")); printf ("%s\n\n", _("The following options require root privileges and should be used with care:")); printf (" %s\n", "-u, --update=OPTS"); @@ -481,5 +557,5 @@ void print_usage(void) { printf ("%s\n", _("Usage:")); - printf ("%s [[-d|-u|-U]opts] [-n] [-t timeout]\n", progname); + printf ("%s [[-d|-u|-U]opts] [-n] [-l] [-t timeout] [-w packages-warning]\n", progname); } diff --git a/plugins/check_cluster.c b/plugins/check_cluster.c index b86e501..e1ede9f 100644 --- a/plugins/check_cluster.c +++ b/plugins/check_cluster.c @@ -143,6 +143,7 @@ int main(int argc, char **argv){ int process_arguments(int argc, char **argv){ int c; + char *ptr; int option=0; static struct option longopts[]={ {"data", required_argument,0,'d'}, @@ -188,6 +189,15 @@ int process_arguments(int argc, char **argv){ case 'd': /* data values */ data_vals=(char *)strdup(optarg); + /* validate data */ + for (ptr=data_vals;ptr!=NULL;ptr+=2){ + if (ptr[0]<'0' || ptr[0]>'3') + return ERROR; + if (ptr[1]=='\0') + break; + if (ptr[1]!=',') + return ERROR; + } break; case 'l': /* text label */ diff --git a/plugins/check_curl.c b/plugins/check_curl.c new file mode 100644 index 0000000..2d69b31 --- /dev/null +++ b/plugins/check_curl.c @@ -0,0 +1,2335 @@ +/***************************************************************************** +* +* Monitoring check_curl plugin +* +* License: GPL +* Copyright (c) 1999-2019 Monitoring Plugins Development Team +* +* Description: +* +* This file contains the check_curl plugin +* +* This plugin tests the HTTP service on the specified host. It can test +* normal (http) and secure (https) servers, follow redirects, search for +* strings and regular expressions, check connection times, and report on +* certificate expiration times. +* +* This plugin uses functions from the curl library, see +* http://curl.haxx.se +* +* 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 . +* +* +*****************************************************************************/ +const char *progname = "check_curl"; + +const char *copyright = "2006-2019"; +const char *email = "devel@monitoring-plugins.org"; + +#include + +#include "common.h" +#include "utils.h" + +#ifndef LIBCURL_PROTOCOL_HTTP +#error libcurl compiled without HTTP support, compiling check_curl plugin does not makes a lot of sense +#endif + +#include "curl/curl.h" +#include "curl/easy.h" + +#include "picohttpparser.h" + +#include "uriparser/Uri.h" + +#include + +#define MAKE_LIBCURL_VERSION(major, minor, patch) ((major)*0x10000 + (minor)*0x100 + (patch)) + +#define DEFAULT_BUFFER_SIZE 2048 +#define DEFAULT_SERVER_URL "/" +#define HTTP_EXPECT "HTTP/" +#define DEFAULT_MAX_REDIRS 15 +#define INET_ADDR_MAX_SIZE INET6_ADDRSTRLEN +enum { + MAX_IPV4_HOSTLENGTH = 255, + HTTP_PORT = 80, + HTTPS_PORT = 443, + MAX_PORT = 65535 +}; + +enum { + STICKY_NONE = 0, + STICKY_HOST = 1, + STICKY_PORT = 2 +}; + +enum { + FOLLOW_HTTP_CURL = 0, + FOLLOW_LIBCURL = 1 +}; + +/* for buffers for header and body */ +typedef struct { + char *buf; + size_t buflen; + size_t bufsize; +} curlhelp_write_curlbuf; + +/* for buffering the data sent in PUT */ +typedef struct { + char *buf; + size_t buflen; + off_t pos; +} curlhelp_read_curlbuf; + +/* for parsing the HTTP status line */ +typedef struct { + int http_major; /* major version of the protocol, always 1 (HTTP/0.9 + * never reached the big internet most likely) */ + int http_minor; /* minor version of the protocol, usually 0 or 1 */ + int http_code; /* HTTP return code as in RFC 2145 */ + int http_subcode; /* Microsoft IIS extension, HTTP subcodes, see + * http://support.microsoft.com/kb/318380/en-us */ + const char *msg; /* the human readable message */ + char *first_line; /* a copy of the first line */ +} curlhelp_statusline; + +/* to know the underlying SSL library used by libcurl */ +typedef enum curlhelp_ssl_library { + CURLHELP_SSL_LIBRARY_UNKNOWN, + CURLHELP_SSL_LIBRARY_OPENSSL, + CURLHELP_SSL_LIBRARY_LIBRESSL, + CURLHELP_SSL_LIBRARY_GNUTLS, + CURLHELP_SSL_LIBRARY_NSS +} curlhelp_ssl_library; + +enum { + REGS = 2, + MAX_RE_SIZE = 256 +}; +#include "regex.h" +regex_t preg; +regmatch_t pmatch[REGS]; +char regexp[MAX_RE_SIZE]; +int cflags = REG_NOSUB | REG_EXTENDED | REG_NEWLINE; +int errcode; +int invert_regex = 0; + +char *server_address = NULL; +char *host_name = NULL; +char *server_url = 0; +char server_ip[DEFAULT_BUFFER_SIZE]; +struct curl_slist *server_ips = NULL; +int specify_port = FALSE; +unsigned short server_port = HTTP_PORT; +unsigned short virtual_port = 0; +int host_name_length; +char output_header_search[30] = ""; +char output_string_search[30] = ""; +char *warning_thresholds = NULL; +char *critical_thresholds = NULL; +int days_till_exp_warn, days_till_exp_crit; +thresholds *thlds; +char user_agent[DEFAULT_BUFFER_SIZE]; +int verbose = 0; +int show_extended_perfdata = FALSE; +int min_page_len = 0; +int max_page_len = 0; +int redir_depth = 0; +int max_depth = DEFAULT_MAX_REDIRS; +char *http_method = NULL; +char *http_post_data = NULL; +char *http_content_type = NULL; +CURL *curl; +struct curl_slist *header_list = NULL; +curlhelp_write_curlbuf body_buf; +curlhelp_write_curlbuf header_buf; +curlhelp_statusline status_line; +curlhelp_read_curlbuf put_buf; +char http_header[DEFAULT_BUFFER_SIZE]; +long code; +long socket_timeout = DEFAULT_SOCKET_TIMEOUT; +double total_time; +double time_connect; +double time_appconnect; +double time_headers; +double time_firstbyte; +char errbuf[CURL_ERROR_SIZE+1]; +CURLcode res; +char url[DEFAULT_BUFFER_SIZE]; +char msg[DEFAULT_BUFFER_SIZE]; +char perfstring[DEFAULT_BUFFER_SIZE]; +char header_expect[MAX_INPUT_BUFFER] = ""; +char string_expect[MAX_INPUT_BUFFER] = ""; +char server_expect[MAX_INPUT_BUFFER] = HTTP_EXPECT; +int server_expect_yn = 0; +char user_auth[MAX_INPUT_BUFFER] = ""; +char proxy_auth[MAX_INPUT_BUFFER] = ""; +char **http_opt_headers; +int http_opt_headers_count = 0; +int display_html = FALSE; +int onredirect = STATE_OK; +int followmethod = FOLLOW_HTTP_CURL; +int followsticky = STICKY_NONE; +int use_ssl = FALSE; +int use_sni = TRUE; +int check_cert = FALSE; +typedef union { + struct curl_slist* to_info; + struct curl_certinfo* to_certinfo; +} cert_ptr_union; +cert_ptr_union cert_ptr; +int ssl_version = CURL_SSLVERSION_DEFAULT; +char *client_cert = NULL; +char *client_privkey = NULL; +char *ca_cert = NULL; +int is_openssl_callback = FALSE; +#if defined(HAVE_SSL) && defined(USE_OPENSSL) +X509 *cert = NULL; +#endif /* defined(HAVE_SSL) && defined(USE_OPENSSL) */ +int no_body = FALSE; +int maximum_age = -1; +int address_family = AF_UNSPEC; +curlhelp_ssl_library ssl_library = CURLHELP_SSL_LIBRARY_UNKNOWN; +int curl_http_version = CURL_HTTP_VERSION_NONE; + +int process_arguments (int, char**); +void handle_curl_option_return_code (CURLcode res, const char* option); +int check_http (void); +void redir (curlhelp_write_curlbuf*); +char *perfd_time (double microsec); +char *perfd_time_connect (double microsec); +char *perfd_time_ssl (double microsec); +char *perfd_time_firstbyte (double microsec); +char *perfd_time_headers (double microsec); +char *perfd_time_transfer (double microsec); +char *perfd_size (int page_len); +void print_help (void); +void print_usage (void); +void print_curl_version (void); +int curlhelp_initwritebuffer (curlhelp_write_curlbuf*); +int curlhelp_buffer_write_callback (void*, size_t , size_t , void*); +void curlhelp_freewritebuffer (curlhelp_write_curlbuf*); +int curlhelp_initreadbuffer (curlhelp_read_curlbuf *, const char *, size_t); +int curlhelp_buffer_read_callback (void *, size_t , size_t , void *); +void curlhelp_freereadbuffer (curlhelp_read_curlbuf *); +curlhelp_ssl_library curlhelp_get_ssl_library (CURL*); +const char* curlhelp_get_ssl_library_string (curlhelp_ssl_library); +int net_noopenssl_check_certificate (cert_ptr_union*, int, int); + +int curlhelp_parse_statusline (const char*, curlhelp_statusline *); +void curlhelp_free_statusline (curlhelp_statusline *); +char *get_header_value (const struct phr_header* headers, const size_t nof_headers, const char* header); +int check_document_dates (const curlhelp_write_curlbuf *, char (*msg)[DEFAULT_BUFFER_SIZE]); +int get_content_length (const curlhelp_write_curlbuf* header_buf, const curlhelp_write_curlbuf* body_buf); + +#if defined(HAVE_SSL) && defined(USE_OPENSSL) +int np_net_ssl_check_certificate(X509 *certificate, int days_till_exp_warn, int days_till_exp_crit); +#endif /* defined(HAVE_SSL) && defined(USE_OPENSSL) */ + +void remove_newlines (char *); +void test_file (char *); + +int +main (int argc, char **argv) +{ + int result = STATE_UNKNOWN; + + setlocale (LC_ALL, ""); + bindtextdomain (PACKAGE, LOCALEDIR); + textdomain (PACKAGE); + + /* Parse extra opts if any */ + argv = np_extra_opts (&argc, argv, progname); + + /* set defaults */ + snprintf( user_agent, DEFAULT_BUFFER_SIZE, "%s/v%s (monitoring-plugins %s, %s)", + progname, NP_VERSION, VERSION, curl_version()); + + /* parse arguments */ + if (process_arguments (argc, argv) == ERROR) + usage4 (_("Could not parse arguments")); + + if (display_html == TRUE) + printf ("", + use_ssl ? "https" : "http", + host_name ? host_name : server_address, + virtual_port ? virtual_port : server_port, + server_url); + + result = check_http (); + return result; +} + +#ifdef HAVE_SSL +#ifdef USE_OPENSSL + +int verify_callback(int preverify_ok, X509_STORE_CTX *x509_ctx) +{ + /* TODO: we get all certificates of the chain, so which ones + * should we test? + * TODO: is the last certificate always the server certificate? + */ + cert = X509_STORE_CTX_get_current_cert(x509_ctx); + return 1; +} + +CURLcode sslctxfun(CURL *curl, SSL_CTX *sslctx, void *parm) +{ + SSL_CTX_set_verify(sslctx, SSL_VERIFY_PEER, verify_callback); + + return CURLE_OK; +} + +#endif /* USE_OPENSSL */ +#endif /* HAVE_SSL */ + +/* Checks if the server 'reply' is one of the expected 'statuscodes' */ +static int +expected_statuscode (const char *reply, const char *statuscodes) +{ + char *expected, *code; + int result = 0; + + if ((expected = strdup (statuscodes)) == NULL) + die (STATE_UNKNOWN, _("HTTP UNKNOWN - Memory allocation error\n")); + + for (code = strtok (expected, ","); code != NULL; code = strtok (NULL, ",")) + if (strstr (reply, code) != NULL) { + result = 1; + break; + } + + free (expected); + return result; +} + +void +handle_curl_option_return_code (CURLcode res, const char* option) +{ + if (res != CURLE_OK) { + snprintf (msg, DEFAULT_BUFFER_SIZE, _("Error while setting cURL option '%s': cURL returned %d - %s"), + option, res, curl_easy_strerror(res)); + die (STATE_CRITICAL, "HTTP CRITICAL - %s\n", msg); + } +} + +int +check_http (void) +{ + int result = STATE_OK; + int page_len = 0; + int i; + char *force_host_header = NULL; + + /* initialize curl */ + if (curl_global_init (CURL_GLOBAL_DEFAULT) != CURLE_OK) + die (STATE_UNKNOWN, "HTTP UNKNOWN - curl_global_init failed\n"); + + if ((curl = curl_easy_init()) == NULL) + die (STATE_UNKNOWN, "HTTP UNKNOWN - curl_easy_init failed\n"); + + if (verbose >= 1) + handle_curl_option_return_code (curl_easy_setopt (curl, CURLOPT_VERBOSE, TRUE), "CURLOPT_VERBOSE"); + + /* print everything on stdout like check_http would do */ + handle_curl_option_return_code (curl_easy_setopt(curl, CURLOPT_STDERR, stdout), "CURLOPT_STDERR"); + + /* initialize buffer for body of the answer */ + if (curlhelp_initwritebuffer(&body_buf) < 0) + die (STATE_UNKNOWN, "HTTP CRITICAL - out of memory allocating buffer for body\n"); + handle_curl_option_return_code (curl_easy_setopt (curl, CURLOPT_WRITEFUNCTION, (curl_write_callback)curlhelp_buffer_write_callback), "CURLOPT_WRITEFUNCTION"); + handle_curl_option_return_code (curl_easy_setopt (curl, CURLOPT_WRITEDATA, (void *)&body_buf), "CURLOPT_WRITEDATA"); + + /* initialize buffer for header of the answer */ + if (curlhelp_initwritebuffer( &header_buf ) < 0) + die (STATE_UNKNOWN, "HTTP CRITICAL - out of memory allocating buffer for header\n" ); + handle_curl_option_return_code (curl_easy_setopt (curl, CURLOPT_HEADERFUNCTION, (curl_write_callback)curlhelp_buffer_write_callback), "CURLOPT_HEADERFUNCTION"); + handle_curl_option_return_code (curl_easy_setopt (curl, CURLOPT_WRITEHEADER, (void *)&header_buf), "CURLOPT_WRITEHEADER"); + + /* set the error buffer */ + handle_curl_option_return_code (curl_easy_setopt (curl, CURLOPT_ERRORBUFFER, errbuf), "CURLOPT_ERRORBUFFER"); + + /* set timeouts */ + handle_curl_option_return_code (curl_easy_setopt (curl, CURLOPT_CONNECTTIMEOUT, socket_timeout), "CURLOPT_CONNECTTIMEOUT"); + handle_curl_option_return_code (curl_easy_setopt (curl, CURLOPT_TIMEOUT, socket_timeout), "CURLOPT_TIMEOUT"); + + // fill dns resolve cache to make curl connect to the given server_address instead of the host_name, only required for ssl, because we use the host_name later on to make SNI happy + if(use_ssl && host_name != NULL) { + struct curl_slist *host = NULL; + char dnscache[DEFAULT_BUFFER_SIZE]; + snprintf (dnscache, DEFAULT_BUFFER_SIZE, "%s:%d:%s", host_name, server_port, server_address); + host = curl_slist_append(NULL, dnscache); + curl_easy_setopt(curl, CURLOPT_RESOLVE, host); + if (verbose>=1) + printf ("* curl CURLOPT_RESOLVE: %s\n", dnscache); + } + + /* compose URL: use the address we want to connect to, set Host: header later */ + snprintf (url, DEFAULT_BUFFER_SIZE, "%s://%s:%d%s", + use_ssl ? "https" : "http", + use_ssl & host_name != NULL ? host_name : server_address, + server_port, + server_url + ); + + if (verbose>=1) + printf ("* curl CURLOPT_URL: %s\n", url); + handle_curl_option_return_code (curl_easy_setopt (curl, CURLOPT_URL, url), "CURLOPT_URL"); + + /* extract proxy information for legacy proxy https requests */ + if (!strcmp(http_method, "CONNECT") || strstr(server_url, "http") == server_url) { + handle_curl_option_return_code (curl_easy_setopt (curl, CURLOPT_PROXY, server_address), "CURLOPT_PROXY"); + handle_curl_option_return_code (curl_easy_setopt (curl, CURLOPT_PROXYPORT, (long)server_port), "CURLOPT_PROXYPORT"); + if (verbose>=2) + printf ("* curl CURLOPT_PROXY: %s:%d\n", server_address, server_port); + http_method = "GET"; + handle_curl_option_return_code (curl_easy_setopt (curl, CURLOPT_URL, server_url), "CURLOPT_URL"); + } + + /* disable body for HEAD request */ + if (http_method && !strcmp (http_method, "HEAD" )) { + no_body = TRUE; + } + + /* set HTTP protocol version */ + handle_curl_option_return_code (curl_easy_setopt (curl, CURLOPT_HTTP_VERSION, curl_http_version), "CURLOPT_HTTP_VERSION"); + + /* set HTTP method */ + if (http_method) { + if (!strcmp(http_method, "POST")) + handle_curl_option_return_code (curl_easy_setopt (curl, CURLOPT_POST, 1), "CURLOPT_POST"); + else if (!strcmp(http_method, "PUT")) + handle_curl_option_return_code (curl_easy_setopt (curl, CURLOPT_UPLOAD, 1), "CURLOPT_UPLOAD"); + else + handle_curl_option_return_code (curl_easy_setopt (curl, CURLOPT_CUSTOMREQUEST, http_method), "CURLOPT_CUSTOMREQUEST"); + } + + /* check if Host header is explicitly set in options */ + if (http_opt_headers_count) { + for (i = 0; i < http_opt_headers_count ; i++) { + if (strncmp(http_opt_headers[i], "Host:", 5) == 0) { + force_host_header = http_opt_headers[i]; + } + } + } + + /* set hostname (virtual hosts), not needed if CURLOPT_CONNECT_TO is used, but left in anyway */ + if(host_name != NULL && force_host_header == NULL) { + if((virtual_port != HTTP_PORT && !use_ssl) || (virtual_port != HTTPS_PORT && use_ssl)) { + snprintf(http_header, DEFAULT_BUFFER_SIZE, "Host: %s:%d", host_name, virtual_port); + } else { + snprintf(http_header, DEFAULT_BUFFER_SIZE, "Host: %s", host_name); + } + header_list = curl_slist_append (header_list, http_header); + } + + /* always close connection, be nice to servers */ + snprintf (http_header, DEFAULT_BUFFER_SIZE, "Connection: close"); + header_list = curl_slist_append (header_list, http_header); + + /* attach additional headers supplied by the user */ + /* optionally send any other header tag */ + if (http_opt_headers_count) { + for (i = 0; i < http_opt_headers_count ; i++) { + header_list = curl_slist_append (header_list, http_opt_headers[i]); + } + /* This cannot be free'd here because a redirection will then try to access this and segfault */ + /* Covered in a testcase in tests/check_http.t */ + /* free(http_opt_headers); */ + } + + /* set HTTP headers */ + handle_curl_option_return_code (curl_easy_setopt( curl, CURLOPT_HTTPHEADER, header_list ), "CURLOPT_HTTPHEADER"); + +#ifdef LIBCURL_FEATURE_SSL + + /* set SSL version, warn about unsecure or unsupported versions */ + if (use_ssl) { + handle_curl_option_return_code (curl_easy_setopt (curl, CURLOPT_SSLVERSION, ssl_version), "CURLOPT_SSLVERSION"); + } + + /* client certificate and key to present to server (SSL) */ + if (client_cert) + handle_curl_option_return_code (curl_easy_setopt (curl, CURLOPT_SSLCERT, client_cert), "CURLOPT_SSLCERT"); + if (client_privkey) + handle_curl_option_return_code (curl_easy_setopt (curl, CURLOPT_SSLKEY, client_privkey), "CURLOPT_SSLKEY"); + if (ca_cert) { + /* per default if we have a CA verify both the peer and the + * hostname in the certificate, can be switched off later */ + handle_curl_option_return_code (curl_easy_setopt (curl, CURLOPT_CAINFO, ca_cert), "CURLOPT_CAINFO"); + handle_curl_option_return_code (curl_easy_setopt( curl, CURLOPT_SSL_VERIFYPEER, 1), "CURLOPT_SSL_VERIFYPEER"); + handle_curl_option_return_code (curl_easy_setopt( curl, CURLOPT_SSL_VERIFYHOST, 2), "CURLOPT_SSL_VERIFYHOST"); + } else { + /* backward-compatible behaviour, be tolerant in checks + * TODO: depending on more options have aspects we want + * to be less tolerant about ssl verfications + */ + handle_curl_option_return_code (curl_easy_setopt (curl, CURLOPT_SSL_VERIFYPEER, 0), "CURLOPT_SSL_VERIFYPEER"); + handle_curl_option_return_code (curl_easy_setopt (curl, CURLOPT_SSL_VERIFYHOST, 0), "CURLOPT_SSL_VERIFYHOST"); + } + + /* detect SSL library used by libcurl */ + ssl_library = curlhelp_get_ssl_library (curl); + + /* try hard to get a stack of certificates to verify against */ + if (check_cert) { +#if LIBCURL_VERSION_NUM >= MAKE_LIBCURL_VERSION(7, 19, 1) + /* inform curl to report back certificates */ + switch (ssl_library) { + case CURLHELP_SSL_LIBRARY_OPENSSL: + case CURLHELP_SSL_LIBRARY_LIBRESSL: + /* set callback to extract certificate with OpenSSL context function (works with + * OpenSSL-style libraries only!) */ +#ifdef USE_OPENSSL + /* libcurl and monitoring plugins built with OpenSSL, good */ + handle_curl_option_return_code (curl_easy_setopt(curl, CURLOPT_SSL_CTX_FUNCTION, sslctxfun), "CURLOPT_SSL_CTX_FUNCTION"); + is_openssl_callback = TRUE; +#else /* USE_OPENSSL */ +#endif /* USE_OPENSSL */ + /* libcurl is built with OpenSSL, monitoring plugins, so falling + * back to manually extracting certificate information */ + handle_curl_option_return_code (curl_easy_setopt (curl, CURLOPT_CERTINFO, 1L), "CURLOPT_CERTINFO"); + break; + + case CURLHELP_SSL_LIBRARY_NSS: +#if LIBCURL_VERSION_NUM >= MAKE_LIBCURL_VERSION(7, 34, 0) + /* NSS: support for CERTINFO is implemented since 7.34.0 */ + handle_curl_option_return_code (curl_easy_setopt (curl, CURLOPT_CERTINFO, 1L), "CURLOPT_CERTINFO"); +#else /* LIBCURL_VERSION_NUM >= MAKE_LIBCURL_VERSION(7, 34, 0) */ + die (STATE_CRITICAL, "HTTP CRITICAL - Cannot retrieve certificates (libcurl linked with SSL library '%s' is too old)\n", curlhelp_get_ssl_library_string (ssl_library)); +#endif /* LIBCURL_VERSION_NUM >= MAKE_LIBCURL_VERSION(7, 34, 0) */ + break; + + case CURLHELP_SSL_LIBRARY_GNUTLS: +#if LIBCURL_VERSION_NUM >= MAKE_LIBCURL_VERSION(7, 42, 0) + /* GnuTLS: support for CERTINFO is implemented since 7.42.0 */ + handle_curl_option_return_code (curl_easy_setopt (curl, CURLOPT_CERTINFO, 1L), "CURLOPT_CERTINFO"); +#else /* LIBCURL_VERSION_NUM >= MAKE_LIBCURL_VERSION(7, 42, 0) */ + die (STATE_CRITICAL, "HTTP CRITICAL - Cannot retrieve certificates (libcurl linked with SSL library '%s' is too old)\n", curlhelp_get_ssl_library_string (ssl_library)); +#endif /* LIBCURL_VERSION_NUM >= MAKE_LIBCURL_VERSION(7, 42, 0) */ + break; + + case CURLHELP_SSL_LIBRARY_UNKNOWN: + default: + die (STATE_CRITICAL, "HTTP CRITICAL - Cannot retrieve certificates (unknown SSL library '%s', must implement first)\n", curlhelp_get_ssl_library_string (ssl_library)); + break; + } +#else /* LIBCURL_VERSION_NUM >= MAKE_LIBCURL_VERSION(7, 19, 1) */ + /* old libcurl, our only hope is OpenSSL, otherwise we are out of luck */ + if (ssl_library == CURLHELP_SSL_LIBRARY_OPENSSL || ssl_library == CURLHELP_SSL_LIBRARY_LIBRESSL) + handle_curl_option_return_code (curl_easy_setopt(curl, CURLOPT_SSL_CTX_FUNCTION, sslctxfun), "CURLOPT_SSL_CTX_FUNCTION"); + else + die (STATE_CRITICAL, "HTTP CRITICAL - Cannot retrieve certificates (no CURLOPT_SSL_CTX_FUNCTION, no OpenSSL library or libcurl too old and has no CURLOPT_CERTINFO)\n"); +#endif /* LIBCURL_VERSION_NUM >= MAKE_LIBCURL_VERSION(7, 19, 1) */ + } + +#endif /* LIBCURL_FEATURE_SSL */ + + /* set default or user-given user agent identification */ + handle_curl_option_return_code (curl_easy_setopt (curl, CURLOPT_USERAGENT, user_agent), "CURLOPT_USERAGENT"); + + /* proxy-authentication */ + if (strcmp(proxy_auth, "")) + handle_curl_option_return_code (curl_easy_setopt (curl, CURLOPT_PROXYUSERPWD, proxy_auth), "CURLOPT_PROXYUSERPWD"); + + /* authentication */ + if (strcmp(user_auth, "")) + handle_curl_option_return_code (curl_easy_setopt (curl, CURLOPT_USERPWD, user_auth), "CURLOPT_USERPWD"); + + /* TODO: parameter auth method, bitfield of following methods: + * CURLAUTH_BASIC (default) + * CURLAUTH_DIGEST + * CURLAUTH_DIGEST_IE + * CURLAUTH_NEGOTIATE + * CURLAUTH_NTLM + * CURLAUTH_NTLM_WB + * + * convenience tokens for typical sets of methods: + * CURLAUTH_ANYSAFE: most secure, without BASIC + * or CURLAUTH_ANY: most secure, even BASIC if necessary + * + * handle_curl_option_return_code (curl_easy_setopt( curl, CURLOPT_HTTPAUTH, (long)CURLAUTH_DIGEST ), "CURLOPT_HTTPAUTH"); + */ + + /* handle redirections */ + if (onredirect == STATE_DEPENDENT) { + if( followmethod == FOLLOW_LIBCURL ) { + handle_curl_option_return_code (curl_easy_setopt (curl, CURLOPT_FOLLOWLOCATION, 1), "CURLOPT_FOLLOWLOCATION"); + + /* default -1 is infinite, not good, could lead to zombie plugins! + Setting it to one bigger than maximal limit to handle errors nicely below + */ + handle_curl_option_return_code (curl_easy_setopt (curl, CURLOPT_MAXREDIRS, max_depth+1), "CURLOPT_MAXREDIRS"); + + /* for now allow only http and https (we are a http(s) check plugin in the end) */ +#if LIBCURL_VERSION_NUM >= MAKE_LIBCURL_VERSION(7, 19, 4) + handle_curl_option_return_code (curl_easy_setopt (curl, CURLOPT_REDIR_PROTOCOLS, CURLPROTO_HTTP | CURLPROTO_HTTPS), "CURLOPT_REDIRECT_PROTOCOLS"); +#endif /* LIBCURL_VERSION_NUM >= MAKE_LIBCURL_VERSION(7, 19, 4) */ + + /* TODO: handle the following aspects of redirection, make them + * command line options too later: + CURLOPT_POSTREDIR: method switch + CURLINFO_REDIRECT_URL: custom redirect option + CURLOPT_REDIRECT_PROTOCOLS: allow people to step outside safe protocols + CURLINFO_REDIRECT_COUNT: get the number of redirects, print it, maybe a range option here is nice like for expected page size? + */ + } else { + /* old style redirection is handled below */ + } + } + + /* no-body */ + if (no_body) + handle_curl_option_return_code (curl_easy_setopt (curl, CURLOPT_NOBODY, 1), "CURLOPT_NOBODY"); + + /* IPv4 or IPv6 forced DNS resolution */ + if (address_family == AF_UNSPEC) + handle_curl_option_return_code (curl_easy_setopt (curl, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_WHATEVER), "CURLOPT_IPRESOLVE(CURL_IPRESOLVE_WHATEVER)"); + else if (address_family == AF_INET) + handle_curl_option_return_code (curl_easy_setopt (curl, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4), "CURLOPT_IPRESOLVE(CURL_IPRESOLVE_V4)"); +#if defined (USE_IPV6) && defined (LIBCURL_FEATURE_IPV6) + else if (address_family == AF_INET6) + handle_curl_option_return_code (curl_easy_setopt (curl, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V6), "CURLOPT_IPRESOLVE(CURL_IPRESOLVE_V6)"); +#endif + + /* either send http POST data (any data, not only POST)*/ + if (!strcmp(http_method, "POST") ||!strcmp(http_method, "PUT")) { + /* set content of payload for POST and PUT */ + if (http_content_type) { + snprintf (http_header, DEFAULT_BUFFER_SIZE, "Content-Type: %s", http_content_type); + header_list = curl_slist_append (header_list, http_header); + } + /* NULL indicates "HTTP Continue" in libcurl, provide an empty string + * in case of no POST/PUT data */ + if (!http_post_data) + http_post_data = ""; + if (!strcmp(http_method, "POST")) { + /* POST method, set payload with CURLOPT_POSTFIELDS */ + handle_curl_option_return_code (curl_easy_setopt (curl, CURLOPT_POSTFIELDS, http_post_data), "CURLOPT_POSTFIELDS"); + } else if (!strcmp(http_method, "PUT")) { + handle_curl_option_return_code (curl_easy_setopt (curl, CURLOPT_READFUNCTION, (curl_read_callback)curlhelp_buffer_read_callback), "CURLOPT_READFUNCTION"); + curlhelp_initreadbuffer (&put_buf, http_post_data, strlen (http_post_data)); + handle_curl_option_return_code (curl_easy_setopt (curl, CURLOPT_READDATA, (void *)&put_buf), "CURLOPT_READDATA"); + handle_curl_option_return_code (curl_easy_setopt (curl, CURLOPT_INFILESIZE, (curl_off_t)strlen (http_post_data)), "CURLOPT_INFILESIZE"); + } + } + + /* do the request */ + res = curl_easy_perform(curl); + + if (verbose>=2 && http_post_data) + printf ("**** REQUEST CONTENT ****\n%s\n", http_post_data); + + /* free header and server IP resolve lists, we don't need it anymore */ + curl_slist_free_all (header_list); header_list = NULL; + curl_slist_free_all (server_ips); server_ips = NULL; + + /* Curl errors, result in critical Nagios state */ + if (res != CURLE_OK) { + snprintf (msg, DEFAULT_BUFFER_SIZE, _("Invalid HTTP response received from host on port %d: cURL returned %d - %s"), + server_port, res, curl_easy_strerror(res)); + die (STATE_CRITICAL, "HTTP CRITICAL - %s\n", msg); + } + + /* certificate checks */ +#ifdef LIBCURL_FEATURE_SSL + if (use_ssl == TRUE) { + if (check_cert == TRUE) { + if (is_openssl_callback) { +#ifdef USE_OPENSSL + /* check certificate with OpenSSL functions, curl has been built against OpenSSL + * and we actually have OpenSSL in the monitoring tools + */ + result = np_net_ssl_check_certificate(cert, days_till_exp_warn, days_till_exp_crit); + return result; +#else /* USE_OPENSSL */ + die (STATE_CRITICAL, "HTTP CRITICAL - Cannot retrieve certificates - OpenSSL callback used and not linked against OpenSSL\n"); +#endif /* USE_OPENSSL */ + } else { + int i; + struct curl_slist *slist; + + cert_ptr.to_info = NULL; + res = curl_easy_getinfo (curl, CURLINFO_CERTINFO, &cert_ptr.to_info); + if (!res && cert_ptr.to_info) { +#ifdef USE_OPENSSL + /* We have no OpenSSL in libcurl, but we can use OpenSSL for X509 cert parsing + * We only check the first certificate and assume it's the one of the server + */ + const char* raw_cert = NULL; + for (i = 0; i < cert_ptr.to_certinfo->num_of_certs; i++) { + for (slist = cert_ptr.to_certinfo->certinfo[i]; slist; slist = slist->next) { + if (verbose >= 2) + printf ("%d ** %s\n", i, slist->data); + if (strncmp (slist->data, "Cert:", 5) == 0) { + raw_cert = &slist->data[5]; + goto GOT_FIRST_CERT; + } + } + } +GOT_FIRST_CERT: + if (!raw_cert) { + snprintf (msg, DEFAULT_BUFFER_SIZE, _("Cannot retrieve certificates from CERTINFO information - certificate data was empty")); + die (STATE_CRITICAL, "HTTP CRITICAL - %s\n", msg); + } + BIO* cert_BIO = BIO_new (BIO_s_mem()); + BIO_write (cert_BIO, raw_cert, strlen(raw_cert)); + cert = PEM_read_bio_X509 (cert_BIO, NULL, NULL, NULL); + if (!cert) { + snprintf (msg, DEFAULT_BUFFER_SIZE, _("Cannot read certificate from CERTINFO information - BIO error")); + die (STATE_CRITICAL, "HTTP CRITICAL - %s\n", msg); + } + BIO_free (cert_BIO); + result = np_net_ssl_check_certificate(cert, days_till_exp_warn, days_till_exp_crit); + return result; +#else /* USE_OPENSSL */ + /* We assume we don't have OpenSSL and np_net_ssl_check_certificate at our disposal, + * so we use the libcurl CURLINFO data + */ + result = net_noopenssl_check_certificate(&cert_ptr, days_till_exp_warn, days_till_exp_crit); + return result; +#endif /* USE_OPENSSL */ + } else { + snprintf (msg, DEFAULT_BUFFER_SIZE, _("Cannot retrieve certificates - cURL returned %d - %s"), + res, curl_easy_strerror(res)); + die (STATE_CRITICAL, "HTTP CRITICAL - %s\n", msg); + } + } + } + } +#endif /* LIBCURL_FEATURE_SSL */ + + /* we got the data and we executed the request in a given time, so we can append + * performance data to the answer always + */ + handle_curl_option_return_code (curl_easy_getinfo (curl, CURLINFO_TOTAL_TIME, &total_time), "CURLINFO_TOTAL_TIME"); + page_len = get_content_length(&header_buf, &body_buf); + if(show_extended_perfdata) { + handle_curl_option_return_code (curl_easy_getinfo(curl, CURLINFO_CONNECT_TIME, &time_connect), "CURLINFO_CONNECT_TIME"); + handle_curl_option_return_code (curl_easy_getinfo(curl, CURLINFO_APPCONNECT_TIME, &time_appconnect), "CURLINFO_APPCONNECT_TIME"); + handle_curl_option_return_code (curl_easy_getinfo(curl, CURLINFO_PRETRANSFER_TIME, &time_headers), "CURLINFO_PRETRANSFER_TIME"); + handle_curl_option_return_code (curl_easy_getinfo(curl, CURLINFO_STARTTRANSFER_TIME, &time_firstbyte), "CURLINFO_STARTTRANSFER_TIME"); + snprintf(perfstring, DEFAULT_BUFFER_SIZE, "%s %s %s %s %s %s %s", + perfd_time(total_time), + perfd_size(page_len), + perfd_time_connect(time_connect), + use_ssl == TRUE ? perfd_time_ssl (time_appconnect-time_connect) : "", + perfd_time_headers(time_headers - time_appconnect), + perfd_time_firstbyte(time_firstbyte - time_headers), + perfd_time_transfer(total_time-time_firstbyte) + ); + } else { + snprintf(perfstring, DEFAULT_BUFFER_SIZE, "%s %s", + perfd_time(total_time), + perfd_size(page_len) + ); + } + + /* return a CRITICAL status if we couldn't read any data */ + if (strlen(header_buf.buf) == 0 && strlen(body_buf.buf) == 0) + die (STATE_CRITICAL, _("HTTP CRITICAL - No header received from host\n")); + + /* get status line of answer, check sanity of HTTP code */ + if (curlhelp_parse_statusline (header_buf.buf, &status_line) < 0) { + snprintf (msg, DEFAULT_BUFFER_SIZE, "Unparsable status line in %.3g seconds response time|%s\n", + total_time, perfstring); + die (STATE_CRITICAL, "HTTP CRITICAL HTTP/1.x %ld unknown - %s", code, msg); + } + + /* get result code from cURL */ + handle_curl_option_return_code (curl_easy_getinfo (curl, CURLINFO_RESPONSE_CODE, &code), "CURLINFO_RESPONSE_CODE"); + if (verbose>=2) + printf ("* curl CURLINFO_RESPONSE_CODE is %ld\n", code); + + /* print status line, header, body if verbose */ + if (verbose >= 2) { + printf ("**** HEADER ****\n%s\n**** CONTENT ****\n%s\n", header_buf.buf, + (no_body ? " [[ skipped ]]" : body_buf.buf)); + } + + /* make sure the status line matches the response we are looking for */ + if (!expected_statuscode(status_line.first_line, server_expect)) { + if (server_port == HTTP_PORT) + snprintf(msg, DEFAULT_BUFFER_SIZE, _("Invalid HTTP response received from host: %s\n"), status_line.first_line); + else + snprintf(msg, DEFAULT_BUFFER_SIZE, _("Invalid HTTP response received from host on port %d: %s\n"), server_port, status_line.first_line); + die (STATE_CRITICAL, "HTTP CRITICAL - %s", msg); + } + + if( server_expect_yn ) { + snprintf(msg, DEFAULT_BUFFER_SIZE, _("Status line output matched \"%s\" - "), server_expect); + if (verbose) + printf ("%s\n",msg); + result = STATE_OK; + } + else { + /* illegal return codes result in a critical state */ + if (code >= 600 || code < 100) { + die (STATE_CRITICAL, _("HTTP CRITICAL: Invalid Status (%d, %.40s)\n"), status_line.http_code, status_line.msg); + /* server errors result in a critical state */ + } else if (code >= 500) { + result = STATE_CRITICAL; + /* client errors result in a warning state */ + } else if (code >= 400) { + result = STATE_WARNING; + /* check redirected page if specified */ + } else if (code >= 300) { + if (onredirect == STATE_DEPENDENT) { + if( followmethod == FOLLOW_LIBCURL ) { + code = status_line.http_code; + } else { + /* old check_http style redirection, if we come + * back here, we are in the same status as with + * the libcurl method + */ + redir (&header_buf); + } + } else { + /* this is a specific code in the command line to + * be returned when a redirection is encoutered + */ + } + result = max_state_alt (onredirect, result); + /* all other codes are considered ok */ + } else { + result = STATE_OK; + } + } + + /* libcurl redirection internally, handle error states here */ + if( followmethod == FOLLOW_LIBCURL ) { + handle_curl_option_return_code (curl_easy_getinfo (curl, CURLINFO_REDIRECT_COUNT, &redir_depth), "CURLINFO_REDIRECT_COUNT"); + if (verbose >= 2) + printf(_("* curl LIBINFO_REDIRECT_COUNT is %d\n"), redir_depth); + if (redir_depth > max_depth) { + snprintf (msg, DEFAULT_BUFFER_SIZE, "maximum redirection depth %d exceeded in libcurl", + max_depth); + die (STATE_WARNING, "HTTP WARNING - %s", msg); + } + } + + /* check status codes, set exit status accordingly */ + if( status_line.http_code != code ) { + die (STATE_CRITICAL, _("HTTP CRITICAL HTTP/%d.%d %d %s - different HTTP codes (cUrl has %ld)\n"), + status_line.http_major, status_line.http_minor, + status_line.http_code, status_line.msg, code); + } + + if (maximum_age >= 0) { + result = max_state_alt(check_document_dates(&header_buf, &msg), result); + } + + /* Page and Header content checks go here */ + + if (strlen (header_expect)) { + if (!strstr (header_buf.buf, header_expect)) { + strncpy(&output_header_search[0],header_expect,sizeof(output_header_search)); + if(output_header_search[sizeof(output_header_search)-1]!='\0') { + bcopy("...",&output_header_search[sizeof(output_header_search)-4],4); + } + snprintf (msg, DEFAULT_BUFFER_SIZE, _("%sheader '%s' not found on '%s://%s:%d%s', "), msg, output_header_search, use_ssl ? "https" : "http", host_name ? host_name : server_address, server_port, server_url); + result = STATE_CRITICAL; + } + } + + if (strlen (string_expect)) { + if (!strstr (body_buf.buf, string_expect)) { + strncpy(&output_string_search[0],string_expect,sizeof(output_string_search)); + if(output_string_search[sizeof(output_string_search)-1]!='\0') { + bcopy("...",&output_string_search[sizeof(output_string_search)-4],4); + } + snprintf (msg, DEFAULT_BUFFER_SIZE, _("%sstring '%s' not found on '%s://%s:%d%s', "), msg, output_string_search, use_ssl ? "https" : "http", host_name ? host_name : server_address, server_port, server_url); + result = STATE_CRITICAL; + } + } + + if (strlen (regexp)) { + errcode = regexec (&preg, body_buf.buf, REGS, pmatch, 0); + if ((errcode == 0 && invert_regex == 0) || (errcode == REG_NOMATCH && invert_regex == 1)) { + /* OK - No-op to avoid changing the logic around it */ + result = max_state_alt(STATE_OK, result); + } + else if ((errcode == REG_NOMATCH && invert_regex == 0) || (errcode == 0 && invert_regex == 1)) { + if (invert_regex == 0) + snprintf (msg, DEFAULT_BUFFER_SIZE, _("%spattern not found, "), msg); + else + snprintf (msg, DEFAULT_BUFFER_SIZE, _("%spattern found, "), msg); + result = STATE_CRITICAL; + } + else { + regerror (errcode, &preg, errbuf, MAX_INPUT_BUFFER); + snprintf (msg, DEFAULT_BUFFER_SIZE, _("%sExecute Error: %s, "), msg, errbuf); + result = STATE_UNKNOWN; + } + } + + /* make sure the page is of an appropriate size */ + if ((max_page_len > 0) && (page_len > max_page_len)) { + snprintf (msg, DEFAULT_BUFFER_SIZE, _("%spage size %d too large, "), msg, page_len); + result = max_state_alt(STATE_WARNING, result); + } else if ((min_page_len > 0) && (page_len < min_page_len)) { + snprintf (msg, DEFAULT_BUFFER_SIZE, _("%spage size %d too small, "), msg, page_len); + result = max_state_alt(STATE_WARNING, result); + } + + /* -w, -c: check warning and critical level */ + result = max_state_alt(get_status(total_time, thlds), result); + + /* Cut-off trailing characters */ + if(msg[strlen(msg)-2] == ',') + msg[strlen(msg)-2] = '\0'; + else + msg[strlen(msg)-3] = '\0'; + + /* TODO: separate _() msg and status code: die (result, "HTTP %s: %s\n", state_text(result), msg); */ + die (result, "HTTP %s: HTTP/%d.%d %d %s%s%s - %d bytes in %.3f second response time %s|%s\n", + state_text(result), status_line.http_major, status_line.http_minor, + status_line.http_code, status_line.msg, + strlen(msg) > 0 ? " - " : "", + msg, page_len, total_time, + (display_html ? "" : ""), + perfstring); + + /* proper cleanup after die? */ + curlhelp_free_statusline(&status_line); + curl_easy_cleanup (curl); + curl_global_cleanup (); + curlhelp_freewritebuffer (&body_buf); + curlhelp_freewritebuffer (&header_buf); + if (!strcmp (http_method, "PUT")) { + curlhelp_freereadbuffer (&put_buf); + } + + return result; +} + +int +uri_strcmp (const UriTextRangeA range, const char* s) +{ + if (!range.first) return -1; + if (range.afterLast - range.first < strlen (s)) return -1; + return strncmp (s, range.first, min( range.afterLast - range.first, strlen (s))); +} + +char* +uri_string (const UriTextRangeA range, char* buf, size_t buflen) +{ + if (!range.first) return "(null)"; + strncpy (buf, range.first, max (buflen, range.afterLast - range.first)); + buf[max (buflen, range.afterLast - range.first)] = '\0'; + buf[range.afterLast - range.first] = '\0'; + return buf; +} + +void +redir (curlhelp_write_curlbuf* header_buf) +{ + char *location = NULL; + curlhelp_statusline status_line; + struct phr_header headers[255]; + size_t nof_headers = 255; + size_t msglen; + char buf[DEFAULT_BUFFER_SIZE]; + char ipstr[INET_ADDR_MAX_SIZE]; + int new_port; + char *new_host; + char *new_url; + + int res = phr_parse_response (header_buf->buf, header_buf->buflen, + &status_line.http_minor, &status_line.http_code, &status_line.msg, &msglen, + headers, &nof_headers, 0); + + location = get_header_value (headers, nof_headers, "location"); + + if (verbose >= 2) + printf(_("* Seen redirect location %s\n"), location); + + if (++redir_depth > max_depth) + die (STATE_WARNING, + _("HTTP WARNING - maximum redirection depth %d exceeded - %s%s\n"), + max_depth, location, (display_html ? "" : "")); + + UriParserStateA state; + UriUriA uri; + state.uri = &uri; + if (uriParseUriA (&state, location) != URI_SUCCESS) { + if (state.errorCode == URI_ERROR_SYNTAX) { + die (STATE_UNKNOWN, + _("HTTP UNKNOWN - Could not parse redirect location '%s'%s\n"), + location, (display_html ? "" : "")); + } else if (state.errorCode == URI_ERROR_MALLOC) { + die (STATE_UNKNOWN, _("HTTP UNKNOWN - Could not allocate URL\n")); + } + } + + if (verbose >= 2) { + printf (_("** scheme: %s\n"), + uri_string (uri.scheme, buf, DEFAULT_BUFFER_SIZE)); + printf (_("** host: %s\n"), + uri_string (uri.hostText, buf, DEFAULT_BUFFER_SIZE)); + printf (_("** port: %s\n"), + uri_string (uri.portText, buf, DEFAULT_BUFFER_SIZE)); + if (uri.hostData.ip4) { + inet_ntop (AF_INET, uri.hostData.ip4->data, ipstr, sizeof (ipstr)); + printf (_("** IPv4: %s\n"), ipstr); + } + if (uri.hostData.ip6) { + inet_ntop (AF_INET, uri.hostData.ip6->data, ipstr, sizeof (ipstr)); + printf (_("** IPv6: %s\n"), ipstr); + } + if (uri.pathHead) { + printf (_("** path: ")); + const UriPathSegmentA* p = uri.pathHead; + for (; p; p = p->next) { + printf ("/%s", uri_string (p->text, buf, DEFAULT_BUFFER_SIZE)); + } + puts (""); + } + if (uri.query.first) { + printf (_("** query: %s\n"), + uri_string (uri.query, buf, DEFAULT_BUFFER_SIZE)); + } + if (uri.fragment.first) { + printf (_("** fragment: %s\n"), + uri_string (uri.fragment, buf, DEFAULT_BUFFER_SIZE)); + } + } + + use_ssl = !uri_strcmp (uri.scheme, "https"); + + /* we do a sloppy test here only, because uriparser would have failed + * above, if the port would be invalid, we just check for MAX_PORT + */ + if (uri.portText.first) { + new_port = atoi (uri_string (uri.portText, buf, DEFAULT_BUFFER_SIZE)); + } else { + new_port = HTTP_PORT; + if (use_ssl) + new_port = HTTPS_PORT; + } + if (new_port > MAX_PORT) + die (STATE_UNKNOWN, + _("HTTP UNKNOWN - Redirection to port above %d - %s%s\n"), + MAX_PORT, location, display_html ? "" : ""); + + /* by RFC 7231 relative URLs in Location should be taken relative to + * the original URL, so wy try to form a new absolute URL here + */ + if (!uri.scheme.first && !uri.hostText.first) { + new_host = strdup (host_name ? host_name : server_address); + } else { + new_host = strdup (uri_string (uri.hostText, buf, DEFAULT_BUFFER_SIZE)); + } + + /* compose new path */ + /* TODO: handle fragments and query part of URL */ + new_url = (char *)calloc( 1, DEFAULT_BUFFER_SIZE); + if (uri.pathHead) { + const UriPathSegmentA* p = uri.pathHead; + for (; p; p = p->next) { + strncat (new_url, "/", DEFAULT_BUFFER_SIZE); + strncat (new_url, uri_string (p->text, buf, DEFAULT_BUFFER_SIZE), DEFAULT_BUFFER_SIZE); + } + } + + if (server_port==new_port && + !strncmp(server_address, new_host, MAX_IPV4_HOSTLENGTH) && + (host_name && !strncmp(host_name, new_host, MAX_IPV4_HOSTLENGTH)) && + !strcmp(server_url, new_url)) + die (STATE_WARNING, + _("HTTP WARNING - redirection creates an infinite loop - %s://%s:%d%s%s\n"), + use_ssl ? "https" : "http", new_host, new_port, new_url, (display_html ? "" : "")); + + /* set new values for redirected request */ + + if (!(followsticky & STICKY_HOST)) { + free (server_address); + server_address = strndup (new_host, MAX_IPV4_HOSTLENGTH); + } + if (!(followsticky & STICKY_PORT)) { + server_port = (unsigned short)new_port; + } + + free (host_name); + host_name = strndup (new_host, MAX_IPV4_HOSTLENGTH); + + /* reset virtual port */ + virtual_port = server_port; + + free(new_host); + free (server_url); + server_url = new_url; + + uriFreeUriMembersA (&uri); + + if (verbose) + printf (_("Redirection to %s://%s:%d%s\n"), use_ssl ? "https" : "http", + host_name ? host_name : server_address, server_port, server_url); + + /* TODO: the hash component MUST be taken from the original URL and + * attached to the URL in Location + */ + + check_http (); +} + +/* check whether a file exists */ +void +test_file (char *path) +{ + if (access(path, R_OK) == 0) + return; + usage2 (_("file does not exist or is not readable"), path); +} + +int +process_arguments (int argc, char **argv) +{ + char *p; + int c = 1; + char *temp; + + enum { + INVERT_REGEX = CHAR_MAX + 1, + SNI_OPTION, + CA_CERT_OPTION, + HTTP_VERSION_OPTION + }; + + int option = 0; + int got_plus = 0; + static struct option longopts[] = { + STD_LONG_OPTS, + {"link", no_argument, 0, 'L'}, + {"nohtml", no_argument, 0, 'n'}, + {"ssl", optional_argument, 0, 'S'}, + {"sni", no_argument, 0, SNI_OPTION}, + {"post", required_argument, 0, 'P'}, + {"method", required_argument, 0, 'j'}, + {"IP-address", required_argument, 0, 'I'}, + {"url", required_argument, 0, 'u'}, + {"port", required_argument, 0, 'p'}, + {"authorization", required_argument, 0, 'a'}, + {"proxy-authorization", required_argument, 0, 'b'}, + {"header-string", required_argument, 0, 'd'}, + {"string", required_argument, 0, 's'}, + {"expect", required_argument, 0, 'e'}, + {"regex", required_argument, 0, 'r'}, + {"ereg", required_argument, 0, 'r'}, + {"eregi", required_argument, 0, 'R'}, + {"linespan", no_argument, 0, 'l'}, + {"onredirect", required_argument, 0, 'f'}, + {"certificate", required_argument, 0, 'C'}, + {"client-cert", required_argument, 0, 'J'}, + {"private-key", required_argument, 0, 'K'}, + {"ca-cert", required_argument, 0, CA_CERT_OPTION}, + {"useragent", required_argument, 0, 'A'}, + {"header", required_argument, 0, 'k'}, + {"no-body", no_argument, 0, 'N'}, + {"max-age", required_argument, 0, 'M'}, + {"content-type", required_argument, 0, 'T'}, + {"pagesize", required_argument, 0, 'm'}, + {"invert-regex", no_argument, NULL, INVERT_REGEX}, + {"use-ipv4", no_argument, 0, '4'}, + {"use-ipv6", no_argument, 0, '6'}, + {"extended-perfdata", no_argument, 0, 'E'}, + {"http-version", required_argument, 0, HTTP_VERSION_OPTION}, + {0, 0, 0, 0} + }; + + if (argc < 2) + return ERROR; + + /* support check_http compatible arguments */ + for (c = 1; c < argc; c++) { + if (strcmp ("-to", argv[c]) == 0) + strcpy (argv[c], "-t"); + if (strcmp ("-hn", argv[c]) == 0) + strcpy (argv[c], "-H"); + if (strcmp ("-wt", argv[c]) == 0) + strcpy (argv[c], "-w"); + if (strcmp ("-ct", argv[c]) == 0) + strcpy (argv[c], "-c"); + if (strcmp ("-nohtml", argv[c]) == 0) + strcpy (argv[c], "-n"); + } + + server_url = strdup(DEFAULT_SERVER_URL); + + while (1) { + c = getopt_long (argc, argv, "Vvh46t:c:w:A:k:H:P:j:T:I:a:b:d:e:p:s:R:r:u:f:C:J:K:nlLS::m:M:NE", longopts, &option); + if (c == -1 || c == EOF || c == 1) + break; + + switch (c) { + case 'h': + print_help(); + exit(STATE_UNKNOWN); + break; + case 'V': + print_revision(progname, NP_VERSION); + print_curl_version(); + exit(STATE_UNKNOWN); + break; + case 'v': + verbose++; + break; + case 't': /* timeout period */ + if (!is_intnonneg (optarg)) + usage2 (_("Timeout interval must be a positive integer"), optarg); + else + socket_timeout = (int)strtol (optarg, NULL, 10); + break; + case 'c': /* critical time threshold */ + critical_thresholds = optarg; + break; + case 'w': /* warning time threshold */ + warning_thresholds = optarg; + break; + case 'H': /* virtual host */ + host_name = strdup (optarg); + if (host_name[0] == '[') { + if ((p = strstr (host_name, "]:")) != NULL) { /* [IPv6]:port */ + virtual_port = atoi (p + 2); + /* cut off the port */ + host_name_length = strlen (host_name) - strlen (p) - 1; + free (host_name); + host_name = strndup (optarg, host_name_length); + } + } else if ((p = strchr (host_name, ':')) != NULL + && strchr (++p, ':') == NULL) { /* IPv4:port or host:port */ + virtual_port = atoi (p); + /* cut off the port */ + host_name_length = strlen (host_name) - strlen (p) - 1; + free (host_name); + host_name = strndup (optarg, host_name_length); + } + break; + case 'I': /* internet address */ + server_address = strdup (optarg); + break; + case 'u': /* URL path */ + server_url = strdup (optarg); + break; + case 'p': /* Server port */ + if (!is_intnonneg (optarg)) + usage2 (_("Invalid port number, expecting a non-negative number"), optarg); + else { + if( strtol(optarg, NULL, 10) > MAX_PORT) + usage2 (_("Invalid port number, supplied port number is too big"), optarg); + server_port = (unsigned short)strtol(optarg, NULL, 10); + specify_port = TRUE; + } + break; + case 'a': /* authorization info */ + strncpy (user_auth, optarg, MAX_INPUT_BUFFER - 1); + user_auth[MAX_INPUT_BUFFER - 1] = 0; + break; + case 'b': /* proxy-authorization info */ + strncpy (proxy_auth, optarg, MAX_INPUT_BUFFER - 1); + proxy_auth[MAX_INPUT_BUFFER - 1] = 0; + break; + case 'P': /* HTTP POST data in URL encoded format; ignored if settings already */ + if (! http_post_data) + http_post_data = strdup (optarg); + if (! http_method) + http_method = strdup("POST"); + break; + case 'j': /* Set HTTP method */ + if (http_method) + free(http_method); + http_method = strdup (optarg); + break; + case 'A': /* useragent */ + strncpy (user_agent, optarg, DEFAULT_BUFFER_SIZE); + user_agent[DEFAULT_BUFFER_SIZE-1] = '\0'; + break; + case 'k': /* Additional headers */ + 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; + break; + case 'L': /* show html link */ + display_html = TRUE; + break; + case 'n': /* do not show html link */ + display_html = FALSE; + break; + case 'C': /* Check SSL cert validity */ +#ifdef LIBCURL_FEATURE_SSL + if ((temp=strchr(optarg,','))!=NULL) { + *temp='\0'; + if (!is_intnonneg (optarg)) + usage2 (_("Invalid certificate expiration period"), optarg); + days_till_exp_warn = atoi(optarg); + *temp=','; + temp++; + if (!is_intnonneg (temp)) + usage2 (_("Invalid certificate expiration period"), temp); + days_till_exp_crit = atoi (temp); + } + else { + days_till_exp_crit=0; + if (!is_intnonneg (optarg)) + usage2 (_("Invalid certificate expiration period"), optarg); + days_till_exp_warn = atoi (optarg); + } + check_cert = TRUE; + goto enable_ssl; +#endif + case 'J': /* use client certificate */ +#ifdef LIBCURL_FEATURE_SSL + test_file(optarg); + client_cert = optarg; + goto enable_ssl; +#endif + case 'K': /* use client private key */ +#ifdef LIBCURL_FEATURE_SSL + test_file(optarg); + client_privkey = optarg; + goto enable_ssl; +#endif +#ifdef LIBCURL_FEATURE_SSL + case CA_CERT_OPTION: /* use CA chain file */ + test_file(optarg); + ca_cert = optarg; + goto enable_ssl; +#endif + case 'S': /* use SSL */ +#ifdef LIBCURL_FEATURE_SSL + enable_ssl: + use_ssl = TRUE; + /* ssl_version initialized to CURL_SSLVERSION_DEFAULT as a default. + * Only set if it's non-zero. This helps when we include multiple + * parameters, like -S and -C combinations */ + ssl_version = CURL_SSLVERSION_DEFAULT; + if (c=='S' && optarg != NULL) { + char *plus_ptr = strchr(optarg, '+'); + if (plus_ptr) { + got_plus = 1; + *plus_ptr = '\0'; + } + + if (optarg[0] == '2') + ssl_version = CURL_SSLVERSION_SSLv2; + else if (optarg[0] == '3') + ssl_version = CURL_SSLVERSION_SSLv3; + else if (!strcmp (optarg, "1") || !strcmp (optarg, "1.0")) +#if LIBCURL_VERSION_NUM >= MAKE_LIBCURL_VERSION(7, 34, 0) + ssl_version = CURL_SSLVERSION_TLSv1_0; +#else + ssl_version = CURL_SSLVERSION_DEFAULT; +#endif /* LIBCURL_VERSION_NUM >= MAKE_LIBCURL_VERSION(7, 34, 0) */ + else if (!strcmp (optarg, "1.1")) +#if LIBCURL_VERSION_NUM >= MAKE_LIBCURL_VERSION(7, 34, 0) + ssl_version = CURL_SSLVERSION_TLSv1_1; +#else + ssl_version = CURL_SSLVERSION_DEFAULT; +#endif /* LIBCURL_VERSION_NUM >= MAKE_LIBCURL_VERSION(7, 34, 0) */ + else if (!strcmp (optarg, "1.2")) +#if LIBCURL_VERSION_NUM >= MAKE_LIBCURL_VERSION(7, 34, 0) + ssl_version = CURL_SSLVERSION_TLSv1_2; +#else + ssl_version = CURL_SSLVERSION_DEFAULT; +#endif /* LIBCURL_VERSION_NUM >= MAKE_LIBCURL_VERSION(7, 34, 0) */ + else if (!strcmp (optarg, "1.3")) +#if LIBCURL_VERSION_NUM >= MAKE_LIBCURL_VERSION(7, 52, 0) + ssl_version = CURL_SSLVERSION_TLSv1_3; +#else + ssl_version = CURL_SSLVERSION_DEFAULT; +#endif /* LIBCURL_VERSION_NUM >= MAKE_LIBCURL_VERSION(7, 52, 0) */ + else + usage4 (_("Invalid option - Valid SSL/TLS versions: 2, 3, 1, 1.1, 1.2 (with optional '+' suffix)")); + } +#if LIBCURL_VERSION_NUM >= MAKE_LIBCURL_VERSION(7, 54, 0) + if (got_plus) { + switch (ssl_version) { + case CURL_SSLVERSION_TLSv1_3: + ssl_version |= CURL_SSLVERSION_MAX_TLSv1_3; + break; + case CURL_SSLVERSION_TLSv1_2: + case CURL_SSLVERSION_TLSv1_1: + case CURL_SSLVERSION_TLSv1_0: + ssl_version |= CURL_SSLVERSION_MAX_DEFAULT; + break; + } + } else { + switch (ssl_version) { + case CURL_SSLVERSION_TLSv1_3: + ssl_version |= CURL_SSLVERSION_MAX_TLSv1_3; + break; + case CURL_SSLVERSION_TLSv1_2: + ssl_version |= CURL_SSLVERSION_MAX_TLSv1_2; + break; + case CURL_SSLVERSION_TLSv1_1: + ssl_version |= CURL_SSLVERSION_MAX_TLSv1_1; + break; + case CURL_SSLVERSION_TLSv1_0: + ssl_version |= CURL_SSLVERSION_MAX_TLSv1_0; + break; + } + } +#endif /* LIBCURL_VERSION_NUM >= MAKE_LIBCURL_VERSION(7, 54, 0) */ + if (verbose >= 2) + printf(_("* Set SSL/TLS version to %d\n"), ssl_version); + if (specify_port == FALSE) + server_port = HTTPS_PORT; + break; +#else /* LIBCURL_FEATURE_SSL */ + /* -C -J and -K fall through to here without SSL */ + usage4 (_("Invalid option - SSL is not available")); + break; + case SNI_OPTION: /* --sni is parsed, but ignored, the default is TRUE with libcurl */ + use_sni = TRUE; + break; +#endif /* LIBCURL_FEATURE_SSL */ + case 'f': /* onredirect */ + if (!strcmp (optarg, "ok")) + onredirect = STATE_OK; + else if (!strcmp (optarg, "warning")) + onredirect = STATE_WARNING; + else if (!strcmp (optarg, "critical")) + onredirect = STATE_CRITICAL; + else if (!strcmp (optarg, "unknown")) + onredirect = STATE_UNKNOWN; + else if (!strcmp (optarg, "follow")) + onredirect = STATE_DEPENDENT; + else if (!strcmp (optarg, "stickyport")) + onredirect = STATE_DEPENDENT, followmethod = FOLLOW_HTTP_CURL, followsticky = STICKY_HOST|STICKY_PORT; + else if (!strcmp (optarg, "sticky")) + onredirect = STATE_DEPENDENT, followmethod = FOLLOW_HTTP_CURL, followsticky = STICKY_HOST; + else if (!strcmp (optarg, "follow")) + onredirect = STATE_DEPENDENT, followmethod = FOLLOW_HTTP_CURL, followsticky = STICKY_NONE; + else if (!strcmp (optarg, "curl")) + onredirect = STATE_DEPENDENT, followmethod = FOLLOW_LIBCURL; + else usage2 (_("Invalid onredirect option"), optarg); + if (verbose >= 2) + printf(_("* Following redirects set to %s\n"), state_text(onredirect)); + break; + case 'd': /* string or substring */ + strncpy (header_expect, optarg, MAX_INPUT_BUFFER - 1); + header_expect[MAX_INPUT_BUFFER - 1] = 0; + break; + case 's': /* string or substring */ + strncpy (string_expect, optarg, MAX_INPUT_BUFFER - 1); + string_expect[MAX_INPUT_BUFFER - 1] = 0; + break; + case 'e': /* string or substring */ + strncpy (server_expect, optarg, MAX_INPUT_BUFFER - 1); + server_expect[MAX_INPUT_BUFFER - 1] = 0; + server_expect_yn = 1; + break; + case 'T': /* Content-type */ + http_content_type = strdup (optarg); + break; + case 'l': /* linespan */ + cflags &= ~REG_NEWLINE; + break; + case 'R': /* regex */ + cflags |= REG_ICASE; + case 'r': /* regex */ + strncpy (regexp, optarg, MAX_RE_SIZE - 1); + regexp[MAX_RE_SIZE - 1] = 0; + errcode = regcomp (&preg, regexp, cflags); + if (errcode != 0) { + (void) regerror (errcode, &preg, errbuf, MAX_INPUT_BUFFER); + printf (_("Could Not Compile Regular Expression: %s"), errbuf); + return ERROR; + } + break; + case INVERT_REGEX: + invert_regex = 1; + break; + case '4': + address_family = AF_INET; + break; + case '6': +#if defined (USE_IPV6) && defined (LIBCURL_FEATURE_IPV6) + address_family = AF_INET6; +#else + usage4 (_("IPv6 support not available")); +#endif + break; + case 'm': /* min_page_length */ + { + char *tmp; + if (strchr(optarg, ':') != (char *)NULL) { + /* range, so get two values, min:max */ + tmp = strtok(optarg, ":"); + if (tmp == NULL) { + printf("Bad format: try \"-m min:max\"\n"); + exit (STATE_WARNING); + } else + min_page_len = atoi(tmp); + + tmp = strtok(NULL, ":"); + if (tmp == NULL) { + printf("Bad format: try \"-m min:max\"\n"); + exit (STATE_WARNING); + } else + max_page_len = atoi(tmp); + } else + min_page_len = atoi (optarg); + break; + } + case 'N': /* no-body */ + no_body = TRUE; + break; + case 'M': /* max-age */ + { + int L = strlen(optarg); + if (L && optarg[L-1] == 'm') + maximum_age = atoi (optarg) * 60; + else if (L && optarg[L-1] == 'h') + maximum_age = atoi (optarg) * 60 * 60; + else if (L && optarg[L-1] == 'd') + maximum_age = atoi (optarg) * 60 * 60 * 24; + else if (L && (optarg[L-1] == 's' || + isdigit (optarg[L-1]))) + maximum_age = atoi (optarg); + else { + fprintf (stderr, "unparsable max-age: %s\n", optarg); + exit (STATE_WARNING); + } + if (verbose >= 2) + printf ("* Maximal age of document set to %d seconds\n", maximum_age); + } + break; + case 'E': /* show extended perfdata */ + show_extended_perfdata = TRUE; + break; + case HTTP_VERSION_OPTION: + curl_http_version = CURL_HTTP_VERSION_NONE; + if (strcmp (optarg, "1.0") == 0) { + curl_http_version = CURL_HTTP_VERSION_1_0; + } else if (strcmp (optarg, "1.1") == 0) { + curl_http_version = CURL_HTTP_VERSION_1_1; + } else if ((strcmp (optarg, "2.0") == 0) || (strcmp (optarg, "2") == 0)) { +#if LIBCURL_VERSION_NUM >= MAKE_LIBCURL_VERSION(7, 33, 0) + curl_http_version = CURL_HTTP_VERSION_2_0; +#else + curl_http_version = CURL_HTTP_VERSION_NONE; +#endif /* LIBCURL_VERSION_NUM >= MAKE_LIBCURL_VERSION(7, 33, 0) */ + } else { + fprintf (stderr, "unkown http-version parameter: %s\n", optarg); + exit (STATE_WARNING); + } + break; + case '?': + /* print short usage statement if args not parsable */ + usage5 (); + break; + } + } + + c = optind; + + if (server_address == NULL && c < argc) + server_address = strdup (argv[c++]); + + if (host_name == NULL && c < argc) + host_name = strdup (argv[c++]); + + if (server_address == NULL) { + if (host_name == NULL) + usage4 (_("You must specify a server address or host name")); + else + server_address = strdup (host_name); + } + + set_thresholds(&thlds, warning_thresholds, critical_thresholds); + + if (critical_thresholds && thlds->critical->end>(double)socket_timeout) + socket_timeout = (int)thlds->critical->end + 1; + if (verbose >= 2) + printf ("* Socket timeout set to %ld seconds\n", socket_timeout); + + if (http_method == NULL) + http_method = strdup ("GET"); + + if (client_cert && !client_privkey) + usage4 (_("If you use a client certificate you must also specify a private key file")); + + if (virtual_port == 0) + virtual_port = server_port; + else { + if ((use_ssl && server_port == HTTPS_PORT) || (!use_ssl && server_port == HTTP_PORT)) + if(specify_port == FALSE) + server_port = virtual_port; + } + + return TRUE; +} + +char *perfd_time (double elapsed_time) +{ + return fperfdata ("time", elapsed_time, "s", + thlds->warning?TRUE:FALSE, thlds->warning?thlds->warning->end:0, + thlds->critical?TRUE:FALSE, thlds->critical?thlds->critical->end:0, + TRUE, 0, TRUE, socket_timeout); +} + +char *perfd_time_connect (double elapsed_time_connect) +{ + return fperfdata ("time_connect", elapsed_time_connect, "s", FALSE, 0, FALSE, 0, FALSE, 0, TRUE, socket_timeout); +} + +char *perfd_time_ssl (double elapsed_time_ssl) +{ + return fperfdata ("time_ssl", elapsed_time_ssl, "s", FALSE, 0, FALSE, 0, FALSE, 0, TRUE, socket_timeout); +} + +char *perfd_time_headers (double elapsed_time_headers) +{ + return fperfdata ("time_headers", elapsed_time_headers, "s", FALSE, 0, FALSE, 0, FALSE, 0, TRUE, socket_timeout); +} + +char *perfd_time_firstbyte (double elapsed_time_firstbyte) +{ + return fperfdata ("time_firstbyte", elapsed_time_firstbyte, "s", FALSE, 0, FALSE, 0, FALSE, 0, TRUE, socket_timeout); +} + +char *perfd_time_transfer (double elapsed_time_transfer) +{ + return fperfdata ("time_transfer", elapsed_time_transfer, "s", FALSE, 0, FALSE, 0, FALSE, 0, TRUE, socket_timeout); +} + +char *perfd_size (int page_len) +{ + return perfdata ("size", page_len, "B", + (min_page_len>0?TRUE:FALSE), min_page_len, + (min_page_len>0?TRUE:FALSE), 0, + TRUE, 0, FALSE, 0); +} + +void +print_help (void) +{ + print_revision (progname, NP_VERSION); + + printf ("Copyright (c) 1999 Ethan Galstad \n"); + printf (COPYRIGHT, copyright, email); + + printf ("%s\n", _("This plugin tests the HTTP service on the specified host. It can test")); + printf ("%s\n", _("normal (http) and secure (https) servers, follow redirects, search for")); + printf ("%s\n", _("strings and regular expressions, check connection times, and report on")); + printf ("%s\n", _("certificate expiration times.")); + printf ("\n"); + printf ("%s\n", _("It makes use of libcurl to do so. It tries to be as compatible to check_http")); + printf ("%s\n", _("as possible.")); + + printf ("\n\n"); + + print_usage (); + + printf (_("NOTE: One or both of -H and -I must be specified")); + + printf ("\n"); + + printf (UT_HELP_VRSN); + printf (UT_EXTRA_OPTS); + + printf (" %s\n", "-H, --hostname=ADDRESS"); + printf (" %s\n", _("Host name argument for servers using host headers (virtual host)")); + printf (" %s\n", _("Append a port to include it in the header (eg: example.com:5000)")); + printf (" %s\n", "-I, --IP-address=ADDRESS"); + printf (" %s\n", _("IP address or name (use numeric address if possible to bypass DNS lookup).")); + printf (" %s\n", "-p, --port=INTEGER"); + printf (" %s", _("Port number (default: ")); + printf ("%d)\n", HTTP_PORT); + + printf (UT_IPv46); + +#ifdef LIBCURL_FEATURE_SSL + printf (" %s\n", "-S, --ssl=VERSION[+]"); + printf (" %s\n", _("Connect via SSL. Port defaults to 443. VERSION is optional, and prevents")); + printf (" %s\n", _("auto-negotiation (2 = SSLv2, 3 = SSLv3, 1 = TLSv1, 1.1 = TLSv1.1,")); + printf (" %s\n", _("1.2 = TLSv1.2). With a '+' suffix, newer versions are also accepted.")); + printf (" %s\n", _("Note: SSLv2 and SSLv3 are deprecated and are usually disabled in libcurl")); + printf (" %s\n", "--sni"); + printf (" %s\n", _("Enable SSL/TLS hostname extension support (SNI)")); +#if LIBCURL_VERSION_NUM >= 0x071801 + printf (" %s\n", _("Note: --sni is the default in libcurl as SSLv2 and SSLV3 are deprecated and")); + printf (" %s\n", _(" SNI only really works since TLSv1.0")); +#else + printf (" %s\n", _("Note: SNI is not supported in libcurl before 7.18.1")); +#endif + printf (" %s\n", "-C, --certificate=INTEGER[,INTEGER]"); + printf (" %s\n", _("Minimum number of days a certificate has to be valid. Port defaults to 443")); + printf (" %s\n", _("(when this option is used the URL is not checked.)")); + printf (" %s\n", "-J, --client-cert=FILE"); + printf (" %s\n", _("Name of file that contains the client certificate (PEM format)")); + printf (" %s\n", _("to be used in establishing the SSL session")); + printf (" %s\n", "-K, --private-key=FILE"); + printf (" %s\n", _("Name of file containing the private key (PEM format)")); + printf (" %s\n", _("matching the client certificate")); + printf (" %s\n", "--ca-cert=FILE"); + printf (" %s\n", _("CA certificate file to verify peer against")); +#endif + + printf (" %s\n", "-e, --expect=STRING"); + printf (" %s\n", _("Comma-delimited list of strings, at least one of them is expected in")); + printf (" %s", _("the first (status) line of the server response (default: ")); + printf ("%s)\n", HTTP_EXPECT); + printf (" %s\n", _("If specified skips all other status line logic (ex: 3xx, 4xx, 5xx processing)")); + printf (" %s\n", "-d, --header-string=STRING"); + printf (" %s\n", _("String to expect in the response headers")); + printf (" %s\n", "-s, --string=STRING"); + printf (" %s\n", _("String to expect in the content")); + printf (" %s\n", "-u, --url=PATH"); + printf (" %s\n", _("URL to GET or POST (default: /)")); + printf (" %s\n", "-P, --post=STRING"); + printf (" %s\n", _("URL encoded http POST data")); + printf (" %s\n", "-j, --method=STRING (for example: HEAD, OPTIONS, TRACE, PUT, DELETE, CONNECT)"); + printf (" %s\n", _("Set HTTP method.")); + printf (" %s\n", "-N, --no-body"); + printf (" %s\n", _("Don't wait for document body: stop reading after headers.")); + printf (" %s\n", _("(Note that this still does an HTTP GET or POST, not a HEAD.)")); + printf (" %s\n", "-M, --max-age=SECONDS"); + printf (" %s\n", _("Warn if document is more than SECONDS old. the number can also be of")); + printf (" %s\n", _("the form \"10m\" for minutes, \"10h\" for hours, or \"10d\" for days.")); + printf (" %s\n", "-T, --content-type=STRING"); + printf (" %s\n", _("specify Content-Type header media type when POSTing\n")); + printf (" %s\n", "-l, --linespan"); + printf (" %s\n", _("Allow regex to span newlines (must precede -r or -R)")); + printf (" %s\n", "-r, --regex, --ereg=STRING"); + printf (" %s\n", _("Search page for regex STRING")); + printf (" %s\n", "-R, --eregi=STRING"); + printf (" %s\n", _("Search page for case-insensitive regex STRING")); + printf (" %s\n", "--invert-regex"); + printf (" %s\n", _("Return CRITICAL if found, OK if not\n")); + printf (" %s\n", "-a, --authorization=AUTH_PAIR"); + printf (" %s\n", _("Username:password on sites with basic authentication")); + printf (" %s\n", "-b, --proxy-authorization=AUTH_PAIR"); + printf (" %s\n", _("Username:password on proxy-servers with basic authentication")); + printf (" %s\n", "-A, --useragent=STRING"); + printf (" %s\n", _("String to be sent in http header as \"User Agent\"")); + printf (" %s\n", "-k, --header=STRING"); + printf (" %s\n", _("Any other tags to be sent in http header. Use multiple times for additional headers")); + printf (" %s\n", "-E, --extended-perfdata"); + printf (" %s\n", _("Print additional performance data")); + printf (" %s\n", "-L, --link"); + printf (" %s\n", _("Wrap output in HTML link (obsoleted by urlize)")); + printf (" %s\n", "-f, --onredirect="); + printf (" %s\n", _("How to handle redirected pages. sticky is like follow but stick to the")); + printf (" %s\n", _("specified IP address. stickyport also ensures port stays the same.")); + printf (" %s\n", _("follow uses the old redirection algorithm of check_http.")); + printf (" %s\n", _("curl uses CURL_FOLLOWLOCATION built into libcurl.")); + printf (" %s\n", "-m, --pagesize=INTEGER<:INTEGER>"); + printf (" %s\n", _("Minimum page size required (bytes) : Maximum page size required (bytes)")); + printf ("\n"); + printf (" %s\n", "--http-version=VERSION"); + printf (" %s\n", _("Connect via specific HTTP protocol.")); + printf (" %s\n", _("1.0 = HTTP/1.0, 1.1 = HTTP/1.1, 2.0 = HTTP/2 (HTTP/2 will fail without -S)")); + printf ("\n"); + + printf (UT_WARN_CRIT); + + printf (UT_CONN_TIMEOUT, DEFAULT_SOCKET_TIMEOUT); + + printf (UT_VERBOSE); + + printf ("\n"); + printf ("%s\n", _("Notes:")); + printf (" %s\n", _("This plugin will attempt to open an HTTP connection with the host.")); + printf (" %s\n", _("Successful connects return STATE_OK, refusals and timeouts return STATE_CRITICAL")); + printf (" %s\n", _("other errors return STATE_UNKNOWN. Successful connects, but incorrect response")); + printf (" %s\n", _("messages from the host result in STATE_WARNING return values. If you are")); + printf (" %s\n", _("checking a virtual server that uses 'host headers' you must supply the FQDN")); + printf (" %s\n", _("(fully qualified domain name) as the [host_name] argument.")); + +#ifdef LIBCURL_FEATURE_SSL + printf ("\n"); + printf (" %s\n", _("This plugin can also check whether an SSL enabled web server is able to")); + printf (" %s\n", _("serve content (optionally within a specified time) or whether the X509 ")); + printf (" %s\n", _("certificate is still valid for the specified number of days.")); + printf ("\n"); + printf (" %s\n", _("Please note that this plugin does not check if the presented server")); + printf (" %s\n", _("certificate matches the hostname of the server, or if the certificate")); + printf (" %s\n", _("has a valid chain of trust to one of the locally installed CAs.")); + printf ("\n"); + printf ("%s\n", _("Examples:")); + printf (" %s\n\n", "CHECK CONTENT: check_curl -w 5 -c 10 --ssl -H www.verisign.com"); + printf (" %s\n", _("When the 'www.verisign.com' server returns its content within 5 seconds,")); + printf (" %s\n", _("a STATE_OK will be returned. When the server returns its content but exceeds")); + printf (" %s\n", _("the 5-second threshold, a STATE_WARNING will be returned. When an error occurs,")); + printf (" %s\n", _("a STATE_CRITICAL will be returned.")); + printf ("\n"); + printf (" %s\n\n", "CHECK CERTIFICATE: check_curl -H www.verisign.com -C 14"); + printf (" %s\n", _("When the certificate of 'www.verisign.com' is valid for more than 14 days,")); + printf (" %s\n", _("a STATE_OK is returned. When the certificate is still valid, but for less than")); + printf (" %s\n", _("14 days, a STATE_WARNING is returned. A STATE_CRITICAL will be returned when")); + printf (" %s\n\n", _("the certificate is expired.")); + printf ("\n"); + printf (" %s\n\n", "CHECK CERTIFICATE: check_curl -H www.verisign.com -C 30,14"); + printf (" %s\n", _("When the certificate of 'www.verisign.com' is valid for more than 30 days,")); + printf (" %s\n", _("a STATE_OK is returned. When the certificate is still valid, but for less than")); + printf (" %s\n", _("30 days, but more than 14 days, a STATE_WARNING is returned.")); + printf (" %s\n", _("A STATE_CRITICAL will be returned when certificate expires in less than 14 days")); +#endif + + printf ("\n %s\n", "CHECK WEBSERVER CONTENT VIA PROXY:"); + printf (" %s\n", _("It is recommended to use an environment proxy like:")); + printf (" %s\n", _("http_proxy=http://192.168.100.35:3128 ./check_curl -H www.monitoring-plugins.org")); + printf (" %s\n", _("legacy proxy requests in check_http style still work:")); + printf (" %s\n", _("check_curl -I 192.168.100.35 -p 3128 -u http://www.monitoring-plugins.org/ -H www.monitoring-plugins.org")); + +#ifdef LIBCURL_FEATURE_SSL + printf ("\n %s\n", "CHECK SSL WEBSERVER CONTENT VIA PROXY USING HTTP 1.1 CONNECT: "); + printf (" %s\n", _("It is recommended to use an environment proxy like:")); + printf (" %s\n", _("https_proxy=http://192.168.100.35:3128 ./check_curl -H www.verisign.com -S")); + printf (" %s\n", _("legacy proxy requests in check_http style still work:")); + printf (" %s\n", _("check_curl -I 192.168.100.35 -p 3128 -u https://www.verisign.com/ -S -j CONNECT -H www.verisign.com ")); + printf (" %s\n", _("all these options are needed: -I -p -u -S(sl) -j CONNECT -H ")); + printf (" %s\n", _("a STATE_OK will be returned. When the server returns its content but exceeds")); + printf (" %s\n", _("the 5-second threshold, a STATE_WARNING will be returned. When an error occurs,")); + printf (" %s\n", _("a STATE_CRITICAL will be returned.")); + +#endif + + printf (UT_SUPPORT); + +} + + + +void +print_usage (void) +{ + printf ("%s\n", _("Usage:")); + printf (" %s -H | -I [-u ] [-p ]\n",progname); + printf (" [-J ] [-K ] [--ca-cert ]\n"); + printf (" [-w ] [-c ] [-t ] [-L] [-E] [-a auth]\n"); + printf (" [-b proxy_auth] [-f ]\n"); + printf (" [-e ] [-d string] [-s string] [-l] [-r | -R ]\n"); + printf (" [-P string] [-m :] [-4|-6] [-N] [-M ]\n"); + printf (" [-A string] [-k string] [-S ] [--sni] [-C [,]]\n"); + printf (" [-T ] [-j method]\n"); + printf (" [--http-version=]\n"); + printf ("\n"); + printf ("%s\n", _("WARNING: check_curl is experimental. Please use")); + printf ("%s\n\n", _("check_http if you need a stable version.")); +} + +void +print_curl_version (void) +{ + printf( "%s\n", curl_version()); +} + +int +curlhelp_initwritebuffer (curlhelp_write_curlbuf *buf) +{ + buf->bufsize = DEFAULT_BUFFER_SIZE; + buf->buflen = 0; + buf->buf = (char *)malloc ((size_t)buf->bufsize); + if (buf->buf == NULL) return -1; + return 0; +} + +int +curlhelp_buffer_write_callback (void *buffer, size_t size, size_t nmemb, void *stream) +{ + curlhelp_write_curlbuf *buf = (curlhelp_write_curlbuf *)stream; + + while (buf->bufsize < buf->buflen + size * nmemb + 1) { + buf->bufsize *= buf->bufsize * 2; + buf->buf = (char *)realloc (buf->buf, buf->bufsize); + if (buf->buf == NULL) return -1; + } + + memcpy (buf->buf + buf->buflen, buffer, size * nmemb); + buf->buflen += size * nmemb; + buf->buf[buf->buflen] = '\0'; + + return (int)(size * nmemb); +} + +int +curlhelp_buffer_read_callback (void *buffer, size_t size, size_t nmemb, void *stream) +{ + curlhelp_read_curlbuf *buf = (curlhelp_read_curlbuf *)stream; + + size_t n = min (nmemb * size, buf->buflen - buf->pos); + + memcpy (buffer, buf->buf + buf->pos, n); + buf->pos += n; + + return (int)n; +} + +void +curlhelp_freewritebuffer (curlhelp_write_curlbuf *buf) +{ + free (buf->buf); + buf->buf = NULL; +} + +int +curlhelp_initreadbuffer (curlhelp_read_curlbuf *buf, const char *data, size_t datalen) +{ + buf->buflen = datalen; + buf->buf = (char *)malloc ((size_t)buf->buflen); + if (buf->buf == NULL) return -1; + memcpy (buf->buf, data, datalen); + buf->pos = 0; + return 0; +} + +void +curlhelp_freereadbuffer (curlhelp_read_curlbuf *buf) +{ + free (buf->buf); + buf->buf = NULL; +} + +/* TODO: where to put this, it's actually part of sstrings2 (logically)? + */ +const char* +strrstr2(const char *haystack, const char *needle) +{ + int counter; + size_t len; + const char *prev_pos; + const char *pos; + + if (haystack == NULL || needle == NULL) + return NULL; + + if (haystack[0] == '\0' || needle[0] == '\0') + return NULL; + + counter = 0; + prev_pos = NULL; + pos = haystack; + len = strlen (needle); + for (;;) { + pos = strstr (pos, needle); + if (pos == NULL) { + if (counter == 0) + return NULL; + else + return prev_pos; + } + counter++; + prev_pos = pos; + pos += len; + if (*pos == '\0') return prev_pos; + } +} + +int +curlhelp_parse_statusline (const char *buf, curlhelp_statusline *status_line) +{ + char *first_line_end; + char *p; + size_t first_line_len; + char *pp; + const char *start; + char *first_line_buf; + + /* find last start of a new header */ + start = strrstr2 (buf, "\r\nHTTP"); + if (start != NULL) { + start += 2; + buf = start; + } + + first_line_end = strstr(buf, "\r\n"); + if (first_line_end == NULL) return -1; + + first_line_len = (size_t)(first_line_end - buf); + status_line->first_line = (char *)malloc (first_line_len + 1); + if (status_line->first_line == NULL) return -1; + memcpy (status_line->first_line, buf, first_line_len); + status_line->first_line[first_line_len] = '\0'; + first_line_buf = strdup( status_line->first_line ); + + /* protocol and version: "HTTP/x.x" SP or "HTTP/2" SP */ + + p = strtok(first_line_buf, "/"); + if( p == NULL ) { free( first_line_buf ); return -1; } + if( strcmp( p, "HTTP" ) != 0 ) { free( first_line_buf ); return -1; } + + p = strtok( NULL, " " ); + if( p == NULL ) { free( first_line_buf ); return -1; } + if( strchr( p, '.' ) != NULL ) { + + /* HTTP 1.x case */ + char *ppp; + ppp = strtok( p, "." ); + status_line->http_major = (int)strtol( p, &pp, 10 ); + if( *pp != '\0' ) { free( first_line_buf ); return -1; } + ppp = strtok( NULL, " " ); + status_line->http_minor = (int)strtol( p, &pp, 10 ); + if( *pp != '\0' ) { free( first_line_buf ); return -1; } + p += 4; /* 1.x SP */ + } else { + /* HTTP 2 case */ + status_line->http_major = (int)strtol( p, &pp, 10 ); + status_line->http_minor = 0; + p += 2; /* 2 SP */ + } + + /* status code: "404" or "404.1", then SP */ + + p = strtok( p, " " ); + if( p == NULL ) { free( first_line_buf ); return -1; } + if( strchr( p, '.' ) != NULL ) { + char *ppp; + ppp = strtok( p, "." ); + status_line->http_code = (int)strtol( ppp, &pp, 10 ); + if( *pp != '\0' ) { free( first_line_buf ); return -1; } + ppp = strtok( NULL, "" ); + status_line->http_subcode = (int)strtol( ppp, &pp, 10 ); + if( *pp != '\0' ) { free( first_line_buf ); return -1; } + p += 6; /* 400.1 SP */ + } else { + status_line->http_code = (int)strtol( p, &pp, 10 ); + status_line->http_subcode = -1; + if( *pp != '\0' ) { free( first_line_buf ); return -1; } + p += 4; /* 400 SP */ + } + + /* Human readable message: "Not Found" CRLF */ + + p = strtok( p, "" ); + if( p == NULL ) { status_line->msg = ""; return 0; } + status_line->msg = status_line->first_line + ( p - first_line_buf ); + free( first_line_buf ); + + return 0; +} + +void +curlhelp_free_statusline (curlhelp_statusline *status_line) +{ + free (status_line->first_line); +} + +void +remove_newlines (char *s) +{ + char *p; + + for (p = s; *p != '\0'; p++) + if (*p == '\r' || *p == '\n') + *p = ' '; +} + +char * +get_header_value (const struct phr_header* headers, const size_t nof_headers, const char* header) +{ + int i; + for( i = 0; i < nof_headers; i++ ) { + if( strncasecmp( header, headers[i].name, max( headers[i].name_len, 4 ) ) == 0 ) { + return strndup( headers[i].value, headers[i].value_len ); + } + } + return NULL; +} + +int +check_document_dates (const curlhelp_write_curlbuf *header_buf, char (*msg)[DEFAULT_BUFFER_SIZE]) +{ + char *server_date = NULL; + char *document_date = NULL; + int date_result = STATE_OK; + curlhelp_statusline status_line; + struct phr_header headers[255]; + size_t nof_headers = 255; + size_t msglen; + + int res = phr_parse_response (header_buf->buf, header_buf->buflen, + &status_line.http_minor, &status_line.http_code, &status_line.msg, &msglen, + headers, &nof_headers, 0); + + server_date = get_header_value (headers, nof_headers, "date"); + document_date = get_header_value (headers, nof_headers, "last-modified"); + + if (!server_date || !*server_date) { + snprintf (*msg, DEFAULT_BUFFER_SIZE, _("%sServer date unknown, "), *msg); + date_result = max_state_alt(STATE_UNKNOWN, date_result); + } else if (!document_date || !*document_date) { + snprintf (*msg, DEFAULT_BUFFER_SIZE, _("%sDocument modification date unknown, "), *msg); + date_result = max_state_alt(STATE_CRITICAL, date_result); + } else { + time_t srv_data = curl_getdate (server_date, NULL); + time_t doc_data = curl_getdate (document_date, NULL); + if (verbose >= 2) + printf ("* server date: '%s' (%d), doc_date: '%s' (%d)\n", server_date, (int)srv_data, document_date, (int)doc_data); + if (srv_data <= 0) { + snprintf (*msg, DEFAULT_BUFFER_SIZE, _("%sServer date \"%100s\" unparsable, "), *msg, server_date); + date_result = max_state_alt(STATE_CRITICAL, date_result); + } else if (doc_data <= 0) { + snprintf (*msg, DEFAULT_BUFFER_SIZE, _("%sDocument date \"%100s\" unparsable, "), *msg, document_date); + date_result = max_state_alt(STATE_CRITICAL, date_result); + } else if (doc_data > srv_data + 30) { + snprintf (*msg, DEFAULT_BUFFER_SIZE, _("%sDocument is %d seconds in the future, "), *msg, (int)doc_data - (int)srv_data); + date_result = max_state_alt(STATE_CRITICAL, date_result); + } else if (doc_data < srv_data - maximum_age) { + int n = (srv_data - doc_data); + if (n > (60 * 60 * 24 * 2)) { + snprintf (*msg, DEFAULT_BUFFER_SIZE, _("%sLast modified %.1f days ago, "), *msg, ((float) n) / (60 * 60 * 24)); + date_result = max_state_alt(STATE_CRITICAL, date_result); + } else { + snprintf (*msg, DEFAULT_BUFFER_SIZE, _("%sLast modified %d:%02d:%02d ago, "), *msg, n / (60 * 60), (n / 60) % 60, n % 60); + date_result = max_state_alt(STATE_CRITICAL, date_result); + } + } + } + + if (server_date) free (server_date); + if (document_date) free (document_date); + + return date_result; +} + + +int +get_content_length (const curlhelp_write_curlbuf* header_buf, const curlhelp_write_curlbuf* body_buf) +{ + const char *s; + int content_length = 0; + char *copy; + struct phr_header headers[255]; + size_t nof_headers = 255; + size_t msglen; + char *content_length_s = NULL; + curlhelp_statusline status_line; + + int res = phr_parse_response (header_buf->buf, header_buf->buflen, + &status_line.http_minor, &status_line.http_code, &status_line.msg, &msglen, + headers, &nof_headers, 0); + + content_length_s = get_header_value (headers, nof_headers, "content-length"); + if (!content_length_s) { + return header_buf->buflen + body_buf->buflen; + } + content_length_s += strspn (content_length_s, " \t"); + content_length = atoi (content_length_s); + if (content_length != body_buf->buflen) { + /* TODO: should we warn if the actual and the reported body length don't match? */ + } + + if (content_length_s) free (content_length_s); + + return header_buf->buflen + body_buf->buflen; +} + +/* TODO: is there a better way in libcurl to check for the SSL library? */ +curlhelp_ssl_library +curlhelp_get_ssl_library (CURL* curl) +{ + curl_version_info_data* version_data; + char *ssl_version; + char *library; + curlhelp_ssl_library ssl_library = CURLHELP_SSL_LIBRARY_UNKNOWN; + + version_data = curl_version_info (CURLVERSION_NOW); + if (version_data == NULL) return CURLHELP_SSL_LIBRARY_UNKNOWN; + + ssl_version = strdup (version_data->ssl_version); + if (ssl_version == NULL ) return CURLHELP_SSL_LIBRARY_UNKNOWN; + + library = strtok (ssl_version, "/"); + if (library == NULL) return CURLHELP_SSL_LIBRARY_UNKNOWN; + + if (strcmp (library, "OpenSSL") == 0) + ssl_library = CURLHELP_SSL_LIBRARY_OPENSSL; + else if (strcmp (library, "LibreSSL") == 0) + ssl_library = CURLHELP_SSL_LIBRARY_LIBRESSL; + else if (strcmp (library, "GnuTLS") == 0) + ssl_library = CURLHELP_SSL_LIBRARY_GNUTLS; + else if (strcmp (library, "NSS") == 0) + ssl_library = CURLHELP_SSL_LIBRARY_NSS; + + if (verbose >= 2) + printf ("* SSL library string is : %s %s (%d)\n", version_data->ssl_version, library, ssl_library); + + free (ssl_version); + + return ssl_library; +} + +const char* +curlhelp_get_ssl_library_string (curlhelp_ssl_library ssl_library) +{ + switch (ssl_library) { + case CURLHELP_SSL_LIBRARY_OPENSSL: + return "OpenSSL"; + case CURLHELP_SSL_LIBRARY_LIBRESSL: + return "LibreSSL"; + case CURLHELP_SSL_LIBRARY_GNUTLS: + return "GnuTLS"; + case CURLHELP_SSL_LIBRARY_NSS: + return "NSS"; + case CURLHELP_SSL_LIBRARY_UNKNOWN: + default: + return "unknown"; + } +} + +#ifdef LIBCURL_FEATURE_SSL +#ifndef USE_OPENSSL +time_t +parse_cert_date (const char *s) +{ + struct tm tm; + time_t date; + char *res; + + if (!s) return -1; + + /* Jan 17 14:25:12 2020 GMT */ + res = strptime (s, "%Y-%m-%d %H:%M:%S GMT", &tm); + /* Sep 11 12:00:00 2020 GMT */ + if (res == NULL) strptime (s, "%Y %m %d %H:%M:%S GMT", &tm); + date = mktime (&tm); + + return date; +} + +/* TODO: this needs cleanup in the sslutils.c, maybe we the #else case to + * OpenSSL could be this function + */ +int +net_noopenssl_check_certificate (cert_ptr_union* cert_ptr, int days_till_exp_warn, int days_till_exp_crit) +{ + int i; + struct curl_slist* slist; + int cname_found = 0; + char* start_date_str = NULL; + char* end_date_str = NULL; + time_t start_date; + time_t end_date; + char *tz; + float time_left; + int days_left; + int time_remaining; + char timestamp[50] = ""; + int status = STATE_UNKNOWN; + + if (verbose >= 2) + printf ("**** REQUEST CERTIFICATES ****\n"); + + for (i = 0; i < cert_ptr->to_certinfo->num_of_certs; i++) { + for (slist = cert_ptr->to_certinfo->certinfo[i]; slist; slist = slist->next) { + /* find first common name in subject, + * TODO: check alternative subjects for + * TODO: have a decent parser here and not a hack + * multi-host certificate, check wildcards + */ + if (strncasecmp (slist->data, "Subject:", 8) == 0) { + int d = 3; + char* p = strstr (slist->data, "CN="); + if (p == NULL) { + d = 5; + p = strstr (slist->data, "CN = "); + } + if (p != NULL) { + if (strncmp (host_name, p+d, strlen (host_name)) == 0) { + cname_found = 1; + } + } + } else if (strncasecmp (slist->data, "Start Date:", 11) == 0) { + start_date_str = &slist->data[11]; + } else if (strncasecmp (slist->data, "Expire Date:", 12) == 0) { + end_date_str = &slist->data[12]; + } else if (strncasecmp (slist->data, "Cert:", 5) == 0) { + goto HAVE_FIRST_CERT; + } + if (verbose >= 2) + printf ("%d ** %s\n", i, slist->data); + } + } +HAVE_FIRST_CERT: + + if (verbose >= 2) + printf ("**** REQUEST CERTIFICATES ****\n"); + + if (!cname_found) { + printf("%s\n",_("CRITICAL - Cannot retrieve certificate subject.")); + return STATE_CRITICAL; + } + + start_date = parse_cert_date (start_date_str); + if (start_date <= 0) { + snprintf (msg, DEFAULT_BUFFER_SIZE, _("WARNING - Unparsable 'Start Date' in certificate: '%s'"), + start_date_str); + puts (msg); + return STATE_WARNING; + } + + end_date = parse_cert_date (end_date_str); + if (end_date <= 0) { + snprintf (msg, DEFAULT_BUFFER_SIZE, _("WARNING - Unparsable 'Expire Date' in certificate: '%s'"), + start_date_str); + puts (msg); + return STATE_WARNING; + } + + time_left = difftime (end_date, time(NULL)); + days_left = time_left / 86400; + tz = getenv("TZ"); + setenv("TZ", "GMT", 1); + tzset(); + strftime(timestamp, 50, "%c %z", localtime(&end_date)); + if (tz) + setenv("TZ", tz, 1); + else + unsetenv("TZ"); + tzset(); + + if (days_left > 0 && days_left <= days_till_exp_warn) { + printf (_("%s - Certificate '%s' expires in %d day(s) (%s).\n"), (days_left>days_till_exp_crit)?"WARNING":"CRITICAL", host_name, days_left, timestamp); + if (days_left > days_till_exp_crit) + status = STATE_WARNING; + else + status = STATE_CRITICAL; + } else if (days_left == 0 && time_left > 0) { + if (time_left >= 3600) + time_remaining = (int) time_left / 3600; + else + time_remaining = (int) time_left / 60; + + printf (_("%s - Certificate '%s' expires in %u %s (%s)\n"), + (days_left>days_till_exp_crit) ? "WARNING" : "CRITICAL", host_name, time_remaining, + time_left >= 3600 ? "hours" : "minutes", timestamp); + + if ( days_left > days_till_exp_crit) + status = STATE_WARNING; + else + status = STATE_CRITICAL; + } else if (time_left < 0) { + printf(_("CRITICAL - Certificate '%s' expired on %s.\n"), host_name, timestamp); + status=STATE_CRITICAL; + } else if (days_left == 0) { + printf (_("%s - Certificate '%s' just expired (%s).\n"), (days_left>days_till_exp_crit)?"WARNING":"CRITICAL", host_name, timestamp); + if (days_left > days_till_exp_crit) + status = STATE_WARNING; + else + status = STATE_CRITICAL; + } else { + printf(_("OK - Certificate '%s' will expire on %s.\n"), host_name, timestamp); + status = STATE_OK; + } + return status; +} +#endif /* USE_OPENSSL */ +#endif /* LIBCURL_FEATURE_SSL */ diff --git a/plugins/check_dbi.c b/plugins/check_dbi.c index 826eb8d..ced13d0 100644 --- a/plugins/check_dbi.c +++ b/plugins/check_dbi.c @@ -35,6 +35,7 @@ const char *email = "devel@monitoring-plugins.org"; #include "common.h" #include "utils.h" +#include "utils_cmd.h" #include "netutils.h" diff --git a/plugins/check_dig.c b/plugins/check_dig.c index da4f0de..5d85ae2 100644 --- a/plugins/check_dig.c +++ b/plugins/check_dig.c @@ -331,7 +331,7 @@ print_help (void) printf ("Copyright (c) 2000 Karl DeBisschop \n"); printf (COPYRIGHT, copyright, email); - printf (_("This plugin test the DNS service on the specified host using dig")); + printf (_("This plugin tests the DNS service on the specified host using dig")); printf ("\n\n"); diff --git a/plugins/check_disk.c b/plugins/check_disk.c index e73a008..844e625 100644 --- a/plugins/check_disk.c +++ b/plugins/check_disk.c @@ -141,6 +141,7 @@ int erronly = FALSE; int display_mntp = FALSE; int exact_match = FALSE; int freespace_ignore_reserved = FALSE; +int display_inodes_perfdata = FALSE; char *warn_freespace_units = NULL; char *crit_freespace_units = NULL; char *warn_freespace_percent = NULL; @@ -167,6 +168,7 @@ main (int argc, char **argv) char *output; char *details; char *perf; + char *perf_ilabel; char *preamble; char *flag_header; double inode_space_pct; @@ -186,6 +188,7 @@ main (int argc, char **argv) output = strdup (""); details = strdup (""); perf = strdup (""); + perf_ilabel = strdup (""); stat_buf = malloc(sizeof *stat_buf); setlocale (LC_ALL, ""); @@ -348,6 +351,29 @@ main (int argc, char **argv) TRUE, 0, TRUE, path->dtotal_units)); + if (display_inodes_perfdata) { + /* *_high_tide must be reinitialized at each run */ + warning_high_tide = UINT_MAX; + critical_high_tide = UINT_MAX; + + if (path->freeinodes_percent->warning != NULL) { + warning_high_tide = abs( min( (double) warning_high_tide, (double) (1.0 - path->freeinodes_percent->warning->end/100)*path->inodes_total )); + } + if (path->freeinodes_percent->critical != NULL) { + critical_high_tide = abs( min( (double) critical_high_tide, (double) (1.0 - path->freeinodes_percent->critical->end/100)*path->inodes_total )); + } + + xasprintf (&perf_ilabel, "%s (inodes)", (!strcmp(me->me_mountdir, "none") || display_mntp) ? me->me_devname : me->me_mountdir); + /* Nb: *_high_tide are unset when == UINT_MAX */ + xasprintf (&perf, "%s %s", perf, + perfdata (perf_ilabel, + path->inodes_used, "", + (warning_high_tide != UINT_MAX ? TRUE : FALSE), warning_high_tide, + (critical_high_tide != UINT_MAX ? TRUE : FALSE), critical_high_tide, + TRUE, 0, + TRUE, path->inodes_total)); + } + if (disk_result==STATE_OK && erronly && !verbose) continue; @@ -455,6 +481,7 @@ process_arguments (int argc, char **argv) {"ignore-eregi-partition", required_argument, 0, 'I'}, {"local", no_argument, 0, 'l'}, {"stat-remote-fs", no_argument, 0, 'L'}, + {"iperfdata", no_argument, 0, 'P'}, {"mountpoint", no_argument, 0, 'M'}, {"errors-only", no_argument, 0, 'e'}, {"exact-match", no_argument, 0, 'E'}, @@ -477,7 +504,7 @@ process_arguments (int argc, char **argv) strcpy (argv[c], "-t"); while (1) { - c = getopt_long (argc, argv, "+?VqhvefCt:c:w:K:W:u:p:x:X:N:mklLg:R:r:i:I:MEA", longopts, &option); + c = getopt_long (argc, argv, "+?VqhvefCt:c:w:K:W:u:p:x:X:N:mklLPg:R:r:i:I:MEA", longopts, &option); if (c == -1 || c == EOF) break; @@ -582,9 +609,13 @@ process_arguments (int argc, char **argv) break; case 'L': stat_remote_fs = 1; + /* fallthrough */ case 'l': show_local_fs = 1; break; + case 'P': + display_inodes_perfdata = 1; + break; case 'p': /* select path */ if (! (warn_freespace_units || crit_freespace_units || warn_freespace_percent || crit_freespace_percent || warn_usedspace_units || crit_usedspace_units || @@ -904,6 +935,8 @@ print_help (void) printf (" %s\n", _("Display only devices/mountpoints with errors")); printf (" %s\n", "-f, --freespace-ignore-reserved"); printf (" %s\n", _("Don't account root-reserved blocks into freespace in perfdata")); + printf (" %s\n", "-P, --iperfdata"); + printf (" %s\n", _("Display inode usage in perfdata")); printf (" %s\n", "-g, --group=NAME"); printf (" %s\n", _("Group paths. Thresholds apply to (free-)space of all partitions together")); printf (" %s\n", "-k, --kilobytes"); @@ -1012,6 +1045,8 @@ get_stats (struct parameter_list *p, struct fs_usage *fsp) { p->dtotal_units += p_list->dtotal_units; p->inodes_total += p_list->inodes_total; p->inodes_free += p_list->inodes_free; + p->inodes_free_to_root += p_list->inodes_free_to_root; + p->inodes_used += p_list->inodes_used; } first = 0; } @@ -1050,7 +1085,18 @@ get_path_stats (struct parameter_list *p, struct fs_usage *fsp) { p->dused_units = p->used*fsp->fsu_blocksize/mult; p->dfree_units = p->available*fsp->fsu_blocksize/mult; p->dtotal_units = p->total*fsp->fsu_blocksize/mult; - p->inodes_total = fsp->fsu_files; /* Total file nodes. */ - p->inodes_free = fsp->fsu_ffree; /* Free file nodes. */ + /* Free file nodes. Not sure the workaround is required, but in case...*/ + p->inodes_free = fsp->fsu_favail > fsp->fsu_ffree ? 0 : fsp->fsu_favail; + p->inodes_free_to_root = fsp->fsu_ffree; /* Free file nodes for root. */ + p->inodes_used = fsp->fsu_files - fsp->fsu_ffree; + if (freespace_ignore_reserved) { + /* option activated : we substract the root-reserved inodes from the total */ + /* not all OS report fsp->fsu_favail, only the ones with statvfs syscall */ + /* for others, fsp->fsu_ffree == fsp->fsu_favail */ + p->inodes_total = fsp->fsu_files - p->inodes_free_to_root + p->inodes_free; + } else { + /* default behaviour : take all the inodes into account */ + p->inodes_total = fsp->fsu_files; + } np_add_name(&seen, p->best_match->me_mountdir); } diff --git a/plugins/check_dns.c b/plugins/check_dns.c index 54ce7d1..b90f50e 100644 --- a/plugins/check_dns.c +++ b/plugins/check_dns.c @@ -42,6 +42,8 @@ const char *email = "devel@monitoring-plugins.org"; int process_arguments (int, char **); int validate_arguments (void); int error_scan (char *); +int ip_match_cidr(const char *, const char *); +unsigned long ip2long(const char *); void print_help (void); void print_usage (void); @@ -54,6 +56,7 @@ char **expected_address = NULL; int expected_address_cnt = 0; int expect_authority = FALSE; +int all_match = FALSE; thresholds *time_thresholds = NULL; static int @@ -126,7 +129,7 @@ main (int argc, char **argv) if (verbose) puts(chld_out.line[i]); - if (strcasestr (chld_out.line[i], ".in-addr.arpa")) { + if (strcasestr (chld_out.line[i], ".in-addr.arpa") || strcasestr (chld_out.line[i], ".ip6.arpa")) { if ((temp_buffer = strstr (chld_out.line[i], "name = "))) addresses[n_addresses++] = strdup (temp_buffer + 7); else { @@ -166,8 +169,8 @@ main (int argc, char **argv) temp_buffer++; /* Strip leading spaces */ - for (; *temp_buffer != '\0' && *temp_buffer == ' '; temp_buffer++) - /* NOOP */; + while (*temp_buffer == ' ') + temp_buffer++; strip(temp_buffer); if (temp_buffer==NULL || strlen(temp_buffer)==0) { @@ -199,7 +202,10 @@ main (int argc, char **argv) if (error_scan (chld_err.line[i]) != STATE_OK) { result = max_state (result, error_scan (chld_err.line[i])); msg = strchr(input_buffer, ':'); - if(msg) msg++; + if(msg) + msg++; + else + msg = input_buffer; } } @@ -226,11 +232,27 @@ main (int argc, char **argv) if (result == STATE_OK && expected_address_cnt > 0) { result = STATE_CRITICAL; temp_buffer = ""; + unsigned long expect_match = (1 << expected_address_cnt) - 1; + unsigned long addr_match = (1 << n_addresses) - 1; + for (i=0; i> (32 - mask)) << (32 - mask); +} + +unsigned long +ip2long(const char* src) { + unsigned long ip[4]; + /* http://computer-programming-forum.com/47-c-language/1376ffb92a12c471.htm */ + return (sscanf(src, "%3lu.%3lu.%3lu.%3lu", + &ip[0], &ip[1], &ip[2], &ip[3]) == 4 && + ip[0] < 256 && ip[1] < 256 && + ip[2] < 256 && ip[3] < 256) + ? ip[0] << 24 | ip[1] << 16 | ip[2] << 8 | ip[3] + : 0; +} int error_scan (char *input_buffer) @@ -304,6 +351,8 @@ error_scan (char *input_buffer) /* DNS server is not running... */ else if (strstr (input_buffer, "No response from server")) die (STATE_CRITICAL, _("No response from DNS %s\n"), dns_server); + else if (strstr (input_buffer, "no servers could be reached")) + die (STATE_CRITICAL, _("No response from DNS %s\n"), dns_server); /* Host name is valid, but server doesn't have records... */ else if (strstr (input_buffer, "No records")) @@ -328,6 +377,7 @@ error_scan (char *input_buffer) /* Host or domain name does not exist */ else if (strstr (input_buffer, "Non-existent") || strstr (input_buffer, "** server can't find") || + strstr (input_buffer, "** Can't find") || strstr (input_buffer,"NXDOMAIN")) die (STATE_CRITICAL, _("Domain %s was not found by the server\n"), query_address); @@ -368,6 +418,7 @@ process_arguments (int argc, char **argv) {"reverse-server", required_argument, 0, 'r'}, {"expected-address", required_argument, 0, 'a'}, {"expect-authority", no_argument, 0, 'A'}, + {"all", no_argument, 0, 'L'}, {"warning", required_argument, 0, 'w'}, {"critical", required_argument, 0, 'c'}, {0, 0, 0, 0} @@ -381,7 +432,7 @@ process_arguments (int argc, char **argv) strcpy (argv[c], "-t"); while (1) { - c = getopt_long (argc, argv, "hVvAt:H:s:r:a:w:c:", long_opts, &opt_index); + c = getopt_long (argc, argv, "hVvALt:H:s:r:a:w:c:", long_opts, &opt_index); if (c == -1 || c == EOF) break; @@ -429,6 +480,9 @@ process_arguments (int argc, char **argv) case 'A': /* expect authority */ expect_authority = TRUE; break; + case 'L': /* all must match */ + all_match = TRUE; + break; case 'w': warning = optarg; break; @@ -494,17 +548,19 @@ print_help (void) printf (" %s\n", _("The name or address you want to query")); printf (" -s, --server=HOST\n"); printf (" %s\n", _("Optional DNS server you want to use for the lookup")); - printf (" -a, --expected-address=IP-ADDRESS|HOST\n"); - printf (" %s\n", _("Optional IP-ADDRESS you expect the DNS server to return. HOST must end with")); - printf (" %s\n", _("a dot (.). This option can be repeated multiple times (Returns OK if any")); - printf (" %s\n", _("value match). If multiple addresses are returned at once, you have to match")); - printf (" %s\n", _("the whole string of addresses separated with commas (sorted alphabetically).")); + printf (" -a, --expected-address=IP-ADDRESS|CIDR|HOST\n"); + printf (" %s\n", _("Optional IP-ADDRESS/CIDR you expect the DNS server to return. HOST must end")); + printf (" %s\n", _("with a dot (.). This option can be repeated multiple times (Returns OK if any")); + printf (" %s\n", _("value matches).")); printf (" -A, --expect-authority\n"); printf (" %s\n", _("Optionally expect the DNS server to be authoritative for the lookup")); printf (" -w, --warning=seconds\n"); printf (" %s\n", _("Return warning if elapsed time exceeds value. Default off")); printf (" -c, --critical=seconds\n"); printf (" %s\n", _("Return critical if elapsed time exceeds value. Default off")); + printf (" -L, --all\n"); + printf (" %s\n", _("Return critical if the list of expected addresses does not match all addresses")); + printf (" %s\n", _("returned. Default off")); printf (UT_CONN_TIMEOUT, DEFAULT_SOCKET_TIMEOUT); @@ -516,5 +572,5 @@ void print_usage (void) { printf ("%s\n", _("Usage:")); - printf ("%s -H host [-s server] [-a expected-address] [-A] [-t timeout] [-w warn] [-c crit]\n", progname); + printf ("%s -H host [-s server] [-a expected-address] [-A] [-t timeout] [-w warn] [-c crit] [-L]\n", progname); } diff --git a/plugins/check_fping.c b/plugins/check_fping.c index da1ce1a..521d0fe 100644 --- a/plugins/check_fping.c +++ b/plugins/check_fping.c @@ -184,7 +184,7 @@ textscan (char *buf) int status = STATE_UNKNOWN; if (strstr (buf, "not found")) { - die (STATE_CRITICAL, _("FPING UNKNOW - %s not found\n"), server_name); + die (STATE_CRITICAL, _("FPING UNKNOWN - %s not found\n"), server_name); } else if (strstr (buf, "is unreachable") || strstr (buf, "Unreachable")) { diff --git a/plugins/check_hpjd.c b/plugins/check_hpjd.c index f159f5a..6546556 100644 --- a/plugins/check_hpjd.c +++ b/plugins/check_hpjd.c @@ -67,6 +67,7 @@ void print_usage (void); char *community = NULL; char *address = NULL; char *port = NULL; +int check_paper_out = 1; int main (int argc, char **argv) @@ -240,7 +241,8 @@ main (int argc, char **argv) strcpy (errmsg, _("Paper Jam")); } else if (paper_out) { - result = STATE_WARNING; + if (check_paper_out) + result = STATE_WARNING; strcpy (errmsg, _("Out of Paper")); } else if (line_status == OFFLINE) { @@ -325,7 +327,7 @@ process_arguments (int argc, char **argv) while (1) { - c = getopt_long (argc, argv, "+hVH:C:p:", longopts, &option); + c = getopt_long (argc, argv, "+hVH:C:p:D", longopts, &option); if (c == -1 || c == EOF || c == 1) break; @@ -347,6 +349,8 @@ process_arguments (int argc, char **argv) usage2 (_("Port must be a positive short integer"), optarg); else port = atoi(optarg); + case 'D': /* disable paper out check*/ + check_paper_out = 0; break; case 'V': /* version */ print_revision (progname, NP_VERSION); @@ -420,6 +424,8 @@ print_help (void) printf (" %s", _("Specify the port to check ")); printf (_("(default=%s)"), DEFAULT_PORT); printf ("\n"); + printf (" %s\n", "-D"); + printf (" %s", _("Disable paper check ")); printf (UT_SUPPORT); } @@ -430,5 +436,5 @@ void print_usage (void) { printf ("%s\n", _("Usage:")); - printf ("%s -H host [-C community] [-p port]\n", progname); + printf ("%s -H host [-C community] [-p port] [-D]\n", progname); } diff --git a/plugins/check_http.c b/plugins/check_http.c index e5ef7cc..e2298b1 100644 --- a/plugins/check_http.c +++ b/plugins/check_http.c @@ -120,12 +120,14 @@ int use_ssl = FALSE; int use_sni = FALSE; int verbose = FALSE; int show_extended_perfdata = FALSE; +int show_body = FALSE; int sd; int min_page_len = 0; int max_page_len = 0; int redir_depth = 0; int max_depth = 15; char *http_method; +char *http_method_proxy; char *http_post_data; char *http_content_type; char buffer[MAX_INPUT_BUFFER]; @@ -239,6 +241,7 @@ process_arguments (int argc, char **argv) {"use-ipv4", no_argument, 0, '4'}, {"use-ipv6", no_argument, 0, '6'}, {"extended-perfdata", no_argument, 0, 'E'}, + {"show-body", no_argument, 0, 'B'}, {0, 0, 0, 0} }; @@ -259,7 +262,7 @@ process_arguments (int argc, char **argv) } while (1) { - c = getopt_long (argc, argv, "Vvh46t:c:w:A:k:H:P:j:T:I:a:b:d:e:p:s:R:r:u:f:C:J:K:nlLS::m:M:NE", longopts, &option); + c = getopt_long (argc, argv, "Vvh46t:c:w:A:k:H:P:j:T:I:a:b:d:e:p:s:R:r:u:f:C:J:K:nlLS::m:M:NEB", longopts, &option); if (c == -1 || c == EOF) break; @@ -446,6 +449,12 @@ process_arguments (int argc, char **argv) if (http_method) free(http_method); http_method = strdup (optarg); + char *tmp; + if ((tmp = strstr(http_method, ":")) > 0) { + tmp[0] = '\0'; + http_method = http_method; + http_method_proxy = ++tmp; + } break; case 'd': /* string or substring */ strncpy (header_expect, optarg, MAX_INPUT_BUFFER - 1); @@ -540,6 +549,9 @@ process_arguments (int argc, char **argv) case 'E': /* show extended perfdata */ show_extended_perfdata = TRUE; break; + case 'B': /* print body content after status line */ + show_body = TRUE; + break; } } @@ -566,6 +578,9 @@ process_arguments (int argc, char **argv) if (http_method == NULL) http_method = strdup ("GET"); + if (http_method_proxy == NULL) + http_method_proxy = strdup ("GET"); + if (client_cert && !client_privkey) usage4 (_("If you use a client certificate you must also specify a private key file")); @@ -916,6 +931,21 @@ check_http (void) if (verbose) printf ("Entering CONNECT tunnel mode with proxy %s:%d to dst %s:%d\n", server_address, server_port, host_name, HTTPS_PORT); asprintf (&buf, "%s %s:%d HTTP/1.1\r\n%s\r\n", http_method, host_name, HTTPS_PORT, user_agent); + if (strlen(proxy_auth)) { + base64_encode_alloc (proxy_auth, strlen (proxy_auth), &auth); + xasprintf (&buf, "%sProxy-Authorization: Basic %s\r\n", buf, auth); + } + /* optionally send any other header tag */ + if (http_opt_headers_count) { + for (i = 0; i < http_opt_headers_count ; i++) { + if (force_host_header != http_opt_headers[i]) { + xasprintf (&buf, "%s%s\r\n", buf, http_opt_headers[i]); + } + } + /* This cannot be free'd here because a redirection will then try to access this and segfault */ + /* Covered in a testcase in tests/check_http.t */ + /* free(http_opt_headers); */ + } asprintf (&buf, "%sProxy-Connection: keep-alive\r\n", buf); asprintf (&buf, "%sHost: %s\r\n", buf, host_name); /* we finished our request, send empty line with CRLF */ @@ -950,7 +980,7 @@ check_http (void) if ( server_address != NULL && strcmp(http_method, "CONNECT") == 0 && host_name != NULL && use_ssl == TRUE) - asprintf (&buf, "%s %s %s\r\n%s\r\n", "GET", server_url, host_name ? "HTTP/1.1" : "HTTP/1.0", user_agent); + asprintf (&buf, "%s %s %s\r\n%s\r\n", http_method_proxy, server_url, host_name ? "HTTP/1.1" : "HTTP/1.0", user_agent); else asprintf (&buf, "%s %s %s\r\n%s\r\n", http_method, server_url, host_name ? "HTTP/1.1" : "HTTP/1.0", user_agent); @@ -1140,6 +1170,8 @@ check_http (void) xasprintf (&msg, _("Invalid HTTP response received from host on port %d: %s\n"), server_port, status_line); + if (show_body) + xasprintf (&msg, _("%s\n%s"), msg, page); die (STATE_CRITICAL, "HTTP CRITICAL - %s", msg); } @@ -1290,6 +1322,9 @@ check_http (void) perfd_time (elapsed_time), perfd_size (page_len)); + if (show_body) + xasprintf (&msg, _("%s\n%s"), msg, page); + result = max_state_alt(get_status(elapsed_time, thlds), result); die (result, "HTTP %s: %s\n", state_text(result), msg); @@ -1581,7 +1616,7 @@ print_help (void) printf (" %s\n", _("URL to GET or POST (default: /)")); printf (" %s\n", "-P, --post=STRING"); printf (" %s\n", _("URL encoded http POST data")); - printf (" %s\n", "-j, --method=STRING (for example: HEAD, OPTIONS, TRACE, PUT, DELETE, CONNECT)"); + printf (" %s\n", "-j, --method=STRING (for example: HEAD, OPTIONS, TRACE, PUT, DELETE, CONNECT, CONNECT:POST)"); printf (" %s\n", _("Set HTTP method.")); printf (" %s\n", "-N, --no-body"); printf (" %s\n", _("Don't wait for document body: stop reading after headers.")); @@ -1611,6 +1646,8 @@ print_help (void) printf (" %s\n", _("Any other tags to be sent in http header. Use multiple times for additional headers")); printf (" %s\n", "-E, --extended-perfdata"); printf (" %s\n", _("Print additional performance data")); + printf (" %s\n", "-B, --show-body"); + printf (" %s\n", _("Print body content below status line")); printf (" %s\n", "-L, --link"); printf (" %s\n", _("Wrap output in HTML link (obsoleted by urlize)")); printf (" %s\n", "-f, --onredirect="); @@ -1629,7 +1666,7 @@ print_help (void) printf ("%s\n", _("Notes:")); printf (" %s\n", _("This plugin will attempt to open an HTTP connection with the host.")); printf (" %s\n", _("Successful connects return STATE_OK, refusals and timeouts return STATE_CRITICAL")); - printf (" %s\n", _("other errors return STATE_UNKNOWN. Successful connects, but incorrect reponse")); + printf (" %s\n", _("other errors return STATE_UNKNOWN. Successful connects, but incorrect response")); printf (" %s\n", _("messages from the host result in STATE_WARNING return values. If you are")); printf (" %s\n", _("checking a virtual server that uses 'host headers' you must supply the FQDN")); printf (" %s\n", _("(fully qualified domain name) as the [host_name] argument.")); @@ -1668,7 +1705,8 @@ print_help (void) printf (" %s\n", _("all these options are needed: -I -p -u -S(sl) -j CONNECT -H ")); printf (" %s\n", _("a STATE_OK will be returned. When the server returns its content but exceeds")); printf (" %s\n", _("the 5-second threshold, a STATE_WARNING will be returned. When an error occurs,")); - printf (" %s\n", _("a STATE_CRITICAL will be returned.")); + printf (" %s\n", _("a STATE_CRITICAL will be returned. By adding a colon to the method you can set the method used")); + printf (" %s\n", _("inside the proxied connection: -j CONNECT:POST")); #endif diff --git a/plugins/check_ide_smart.c b/plugins/check_ide_smart.c index 4662131..0160d98 100644 --- a/plugins/check_ide_smart.c +++ b/plugins/check_ide_smart.c @@ -283,7 +283,7 @@ get_offline_text (int status) return offline_status_text[i].text; } } - return "UNKNOW"; + return "UNKNOWN"; } diff --git a/plugins/check_ldap.c b/plugins/check_ldap.c index 66be4b4..bc7bd44 100644 --- a/plugins/check_ldap.c +++ b/plugins/check_ldap.c @@ -237,7 +237,7 @@ main (int argc, char *argv[]) if(entries_thresholds != NULL) { if (verbose) { printf ("entries found: %d\n", num_entries); - print_thresholds("entry threasholds", entries_thresholds); + print_thresholds("entry thresholds", entries_thresholds); } status_entries = get_status(num_entries, entries_thresholds); if (status_entries == STATE_CRITICAL) { diff --git a/plugins/check_load.c b/plugins/check_load.c index b1cc498..bf7b94b 100644 --- a/plugins/check_load.c +++ b/plugins/check_load.c @@ -33,6 +33,7 @@ const char *copyright = "1999-2007"; const char *email = "devel@monitoring-plugins.org"; #include "common.h" +#include "runcmd.h" #include "utils.h" #include "popen.h" @@ -52,6 +53,9 @@ static int process_arguments (int argc, char **argv); static int validate_arguments (void); void print_help (void); void print_usage (void); +static int print_top_consuming_processes(); + +static int n_procs_to_show = 0; /* strictly for pretty-print usage in loops */ static const int nums[3] = { 1, 5, 15 }; @@ -210,6 +214,9 @@ main (int argc, char **argv) printf("load%d=%.3f;%.3f;%.3f;0; ", nums[i], la[i], wload[i], cload[i]); putchar('\n'); + if (n_procs_to_show > 0) { + print_top_consuming_processes(); + } return result; } @@ -227,6 +234,7 @@ process_arguments (int argc, char **argv) {"percpu", no_argument, 0, 'r'}, {"version", no_argument, 0, 'V'}, {"help", no_argument, 0, 'h'}, + {"procs-to-show", required_argument, 0, 'n'}, {0, 0, 0, 0} }; @@ -234,7 +242,7 @@ process_arguments (int argc, char **argv) return ERROR; while (1) { - c = getopt_long (argc, argv, "Vhrc:w:", longopts, &option); + c = getopt_long (argc, argv, "Vhrc:w:n:", longopts, &option); if (c == -1 || c == EOF) break; @@ -255,6 +263,9 @@ process_arguments (int argc, char **argv) case 'h': /* help */ print_help (); exit (STATE_UNKNOWN); + case 'n': + n_procs_to_show = atoi(optarg); + break; case '?': /* help */ usage5 (); } @@ -324,6 +335,9 @@ print_help (void) printf (" %s\n", _("the load average format is the same used by \"uptime\" and \"w\"")); printf (" %s\n", "-r, --percpu"); printf (" %s\n", _("Divide the load averages by the number of CPUs (when possible)")); + printf (" %s\n", "-n, --procs-to-show=NUMBER_OF_PROCS"); + printf (" %s\n", _("Number of processes to show when printing the top consuming processes.")); + printf (" %s\n", _("NUMBER_OF_PROCS=0 disables this feature. Default value is 0")); printf (UT_SUPPORT); } @@ -332,5 +346,48 @@ void print_usage (void) { printf ("%s\n", _("Usage:")); - printf ("%s [-r] -w WLOAD1,WLOAD5,WLOAD15 -c CLOAD1,CLOAD5,CLOAD15\n", progname); + printf ("%s [-r] -w WLOAD1,WLOAD5,WLOAD15 -c CLOAD1,CLOAD5,CLOAD15 [-n NUMBER_OF_PROCS]\n", progname); +} + +#ifdef PS_USES_PROCPCPU +int cmpstringp(const void *p1, const void *p2) { + int procuid = 0; + int procpid = 0; + int procppid = 0; + int procvsz = 0; + int procrss = 0; + float procpcpu = 0; + char procstat[8]; +#ifdef PS_USES_PROCETIME + char procetime[MAX_INPUT_BUFFER]; +#endif /* PS_USES_PROCETIME */ + char procprog[MAX_INPUT_BUFFER]; + int pos; + sscanf (* (char * const *) p1, PS_FORMAT, PS_VARLIST); + float procpcpu1 = procpcpu; + sscanf (* (char * const *) p2, PS_FORMAT, PS_VARLIST); + return procpcpu1 < procpcpu; +} +#endif /* PS_USES_PROCPCPU */ + +static int print_top_consuming_processes() { + int i = 0; + struct output chld_out, chld_err; + if(np_runcmd(PS_COMMAND, &chld_out, &chld_err, 0) != 0){ + fprintf(stderr, _("'%s' exited with non-zero status.\n"), PS_COMMAND); + return STATE_UNKNOWN; + } + if (chld_out.lines < 2) { + fprintf(stderr, _("some error occurred getting procs list.\n")); + return STATE_UNKNOWN; + } +#ifdef PS_USES_PROCPCPU + qsort(chld_out.line + 1, chld_out.lines - 1, sizeof(char*), cmpstringp); +#endif /* PS_USES_PROCPCPU */ + int lines_to_show = chld_out.lines < (n_procs_to_show + 1) + ? chld_out.lines : n_procs_to_show + 1; + for (i = 0; i < lines_to_show; i += 1) { + printf("%s\n", chld_out.line[i]); + } + return OK; } diff --git a/plugins/check_mysql.c b/plugins/check_mysql.c index 5773afd..0cba50e 100644 --- a/plugins/check_mysql.c +++ b/plugins/check_mysql.c @@ -379,6 +379,9 @@ process_arguments (int argc, char **argv) if (is_host (optarg)) { db_host = optarg; } + else if (*optarg == '/') { + db_socket = optarg; + } else { usage2 (_("Invalid hostname/address"), optarg); } diff --git a/plugins/check_ntp.c b/plugins/check_ntp.c index 5ac6c65..914b40c 100644 --- a/plugins/check_ntp.c +++ b/plugins/check_ntp.c @@ -548,7 +548,7 @@ double jitter_request(const char *host, int *status){ DBG(print_ntp_control_message(&req)); /* Attempt to read the largest size packet possible */ req.count=htons(MAX_CM_SIZE); - DBG(printf("recieving READSTAT response")) + DBG(printf("receiving READSTAT response")) read(conn, &req, SIZEOF_NTPCM(req)); DBG(print_ntp_control_message(&req)); /* Each peer identifier is 4 bytes in the data section, which @@ -608,7 +608,7 @@ double jitter_request(const char *host, int *status){ DBG(print_ntp_control_message(&req)); req.count = htons(MAX_CM_SIZE); - DBG(printf("recieving READVAR response...\n")); + DBG(printf("receiving READVAR response...\n")); read(conn, &req, SIZEOF_NTPCM(req)); DBG(print_ntp_control_message(&req)); diff --git a/plugins/check_ntp_peer.c b/plugins/check_ntp_peer.c index c656b0f..6842842 100644 --- a/plugins/check_ntp_peer.c +++ b/plugins/check_ntp_peer.c @@ -245,7 +245,7 @@ int ntp_request(const char *host, double *offset, int *offset_result, double *ji do { /* Attempt to read the largest size packet possible */ req.count=htons(MAX_CM_SIZE); - DBG(printf("recieving READSTAT response")) + DBG(printf("receiving READSTAT response")) if(read(conn, &req, SIZEOF_NTPCM(req)) == -1) die(STATE_CRITICAL, "NTP CRITICAL: No response from NTP server\n"); DBG(print_ntp_control_message(&req)); diff --git a/plugins/check_pgsql.c b/plugins/check_pgsql.c index 2eb699e..11ce691 100644 --- a/plugins/check_pgsql.c +++ b/plugins/check_pgsql.c @@ -34,6 +34,7 @@ const char *email = "devel@monitoring-plugins.org"; #include "common.h" #include "utils.h" +#include "utils_cmd.h" #include "netutils.h" #include @@ -565,7 +566,7 @@ print_help (void) printf (" %s\n", _("Typically, the monitoring user (unless the --logname option is used) should be")); printf (" %s\n", _("able to connect to the database without a password. The plugin can also send")); - printf (" %s\n", _("a password, but no effort is made to obsure or encrypt the password.")); + printf (" %s\n", _("a password, but no effort is made to obscure or encrypt the password.")); printf (UT_SUPPORT); } diff --git a/plugins/check_procs.c b/plugins/check_procs.c index 4bcc56b..f7917c3 100644 --- a/plugins/check_procs.c +++ b/plugins/check_procs.c @@ -764,6 +764,11 @@ be the total number of running processes\n\n")); printf (" %s\n", "check_procs -w 2:2 -c 2:1024 -C portsentry"); printf (" %s\n", _("Warning if not two processes with command name portsentry.")); printf (" %s\n\n", _("Critical if < 2 or > 1024 processes")); + printf (" %s\n", "check_procs -c 1: -C sshd"); + printf (" %s\n", _("Critical if not at least 1 process with command sshd")); + printf (" %s\n", "check_procs -w 1024 -c 1: -C sshd"); + printf (" %s\n", _("Warning if > 1024 processes with command name sshd.")); + printf (" %s\n\n", _("Critical if < 1 processes with command name sshd.")); printf (" %s\n", "check_procs -w 10 -a '/usr/local/bin/perl' -u root"); printf (" %s\n", _("Warning alert if > 10 processes with command arguments containing")); printf (" %s\n\n", _("'/usr/local/bin/perl' and owned by root")); diff --git a/plugins/check_radius.c b/plugins/check_radius.c index fe84b7c..be1001b 100644 --- a/plugins/check_radius.c +++ b/plugins/check_radius.c @@ -360,7 +360,7 @@ print_help (void) printf (" %s\n", "-u, --username=STRING"); printf (" %s\n", _("The user to authenticate")); printf (" %s\n", "-p, --password=STRING"); - printf (" %s\n", _("Password for autentication (SECURITY RISK)")); + printf (" %s\n", _("Password for authentication (SECURITY RISK)")); printf (" %s\n", "-n, --nas-id=STRING"); printf (" %s\n", _("NAS identifier")); printf (" %s\n", "-N, --nas-ip-address=STRING"); diff --git a/plugins/check_real.c b/plugins/check_real.c index 6491e6e..0f1a1ba 100644 --- a/plugins/check_real.c +++ b/plugins/check_real.c @@ -438,7 +438,7 @@ print_help (void) printf ("%s\n", _("This plugin will attempt to open an RTSP connection with the host.")); printf ("%s\n", _("Successul connects return STATE_OK, refusals and timeouts return")); printf ("%s\n", _("STATE_CRITICAL, other errors return STATE_UNKNOWN. Successful connects,")); - printf ("%s\n", _("but incorrect reponse messages from the host result in STATE_WARNING return")); + printf ("%s\n", _("but incorrect response messages from the host result in STATE_WARNING return")); printf ("%s\n", _("values.")); printf (UT_SUPPORT); diff --git a/plugins/check_smtp.c b/plugins/check_smtp.c index 6e0e22e..d37c57c 100644 --- a/plugins/check_smtp.c +++ b/plugins/check_smtp.c @@ -293,6 +293,7 @@ main (int argc, char **argv) printf("%s", buffer); } + n = 0; while (n < ncommands) { xasprintf (&cmd_str, "%s%s", commands[n], "\r\n"); my_send(cmd_str, strlen(cmd_str)); @@ -835,7 +836,7 @@ print_help (void) printf("\n"); printf ("%s\n", _("Successul connects return STATE_OK, refusals and timeouts return")); printf ("%s\n", _("STATE_CRITICAL, other errors return STATE_UNKNOWN. Successful")); - printf ("%s\n", _("connects, but incorrect reponse messages from the host result in")); + printf ("%s\n", _("connects, but incorrect response messages from the host result in")); printf ("%s\n", _("STATE_WARNING return values.")); printf (UT_SUPPORT); diff --git a/plugins/check_snmp.c b/plugins/check_snmp.c index da9638c..e8a21a4 100644 --- a/plugins/check_snmp.c +++ b/plugins/check_snmp.c @@ -1207,8 +1207,9 @@ print_help (void) printf (" %s\n", _("Separates output on multiple OID requests")); printf (UT_CONN_TIMEOUT, DEFAULT_SOCKET_TIMEOUT); + printf (" %s\n", _("NOTE the final timeout value is calculated using this formula: timeout_interval * retries + 5")); printf (" %s\n", "-e, --retries=INTEGER"); - printf (" %s\n", _("Number of retries to be used in the requests")); + printf (" %s%i\n", _("Number of retries to be used in the requests, default: "), DEFAULT_RETRIES); printf (" %s\n", "-O, --perf-oids"); printf (" %s\n", _("Label performance data with OIDs instead of --label's")); diff --git a/plugins/check_swap.c b/plugins/check_swap.c index 4d5a407..0ff0c77 100644 --- a/plugins/check_swap.c +++ b/plugins/check_swap.c @@ -51,7 +51,7 @@ const char *email = "devel@monitoring-plugins.org"; # define SWAP_CONVERSION 1 #endif -int check_swap (int usp, float free_swap_mb); +int check_swap (int usp, float free_swap_mb, float total_swap_mb); int process_arguments (int argc, char **argv); int validate_arguments (void); void print_usage (void); @@ -128,7 +128,7 @@ main (int argc, char **argv) percent=100.0; else percent = 100 * (((double) dskused_mb) / ((double) dsktotal_mb)); - result = max_state (result, check_swap (percent, dskfree_mb)); + result = max_state (result, check_swap (percent, dskfree_mb, dsktotal_mb)); if (verbose) xasprintf (&status, "%s [%.0f (%d%%)]", status, dskfree_mb, 100 - percent); } @@ -227,7 +227,7 @@ main (int argc, char **argv) free_swap_mb += dskfree_mb; if (allswaps) { percent = 100 * (((double) dskused_mb) / ((double) dsktotal_mb)); - result = max_state (result, check_swap (percent, dskfree_mb)); + result = max_state (result, check_swap (percent, dskfree_mb, dsktotal_mb)); if (verbose) xasprintf (&status, "%s [%.0f (%d%%)]", status, dskfree_mb, 100 - percent); } @@ -289,7 +289,7 @@ main (int argc, char **argv) if(allswaps && dsktotal_mb > 0){ percent = 100 * (((double) dskused_mb) / ((double) dsktotal_mb)); - result = max_state (result, check_swap (percent, dskfree_mb)); + result = max_state (result, check_swap (percent, dskfree_mb, dsktotal_mb)); if (verbose) { xasprintf (&status, "%s [%.0f (%d%%)]", status, dskfree_mb, 100 - percent); } @@ -328,7 +328,7 @@ main (int argc, char **argv) if(allswaps && dsktotal_mb > 0){ percent = 100 * (((double) dskused_mb) / ((double) dsktotal_mb)); - result = max_state (result, check_swap (percent, dskfree_mb)); + result = max_state (result, check_swap (percent, dskfree_mb, dsktotal_mb)); if (verbose) { xasprintf (&status, "%s [%.0f (%d%%)]", status, dskfree_mb, 100 - percent); } @@ -355,7 +355,7 @@ main (int argc, char **argv) status = "- Swap is either disabled, not present, or of zero size. "; } - result = max_state (result, check_swap (percent_used, free_swap_mb)); + result = max_state (result, check_swap (percent_used, free_swap_mb, total_swap_mb)); printf (_("SWAP %s - %d%% free (%d MB out of %d MB) %s|"), state_text (result), (100 - percent_used), (int) free_swap_mb, (int) total_swap_mb, status); @@ -372,10 +372,10 @@ main (int argc, char **argv) int -check_swap (int usp, float free_swap_mb) +check_swap (int usp, float free_swap_mb, float total_swap_mb) { - if (!free_swap_mb) return no_swap_state; + if (!total_swap_mb) return no_swap_state; int result = STATE_UNKNOWN; float free_swap = free_swap_mb * (1024 * 1024); /* Convert back to bytes as warn and crit specified in bytes */ diff --git a/plugins/check_tcp.c b/plugins/check_tcp.c index 61333bd..1365b9c 100644 --- a/plugins/check_tcp.c +++ b/plugins/check_tcp.c @@ -86,6 +86,11 @@ static char buffer[MAXBUF]; static int expect_mismatch_state = STATE_WARNING; static int match_flags = NP_MATCH_EXACT; +#ifdef HAVE_SSL +static char *sni = NULL; +static int sni_specified = FALSE; +#endif + #define FLAG_SSL 0x01 #define FLAG_VERBOSE 0x02 #define FLAG_TIME_WARN 0x04 @@ -241,7 +246,7 @@ main (int argc, char **argv) #ifdef HAVE_SSL if (flags & FLAG_SSL){ - result = np_net_ssl_init(sd); + result = np_net_ssl_init_with_hostname(sd, (sni_specified ? sni : NULL)); if (result == STATE_OK && check_cert == TRUE) { result = np_net_ssl_check_cert(days_till_exp_warn, days_till_exp_crit); } @@ -401,6 +406,10 @@ process_arguments (int argc, char **argv) int escape = 0; char *temp; + enum { + SNI_OPTION = CHAR_MAX + 1 + }; + int option = 0; static struct option longopts[] = { {"hostname", required_argument, 0, 'H'}, @@ -427,6 +436,7 @@ process_arguments (int argc, char **argv) {"version", no_argument, 0, 'V'}, {"help", no_argument, 0, 'h'}, {"ssl", no_argument, 0, 'S'}, + {"sni", required_argument, 0, SNI_OPTION}, {"certificate", required_argument, 0, 'D'}, {0, 0, 0, 0} }; @@ -602,6 +612,15 @@ process_arguments (int argc, char **argv) flags |= FLAG_SSL; #else die (STATE_UNKNOWN, _("Invalid option - SSL is not available")); +#endif + break; + case SNI_OPTION: +#ifdef HAVE_SSL + flags |= FLAG_SSL; + sni_specified = TRUE; + sni = optarg; +#else + die (STATE_UNKNOWN, _("Invalid option - SSL is not available")); #endif break; case 'A': @@ -671,6 +690,8 @@ print_help (void) printf (" %s\n", _("1st is #days for warning, 2nd is critical (if not specified - 0).")); printf (" %s\n", "-S, --ssl"); printf (" %s\n", _("Use SSL for the connection.")); + printf (" %s\n", "--sni=STRING"); + printf (" %s\n", _("SSL server_name")); #endif printf (UT_WARN_CRIT); diff --git a/plugins/common.h b/plugins/common.h index 8719b50..0f08e2f 100644 --- a/plugins/common.h +++ b/plugins/common.h @@ -174,6 +174,11 @@ * */ +/* MariaDB 10.2 client does not set MYSQL_PORT */ +#ifndef MYSQL_PORT +# define MYSQL_PORT 3306 +#endif + enum { OK = 0, ERROR = -1 @@ -220,4 +225,18 @@ enum { # define __attribute__(x) /* do nothing */ #endif +/* Try sysconf(_SC_OPEN_MAX) first, as it can be higher than OPEN_MAX. + * If that fails and the macro isn't defined, we fall back to an educated + * guess. There's no guarantee that our guess is adequate and the program + * will die with SIGSEGV if it isn't and the upper boundary is breached. */ +#define DEFAULT_MAXFD 256 /* fallback value if no max open files value is set */ +#define MAXFD_LIMIT 8192 /* upper limit of open files */ +#ifdef _SC_OPEN_MAX +static long maxfd = 0; +#elif defined(OPEN_MAX) +# define maxfd OPEN_MAX +#else /* sysconf macro unavailable, so guess (may be wildly inaccurate) */ +# define maxfd DEFAULT_MAXFD +#endif + #endif /* _COMMON_H_ */ diff --git a/plugins/negate.c b/plugins/negate.c index b320e35..50f62d3 100644 --- a/plugins/negate.c +++ b/plugins/negate.c @@ -86,11 +86,9 @@ main (int argc, char **argv) result = cmd_run_array (command_line, &chld_out, &chld_err, 0); } if (chld_err.lines > 0) { - printf ("Error output from command:\n"); for (i = 0; i < chld_err.lines; i++) { - printf ("%s\n", chld_err.line[i]); + fprintf (stderr, "%s\n", chld_err.line[i]); } - exit (STATE_WARNING); } /* Return UNKNOWN or worse if no output is returned */ diff --git a/plugins/picohttpparser/Makefile.am b/plugins/picohttpparser/Makefile.am new file mode 100644 index 0000000..87e0531 --- /dev/null +++ b/plugins/picohttpparser/Makefile.am @@ -0,0 +1,3 @@ +noinst_LIBRARIES = libpicohttpparser.a + +libpicohttpparser_a_SOURCES = picohttpparser.c picohttpparser.h diff --git a/plugins/picohttpparser/Makefile.in b/plugins/picohttpparser/Makefile.in new file mode 100644 index 0000000..1cbeb10 --- /dev/null +++ b/plugins/picohttpparser/Makefile.in @@ -0,0 +1,1612 @@ +# Makefile.in generated by automake 1.11.6 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software +# Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +VPATH = @srcdir@ +am__make_dryrun = \ + { \ + am__dry=no; \ + case $$MAKEFLAGS in \ + *\\[\ \ ]*) \ + echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \ + | grep '^AM OK$$' >/dev/null || am__dry=yes;; \ + *) \ + for am__flg in $$MAKEFLAGS; do \ + case $$am__flg in \ + *=*|--*) ;; \ + *n*) am__dry=yes; break;; \ + esac; \ + done;; \ + esac; \ + test $$am__dry = yes; \ + } +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +subdir = plugins/picohttpparser +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/m4/libcurl.m4 \ + $(top_srcdir)/m4/np_mysqlclient.m4 \ + $(top_srcdir)/m4/uriparser.m4 $(top_srcdir)/gl/m4/00gnulib.m4 \ + $(top_srcdir)/gl/m4/alloca.m4 \ + $(top_srcdir)/gl/m4/arpa_inet_h.m4 \ + $(top_srcdir)/gl/m4/base64.m4 $(top_srcdir)/gl/m4/btowc.m4 \ + $(top_srcdir)/gl/m4/codeset.m4 \ + $(top_srcdir)/gl/m4/configmake.m4 \ + $(top_srcdir)/gl/m4/dirname.m4 \ + $(top_srcdir)/gl/m4/double-slash-root.m4 \ + $(top_srcdir)/gl/m4/eealloc.m4 $(top_srcdir)/gl/m4/environ.m4 \ + $(top_srcdir)/gl/m4/errno_h.m4 $(top_srcdir)/gl/m4/error.m4 \ + $(top_srcdir)/gl/m4/exponentd.m4 \ + $(top_srcdir)/gl/m4/extensions.m4 \ + $(top_srcdir)/gl/m4/extern-inline.m4 \ + $(top_srcdir)/gl/m4/fcntl-o.m4 $(top_srcdir)/gl/m4/float_h.m4 \ + $(top_srcdir)/gl/m4/floorf.m4 \ + $(top_srcdir)/gl/m4/fstypename.m4 \ + $(top_srcdir)/gl/m4/fsusage.m4 \ + $(top_srcdir)/gl/m4/getaddrinfo.m4 \ + $(top_srcdir)/gl/m4/gethostname.m4 \ + $(top_srcdir)/gl/m4/getloadavg.m4 \ + $(top_srcdir)/gl/m4/getopt.m4 $(top_srcdir)/gl/m4/gettext.m4 \ + $(top_srcdir)/gl/m4/glibc21.m4 \ + $(top_srcdir)/gl/m4/gnulib-common.m4 \ + $(top_srcdir)/gl/m4/gnulib-comp.m4 \ + $(top_srcdir)/gl/m4/hostent.m4 $(top_srcdir)/gl/m4/iconv.m4 \ + $(top_srcdir)/gl/m4/idpriv.m4 \ + $(top_srcdir)/gl/m4/include_next.m4 \ + $(top_srcdir)/gl/m4/inet_ntop.m4 \ + $(top_srcdir)/gl/m4/intlmacosx.m4 \ + $(top_srcdir)/gl/m4/intmax_t.m4 \ + $(top_srcdir)/gl/m4/inttypes_h.m4 \ + $(top_srcdir)/gl/m4/langinfo_h.m4 \ + $(top_srcdir)/gl/m4/largefile.m4 $(top_srcdir)/gl/m4/lib-ld.m4 \ + $(top_srcdir)/gl/m4/lib-link.m4 \ + $(top_srcdir)/gl/m4/lib-prefix.m4 \ + $(top_srcdir)/gl/m4/libtool.m4 \ + $(top_srcdir)/gl/m4/localcharset.m4 \ + $(top_srcdir)/gl/m4/locale-fr.m4 \ + $(top_srcdir)/gl/m4/locale-ja.m4 \ + $(top_srcdir)/gl/m4/locale-zh.m4 \ + $(top_srcdir)/gl/m4/locale_h.m4 \ + $(top_srcdir)/gl/m4/localeconv.m4 $(top_srcdir)/gl/m4/lock.m4 \ + $(top_srcdir)/gl/m4/longlong.m4 \ + $(top_srcdir)/gl/m4/ls-mntd-fs.m4 \ + $(top_srcdir)/gl/m4/ltoptions.m4 \ + $(top_srcdir)/gl/m4/ltsugar.m4 \ + $(top_srcdir)/gl/m4/ltversion.m4 \ + $(top_srcdir)/gl/m4/lt~obsolete.m4 \ + $(top_srcdir)/gl/m4/malloc.m4 $(top_srcdir)/gl/m4/malloca.m4 \ + $(top_srcdir)/gl/m4/math_h.m4 $(top_srcdir)/gl/m4/mbrtowc.m4 \ + $(top_srcdir)/gl/m4/mbsinit.m4 \ + $(top_srcdir)/gl/m4/mbstate_t.m4 $(top_srcdir)/gl/m4/mbtowc.m4 \ + $(top_srcdir)/gl/m4/memchr.m4 $(top_srcdir)/gl/m4/mktime.m4 \ + $(top_srcdir)/gl/m4/mmap-anon.m4 \ + $(top_srcdir)/gl/m4/mountlist.m4 \ + $(top_srcdir)/gl/m4/msvc-inval.m4 \ + $(top_srcdir)/gl/m4/msvc-nothrow.m4 \ + $(top_srcdir)/gl/m4/multiarch.m4 \ + $(top_srcdir)/gl/m4/netdb_h.m4 \ + $(top_srcdir)/gl/m4/netinet_in_h.m4 \ + $(top_srcdir)/gl/m4/nl_langinfo.m4 $(top_srcdir)/gl/m4/nls.m4 \ + $(top_srcdir)/gl/m4/nocrash.m4 $(top_srcdir)/gl/m4/off_t.m4 \ + $(top_srcdir)/gl/m4/onceonly.m4 $(top_srcdir)/gl/m4/po.m4 \ + $(top_srcdir)/gl/m4/printf.m4 $(top_srcdir)/gl/m4/progtest.m4 \ + $(top_srcdir)/gl/m4/read.m4 $(top_srcdir)/gl/m4/regex.m4 \ + $(top_srcdir)/gl/m4/safe-read.m4 \ + $(top_srcdir)/gl/m4/servent.m4 $(top_srcdir)/gl/m4/setenv.m4 \ + $(top_srcdir)/gl/m4/sha1.m4 $(top_srcdir)/gl/m4/size_max.m4 \ + $(top_srcdir)/gl/m4/snprintf.m4 \ + $(top_srcdir)/gl/m4/socketlib.m4 \ + $(top_srcdir)/gl/m4/sockets.m4 $(top_srcdir)/gl/m4/socklen.m4 \ + $(top_srcdir)/gl/m4/sockpfaf.m4 $(top_srcdir)/gl/m4/ssize_t.m4 \ + $(top_srcdir)/gl/m4/stdalign.m4 $(top_srcdir)/gl/m4/stdbool.m4 \ + $(top_srcdir)/gl/m4/stddef_h.m4 $(top_srcdir)/gl/m4/stdint.m4 \ + $(top_srcdir)/gl/m4/stdint_h.m4 $(top_srcdir)/gl/m4/stdio_h.m4 \ + $(top_srcdir)/gl/m4/stdlib_h.m4 $(top_srcdir)/gl/m4/strcase.m4 \ + $(top_srcdir)/gl/m4/strcasestr.m4 \ + $(top_srcdir)/gl/m4/strerror.m4 \ + $(top_srcdir)/gl/m4/string_h.m4 \ + $(top_srcdir)/gl/m4/strings_h.m4 \ + $(top_srcdir)/gl/m4/strndup.m4 $(top_srcdir)/gl/m4/strnlen.m4 \ + $(top_srcdir)/gl/m4/strsep.m4 $(top_srcdir)/gl/m4/strstr.m4 \ + $(top_srcdir)/gl/m4/sys_socket_h.m4 \ + $(top_srcdir)/gl/m4/sys_types_h.m4 \ + $(top_srcdir)/gl/m4/sys_uio_h.m4 \ + $(top_srcdir)/gl/m4/threadlib.m4 $(top_srcdir)/gl/m4/time_h.m4 \ + $(top_srcdir)/gl/m4/time_r.m4 $(top_srcdir)/gl/m4/timegm.m4 \ + $(top_srcdir)/gl/m4/unistd_h.m4 \ + $(top_srcdir)/gl/m4/vasnprintf.m4 \ + $(top_srcdir)/gl/m4/vasprintf.m4 \ + $(top_srcdir)/gl/m4/vsnprintf.m4 \ + $(top_srcdir)/gl/m4/warn-on-use.m4 \ + $(top_srcdir)/gl/m4/wchar_h.m4 $(top_srcdir)/gl/m4/wchar_t.m4 \ + $(top_srcdir)/gl/m4/wcrtomb.m4 $(top_srcdir)/gl/m4/wctype_h.m4 \ + $(top_srcdir)/gl/m4/wint_t.m4 $(top_srcdir)/gl/m4/xalloc.m4 \ + $(top_srcdir)/gl/m4/xsize.m4 $(top_srcdir)/gl/m4/xstrndup.m4 \ + $(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(SHELL) $(top_srcdir)/build-aux/mkinstalldirs +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +LIBRARIES = $(noinst_LIBRARIES) +libpicohttpparser_a_AR = $(AR) $(ARFLAGS) +libpicohttpparser_a_LIBADD = +am_libpicohttpparser_a_OBJECTS = picohttpparser.$(OBJEXT) +libpicohttpparser_a_OBJECTS = $(am_libpicohttpparser_a_OBJECTS) +DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) +depcomp = $(SHELL) $(top_srcdir)/build-aux/depcomp +am__depfiles_maybe = depfiles +am__mv = mv -f +COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ + $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ + $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +CCLD = $(CC) +LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \ + $(LDFLAGS) -o $@ +SOURCES = $(libpicohttpparser_a_SOURCES) +DIST_SOURCES = $(libpicohttpparser_a_SOURCES) +am__can_run_installinfo = \ + case $$AM_UPDATE_INFO_DIR in \ + n|no|NO) false;; \ + *) (install-info --version) >/dev/null 2>&1;; \ + esac +ETAGS = etags +CTAGS = ctags +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +pkglibexecdir = @pkglibexecdir@ +ACLOCAL = @ACLOCAL@ +ALLOCA = @ALLOCA@ +ALLOCA_H = @ALLOCA_H@ +AMTAR = @AMTAR@ +APPLE_UNIVERSAL_BUILD = @APPLE_UNIVERSAL_BUILD@ +AR = @AR@ +ARFLAGS = @ARFLAGS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +BASENAME = @BASENAME@ +BITSIZEOF_PTRDIFF_T = @BITSIZEOF_PTRDIFF_T@ +BITSIZEOF_SIG_ATOMIC_T = @BITSIZEOF_SIG_ATOMIC_T@ +BITSIZEOF_SIZE_T = @BITSIZEOF_SIZE_T@ +BITSIZEOF_WCHAR_T = @BITSIZEOF_WCHAR_T@ +BITSIZEOF_WINT_T = @BITSIZEOF_WINT_T@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DBILIBS = @DBILIBS@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DEPLIBS = @DEPLIBS@ +DLLTOOL = @DLLTOOL@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EMULTIHOP_HIDDEN = @EMULTIHOP_HIDDEN@ +EMULTIHOP_VALUE = @EMULTIHOP_VALUE@ +ENOLINK_HIDDEN = @ENOLINK_HIDDEN@ +ENOLINK_VALUE = @ENOLINK_VALUE@ +EOVERFLOW_HIDDEN = @EOVERFLOW_HIDDEN@ +EOVERFLOW_VALUE = @EOVERFLOW_VALUE@ +ERRNO_H = @ERRNO_H@ +EXEEXT = @EXEEXT@ +EXTRAS = @EXTRAS@ +EXTRAS_ROOT = @EXTRAS_ROOT@ +EXTRA_NETOBJS = @EXTRA_NETOBJS@ +EXTRA_TEST = @EXTRA_TEST@ +FGREP = @FGREP@ +FLOAT_H = @FLOAT_H@ +FLOORF_LIBM = @FLOORF_LIBM@ +GETADDRINFO_LIB = @GETADDRINFO_LIB@ +GETHOSTNAME_LIB = @GETHOSTNAME_LIB@ +GETLOADAVG_LIBS = @GETLOADAVG_LIBS@ +GETOPT_H = @GETOPT_H@ +GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@ +GLIBC21 = @GLIBC21@ +GMSGFMT = @GMSGFMT@ +GMSGFMT_015 = @GMSGFMT_015@ +GNULIB_ACCEPT = @GNULIB_ACCEPT@ +GNULIB_ACCEPT4 = @GNULIB_ACCEPT4@ +GNULIB_ACOSF = @GNULIB_ACOSF@ +GNULIB_ACOSL = @GNULIB_ACOSL@ +GNULIB_ASINF = @GNULIB_ASINF@ +GNULIB_ASINL = @GNULIB_ASINL@ +GNULIB_ATAN2F = @GNULIB_ATAN2F@ +GNULIB_ATANF = @GNULIB_ATANF@ +GNULIB_ATANL = @GNULIB_ATANL@ +GNULIB_ATOLL = @GNULIB_ATOLL@ +GNULIB_BIND = @GNULIB_BIND@ +GNULIB_BTOWC = @GNULIB_BTOWC@ +GNULIB_CALLOC_POSIX = @GNULIB_CALLOC_POSIX@ +GNULIB_CANONICALIZE_FILE_NAME = @GNULIB_CANONICALIZE_FILE_NAME@ +GNULIB_CBRT = @GNULIB_CBRT@ +GNULIB_CBRTF = @GNULIB_CBRTF@ +GNULIB_CBRTL = @GNULIB_CBRTL@ +GNULIB_CEIL = @GNULIB_CEIL@ +GNULIB_CEILF = @GNULIB_CEILF@ +GNULIB_CEILL = @GNULIB_CEILL@ +GNULIB_CHDIR = @GNULIB_CHDIR@ +GNULIB_CHOWN = @GNULIB_CHOWN@ +GNULIB_CLOSE = @GNULIB_CLOSE@ +GNULIB_CONNECT = @GNULIB_CONNECT@ +GNULIB_COPYSIGN = @GNULIB_COPYSIGN@ +GNULIB_COPYSIGNF = @GNULIB_COPYSIGNF@ +GNULIB_COPYSIGNL = @GNULIB_COPYSIGNL@ +GNULIB_COSF = @GNULIB_COSF@ +GNULIB_COSHF = @GNULIB_COSHF@ +GNULIB_COSL = @GNULIB_COSL@ +GNULIB_DPRINTF = @GNULIB_DPRINTF@ +GNULIB_DUP = @GNULIB_DUP@ +GNULIB_DUP2 = @GNULIB_DUP2@ +GNULIB_DUP3 = @GNULIB_DUP3@ +GNULIB_DUPLOCALE = @GNULIB_DUPLOCALE@ +GNULIB_ENVIRON = @GNULIB_ENVIRON@ +GNULIB_EUIDACCESS = @GNULIB_EUIDACCESS@ +GNULIB_EXP2 = @GNULIB_EXP2@ +GNULIB_EXP2F = @GNULIB_EXP2F@ +GNULIB_EXP2L = @GNULIB_EXP2L@ +GNULIB_EXPF = @GNULIB_EXPF@ +GNULIB_EXPL = @GNULIB_EXPL@ +GNULIB_EXPM1 = @GNULIB_EXPM1@ +GNULIB_EXPM1F = @GNULIB_EXPM1F@ +GNULIB_EXPM1L = @GNULIB_EXPM1L@ +GNULIB_FABSF = @GNULIB_FABSF@ +GNULIB_FABSL = @GNULIB_FABSL@ +GNULIB_FACCESSAT = @GNULIB_FACCESSAT@ +GNULIB_FCHDIR = @GNULIB_FCHDIR@ +GNULIB_FCHOWNAT = @GNULIB_FCHOWNAT@ +GNULIB_FCLOSE = @GNULIB_FCLOSE@ +GNULIB_FDATASYNC = @GNULIB_FDATASYNC@ +GNULIB_FDOPEN = @GNULIB_FDOPEN@ +GNULIB_FFLUSH = @GNULIB_FFLUSH@ +GNULIB_FFS = @GNULIB_FFS@ +GNULIB_FFSL = @GNULIB_FFSL@ +GNULIB_FFSLL = @GNULIB_FFSLL@ +GNULIB_FGETC = @GNULIB_FGETC@ +GNULIB_FGETS = @GNULIB_FGETS@ +GNULIB_FLOOR = @GNULIB_FLOOR@ +GNULIB_FLOORF = @GNULIB_FLOORF@ +GNULIB_FLOORL = @GNULIB_FLOORL@ +GNULIB_FMA = @GNULIB_FMA@ +GNULIB_FMAF = @GNULIB_FMAF@ +GNULIB_FMAL = @GNULIB_FMAL@ +GNULIB_FMOD = @GNULIB_FMOD@ +GNULIB_FMODF = @GNULIB_FMODF@ +GNULIB_FMODL = @GNULIB_FMODL@ +GNULIB_FOPEN = @GNULIB_FOPEN@ +GNULIB_FPRINTF = @GNULIB_FPRINTF@ +GNULIB_FPRINTF_POSIX = @GNULIB_FPRINTF_POSIX@ +GNULIB_FPURGE = @GNULIB_FPURGE@ +GNULIB_FPUTC = @GNULIB_FPUTC@ +GNULIB_FPUTS = @GNULIB_FPUTS@ +GNULIB_FREAD = @GNULIB_FREAD@ +GNULIB_FREOPEN = @GNULIB_FREOPEN@ +GNULIB_FREXP = @GNULIB_FREXP@ +GNULIB_FREXPF = @GNULIB_FREXPF@ +GNULIB_FREXPL = @GNULIB_FREXPL@ +GNULIB_FSCANF = @GNULIB_FSCANF@ +GNULIB_FSEEK = @GNULIB_FSEEK@ +GNULIB_FSEEKO = @GNULIB_FSEEKO@ +GNULIB_FSYNC = @GNULIB_FSYNC@ +GNULIB_FTELL = @GNULIB_FTELL@ +GNULIB_FTELLO = @GNULIB_FTELLO@ +GNULIB_FTRUNCATE = @GNULIB_FTRUNCATE@ +GNULIB_FWRITE = @GNULIB_FWRITE@ +GNULIB_GETADDRINFO = @GNULIB_GETADDRINFO@ +GNULIB_GETC = @GNULIB_GETC@ +GNULIB_GETCHAR = @GNULIB_GETCHAR@ +GNULIB_GETCWD = @GNULIB_GETCWD@ +GNULIB_GETDELIM = @GNULIB_GETDELIM@ +GNULIB_GETDOMAINNAME = @GNULIB_GETDOMAINNAME@ +GNULIB_GETDTABLESIZE = @GNULIB_GETDTABLESIZE@ +GNULIB_GETGROUPS = @GNULIB_GETGROUPS@ +GNULIB_GETHOSTNAME = @GNULIB_GETHOSTNAME@ +GNULIB_GETLINE = @GNULIB_GETLINE@ +GNULIB_GETLOADAVG = @GNULIB_GETLOADAVG@ +GNULIB_GETLOGIN = @GNULIB_GETLOGIN@ +GNULIB_GETLOGIN_R = @GNULIB_GETLOGIN_R@ +GNULIB_GETPAGESIZE = @GNULIB_GETPAGESIZE@ +GNULIB_GETPEERNAME = @GNULIB_GETPEERNAME@ +GNULIB_GETSOCKNAME = @GNULIB_GETSOCKNAME@ +GNULIB_GETSOCKOPT = @GNULIB_GETSOCKOPT@ +GNULIB_GETSUBOPT = @GNULIB_GETSUBOPT@ +GNULIB_GETUSERSHELL = @GNULIB_GETUSERSHELL@ +GNULIB_GL_UNISTD_H_GETOPT = @GNULIB_GL_UNISTD_H_GETOPT@ +GNULIB_GRANTPT = @GNULIB_GRANTPT@ +GNULIB_GROUP_MEMBER = @GNULIB_GROUP_MEMBER@ +GNULIB_HYPOT = @GNULIB_HYPOT@ +GNULIB_HYPOTF = @GNULIB_HYPOTF@ +GNULIB_HYPOTL = @GNULIB_HYPOTL@ +GNULIB_ILOGB = @GNULIB_ILOGB@ +GNULIB_ILOGBF = @GNULIB_ILOGBF@ +GNULIB_ILOGBL = @GNULIB_ILOGBL@ +GNULIB_INET_NTOP = @GNULIB_INET_NTOP@ +GNULIB_INET_PTON = @GNULIB_INET_PTON@ +GNULIB_ISATTY = @GNULIB_ISATTY@ +GNULIB_ISFINITE = @GNULIB_ISFINITE@ +GNULIB_ISINF = @GNULIB_ISINF@ +GNULIB_ISNAN = @GNULIB_ISNAN@ +GNULIB_ISNAND = @GNULIB_ISNAND@ +GNULIB_ISNANF = @GNULIB_ISNANF@ +GNULIB_ISNANL = @GNULIB_ISNANL@ +GNULIB_ISWBLANK = @GNULIB_ISWBLANK@ +GNULIB_ISWCTYPE = @GNULIB_ISWCTYPE@ +GNULIB_LCHOWN = @GNULIB_LCHOWN@ +GNULIB_LDEXPF = @GNULIB_LDEXPF@ +GNULIB_LDEXPL = @GNULIB_LDEXPL@ +GNULIB_LINK = @GNULIB_LINK@ +GNULIB_LINKAT = @GNULIB_LINKAT@ +GNULIB_LISTEN = @GNULIB_LISTEN@ +GNULIB_LOCALECONV = @GNULIB_LOCALECONV@ +GNULIB_LOG = @GNULIB_LOG@ +GNULIB_LOG10 = @GNULIB_LOG10@ +GNULIB_LOG10F = @GNULIB_LOG10F@ +GNULIB_LOG10L = @GNULIB_LOG10L@ +GNULIB_LOG1P = @GNULIB_LOG1P@ +GNULIB_LOG1PF = @GNULIB_LOG1PF@ +GNULIB_LOG1PL = @GNULIB_LOG1PL@ +GNULIB_LOG2 = @GNULIB_LOG2@ +GNULIB_LOG2F = @GNULIB_LOG2F@ +GNULIB_LOG2L = @GNULIB_LOG2L@ +GNULIB_LOGB = @GNULIB_LOGB@ +GNULIB_LOGBF = @GNULIB_LOGBF@ +GNULIB_LOGBL = @GNULIB_LOGBL@ +GNULIB_LOGF = @GNULIB_LOGF@ +GNULIB_LOGL = @GNULIB_LOGL@ +GNULIB_LSEEK = @GNULIB_LSEEK@ +GNULIB_MALLOC_POSIX = @GNULIB_MALLOC_POSIX@ +GNULIB_MBRLEN = @GNULIB_MBRLEN@ +GNULIB_MBRTOWC = @GNULIB_MBRTOWC@ +GNULIB_MBSCASECMP = @GNULIB_MBSCASECMP@ +GNULIB_MBSCASESTR = @GNULIB_MBSCASESTR@ +GNULIB_MBSCHR = @GNULIB_MBSCHR@ +GNULIB_MBSCSPN = @GNULIB_MBSCSPN@ +GNULIB_MBSINIT = @GNULIB_MBSINIT@ +GNULIB_MBSLEN = @GNULIB_MBSLEN@ +GNULIB_MBSNCASECMP = @GNULIB_MBSNCASECMP@ +GNULIB_MBSNLEN = @GNULIB_MBSNLEN@ +GNULIB_MBSNRTOWCS = @GNULIB_MBSNRTOWCS@ +GNULIB_MBSPBRK = @GNULIB_MBSPBRK@ +GNULIB_MBSPCASECMP = @GNULIB_MBSPCASECMP@ +GNULIB_MBSRCHR = @GNULIB_MBSRCHR@ +GNULIB_MBSRTOWCS = @GNULIB_MBSRTOWCS@ +GNULIB_MBSSEP = @GNULIB_MBSSEP@ +GNULIB_MBSSPN = @GNULIB_MBSSPN@ +GNULIB_MBSSTR = @GNULIB_MBSSTR@ +GNULIB_MBSTOK_R = @GNULIB_MBSTOK_R@ +GNULIB_MBTOWC = @GNULIB_MBTOWC@ +GNULIB_MEMCHR = @GNULIB_MEMCHR@ +GNULIB_MEMMEM = @GNULIB_MEMMEM@ +GNULIB_MEMPCPY = @GNULIB_MEMPCPY@ +GNULIB_MEMRCHR = @GNULIB_MEMRCHR@ +GNULIB_MKDTEMP = @GNULIB_MKDTEMP@ +GNULIB_MKOSTEMP = @GNULIB_MKOSTEMP@ +GNULIB_MKOSTEMPS = @GNULIB_MKOSTEMPS@ +GNULIB_MKSTEMP = @GNULIB_MKSTEMP@ +GNULIB_MKSTEMPS = @GNULIB_MKSTEMPS@ +GNULIB_MKTIME = @GNULIB_MKTIME@ +GNULIB_MODF = @GNULIB_MODF@ +GNULIB_MODFF = @GNULIB_MODFF@ +GNULIB_MODFL = @GNULIB_MODFL@ +GNULIB_NANOSLEEP = @GNULIB_NANOSLEEP@ +GNULIB_NL_LANGINFO = @GNULIB_NL_LANGINFO@ +GNULIB_OBSTACK_PRINTF = @GNULIB_OBSTACK_PRINTF@ +GNULIB_OBSTACK_PRINTF_POSIX = @GNULIB_OBSTACK_PRINTF_POSIX@ +GNULIB_PCLOSE = @GNULIB_PCLOSE@ +GNULIB_PERROR = @GNULIB_PERROR@ +GNULIB_PIPE = @GNULIB_PIPE@ +GNULIB_PIPE2 = @GNULIB_PIPE2@ +GNULIB_POPEN = @GNULIB_POPEN@ +GNULIB_POSIX_OPENPT = @GNULIB_POSIX_OPENPT@ +GNULIB_POWF = @GNULIB_POWF@ +GNULIB_PREAD = @GNULIB_PREAD@ +GNULIB_PRINTF = @GNULIB_PRINTF@ +GNULIB_PRINTF_POSIX = @GNULIB_PRINTF_POSIX@ +GNULIB_PTSNAME = @GNULIB_PTSNAME@ +GNULIB_PTSNAME_R = @GNULIB_PTSNAME_R@ +GNULIB_PUTC = @GNULIB_PUTC@ +GNULIB_PUTCHAR = @GNULIB_PUTCHAR@ +GNULIB_PUTENV = @GNULIB_PUTENV@ +GNULIB_PUTS = @GNULIB_PUTS@ +GNULIB_PWRITE = @GNULIB_PWRITE@ +GNULIB_RANDOM = @GNULIB_RANDOM@ +GNULIB_RANDOM_R = @GNULIB_RANDOM_R@ +GNULIB_RAWMEMCHR = @GNULIB_RAWMEMCHR@ +GNULIB_READ = @GNULIB_READ@ +GNULIB_READLINK = @GNULIB_READLINK@ +GNULIB_READLINKAT = @GNULIB_READLINKAT@ +GNULIB_REALLOC_POSIX = @GNULIB_REALLOC_POSIX@ +GNULIB_REALPATH = @GNULIB_REALPATH@ +GNULIB_RECV = @GNULIB_RECV@ +GNULIB_RECVFROM = @GNULIB_RECVFROM@ +GNULIB_REMAINDER = @GNULIB_REMAINDER@ +GNULIB_REMAINDERF = @GNULIB_REMAINDERF@ +GNULIB_REMAINDERL = @GNULIB_REMAINDERL@ +GNULIB_REMOVE = @GNULIB_REMOVE@ +GNULIB_RENAME = @GNULIB_RENAME@ +GNULIB_RENAMEAT = @GNULIB_RENAMEAT@ +GNULIB_RINT = @GNULIB_RINT@ +GNULIB_RINTF = @GNULIB_RINTF@ +GNULIB_RINTL = @GNULIB_RINTL@ +GNULIB_RMDIR = @GNULIB_RMDIR@ +GNULIB_ROUND = @GNULIB_ROUND@ +GNULIB_ROUNDF = @GNULIB_ROUNDF@ +GNULIB_ROUNDL = @GNULIB_ROUNDL@ +GNULIB_RPMATCH = @GNULIB_RPMATCH@ +GNULIB_SCANF = @GNULIB_SCANF@ +GNULIB_SECURE_GETENV = @GNULIB_SECURE_GETENV@ +GNULIB_SEND = @GNULIB_SEND@ +GNULIB_SENDTO = @GNULIB_SENDTO@ +GNULIB_SETENV = @GNULIB_SETENV@ +GNULIB_SETHOSTNAME = @GNULIB_SETHOSTNAME@ +GNULIB_SETLOCALE = @GNULIB_SETLOCALE@ +GNULIB_SETSOCKOPT = @GNULIB_SETSOCKOPT@ +GNULIB_SHUTDOWN = @GNULIB_SHUTDOWN@ +GNULIB_SIGNBIT = @GNULIB_SIGNBIT@ +GNULIB_SINF = @GNULIB_SINF@ +GNULIB_SINHF = @GNULIB_SINHF@ +GNULIB_SINL = @GNULIB_SINL@ +GNULIB_SLEEP = @GNULIB_SLEEP@ +GNULIB_SNPRINTF = @GNULIB_SNPRINTF@ +GNULIB_SOCKET = @GNULIB_SOCKET@ +GNULIB_SPRINTF_POSIX = @GNULIB_SPRINTF_POSIX@ +GNULIB_SQRTF = @GNULIB_SQRTF@ +GNULIB_SQRTL = @GNULIB_SQRTL@ +GNULIB_STDIO_H_NONBLOCKING = @GNULIB_STDIO_H_NONBLOCKING@ +GNULIB_STDIO_H_SIGPIPE = @GNULIB_STDIO_H_SIGPIPE@ +GNULIB_STPCPY = @GNULIB_STPCPY@ +GNULIB_STPNCPY = @GNULIB_STPNCPY@ +GNULIB_STRCASESTR = @GNULIB_STRCASESTR@ +GNULIB_STRCHRNUL = @GNULIB_STRCHRNUL@ +GNULIB_STRDUP = @GNULIB_STRDUP@ +GNULIB_STRERROR = @GNULIB_STRERROR@ +GNULIB_STRERROR_R = @GNULIB_STRERROR_R@ +GNULIB_STRNCAT = @GNULIB_STRNCAT@ +GNULIB_STRNDUP = @GNULIB_STRNDUP@ +GNULIB_STRNLEN = @GNULIB_STRNLEN@ +GNULIB_STRPBRK = @GNULIB_STRPBRK@ +GNULIB_STRPTIME = @GNULIB_STRPTIME@ +GNULIB_STRSEP = @GNULIB_STRSEP@ +GNULIB_STRSIGNAL = @GNULIB_STRSIGNAL@ +GNULIB_STRSTR = @GNULIB_STRSTR@ +GNULIB_STRTOD = @GNULIB_STRTOD@ +GNULIB_STRTOK_R = @GNULIB_STRTOK_R@ +GNULIB_STRTOLL = @GNULIB_STRTOLL@ +GNULIB_STRTOULL = @GNULIB_STRTOULL@ +GNULIB_STRVERSCMP = @GNULIB_STRVERSCMP@ +GNULIB_SYMLINK = @GNULIB_SYMLINK@ +GNULIB_SYMLINKAT = @GNULIB_SYMLINKAT@ +GNULIB_SYSTEM_POSIX = @GNULIB_SYSTEM_POSIX@ +GNULIB_TANF = @GNULIB_TANF@ +GNULIB_TANHF = @GNULIB_TANHF@ +GNULIB_TANL = @GNULIB_TANL@ +GNULIB_TIMEGM = @GNULIB_TIMEGM@ +GNULIB_TIME_R = @GNULIB_TIME_R@ +GNULIB_TMPFILE = @GNULIB_TMPFILE@ +GNULIB_TOWCTRANS = @GNULIB_TOWCTRANS@ +GNULIB_TRUNC = @GNULIB_TRUNC@ +GNULIB_TRUNCF = @GNULIB_TRUNCF@ +GNULIB_TRUNCL = @GNULIB_TRUNCL@ +GNULIB_TTYNAME_R = @GNULIB_TTYNAME_R@ +GNULIB_UNISTD_H_NONBLOCKING = @GNULIB_UNISTD_H_NONBLOCKING@ +GNULIB_UNISTD_H_SIGPIPE = @GNULIB_UNISTD_H_SIGPIPE@ +GNULIB_UNLINK = @GNULIB_UNLINK@ +GNULIB_UNLINKAT = @GNULIB_UNLINKAT@ +GNULIB_UNLOCKPT = @GNULIB_UNLOCKPT@ +GNULIB_UNSETENV = @GNULIB_UNSETENV@ +GNULIB_USLEEP = @GNULIB_USLEEP@ +GNULIB_VASPRINTF = @GNULIB_VASPRINTF@ +GNULIB_VDPRINTF = @GNULIB_VDPRINTF@ +GNULIB_VFPRINTF = @GNULIB_VFPRINTF@ +GNULIB_VFPRINTF_POSIX = @GNULIB_VFPRINTF_POSIX@ +GNULIB_VFSCANF = @GNULIB_VFSCANF@ +GNULIB_VPRINTF = @GNULIB_VPRINTF@ +GNULIB_VPRINTF_POSIX = @GNULIB_VPRINTF_POSIX@ +GNULIB_VSCANF = @GNULIB_VSCANF@ +GNULIB_VSNPRINTF = @GNULIB_VSNPRINTF@ +GNULIB_VSPRINTF_POSIX = @GNULIB_VSPRINTF_POSIX@ +GNULIB_WCPCPY = @GNULIB_WCPCPY@ +GNULIB_WCPNCPY = @GNULIB_WCPNCPY@ +GNULIB_WCRTOMB = @GNULIB_WCRTOMB@ +GNULIB_WCSCASECMP = @GNULIB_WCSCASECMP@ +GNULIB_WCSCAT = @GNULIB_WCSCAT@ +GNULIB_WCSCHR = @GNULIB_WCSCHR@ +GNULIB_WCSCMP = @GNULIB_WCSCMP@ +GNULIB_WCSCOLL = @GNULIB_WCSCOLL@ +GNULIB_WCSCPY = @GNULIB_WCSCPY@ +GNULIB_WCSCSPN = @GNULIB_WCSCSPN@ +GNULIB_WCSDUP = @GNULIB_WCSDUP@ +GNULIB_WCSLEN = @GNULIB_WCSLEN@ +GNULIB_WCSNCASECMP = @GNULIB_WCSNCASECMP@ +GNULIB_WCSNCAT = @GNULIB_WCSNCAT@ +GNULIB_WCSNCMP = @GNULIB_WCSNCMP@ +GNULIB_WCSNCPY = @GNULIB_WCSNCPY@ +GNULIB_WCSNLEN = @GNULIB_WCSNLEN@ +GNULIB_WCSNRTOMBS = @GNULIB_WCSNRTOMBS@ +GNULIB_WCSPBRK = @GNULIB_WCSPBRK@ +GNULIB_WCSRCHR = @GNULIB_WCSRCHR@ +GNULIB_WCSRTOMBS = @GNULIB_WCSRTOMBS@ +GNULIB_WCSSPN = @GNULIB_WCSSPN@ +GNULIB_WCSSTR = @GNULIB_WCSSTR@ +GNULIB_WCSTOK = @GNULIB_WCSTOK@ +GNULIB_WCSWIDTH = @GNULIB_WCSWIDTH@ +GNULIB_WCSXFRM = @GNULIB_WCSXFRM@ +GNULIB_WCTOB = @GNULIB_WCTOB@ +GNULIB_WCTOMB = @GNULIB_WCTOMB@ +GNULIB_WCTRANS = @GNULIB_WCTRANS@ +GNULIB_WCTYPE = @GNULIB_WCTYPE@ +GNULIB_WCWIDTH = @GNULIB_WCWIDTH@ +GNULIB_WMEMCHR = @GNULIB_WMEMCHR@ +GNULIB_WMEMCMP = @GNULIB_WMEMCMP@ +GNULIB_WMEMCPY = @GNULIB_WMEMCPY@ +GNULIB_WMEMMOVE = @GNULIB_WMEMMOVE@ +GNULIB_WMEMSET = @GNULIB_WMEMSET@ +GNULIB_WRITE = @GNULIB_WRITE@ +GNULIB__EXIT = @GNULIB__EXIT@ +GREP = @GREP@ +HAVE_ACCEPT4 = @HAVE_ACCEPT4@ +HAVE_ACOSF = @HAVE_ACOSF@ +HAVE_ACOSL = @HAVE_ACOSL@ +HAVE_ARPA_INET_H = @HAVE_ARPA_INET_H@ +HAVE_ASINF = @HAVE_ASINF@ +HAVE_ASINL = @HAVE_ASINL@ +HAVE_ATAN2F = @HAVE_ATAN2F@ +HAVE_ATANF = @HAVE_ATANF@ +HAVE_ATANL = @HAVE_ATANL@ +HAVE_ATOLL = @HAVE_ATOLL@ +HAVE_BTOWC = @HAVE_BTOWC@ +HAVE_CANONICALIZE_FILE_NAME = @HAVE_CANONICALIZE_FILE_NAME@ +HAVE_CBRT = @HAVE_CBRT@ +HAVE_CBRTF = @HAVE_CBRTF@ +HAVE_CBRTL = @HAVE_CBRTL@ +HAVE_CHOWN = @HAVE_CHOWN@ +HAVE_COPYSIGN = @HAVE_COPYSIGN@ +HAVE_COPYSIGNL = @HAVE_COPYSIGNL@ +HAVE_COSF = @HAVE_COSF@ +HAVE_COSHF = @HAVE_COSHF@ +HAVE_COSL = @HAVE_COSL@ +HAVE_DECL_ACOSL = @HAVE_DECL_ACOSL@ +HAVE_DECL_ASINL = @HAVE_DECL_ASINL@ +HAVE_DECL_ATANL = @HAVE_DECL_ATANL@ +HAVE_DECL_CBRTF = @HAVE_DECL_CBRTF@ +HAVE_DECL_CBRTL = @HAVE_DECL_CBRTL@ +HAVE_DECL_CEILF = @HAVE_DECL_CEILF@ +HAVE_DECL_CEILL = @HAVE_DECL_CEILL@ +HAVE_DECL_COPYSIGNF = @HAVE_DECL_COPYSIGNF@ +HAVE_DECL_COSL = @HAVE_DECL_COSL@ +HAVE_DECL_ENVIRON = @HAVE_DECL_ENVIRON@ +HAVE_DECL_EXP2 = @HAVE_DECL_EXP2@ +HAVE_DECL_EXP2F = @HAVE_DECL_EXP2F@ +HAVE_DECL_EXP2L = @HAVE_DECL_EXP2L@ +HAVE_DECL_EXPL = @HAVE_DECL_EXPL@ +HAVE_DECL_EXPM1L = @HAVE_DECL_EXPM1L@ +HAVE_DECL_FCHDIR = @HAVE_DECL_FCHDIR@ +HAVE_DECL_FDATASYNC = @HAVE_DECL_FDATASYNC@ +HAVE_DECL_FLOORF = @HAVE_DECL_FLOORF@ +HAVE_DECL_FLOORL = @HAVE_DECL_FLOORL@ +HAVE_DECL_FPURGE = @HAVE_DECL_FPURGE@ +HAVE_DECL_FREEADDRINFO = @HAVE_DECL_FREEADDRINFO@ +HAVE_DECL_FREXPL = @HAVE_DECL_FREXPL@ +HAVE_DECL_FSEEKO = @HAVE_DECL_FSEEKO@ +HAVE_DECL_FTELLO = @HAVE_DECL_FTELLO@ +HAVE_DECL_GAI_STRERROR = @HAVE_DECL_GAI_STRERROR@ +HAVE_DECL_GETADDRINFO = @HAVE_DECL_GETADDRINFO@ +HAVE_DECL_GETDELIM = @HAVE_DECL_GETDELIM@ +HAVE_DECL_GETDOMAINNAME = @HAVE_DECL_GETDOMAINNAME@ +HAVE_DECL_GETLINE = @HAVE_DECL_GETLINE@ +HAVE_DECL_GETLOADAVG = @HAVE_DECL_GETLOADAVG@ +HAVE_DECL_GETLOGIN_R = @HAVE_DECL_GETLOGIN_R@ +HAVE_DECL_GETNAMEINFO = @HAVE_DECL_GETNAMEINFO@ +HAVE_DECL_GETPAGESIZE = @HAVE_DECL_GETPAGESIZE@ +HAVE_DECL_GETUSERSHELL = @HAVE_DECL_GETUSERSHELL@ +HAVE_DECL_INET_NTOP = @HAVE_DECL_INET_NTOP@ +HAVE_DECL_INET_PTON = @HAVE_DECL_INET_PTON@ +HAVE_DECL_LDEXPL = @HAVE_DECL_LDEXPL@ +HAVE_DECL_LOCALTIME_R = @HAVE_DECL_LOCALTIME_R@ +HAVE_DECL_LOG10L = @HAVE_DECL_LOG10L@ +HAVE_DECL_LOG2 = @HAVE_DECL_LOG2@ +HAVE_DECL_LOG2F = @HAVE_DECL_LOG2F@ +HAVE_DECL_LOG2L = @HAVE_DECL_LOG2L@ +HAVE_DECL_LOGB = @HAVE_DECL_LOGB@ +HAVE_DECL_LOGL = @HAVE_DECL_LOGL@ +HAVE_DECL_MEMMEM = @HAVE_DECL_MEMMEM@ +HAVE_DECL_MEMRCHR = @HAVE_DECL_MEMRCHR@ +HAVE_DECL_OBSTACK_PRINTF = @HAVE_DECL_OBSTACK_PRINTF@ +HAVE_DECL_REMAINDER = @HAVE_DECL_REMAINDER@ +HAVE_DECL_REMAINDERL = @HAVE_DECL_REMAINDERL@ +HAVE_DECL_RINTF = @HAVE_DECL_RINTF@ +HAVE_DECL_ROUND = @HAVE_DECL_ROUND@ +HAVE_DECL_ROUNDF = @HAVE_DECL_ROUNDF@ +HAVE_DECL_ROUNDL = @HAVE_DECL_ROUNDL@ +HAVE_DECL_SETENV = @HAVE_DECL_SETENV@ +HAVE_DECL_SETHOSTNAME = @HAVE_DECL_SETHOSTNAME@ +HAVE_DECL_SINL = @HAVE_DECL_SINL@ +HAVE_DECL_SNPRINTF = @HAVE_DECL_SNPRINTF@ +HAVE_DECL_SQRTL = @HAVE_DECL_SQRTL@ +HAVE_DECL_STRDUP = @HAVE_DECL_STRDUP@ +HAVE_DECL_STRERROR_R = @HAVE_DECL_STRERROR_R@ +HAVE_DECL_STRNCASECMP = @HAVE_DECL_STRNCASECMP@ +HAVE_DECL_STRNDUP = @HAVE_DECL_STRNDUP@ +HAVE_DECL_STRNLEN = @HAVE_DECL_STRNLEN@ +HAVE_DECL_STRSIGNAL = @HAVE_DECL_STRSIGNAL@ +HAVE_DECL_STRTOK_R = @HAVE_DECL_STRTOK_R@ +HAVE_DECL_TANL = @HAVE_DECL_TANL@ +HAVE_DECL_TRUNC = @HAVE_DECL_TRUNC@ +HAVE_DECL_TRUNCF = @HAVE_DECL_TRUNCF@ +HAVE_DECL_TRUNCL = @HAVE_DECL_TRUNCL@ +HAVE_DECL_TTYNAME_R = @HAVE_DECL_TTYNAME_R@ +HAVE_DECL_UNSETENV = @HAVE_DECL_UNSETENV@ +HAVE_DECL_VSNPRINTF = @HAVE_DECL_VSNPRINTF@ +HAVE_DECL_WCTOB = @HAVE_DECL_WCTOB@ +HAVE_DECL_WCWIDTH = @HAVE_DECL_WCWIDTH@ +HAVE_DPRINTF = @HAVE_DPRINTF@ +HAVE_DUP2 = @HAVE_DUP2@ +HAVE_DUP3 = @HAVE_DUP3@ +HAVE_DUPLOCALE = @HAVE_DUPLOCALE@ +HAVE_EUIDACCESS = @HAVE_EUIDACCESS@ +HAVE_EXPF = @HAVE_EXPF@ +HAVE_EXPL = @HAVE_EXPL@ +HAVE_EXPM1 = @HAVE_EXPM1@ +HAVE_EXPM1F = @HAVE_EXPM1F@ +HAVE_FABSF = @HAVE_FABSF@ +HAVE_FABSL = @HAVE_FABSL@ +HAVE_FACCESSAT = @HAVE_FACCESSAT@ +HAVE_FCHDIR = @HAVE_FCHDIR@ +HAVE_FCHOWNAT = @HAVE_FCHOWNAT@ +HAVE_FDATASYNC = @HAVE_FDATASYNC@ +HAVE_FEATURES_H = @HAVE_FEATURES_H@ +HAVE_FFS = @HAVE_FFS@ +HAVE_FFSL = @HAVE_FFSL@ +HAVE_FFSLL = @HAVE_FFSLL@ +HAVE_FMA = @HAVE_FMA@ +HAVE_FMAF = @HAVE_FMAF@ +HAVE_FMAL = @HAVE_FMAL@ +HAVE_FMODF = @HAVE_FMODF@ +HAVE_FMODL = @HAVE_FMODL@ +HAVE_FREXPF = @HAVE_FREXPF@ +HAVE_FSEEKO = @HAVE_FSEEKO@ +HAVE_FSYNC = @HAVE_FSYNC@ +HAVE_FTELLO = @HAVE_FTELLO@ +HAVE_FTRUNCATE = @HAVE_FTRUNCATE@ +HAVE_GETDTABLESIZE = @HAVE_GETDTABLESIZE@ +HAVE_GETGROUPS = @HAVE_GETGROUPS@ +HAVE_GETHOSTNAME = @HAVE_GETHOSTNAME@ +HAVE_GETLOGIN = @HAVE_GETLOGIN@ +HAVE_GETOPT_H = @HAVE_GETOPT_H@ +HAVE_GETPAGESIZE = @HAVE_GETPAGESIZE@ +HAVE_GETSUBOPT = @HAVE_GETSUBOPT@ +HAVE_GRANTPT = @HAVE_GRANTPT@ +HAVE_GROUP_MEMBER = @HAVE_GROUP_MEMBER@ +HAVE_HYPOTF = @HAVE_HYPOTF@ +HAVE_HYPOTL = @HAVE_HYPOTL@ +HAVE_ILOGB = @HAVE_ILOGB@ +HAVE_ILOGBF = @HAVE_ILOGBF@ +HAVE_ILOGBL = @HAVE_ILOGBL@ +HAVE_INTTYPES_H = @HAVE_INTTYPES_H@ +HAVE_ISNAND = @HAVE_ISNAND@ +HAVE_ISNANF = @HAVE_ISNANF@ +HAVE_ISNANL = @HAVE_ISNANL@ +HAVE_ISWBLANK = @HAVE_ISWBLANK@ +HAVE_ISWCNTRL = @HAVE_ISWCNTRL@ +HAVE_LANGINFO_CODESET = @HAVE_LANGINFO_CODESET@ +HAVE_LANGINFO_ERA = @HAVE_LANGINFO_ERA@ +HAVE_LANGINFO_H = @HAVE_LANGINFO_H@ +HAVE_LANGINFO_T_FMT_AMPM = @HAVE_LANGINFO_T_FMT_AMPM@ +HAVE_LANGINFO_YESEXPR = @HAVE_LANGINFO_YESEXPR@ +HAVE_LCHOWN = @HAVE_LCHOWN@ +HAVE_LDEXPF = @HAVE_LDEXPF@ +HAVE_LINK = @HAVE_LINK@ +HAVE_LINKAT = @HAVE_LINKAT@ +HAVE_LOG10F = @HAVE_LOG10F@ +HAVE_LOG10L = @HAVE_LOG10L@ +HAVE_LOG1P = @HAVE_LOG1P@ +HAVE_LOG1PF = @HAVE_LOG1PF@ +HAVE_LOG1PL = @HAVE_LOG1PL@ +HAVE_LOGBF = @HAVE_LOGBF@ +HAVE_LOGBL = @HAVE_LOGBL@ +HAVE_LOGF = @HAVE_LOGF@ +HAVE_LOGL = @HAVE_LOGL@ +HAVE_LONG_LONG_INT = @HAVE_LONG_LONG_INT@ +HAVE_MBRLEN = @HAVE_MBRLEN@ +HAVE_MBRTOWC = @HAVE_MBRTOWC@ +HAVE_MBSINIT = @HAVE_MBSINIT@ +HAVE_MBSLEN = @HAVE_MBSLEN@ +HAVE_MBSNRTOWCS = @HAVE_MBSNRTOWCS@ +HAVE_MBSRTOWCS = @HAVE_MBSRTOWCS@ +HAVE_MEMCHR = @HAVE_MEMCHR@ +HAVE_MEMPCPY = @HAVE_MEMPCPY@ +HAVE_MKDTEMP = @HAVE_MKDTEMP@ +HAVE_MKOSTEMP = @HAVE_MKOSTEMP@ +HAVE_MKOSTEMPS = @HAVE_MKOSTEMPS@ +HAVE_MKSTEMP = @HAVE_MKSTEMP@ +HAVE_MKSTEMPS = @HAVE_MKSTEMPS@ +HAVE_MODFF = @HAVE_MODFF@ +HAVE_MODFL = @HAVE_MODFL@ +HAVE_MSVC_INVALID_PARAMETER_HANDLER = @HAVE_MSVC_INVALID_PARAMETER_HANDLER@ +HAVE_NANOSLEEP = @HAVE_NANOSLEEP@ +HAVE_NETDB_H = @HAVE_NETDB_H@ +HAVE_NETINET_IN_H = @HAVE_NETINET_IN_H@ +HAVE_NL_LANGINFO = @HAVE_NL_LANGINFO@ +HAVE_OS_H = @HAVE_OS_H@ +HAVE_PCLOSE = @HAVE_PCLOSE@ +HAVE_PIPE = @HAVE_PIPE@ +HAVE_PIPE2 = @HAVE_PIPE2@ +HAVE_POPEN = @HAVE_POPEN@ +HAVE_POSIX_OPENPT = @HAVE_POSIX_OPENPT@ +HAVE_POWF = @HAVE_POWF@ +HAVE_PREAD = @HAVE_PREAD@ +HAVE_PTSNAME = @HAVE_PTSNAME@ +HAVE_PTSNAME_R = @HAVE_PTSNAME_R@ +HAVE_PWRITE = @HAVE_PWRITE@ +HAVE_RANDOM = @HAVE_RANDOM@ +HAVE_RANDOM_H = @HAVE_RANDOM_H@ +HAVE_RANDOM_R = @HAVE_RANDOM_R@ +HAVE_RAWMEMCHR = @HAVE_RAWMEMCHR@ +HAVE_READLINK = @HAVE_READLINK@ +HAVE_READLINKAT = @HAVE_READLINKAT@ +HAVE_REALPATH = @HAVE_REALPATH@ +HAVE_REMAINDER = @HAVE_REMAINDER@ +HAVE_REMAINDERF = @HAVE_REMAINDERF@ +HAVE_RENAMEAT = @HAVE_RENAMEAT@ +HAVE_RINT = @HAVE_RINT@ +HAVE_RINTL = @HAVE_RINTL@ +HAVE_RPMATCH = @HAVE_RPMATCH@ +HAVE_SA_FAMILY_T = @HAVE_SA_FAMILY_T@ +HAVE_SECURE_GETENV = @HAVE_SECURE_GETENV@ +HAVE_SETENV = @HAVE_SETENV@ +HAVE_SETHOSTNAME = @HAVE_SETHOSTNAME@ +HAVE_SIGNED_SIG_ATOMIC_T = @HAVE_SIGNED_SIG_ATOMIC_T@ +HAVE_SIGNED_WCHAR_T = @HAVE_SIGNED_WCHAR_T@ +HAVE_SIGNED_WINT_T = @HAVE_SIGNED_WINT_T@ +HAVE_SINF = @HAVE_SINF@ +HAVE_SINHF = @HAVE_SINHF@ +HAVE_SINL = @HAVE_SINL@ +HAVE_SLEEP = @HAVE_SLEEP@ +HAVE_SQRTF = @HAVE_SQRTF@ +HAVE_SQRTL = @HAVE_SQRTL@ +HAVE_STDINT_H = @HAVE_STDINT_H@ +HAVE_STPCPY = @HAVE_STPCPY@ +HAVE_STPNCPY = @HAVE_STPNCPY@ +HAVE_STRCASECMP = @HAVE_STRCASECMP@ +HAVE_STRCASESTR = @HAVE_STRCASESTR@ +HAVE_STRCHRNUL = @HAVE_STRCHRNUL@ +HAVE_STRINGS_H = @HAVE_STRINGS_H@ +HAVE_STRPBRK = @HAVE_STRPBRK@ +HAVE_STRPTIME = @HAVE_STRPTIME@ +HAVE_STRSEP = @HAVE_STRSEP@ +HAVE_STRTOD = @HAVE_STRTOD@ +HAVE_STRTOLL = @HAVE_STRTOLL@ +HAVE_STRTOULL = @HAVE_STRTOULL@ +HAVE_STRUCT_ADDRINFO = @HAVE_STRUCT_ADDRINFO@ +HAVE_STRUCT_RANDOM_DATA = @HAVE_STRUCT_RANDOM_DATA@ +HAVE_STRUCT_SOCKADDR_STORAGE = @HAVE_STRUCT_SOCKADDR_STORAGE@ +HAVE_STRUCT_SOCKADDR_STORAGE_SS_FAMILY = @HAVE_STRUCT_SOCKADDR_STORAGE_SS_FAMILY@ +HAVE_STRVERSCMP = @HAVE_STRVERSCMP@ +HAVE_SYMLINK = @HAVE_SYMLINK@ +HAVE_SYMLINKAT = @HAVE_SYMLINKAT@ +HAVE_SYS_BITYPES_H = @HAVE_SYS_BITYPES_H@ +HAVE_SYS_INTTYPES_H = @HAVE_SYS_INTTYPES_H@ +HAVE_SYS_LOADAVG_H = @HAVE_SYS_LOADAVG_H@ +HAVE_SYS_PARAM_H = @HAVE_SYS_PARAM_H@ +HAVE_SYS_SOCKET_H = @HAVE_SYS_SOCKET_H@ +HAVE_SYS_TYPES_H = @HAVE_SYS_TYPES_H@ +HAVE_SYS_UIO_H = @HAVE_SYS_UIO_H@ +HAVE_TANF = @HAVE_TANF@ +HAVE_TANHF = @HAVE_TANHF@ +HAVE_TANL = @HAVE_TANL@ +HAVE_TIMEGM = @HAVE_TIMEGM@ +HAVE_UNISTD_H = @HAVE_UNISTD_H@ +HAVE_UNLINKAT = @HAVE_UNLINKAT@ +HAVE_UNLOCKPT = @HAVE_UNLOCKPT@ +HAVE_UNSIGNED_LONG_LONG_INT = @HAVE_UNSIGNED_LONG_LONG_INT@ +HAVE_USLEEP = @HAVE_USLEEP@ +HAVE_VASPRINTF = @HAVE_VASPRINTF@ +HAVE_VDPRINTF = @HAVE_VDPRINTF@ +HAVE_WCHAR_H = @HAVE_WCHAR_H@ +HAVE_WCHAR_T = @HAVE_WCHAR_T@ +HAVE_WCPCPY = @HAVE_WCPCPY@ +HAVE_WCPNCPY = @HAVE_WCPNCPY@ +HAVE_WCRTOMB = @HAVE_WCRTOMB@ +HAVE_WCSCASECMP = @HAVE_WCSCASECMP@ +HAVE_WCSCAT = @HAVE_WCSCAT@ +HAVE_WCSCHR = @HAVE_WCSCHR@ +HAVE_WCSCMP = @HAVE_WCSCMP@ +HAVE_WCSCOLL = @HAVE_WCSCOLL@ +HAVE_WCSCPY = @HAVE_WCSCPY@ +HAVE_WCSCSPN = @HAVE_WCSCSPN@ +HAVE_WCSDUP = @HAVE_WCSDUP@ +HAVE_WCSLEN = @HAVE_WCSLEN@ +HAVE_WCSNCASECMP = @HAVE_WCSNCASECMP@ +HAVE_WCSNCAT = @HAVE_WCSNCAT@ +HAVE_WCSNCMP = @HAVE_WCSNCMP@ +HAVE_WCSNCPY = @HAVE_WCSNCPY@ +HAVE_WCSNLEN = @HAVE_WCSNLEN@ +HAVE_WCSNRTOMBS = @HAVE_WCSNRTOMBS@ +HAVE_WCSPBRK = @HAVE_WCSPBRK@ +HAVE_WCSRCHR = @HAVE_WCSRCHR@ +HAVE_WCSRTOMBS = @HAVE_WCSRTOMBS@ +HAVE_WCSSPN = @HAVE_WCSSPN@ +HAVE_WCSSTR = @HAVE_WCSSTR@ +HAVE_WCSTOK = @HAVE_WCSTOK@ +HAVE_WCSWIDTH = @HAVE_WCSWIDTH@ +HAVE_WCSXFRM = @HAVE_WCSXFRM@ +HAVE_WCTRANS_T = @HAVE_WCTRANS_T@ +HAVE_WCTYPE_H = @HAVE_WCTYPE_H@ +HAVE_WCTYPE_T = @HAVE_WCTYPE_T@ +HAVE_WINSOCK2_H = @HAVE_WINSOCK2_H@ +HAVE_WINT_T = @HAVE_WINT_T@ +HAVE_WMEMCHR = @HAVE_WMEMCHR@ +HAVE_WMEMCMP = @HAVE_WMEMCMP@ +HAVE_WMEMCPY = @HAVE_WMEMCPY@ +HAVE_WMEMMOVE = @HAVE_WMEMMOVE@ +HAVE_WMEMSET = @HAVE_WMEMSET@ +HAVE_WS2TCPIP_H = @HAVE_WS2TCPIP_H@ +HAVE_XLOCALE_H = @HAVE_XLOCALE_H@ +HAVE__BOOL = @HAVE__BOOL@ +HAVE__EXIT = @HAVE__EXIT@ +HOSTENT_LIB = @HOSTENT_LIB@ +HOSTNAME = @HOSTNAME@ +INCLUDE_NEXT = @INCLUDE_NEXT@ +INCLUDE_NEXT_AS_FIRST_DIRECTIVE = @INCLUDE_NEXT_AS_FIRST_DIRECTIVE@ +INET_NTOP_LIB = @INET_NTOP_LIB@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +INTLLIBS = @INTLLIBS@ +INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ +KRBINCLUDE = @KRBINCLUDE@ +LD = @LD@ +LDAPINCLUDE = @LDAPINCLUDE@ +LDAPLIBS = @LDAPLIBS@ +LDFLAGS = @LDFLAGS@ +LIBCURL = @LIBCURL@ +LIBCURLCFLAGS = @LIBCURLCFLAGS@ +LIBCURLINCLUDE = @LIBCURLINCLUDE@ +LIBCURLLIBS = @LIBCURLLIBS@ +LIBCURL_CPPFLAGS = @LIBCURL_CPPFLAGS@ +LIBGNU_LIBDEPS = @LIBGNU_LIBDEPS@ +LIBGNU_LTLIBDEPS = @LIBGNU_LTLIBDEPS@ +LIBICONV = @LIBICONV@ +LIBINTL = @LIBINTL@ +LIBMULTITHREAD = @LIBMULTITHREAD@ +LIBOBJS = @LIBOBJS@ +LIBPTH = @LIBPTH@ +LIBPTH_PREFIX = @LIBPTH_PREFIX@ +LIBS = @LIBS@ +LIBSOCKET = @LIBSOCKET@ +LIBTHREAD = @LIBTHREAD@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LOCALCHARSET_TESTS_ENVIRONMENT = @LOCALCHARSET_TESTS_ENVIRONMENT@ +LOCALE_FR = @LOCALE_FR@ +LOCALE_FR_UTF8 = @LOCALE_FR_UTF8@ +LOCALE_JA = @LOCALE_JA@ +LOCALE_ZH_CN = @LOCALE_ZH_CN@ +LTLIBICONV = @LTLIBICONV@ +LTLIBINTL = @LTLIBINTL@ +LTLIBMULTITHREAD = @LTLIBMULTITHREAD@ +LTLIBOBJS = @LTLIBOBJS@ +LTLIBPTH = @LTLIBPTH@ +LTLIBTHREAD = @LTLIBTHREAD@ +MAINT = @MAINT@ +MAKEINFO = @MAKEINFO@ +MANIFEST_TOOL = @MANIFEST_TOOL@ +MATHLIBS = @MATHLIBS@ +MKDIR_P = @MKDIR_P@ +MSGFMT = @MSGFMT@ +MSGFMT_015 = @MSGFMT_015@ +MSGMERGE = @MSGMERGE@ +MYSQLCFLAGS = @MYSQLCFLAGS@ +MYSQLINCLUDE = @MYSQLINCLUDE@ +MYSQLLIBS = @MYSQLLIBS@ +NETINET_IN_H = @NETINET_IN_H@ +NEXT_ARPA_INET_H = @NEXT_ARPA_INET_H@ +NEXT_AS_FIRST_DIRECTIVE_ARPA_INET_H = @NEXT_AS_FIRST_DIRECTIVE_ARPA_INET_H@ +NEXT_AS_FIRST_DIRECTIVE_ERRNO_H = @NEXT_AS_FIRST_DIRECTIVE_ERRNO_H@ +NEXT_AS_FIRST_DIRECTIVE_FLOAT_H = @NEXT_AS_FIRST_DIRECTIVE_FLOAT_H@ +NEXT_AS_FIRST_DIRECTIVE_GETOPT_H = @NEXT_AS_FIRST_DIRECTIVE_GETOPT_H@ +NEXT_AS_FIRST_DIRECTIVE_LANGINFO_H = @NEXT_AS_FIRST_DIRECTIVE_LANGINFO_H@ +NEXT_AS_FIRST_DIRECTIVE_LOCALE_H = @NEXT_AS_FIRST_DIRECTIVE_LOCALE_H@ +NEXT_AS_FIRST_DIRECTIVE_MATH_H = @NEXT_AS_FIRST_DIRECTIVE_MATH_H@ +NEXT_AS_FIRST_DIRECTIVE_NETDB_H = @NEXT_AS_FIRST_DIRECTIVE_NETDB_H@ +NEXT_AS_FIRST_DIRECTIVE_NETINET_IN_H = @NEXT_AS_FIRST_DIRECTIVE_NETINET_IN_H@ +NEXT_AS_FIRST_DIRECTIVE_STDDEF_H = @NEXT_AS_FIRST_DIRECTIVE_STDDEF_H@ +NEXT_AS_FIRST_DIRECTIVE_STDINT_H = @NEXT_AS_FIRST_DIRECTIVE_STDINT_H@ +NEXT_AS_FIRST_DIRECTIVE_STDIO_H = @NEXT_AS_FIRST_DIRECTIVE_STDIO_H@ +NEXT_AS_FIRST_DIRECTIVE_STDLIB_H = @NEXT_AS_FIRST_DIRECTIVE_STDLIB_H@ +NEXT_AS_FIRST_DIRECTIVE_STRINGS_H = @NEXT_AS_FIRST_DIRECTIVE_STRINGS_H@ +NEXT_AS_FIRST_DIRECTIVE_STRING_H = @NEXT_AS_FIRST_DIRECTIVE_STRING_H@ +NEXT_AS_FIRST_DIRECTIVE_SYS_SOCKET_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_SOCKET_H@ +NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H@ +NEXT_AS_FIRST_DIRECTIVE_SYS_UIO_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_UIO_H@ +NEXT_AS_FIRST_DIRECTIVE_TIME_H = @NEXT_AS_FIRST_DIRECTIVE_TIME_H@ +NEXT_AS_FIRST_DIRECTIVE_UNISTD_H = @NEXT_AS_FIRST_DIRECTIVE_UNISTD_H@ +NEXT_AS_FIRST_DIRECTIVE_WCHAR_H = @NEXT_AS_FIRST_DIRECTIVE_WCHAR_H@ +NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H = @NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H@ +NEXT_ERRNO_H = @NEXT_ERRNO_H@ +NEXT_FLOAT_H = @NEXT_FLOAT_H@ +NEXT_GETOPT_H = @NEXT_GETOPT_H@ +NEXT_LANGINFO_H = @NEXT_LANGINFO_H@ +NEXT_LOCALE_H = @NEXT_LOCALE_H@ +NEXT_MATH_H = @NEXT_MATH_H@ +NEXT_NETDB_H = @NEXT_NETDB_H@ +NEXT_NETINET_IN_H = @NEXT_NETINET_IN_H@ +NEXT_STDDEF_H = @NEXT_STDDEF_H@ +NEXT_STDINT_H = @NEXT_STDINT_H@ +NEXT_STDIO_H = @NEXT_STDIO_H@ +NEXT_STDLIB_H = @NEXT_STDLIB_H@ +NEXT_STRINGS_H = @NEXT_STRINGS_H@ +NEXT_STRING_H = @NEXT_STRING_H@ +NEXT_SYS_SOCKET_H = @NEXT_SYS_SOCKET_H@ +NEXT_SYS_TYPES_H = @NEXT_SYS_TYPES_H@ +NEXT_SYS_UIO_H = @NEXT_SYS_UIO_H@ +NEXT_TIME_H = @NEXT_TIME_H@ +NEXT_UNISTD_H = @NEXT_UNISTD_H@ +NEXT_WCHAR_H = @NEXT_WCHAR_H@ +NEXT_WCTYPE_H = @NEXT_WCTYPE_H@ +NM = @NM@ +NMEDIT = @NMEDIT@ +NP_RELEASE = @NP_RELEASE@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PATH_TO_APTGET = @PATH_TO_APTGET@ +PATH_TO_DIG = @PATH_TO_DIG@ +PATH_TO_ENV = @PATH_TO_ENV@ +PATH_TO_FPING = @PATH_TO_FPING@ +PATH_TO_FPING6 = @PATH_TO_FPING6@ +PATH_TO_LMSTAT = @PATH_TO_LMSTAT@ +PATH_TO_LSPS = @PATH_TO_LSPS@ +PATH_TO_MAILQ = @PATH_TO_MAILQ@ +PATH_TO_NSLOOKUP = @PATH_TO_NSLOOKUP@ +PATH_TO_PING = @PATH_TO_PING@ +PATH_TO_PING6 = @PATH_TO_PING6@ +PATH_TO_PS = @PATH_TO_PS@ +PATH_TO_QMAIL_QSTAT = @PATH_TO_QMAIL_QSTAT@ +PATH_TO_QSTAT = @PATH_TO_QSTAT@ +PATH_TO_QUAKESTAT = @PATH_TO_QUAKESTAT@ +PATH_TO_RPCINFO = @PATH_TO_RPCINFO@ +PATH_TO_SMBCLIENT = @PATH_TO_SMBCLIENT@ +PATH_TO_SNMPGET = @PATH_TO_SNMPGET@ +PATH_TO_SNMPGETNEXT = @PATH_TO_SNMPGETNEXT@ +PATH_TO_SSH = @PATH_TO_SSH@ +PATH_TO_SUDO = @PATH_TO_SUDO@ +PATH_TO_SWAP = @PATH_TO_SWAP@ +PATH_TO_SWAPINFO = @PATH_TO_SWAPINFO@ +PATH_TO_UPTIME = @PATH_TO_UPTIME@ +PATH_TO_WHO = @PATH_TO_WHO@ +PERL = @PERL@ +PERLMODS_DIR = @PERLMODS_DIR@ +PGINCLUDE = @PGINCLUDE@ +PGLIBS = @PGLIBS@ +PKGCONFIG = @PKGCONFIG@ +PKG_ARCH = @PKG_ARCH@ +PLUGIN_TEST = @PLUGIN_TEST@ +POSUB = @POSUB@ +POW_LIB = @POW_LIB@ +PRAGMA_COLUMNS = @PRAGMA_COLUMNS@ +PRAGMA_SYSTEM_HEADER = @PRAGMA_SYSTEM_HEADER@ +PST3CFLAGS = @PST3CFLAGS@ +PTHREAD_H_DEFINES_STRUCT_TIMESPEC = @PTHREAD_H_DEFINES_STRUCT_TIMESPEC@ +PTRDIFF_T_SUFFIX = @PTRDIFF_T_SUFFIX@ +RADIUSLIBS = @RADIUSLIBS@ +RANLIB = @RANLIB@ +RELEASE = @RELEASE@ +REPLACE_BTOWC = @REPLACE_BTOWC@ +REPLACE_CALLOC = @REPLACE_CALLOC@ +REPLACE_CANONICALIZE_FILE_NAME = @REPLACE_CANONICALIZE_FILE_NAME@ +REPLACE_CBRTF = @REPLACE_CBRTF@ +REPLACE_CBRTL = @REPLACE_CBRTL@ +REPLACE_CEIL = @REPLACE_CEIL@ +REPLACE_CEILF = @REPLACE_CEILF@ +REPLACE_CEILL = @REPLACE_CEILL@ +REPLACE_CHOWN = @REPLACE_CHOWN@ +REPLACE_CLOSE = @REPLACE_CLOSE@ +REPLACE_DPRINTF = @REPLACE_DPRINTF@ +REPLACE_DUP = @REPLACE_DUP@ +REPLACE_DUP2 = @REPLACE_DUP2@ +REPLACE_DUPLOCALE = @REPLACE_DUPLOCALE@ +REPLACE_EXP2 = @REPLACE_EXP2@ +REPLACE_EXP2L = @REPLACE_EXP2L@ +REPLACE_EXPM1 = @REPLACE_EXPM1@ +REPLACE_EXPM1F = @REPLACE_EXPM1F@ +REPLACE_FABSL = @REPLACE_FABSL@ +REPLACE_FCHOWNAT = @REPLACE_FCHOWNAT@ +REPLACE_FCLOSE = @REPLACE_FCLOSE@ +REPLACE_FDOPEN = @REPLACE_FDOPEN@ +REPLACE_FFLUSH = @REPLACE_FFLUSH@ +REPLACE_FLOOR = @REPLACE_FLOOR@ +REPLACE_FLOORF = @REPLACE_FLOORF@ +REPLACE_FLOORL = @REPLACE_FLOORL@ +REPLACE_FMA = @REPLACE_FMA@ +REPLACE_FMAF = @REPLACE_FMAF@ +REPLACE_FMAL = @REPLACE_FMAL@ +REPLACE_FMOD = @REPLACE_FMOD@ +REPLACE_FMODF = @REPLACE_FMODF@ +REPLACE_FMODL = @REPLACE_FMODL@ +REPLACE_FOPEN = @REPLACE_FOPEN@ +REPLACE_FPRINTF = @REPLACE_FPRINTF@ +REPLACE_FPURGE = @REPLACE_FPURGE@ +REPLACE_FREOPEN = @REPLACE_FREOPEN@ +REPLACE_FREXP = @REPLACE_FREXP@ +REPLACE_FREXPF = @REPLACE_FREXPF@ +REPLACE_FREXPL = @REPLACE_FREXPL@ +REPLACE_FSEEK = @REPLACE_FSEEK@ +REPLACE_FSEEKO = @REPLACE_FSEEKO@ +REPLACE_FTELL = @REPLACE_FTELL@ +REPLACE_FTELLO = @REPLACE_FTELLO@ +REPLACE_FTRUNCATE = @REPLACE_FTRUNCATE@ +REPLACE_GAI_STRERROR = @REPLACE_GAI_STRERROR@ +REPLACE_GETCWD = @REPLACE_GETCWD@ +REPLACE_GETDELIM = @REPLACE_GETDELIM@ +REPLACE_GETDOMAINNAME = @REPLACE_GETDOMAINNAME@ +REPLACE_GETGROUPS = @REPLACE_GETGROUPS@ +REPLACE_GETLINE = @REPLACE_GETLINE@ +REPLACE_GETLOGIN_R = @REPLACE_GETLOGIN_R@ +REPLACE_GETPAGESIZE = @REPLACE_GETPAGESIZE@ +REPLACE_HUGE_VAL = @REPLACE_HUGE_VAL@ +REPLACE_HYPOT = @REPLACE_HYPOT@ +REPLACE_HYPOTF = @REPLACE_HYPOTF@ +REPLACE_HYPOTL = @REPLACE_HYPOTL@ +REPLACE_ILOGB = @REPLACE_ILOGB@ +REPLACE_ILOGBF = @REPLACE_ILOGBF@ +REPLACE_INET_NTOP = @REPLACE_INET_NTOP@ +REPLACE_INET_PTON = @REPLACE_INET_PTON@ +REPLACE_ISATTY = @REPLACE_ISATTY@ +REPLACE_ISFINITE = @REPLACE_ISFINITE@ +REPLACE_ISINF = @REPLACE_ISINF@ +REPLACE_ISNAN = @REPLACE_ISNAN@ +REPLACE_ISWBLANK = @REPLACE_ISWBLANK@ +REPLACE_ISWCNTRL = @REPLACE_ISWCNTRL@ +REPLACE_ITOLD = @REPLACE_ITOLD@ +REPLACE_LCHOWN = @REPLACE_LCHOWN@ +REPLACE_LDEXPL = @REPLACE_LDEXPL@ +REPLACE_LINK = @REPLACE_LINK@ +REPLACE_LINKAT = @REPLACE_LINKAT@ +REPLACE_LOCALECONV = @REPLACE_LOCALECONV@ +REPLACE_LOCALTIME_R = @REPLACE_LOCALTIME_R@ +REPLACE_LOG = @REPLACE_LOG@ +REPLACE_LOG10 = @REPLACE_LOG10@ +REPLACE_LOG10F = @REPLACE_LOG10F@ +REPLACE_LOG10L = @REPLACE_LOG10L@ +REPLACE_LOG1P = @REPLACE_LOG1P@ +REPLACE_LOG1PF = @REPLACE_LOG1PF@ +REPLACE_LOG1PL = @REPLACE_LOG1PL@ +REPLACE_LOG2 = @REPLACE_LOG2@ +REPLACE_LOG2F = @REPLACE_LOG2F@ +REPLACE_LOG2L = @REPLACE_LOG2L@ +REPLACE_LOGB = @REPLACE_LOGB@ +REPLACE_LOGBF = @REPLACE_LOGBF@ +REPLACE_LOGBL = @REPLACE_LOGBL@ +REPLACE_LOGF = @REPLACE_LOGF@ +REPLACE_LOGL = @REPLACE_LOGL@ +REPLACE_LSEEK = @REPLACE_LSEEK@ +REPLACE_MALLOC = @REPLACE_MALLOC@ +REPLACE_MBRLEN = @REPLACE_MBRLEN@ +REPLACE_MBRTOWC = @REPLACE_MBRTOWC@ +REPLACE_MBSINIT = @REPLACE_MBSINIT@ +REPLACE_MBSNRTOWCS = @REPLACE_MBSNRTOWCS@ +REPLACE_MBSRTOWCS = @REPLACE_MBSRTOWCS@ +REPLACE_MBSTATE_T = @REPLACE_MBSTATE_T@ +REPLACE_MBTOWC = @REPLACE_MBTOWC@ +REPLACE_MEMCHR = @REPLACE_MEMCHR@ +REPLACE_MEMMEM = @REPLACE_MEMMEM@ +REPLACE_MKSTEMP = @REPLACE_MKSTEMP@ +REPLACE_MKTIME = @REPLACE_MKTIME@ +REPLACE_MODF = @REPLACE_MODF@ +REPLACE_MODFF = @REPLACE_MODFF@ +REPLACE_MODFL = @REPLACE_MODFL@ +REPLACE_NAN = @REPLACE_NAN@ +REPLACE_NANOSLEEP = @REPLACE_NANOSLEEP@ +REPLACE_NL_LANGINFO = @REPLACE_NL_LANGINFO@ +REPLACE_NULL = @REPLACE_NULL@ +REPLACE_OBSTACK_PRINTF = @REPLACE_OBSTACK_PRINTF@ +REPLACE_PERROR = @REPLACE_PERROR@ +REPLACE_POPEN = @REPLACE_POPEN@ +REPLACE_PREAD = @REPLACE_PREAD@ +REPLACE_PRINTF = @REPLACE_PRINTF@ +REPLACE_PTSNAME = @REPLACE_PTSNAME@ +REPLACE_PTSNAME_R = @REPLACE_PTSNAME_R@ +REPLACE_PUTENV = @REPLACE_PUTENV@ +REPLACE_PWRITE = @REPLACE_PWRITE@ +REPLACE_RANDOM_R = @REPLACE_RANDOM_R@ +REPLACE_READ = @REPLACE_READ@ +REPLACE_READLINK = @REPLACE_READLINK@ +REPLACE_REALLOC = @REPLACE_REALLOC@ +REPLACE_REALPATH = @REPLACE_REALPATH@ +REPLACE_REMAINDER = @REPLACE_REMAINDER@ +REPLACE_REMAINDERF = @REPLACE_REMAINDERF@ +REPLACE_REMAINDERL = @REPLACE_REMAINDERL@ +REPLACE_REMOVE = @REPLACE_REMOVE@ +REPLACE_RENAME = @REPLACE_RENAME@ +REPLACE_RENAMEAT = @REPLACE_RENAMEAT@ +REPLACE_RMDIR = @REPLACE_RMDIR@ +REPLACE_ROUND = @REPLACE_ROUND@ +REPLACE_ROUNDF = @REPLACE_ROUNDF@ +REPLACE_ROUNDL = @REPLACE_ROUNDL@ +REPLACE_SETENV = @REPLACE_SETENV@ +REPLACE_SETLOCALE = @REPLACE_SETLOCALE@ +REPLACE_SIGNBIT = @REPLACE_SIGNBIT@ +REPLACE_SIGNBIT_USING_GCC = @REPLACE_SIGNBIT_USING_GCC@ +REPLACE_SLEEP = @REPLACE_SLEEP@ +REPLACE_SNPRINTF = @REPLACE_SNPRINTF@ +REPLACE_SPRINTF = @REPLACE_SPRINTF@ +REPLACE_SQRTL = @REPLACE_SQRTL@ +REPLACE_STDIO_READ_FUNCS = @REPLACE_STDIO_READ_FUNCS@ +REPLACE_STDIO_WRITE_FUNCS = @REPLACE_STDIO_WRITE_FUNCS@ +REPLACE_STPNCPY = @REPLACE_STPNCPY@ +REPLACE_STRCASESTR = @REPLACE_STRCASESTR@ +REPLACE_STRCHRNUL = @REPLACE_STRCHRNUL@ +REPLACE_STRDUP = @REPLACE_STRDUP@ +REPLACE_STRERROR = @REPLACE_STRERROR@ +REPLACE_STRERROR_R = @REPLACE_STRERROR_R@ +REPLACE_STRNCAT = @REPLACE_STRNCAT@ +REPLACE_STRNDUP = @REPLACE_STRNDUP@ +REPLACE_STRNLEN = @REPLACE_STRNLEN@ +REPLACE_STRSIGNAL = @REPLACE_STRSIGNAL@ +REPLACE_STRSTR = @REPLACE_STRSTR@ +REPLACE_STRTOD = @REPLACE_STRTOD@ +REPLACE_STRTOK_R = @REPLACE_STRTOK_R@ +REPLACE_STRUCT_LCONV = @REPLACE_STRUCT_LCONV@ +REPLACE_SYMLINK = @REPLACE_SYMLINK@ +REPLACE_TIMEGM = @REPLACE_TIMEGM@ +REPLACE_TMPFILE = @REPLACE_TMPFILE@ +REPLACE_TOWLOWER = @REPLACE_TOWLOWER@ +REPLACE_TRUNC = @REPLACE_TRUNC@ +REPLACE_TRUNCF = @REPLACE_TRUNCF@ +REPLACE_TRUNCL = @REPLACE_TRUNCL@ +REPLACE_TTYNAME_R = @REPLACE_TTYNAME_R@ +REPLACE_UNLINK = @REPLACE_UNLINK@ +REPLACE_UNLINKAT = @REPLACE_UNLINKAT@ +REPLACE_UNSETENV = @REPLACE_UNSETENV@ +REPLACE_USLEEP = @REPLACE_USLEEP@ +REPLACE_VASPRINTF = @REPLACE_VASPRINTF@ +REPLACE_VDPRINTF = @REPLACE_VDPRINTF@ +REPLACE_VFPRINTF = @REPLACE_VFPRINTF@ +REPLACE_VPRINTF = @REPLACE_VPRINTF@ +REPLACE_VSNPRINTF = @REPLACE_VSNPRINTF@ +REPLACE_VSPRINTF = @REPLACE_VSPRINTF@ +REPLACE_WCRTOMB = @REPLACE_WCRTOMB@ +REPLACE_WCSNRTOMBS = @REPLACE_WCSNRTOMBS@ +REPLACE_WCSRTOMBS = @REPLACE_WCSRTOMBS@ +REPLACE_WCSWIDTH = @REPLACE_WCSWIDTH@ +REPLACE_WCTOB = @REPLACE_WCTOB@ +REPLACE_WCTOMB = @REPLACE_WCTOMB@ +REPLACE_WCWIDTH = @REPLACE_WCWIDTH@ +REPLACE_WRITE = @REPLACE_WRITE@ +REV_DATESTAMP = @REV_DATESTAMP@ +REV_TIMESTAMP = @REV_TIMESTAMP@ +SCRIPT_TEST = @SCRIPT_TEST@ +SED = @SED@ +SERVENT_LIB = @SERVENT_LIB@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SIG_ATOMIC_T_SUFFIX = @SIG_ATOMIC_T_SUFFIX@ +SIZE_T_SUFFIX = @SIZE_T_SUFFIX@ +SOCKETLIBS = @SOCKETLIBS@ +SSLINCLUDE = @SSLINCLUDE@ +SSLLIBS = @SSLLIBS@ +STDALIGN_H = @STDALIGN_H@ +STDBOOL_H = @STDBOOL_H@ +STDDEF_H = @STDDEF_H@ +STDINT_H = @STDINT_H@ +STRIP = @STRIP@ +SUPPORT = @SUPPORT@ +SYS_TIME_H_DEFINES_STRUCT_TIMESPEC = @SYS_TIME_H_DEFINES_STRUCT_TIMESPEC@ +TIME_H_DEFINES_STRUCT_TIMESPEC = @TIME_H_DEFINES_STRUCT_TIMESPEC@ +UNDEFINE_STRTOK_R = @UNDEFINE_STRTOK_R@ +UNISTD_H_HAVE_WINSOCK2_H = @UNISTD_H_HAVE_WINSOCK2_H@ +UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS = @UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS@ +URIPARSER = @URIPARSER@ +URIPARSERCFLAGS = @URIPARSERCFLAGS@ +URIPARSERINCLUDE = @URIPARSERINCLUDE@ +URIPARSERLIBS = @URIPARSERLIBS@ +URIPARSER_CPPFLAGS = @URIPARSER_CPPFLAGS@ +USE_NLS = @USE_NLS@ +VERSION = @VERSION@ +WARRANTY = @WARRANTY@ +WCHAR_T_SUFFIX = @WCHAR_T_SUFFIX@ +WINDOWS_64_BIT_OFF_T = @WINDOWS_64_BIT_OFF_T@ +WINT_T_SUFFIX = @WINT_T_SUFFIX@ +WTSAPI32LIBS = @WTSAPI32LIBS@ +XGETTEXT = @XGETTEXT@ +XGETTEXT_015 = @XGETTEXT_015@ +XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ +_libcurl_config = @_libcurl_config@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_AR = @ac_ct_AR@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +check_tcp_ssl = @check_tcp_ssl@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +gl_LIBOBJS = @gl_LIBOBJS@ +gl_LTLIBOBJS = @gl_LTLIBOBJS@ +gltests_LIBOBJS = @gltests_LIBOBJS@ +gltests_LTLIBOBJS = @gltests_LTLIBOBJS@ +gltests_WITNESS = @gltests_WITNESS@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +lispdir = @lispdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +np_mysql_config = @np_mysql_config@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +with_trusted_path = @with_trusted_path@ +noinst_LIBRARIES = libpicohttpparser.a +libpicohttpparser_a_SOURCES = picohttpparser.c picohttpparser.h +all: all-am + +.SUFFIXES: +.SUFFIXES: .c .lo .o .obj +$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu plugins/picohttpparser/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --gnu plugins/picohttpparser/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): + +clean-noinstLIBRARIES: + -test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES) +libpicohttpparser.a: $(libpicohttpparser_a_OBJECTS) $(libpicohttpparser_a_DEPENDENCIES) $(EXTRA_libpicohttpparser_a_DEPENDENCIES) + -rm -f libpicohttpparser.a + $(libpicohttpparser_a_AR) libpicohttpparser.a $(libpicohttpparser_a_OBJECTS) $(libpicohttpparser_a_LIBADD) + $(RANLIB) libpicohttpparser.a + +mostlyclean-compile: + -rm -f *.$(OBJEXT) + +distclean-compile: + -rm -f *.tab.c + +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/picohttpparser.Po@am__quote@ + +.c.o: +@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(COMPILE) -c $< + +.c.obj: +@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'` + +.c.lo: +@am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $< + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + set x; \ + here=`pwd`; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: CTAGS +CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile $(LIBRARIES) +installdirs: +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + if test -z '$(STRIP)'; then \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + install; \ + else \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ + fi +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic clean-libtool clean-noinstLIBRARIES \ + mostlyclean-am + +distclean: distclean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +distclean-am: clean-am distclean-compile distclean-generic \ + distclean-tags + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-compile mostlyclean-generic \ + mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: + +.MAKE: install-am install-strip + +.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ + clean-libtool clean-noinstLIBRARIES ctags distclean \ + distclean-compile distclean-generic distclean-libtool \ + distclean-tags distdir dvi dvi-am html html-am info info-am \ + install install-am install-data install-data-am install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am install-man \ + install-pdf install-pdf-am install-ps install-ps-am \ + install-strip installcheck installcheck-am installdirs \ + maintainer-clean maintainer-clean-generic mostlyclean \ + mostlyclean-compile mostlyclean-generic mostlyclean-libtool \ + pdf pdf-am ps ps-am tags uninstall uninstall-am + + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/plugins/picohttpparser/picohttpparser.c b/plugins/picohttpparser/picohttpparser.c new file mode 100644 index 0000000..74ccc3e --- /dev/null +++ b/plugins/picohttpparser/picohttpparser.c @@ -0,0 +1,645 @@ +/* + * Copyright (c) 2009-2014 Kazuho Oku, Tokuhiro Matsuno, Daisuke Murase, + * Shigeo Mitsunari + * + * The software is licensed under either the MIT License (below) or the Perl + * license. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to + * deal in the Software without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + */ + +#include +#include +#include +#ifdef __SSE4_2__ +#ifdef _MSC_VER +#include +#else +#include +#endif +#endif +#include "picohttpparser.h" + +#if __GNUC__ >= 3 +#define likely(x) __builtin_expect(!!(x), 1) +#define unlikely(x) __builtin_expect(!!(x), 0) +#else +#define likely(x) (x) +#define unlikely(x) (x) +#endif + +#ifdef _MSC_VER +#define ALIGNED(n) _declspec(align(n)) +#else +#define ALIGNED(n) __attribute__((aligned(n))) +#endif + +#define IS_PRINTABLE_ASCII(c) ((unsigned char)(c)-040u < 0137u) + +#define CHECK_EOF() \ + if (buf == buf_end) { \ + *ret = -2; \ + return NULL; \ + } + +#define EXPECT_CHAR_NO_CHECK(ch) \ + if (*buf++ != ch) { \ + *ret = -1; \ + return NULL; \ + } + +#define EXPECT_CHAR(ch) \ + CHECK_EOF(); \ + EXPECT_CHAR_NO_CHECK(ch); + +#define ADVANCE_TOKEN(tok, toklen) \ + do { \ + const char *tok_start = buf; \ + static const char ALIGNED(16) ranges2[16] = "\000\040\177\177"; \ + int found2; \ + buf = findchar_fast(buf, buf_end, ranges2, 4, &found2); \ + if (!found2) { \ + CHECK_EOF(); \ + } \ + while (1) { \ + if (*buf == ' ') { \ + break; \ + } else if (unlikely(!IS_PRINTABLE_ASCII(*buf))) { \ + if ((unsigned char)*buf < '\040' || *buf == '\177') { \ + *ret = -1; \ + return NULL; \ + } \ + } \ + ++buf; \ + CHECK_EOF(); \ + } \ + tok = tok_start; \ + toklen = buf - tok_start; \ + } while (0) + +static const char *token_char_map = "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\1\0\1\1\1\1\1\0\0\1\1\0\1\1\0\1\1\1\1\1\1\1\1\1\1\0\0\0\0\0\0" + "\0\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\0\0\0\1\1" + "\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\0\1\0\1\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"; + +static const char *findchar_fast(const char *buf, const char *buf_end, const char *ranges, size_t ranges_size, int *found) +{ + *found = 0; +#if __SSE4_2__ + if (likely(buf_end - buf >= 16)) { + __m128i ranges16 = _mm_loadu_si128((const __m128i *)ranges); + + size_t left = (buf_end - buf) & ~15; + do { + __m128i b16 = _mm_loadu_si128((const __m128i *)buf); + int r = _mm_cmpestri(ranges16, ranges_size, b16, 16, _SIDD_LEAST_SIGNIFICANT | _SIDD_CMP_RANGES | _SIDD_UBYTE_OPS); + if (unlikely(r != 16)) { + buf += r; + *found = 1; + break; + } + buf += 16; + left -= 16; + } while (likely(left != 0)); + } +#else + /* suppress unused parameter warning */ + (void)buf_end; + (void)ranges; + (void)ranges_size; +#endif + return buf; +} + +static const char *get_token_to_eol(const char *buf, const char *buf_end, const char **token, size_t *token_len, int *ret) +{ + const char *token_start = buf; + +#ifdef __SSE4_2__ + static const char ALIGNED(16) ranges1[16] = "\0\010" /* allow HT */ + "\012\037" /* allow SP and up to but not including DEL */ + "\177\177"; /* allow chars w. MSB set */ + int found; + buf = findchar_fast(buf, buf_end, ranges1, 6, &found); + if (found) + goto FOUND_CTL; +#else + /* find non-printable char within the next 8 bytes, this is the hottest code; manually inlined */ + while (likely(buf_end - buf >= 8)) { +#define DOIT() \ + do { \ + if (unlikely(!IS_PRINTABLE_ASCII(*buf))) \ + goto NonPrintable; \ + ++buf; \ + } while (0) + DOIT(); + DOIT(); + DOIT(); + DOIT(); + DOIT(); + DOIT(); + DOIT(); + DOIT(); +#undef DOIT + continue; + NonPrintable: + if ((likely((unsigned char)*buf < '\040') && likely(*buf != '\011')) || unlikely(*buf == '\177')) { + goto FOUND_CTL; + } + ++buf; + } +#endif + for (;; ++buf) { + CHECK_EOF(); + if (unlikely(!IS_PRINTABLE_ASCII(*buf))) { + if ((likely((unsigned char)*buf < '\040') && likely(*buf != '\011')) || unlikely(*buf == '\177')) { + goto FOUND_CTL; + } + } + } +FOUND_CTL: + if (likely(*buf == '\015')) { + ++buf; + EXPECT_CHAR('\012'); + *token_len = buf - 2 - token_start; + } else if (*buf == '\012') { + *token_len = buf - token_start; + ++buf; + } else { + *ret = -1; + return NULL; + } + *token = token_start; + + return buf; +} + +static const char *is_complete(const char *buf, const char *buf_end, size_t last_len, int *ret) +{ + int ret_cnt = 0; + buf = last_len < 3 ? buf : buf + last_len - 3; + + while (1) { + CHECK_EOF(); + if (*buf == '\015') { + ++buf; + CHECK_EOF(); + EXPECT_CHAR('\012'); + ++ret_cnt; + } else if (*buf == '\012') { + ++buf; + ++ret_cnt; + } else { + ++buf; + ret_cnt = 0; + } + if (ret_cnt == 2) { + return buf; + } + } + + *ret = -2; + return NULL; +} + +#define PARSE_INT(valp_, mul_) \ + if (*buf < '0' || '9' < *buf) { \ + buf++; \ + *ret = -1; \ + return NULL; \ + } \ + *(valp_) = (mul_) * (*buf++ - '0'); + +#define PARSE_INT_3(valp_) \ + do { \ + int res_ = 0; \ + PARSE_INT(&res_, 100) \ + *valp_ = res_; \ + PARSE_INT(&res_, 10) \ + *valp_ += res_; \ + PARSE_INT(&res_, 1) \ + *valp_ += res_; \ + } while (0) + +/* returned pointer is always within [buf, buf_end), or null */ +static const char *parse_http_version(const char *buf, const char *buf_end, int *minor_version, int *ret) +{ + /* we want at least [HTTP/1.] to try to parse */ + if (buf_end - buf < 9) { + *ret = -2; + return NULL; + } + EXPECT_CHAR_NO_CHECK('H'); + EXPECT_CHAR_NO_CHECK('T'); + EXPECT_CHAR_NO_CHECK('T'); + EXPECT_CHAR_NO_CHECK('P'); + EXPECT_CHAR_NO_CHECK('/'); + EXPECT_CHAR_NO_CHECK('1'); + EXPECT_CHAR_NO_CHECK('.'); + PARSE_INT(minor_version, 1); + return buf; +} + +static const char *parse_headers(const char *buf, const char *buf_end, struct phr_header *headers, size_t *num_headers, + size_t max_headers, int *ret) +{ + for (;; ++*num_headers) { + CHECK_EOF(); + if (*buf == '\015') { + ++buf; + EXPECT_CHAR('\012'); + break; + } else if (*buf == '\012') { + ++buf; + break; + } + if (*num_headers == max_headers) { + *ret = -1; + return NULL; + } + if (!(*num_headers != 0 && (*buf == ' ' || *buf == '\t'))) { + /* parsing name, but do not discard SP before colon, see + * http://www.mozilla.org/security/announce/2006/mfsa2006-33.html */ + headers[*num_headers].name = buf; + static const char ALIGNED(16) ranges1[] = "\x00 " /* control chars and up to SP */ + "\"\"" /* 0x22 */ + "()" /* 0x28,0x29 */ + ",," /* 0x2c */ + "//" /* 0x2f */ + ":@" /* 0x3a-0x40 */ + "[]" /* 0x5b-0x5d */ + "{\377"; /* 0x7b-0xff */ + int found; + buf = findchar_fast(buf, buf_end, ranges1, sizeof(ranges1) - 1, &found); + if (!found) { + CHECK_EOF(); + } + while (1) { + if (*buf == ':') { + break; + } else if (!token_char_map[(unsigned char)*buf]) { + *ret = -1; + return NULL; + } + ++buf; + CHECK_EOF(); + } + if ((headers[*num_headers].name_len = buf - headers[*num_headers].name) == 0) { + *ret = -1; + return NULL; + } + ++buf; + for (;; ++buf) { + CHECK_EOF(); + if (!(*buf == ' ' || *buf == '\t')) { + break; + } + } + } else { + headers[*num_headers].name = NULL; + headers[*num_headers].name_len = 0; + } + const char *value; + size_t value_len; + if ((buf = get_token_to_eol(buf, buf_end, &value, &value_len, ret)) == NULL) { + return NULL; + } + /* remove trailing SPs and HTABs */ + const char *value_end = value + value_len; + for (; value_end != value; --value_end) { + const char c = *(value_end - 1); + if (!(c == ' ' || c == '\t')) { + break; + } + } + headers[*num_headers].value = value; + headers[*num_headers].value_len = value_end - value; + } + return buf; +} + +static const char *parse_request(const char *buf, const char *buf_end, const char **method, size_t *method_len, const char **path, + size_t *path_len, int *minor_version, struct phr_header *headers, size_t *num_headers, + size_t max_headers, int *ret) +{ + /* skip first empty line (some clients add CRLF after POST content) */ + CHECK_EOF(); + if (*buf == '\015') { + ++buf; + EXPECT_CHAR('\012'); + } else if (*buf == '\012') { + ++buf; + } + + /* parse request line */ + ADVANCE_TOKEN(*method, *method_len); + do { + ++buf; + } while (*buf == ' '); + ADVANCE_TOKEN(*path, *path_len); + do { + ++buf; + } while (*buf == ' '); + if (*method_len == 0 || *path_len == 0) { + *ret = -1; + return NULL; + } + if ((buf = parse_http_version(buf, buf_end, minor_version, ret)) == NULL) { + return NULL; + } + if (*buf == '\015') { + ++buf; + EXPECT_CHAR('\012'); + } else if (*buf == '\012') { + ++buf; + } else { + *ret = -1; + return NULL; + } + + return parse_headers(buf, buf_end, headers, num_headers, max_headers, ret); +} + +int phr_parse_request(const char *buf_start, size_t len, const char **method, size_t *method_len, const char **path, + size_t *path_len, int *minor_version, struct phr_header *headers, size_t *num_headers, size_t last_len) +{ + const char *buf = buf_start, *buf_end = buf_start + len; + size_t max_headers = *num_headers; + int r; + + *method = NULL; + *method_len = 0; + *path = NULL; + *path_len = 0; + *minor_version = -1; + *num_headers = 0; + + /* if last_len != 0, check if the request is complete (a fast countermeasure + againt slowloris */ + if (last_len != 0 && is_complete(buf, buf_end, last_len, &r) == NULL) { + return r; + } + + if ((buf = parse_request(buf, buf_end, method, method_len, path, path_len, minor_version, headers, num_headers, max_headers, + &r)) == NULL) { + return r; + } + + return (int)(buf - buf_start); +} + +static const char *parse_response(const char *buf, const char *buf_end, int *minor_version, int *status, const char **msg, + size_t *msg_len, struct phr_header *headers, size_t *num_headers, size_t max_headers, int *ret) +{ + /* parse "HTTP/1.x" */ + if ((buf = parse_http_version(buf, buf_end, minor_version, ret)) == NULL) { + return NULL; + } + /* skip space */ + if (*buf != ' ') { + *ret = -1; + return NULL; + } + do { + ++buf; + } while (*buf == ' '); + /* parse status code, we want at least [:digit:][:digit:][:digit:] to try to parse */ + if (buf_end - buf < 4) { + *ret = -2; + return NULL; + } + PARSE_INT_3(status); + + /* get message includig preceding space */ + if ((buf = get_token_to_eol(buf, buf_end, msg, msg_len, ret)) == NULL) { + return NULL; + } + if (*msg_len == 0) { + /* ok */ + } else if (**msg == ' ') { + /* remove preceding space */ + do { + ++*msg; + --*msg_len; + } while (**msg == ' '); + } else { + /* garbage found after status code */ + *ret = -1; + return NULL; + } + + return parse_headers(buf, buf_end, headers, num_headers, max_headers, ret); +} + +int phr_parse_response(const char *buf_start, size_t len, int *minor_version, int *status, const char **msg, size_t *msg_len, + struct phr_header *headers, size_t *num_headers, size_t last_len) +{ + const char *buf = buf_start, *buf_end = buf + len; + size_t max_headers = *num_headers; + int r; + + *minor_version = -1; + *status = 0; + *msg = NULL; + *msg_len = 0; + *num_headers = 0; + + /* if last_len != 0, check if the response is complete (a fast countermeasure + against slowloris */ + if (last_len != 0 && is_complete(buf, buf_end, last_len, &r) == NULL) { + return r; + } + + if ((buf = parse_response(buf, buf_end, minor_version, status, msg, msg_len, headers, num_headers, max_headers, &r)) == NULL) { + return r; + } + + return (int)(buf - buf_start); +} + +int phr_parse_headers(const char *buf_start, size_t len, struct phr_header *headers, size_t *num_headers, size_t last_len) +{ + const char *buf = buf_start, *buf_end = buf + len; + size_t max_headers = *num_headers; + int r; + + *num_headers = 0; + + /* if last_len != 0, check if the response is complete (a fast countermeasure + against slowloris */ + if (last_len != 0 && is_complete(buf, buf_end, last_len, &r) == NULL) { + return r; + } + + if ((buf = parse_headers(buf, buf_end, headers, num_headers, max_headers, &r)) == NULL) { + return r; + } + + return (int)(buf - buf_start); +} + +enum { + CHUNKED_IN_CHUNK_SIZE, + CHUNKED_IN_CHUNK_EXT, + CHUNKED_IN_CHUNK_DATA, + CHUNKED_IN_CHUNK_CRLF, + CHUNKED_IN_TRAILERS_LINE_HEAD, + CHUNKED_IN_TRAILERS_LINE_MIDDLE +}; + +static int decode_hex(int ch) +{ + if ('0' <= ch && ch <= '9') { + return ch - '0'; + } else if ('A' <= ch && ch <= 'F') { + return ch - 'A' + 0xa; + } else if ('a' <= ch && ch <= 'f') { + return ch - 'a' + 0xa; + } else { + return -1; + } +} + +ssize_t phr_decode_chunked(struct phr_chunked_decoder *decoder, char *buf, size_t *_bufsz) +{ + size_t dst = 0, src = 0, bufsz = *_bufsz; + ssize_t ret = -2; /* incomplete */ + + while (1) { + switch (decoder->_state) { + case CHUNKED_IN_CHUNK_SIZE: + for (;; ++src) { + int v; + if (src == bufsz) + goto Exit; + if ((v = decode_hex(buf[src])) == -1) { + if (decoder->_hex_count == 0) { + ret = -1; + goto Exit; + } + break; + } + if (decoder->_hex_count == sizeof(size_t) * 2) { + ret = -1; + goto Exit; + } + decoder->bytes_left_in_chunk = decoder->bytes_left_in_chunk * 16 + v; + ++decoder->_hex_count; + } + decoder->_hex_count = 0; + decoder->_state = CHUNKED_IN_CHUNK_EXT; + /* fallthru */ + case CHUNKED_IN_CHUNK_EXT: + /* RFC 7230 A.2 "Line folding in chunk extensions is disallowed" */ + for (;; ++src) { + if (src == bufsz) + goto Exit; + if (buf[src] == '\012') + break; + } + ++src; + if (decoder->bytes_left_in_chunk == 0) { + if (decoder->consume_trailer) { + decoder->_state = CHUNKED_IN_TRAILERS_LINE_HEAD; + break; + } else { + goto Complete; + } + } + decoder->_state = CHUNKED_IN_CHUNK_DATA; + /* fallthru */ + case CHUNKED_IN_CHUNK_DATA: { + size_t avail = bufsz - src; + if (avail < decoder->bytes_left_in_chunk) { + if (dst != src) + memmove(buf + dst, buf + src, avail); + src += avail; + dst += avail; + decoder->bytes_left_in_chunk -= avail; + goto Exit; + } + if (dst != src) + memmove(buf + dst, buf + src, decoder->bytes_left_in_chunk); + src += decoder->bytes_left_in_chunk; + dst += decoder->bytes_left_in_chunk; + decoder->bytes_left_in_chunk = 0; + decoder->_state = CHUNKED_IN_CHUNK_CRLF; + } + /* fallthru */ + case CHUNKED_IN_CHUNK_CRLF: + for (;; ++src) { + if (src == bufsz) + goto Exit; + if (buf[src] != '\015') + break; + } + if (buf[src] != '\012') { + ret = -1; + goto Exit; + } + ++src; + decoder->_state = CHUNKED_IN_CHUNK_SIZE; + break; + case CHUNKED_IN_TRAILERS_LINE_HEAD: + for (;; ++src) { + if (src == bufsz) + goto Exit; + if (buf[src] != '\015') + break; + } + if (buf[src++] == '\012') + goto Complete; + decoder->_state = CHUNKED_IN_TRAILERS_LINE_MIDDLE; + /* fallthru */ + case CHUNKED_IN_TRAILERS_LINE_MIDDLE: + for (;; ++src) { + if (src == bufsz) + goto Exit; + if (buf[src] == '\012') + break; + } + ++src; + decoder->_state = CHUNKED_IN_TRAILERS_LINE_HEAD; + break; + default: + assert(!"decoder is corrupt"); + } + } + +Complete: + ret = bufsz - src; +Exit: + if (dst != src) + memmove(buf + dst, buf + src, bufsz - src); + *_bufsz = dst; + return ret; +} + +int phr_decode_chunked_is_in_data(struct phr_chunked_decoder *decoder) +{ + return decoder->_state == CHUNKED_IN_CHUNK_DATA; +} + +#undef CHECK_EOF +#undef EXPECT_CHAR +#undef ADVANCE_TOKEN diff --git a/plugins/picohttpparser/picohttpparser.h b/plugins/picohttpparser/picohttpparser.h new file mode 100644 index 0000000..0849f84 --- /dev/null +++ b/plugins/picohttpparser/picohttpparser.h @@ -0,0 +1,87 @@ +/* + * Copyright (c) 2009-2014 Kazuho Oku, Tokuhiro Matsuno, Daisuke Murase, + * Shigeo Mitsunari + * + * The software is licensed under either the MIT License (below) or the Perl + * license. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to + * deal in the Software without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + */ + +#ifndef picohttpparser_h +#define picohttpparser_h + +#include + +#ifdef _MSC_VER +#define ssize_t intptr_t +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +/* contains name and value of a header (name == NULL if is a continuing line + * of a multiline header */ +struct phr_header { + const char *name; + size_t name_len; + const char *value; + size_t value_len; +}; + +/* returns number of bytes consumed if successful, -2 if request is partial, + * -1 if failed */ +int phr_parse_request(const char *buf, size_t len, const char **method, size_t *method_len, const char **path, size_t *path_len, + int *minor_version, struct phr_header *headers, size_t *num_headers, size_t last_len); + +/* ditto */ +int phr_parse_response(const char *_buf, size_t len, int *minor_version, int *status, const char **msg, size_t *msg_len, + struct phr_header *headers, size_t *num_headers, size_t last_len); + +/* ditto */ +int phr_parse_headers(const char *buf, size_t len, struct phr_header *headers, size_t *num_headers, size_t last_len); + +/* should be zero-filled before start */ +struct phr_chunked_decoder { + size_t bytes_left_in_chunk; /* number of bytes left in current chunk */ + char consume_trailer; /* if trailing headers should be consumed */ + char _hex_count; + char _state; +}; + +/* the function rewrites the buffer given as (buf, bufsz) removing the chunked- + * encoding headers. When the function returns without an error, bufsz is + * updated to the length of the decoded data available. Applications should + * repeatedly call the function while it returns -2 (incomplete) every time + * supplying newly arrived data. If the end of the chunked-encoded data is + * found, the function returns a non-negative number indicating the number of + * octets left undecoded at the tail of the supplied buffer. Returns -1 on + * error. + */ +ssize_t phr_decode_chunked(struct phr_chunked_decoder *decoder, char *buf, size_t *bufsz); + +/* returns if the chunked decoder is in middle of chunked data */ +int phr_decode_chunked_is_in_data(struct phr_chunked_decoder *decoder); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/plugins/popen.c b/plugins/popen.c index 592263f..9eb49b6 100644 --- a/plugins/popen.c +++ b/plugins/popen.c @@ -39,9 +39,9 @@ *****************************************************************************/ #include "common.h" +#include "utils.h" /* extern so plugin has pid to kill exec'd process on timeouts */ -extern int timeout_interval; extern pid_t *childpid; extern int *child_stderr_array; extern FILE *child_process; @@ -76,18 +76,9 @@ RETSIGTYPE popen_timeout_alarm_handler (int); #define SIG_ERR ((Sigfunc *)-1) #endif -#define min(a,b) ((a) < (b) ? (a) : (b)) -#define max(a,b) ((a) > (b) ? (a) : (b)) -int open_max (void); /* {Prog openmax} */ -static void err_sys (const char *, ...) __attribute__((noreturn,format(printf, 1, 2))); -char *rtrim (char *, const char *); char *pname = NULL; /* caller can set this from argv[0] */ -/*int *childerr = NULL;*//* ptr to array allocated at run-time */ -/*extern pid_t *childpid = NULL; *//* ptr to array allocated at run-time */ -static int maxfd; /* from our open_max(), {Prog openmax} */ - #ifdef REDHAT_SPOPEN_ERROR static volatile int childtermd = 0; #endif @@ -186,14 +177,15 @@ spopen (const char *cmdstring) } argv[i] = NULL; + if(maxfd == 0) + maxfd = open_max(); + if (childpid == NULL) { /* first time through */ - maxfd = open_max (); /* allocate zeroed out array for child pids */ if ((childpid = calloc ((size_t)maxfd, sizeof (pid_t))) == NULL) return (NULL); } if (child_stderr_array == NULL) { /* first time through */ - maxfd = open_max (); /* allocate zeroed out array for child pids */ if ((child_stderr_array = calloc ((size_t)maxfd, sizeof (int))) == NULL) return (NULL); } @@ -273,15 +265,6 @@ spclose (FILE * fp) return (1); } -#ifdef OPEN_MAX -static int openmax = OPEN_MAX; -#else -static int openmax = 0; -#endif - -#define OPEN_MAX_GUESS 256 /* if OPEN_MAX is indeterminate */ - /* no guarantee this is adequate */ - #ifdef REDHAT_SPOPEN_ERROR RETSIGTYPE popen_sigchld_handler (int signo) @@ -309,63 +292,3 @@ popen_timeout_alarm_handler (int signo) exit (STATE_CRITICAL); } } - - -int -open_max (void) -{ - if (openmax == 0) { /* first time through */ - errno = 0; - if ((openmax = sysconf (_SC_OPEN_MAX)) < 0) { - if (errno == 0) - openmax = OPEN_MAX_GUESS; /* it's indeterminate */ - else - err_sys (_("sysconf error for _SC_OPEN_MAX")); - } - } - return (openmax); -} - - -/* Fatal error related to a system call. - * Print a message and die. */ - -#define MAXLINE 2048 -static void -err_sys (const char *fmt, ...) -{ - int errnoflag = 1; - int errno_save; - char buf[MAXLINE]; - - va_list ap; - - va_start (ap, fmt); - /* err_doit (1, fmt, ap); */ - errno_save = errno; /* value caller might want printed */ - vsprintf (buf, fmt, ap); - if (errnoflag) - sprintf (buf + strlen (buf), ": %s", strerror (errno_save)); - strcat (buf, "\n"); - fflush (stdout); /* in case stdout and stderr are the same */ - fputs (buf, stderr); - fflush (NULL); /* flushes all stdio output streams */ - va_end (ap); - exit (1); -} - -char * -rtrim (char *str, const char *tok) -{ - int i = 0; - int j = sizeof (str); - - while (str != NULL && i < j) { - if (*(str + i) == *tok) { - sprintf (str + i, "%s", "\0"); - return str; - } - i++; - } - return str; -} diff --git a/plugins/popen.h b/plugins/popen.h index fc7e78e..a5dd8fa 100644 --- a/plugins/popen.h +++ b/plugins/popen.h @@ -7,7 +7,6 @@ FILE *spopen (const char *); int spclose (FILE *); RETSIGTYPE popen_timeout_alarm_handler (int); -extern unsigned int timeout_interval; pid_t *childpid=NULL; int *child_stderr_array=NULL; FILE *child_process=NULL; diff --git a/plugins/runcmd.c b/plugins/runcmd.c index 1a7c904..a7155d2 100644 --- a/plugins/runcmd.c +++ b/plugins/runcmd.c @@ -67,19 +67,6 @@ * occur in any number of threads simultaneously. */ static pid_t *np_pids = NULL; -/* Try sysconf(_SC_OPEN_MAX) first, as it can be higher than OPEN_MAX. - * If that fails and the macro isn't defined, we fall back to an educated - * guess. There's no guarantee that our guess is adequate and the program - * will die with SIGSEGV if it isn't and the upper boundary is breached. */ -#ifdef _SC_OPEN_MAX -static long maxfd = 0; -#elif defined(OPEN_MAX) -# define maxfd OPEN_MAX -#else /* sysconf macro unavailable, so guess (may be wildly inaccurate) */ -# define maxfd 256 -#endif - - /** prototypes **/ static int np_runcmd_open(const char *, int *, int *) __attribute__((__nonnull__(1, 2, 3))); @@ -99,14 +86,8 @@ extern void die (int, const char *, ...) * through this api and thus achieve async-safeness throughout the api */ void np_runcmd_init(void) { -#ifndef maxfd - if(!maxfd && (maxfd = sysconf(_SC_OPEN_MAX)) < 0) { - /* possibly log or emit a warning here, since there's no - * guarantee that our guess at maxfd will be adequate */ - maxfd = 256; - } -#endif - + if(maxfd == 0) + maxfd = open_max(); if(!np_pids) np_pids = calloc(maxfd, sizeof(pid_t)); } diff --git a/plugins/sslutils.c b/plugins/sslutils.c index e38947e..14f6579 100644 --- a/plugins/sslutils.c +++ b/plugins/sslutils.c @@ -1,29 +1,29 @@ /***************************************************************************** -* +* * Monitoring Plugins SSL utilities -* +* * License: GPL * Copyright (c) 2005-2010 Monitoring Plugins Development Team -* +* * Description: -* +* * This file contains common functions for plugins that require SSL. -* +* * * 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 . -* -* +* +* *****************************************************************************/ #define MAX_CN_LENGTH 256 @@ -193,12 +193,22 @@ int np_net_ssl_read(void *buf, int num) { int np_net_ssl_check_cert(int days_till_exp_warn, int days_till_exp_crit){ # ifdef USE_OPENSSL - X509 *certificate=NULL; + X509 *certificate = NULL; + certificate=SSL_get_peer_certificate(s); + return(np_net_ssl_check_certificate(certificate, days_till_exp_warn, days_till_exp_crit)); +# else /* ifndef USE_OPENSSL */ + printf("%s\n", _("WARNING - Plugin does not support checking certificates.")); + return STATE_WARNING; +# endif /* USE_OPENSSL */ +} + +int np_net_ssl_check_certificate(X509 *certificate, int days_till_exp_warn, int days_till_exp_crit){ +# ifdef USE_OPENSSL X509_NAME *subj=NULL; char timestamp[50] = ""; char cn[MAX_CN_LENGTH]= ""; char *tz; - + int cnlen =-1; int status=STATE_UNKNOWN; @@ -210,7 +220,6 @@ int np_net_ssl_check_cert(int days_till_exp_warn, int days_till_exp_crit){ int time_remaining; time_t tm_t; - certificate=SSL_get_peer_certificate(s); if (!certificate) { printf("%s\n",_("CRITICAL - Cannot retrieve server certificate.")); return STATE_CRITICAL; diff --git a/plugins/t/NPTest.cache.travis b/plugins/t/NPTest.cache.travis index bcec985..9b9f805 100644 --- a/plugins/t/NPTest.cache.travis +++ b/plugins/t/NPTest.cache.travis @@ -1,58 +1,54 @@ { - 'MYSQL_LOGIN_DETAILS' => '-u root -d test', 'NP_ALLOW_SUDO' => 'yes', 'NP_DNS_SERVER' => '8.8.8.8', 'NP_GOOD_NTP_SERVICE' => '', - 'NP_HOSTNAME_INVALID' => 'nosuchhost', - 'NP_HOSTNAME_VALID' => 'monitoringplugins.org', - 'NP_HOSTNAME_VALID_IP' => '130.133.8.40', - 'NP_HOSTNAME_VALID_REVERSE' => 'orwell.monitoring-plugins.org.', 'NP_HOST_DHCP_RESPONSIVE' => '', + 'NP_HOST_HPJD_PORT_INVALID' => '161', + 'NP_HOST_HPJD_PORT_VALID' => '', + 'NP_HOSTNAME_INVALID_CIDR' => '130.133.8.39/30', + 'NP_HOSTNAME_INVALID' => 'nosuchhost', + 'NP_HOSTNAME_VALID_CIDR' => '130.133.8.41/30', + 'NP_HOSTNAME_VALID_IP' => '130.133.8.40', + 'NP_HOSTNAME_VALID' => 'monitoring-plugins.org', + 'NP_HOSTNAME_VALID_REVERSE' => 'orwell.monitoring-plugins.org.', 'NP_HOST_NONRESPONSIVE' => '10.0.0.1', 'NP_HOST_RESPONSIVE' => 'localhost', 'NP_HOST_SMB' => '', - 'NP_HOST_SNMP' => 'localhost', + 'NP_HOST_SNMP' => '', 'NP_HOST_TCP_FTP' => '', 'NP_HOST_TCP_HPJD' => '', - 'NP_HOST_HPJD_PORT_INVALID' => '161', - 'NP_HOST_HPJD_PORT_VALID' => '', - 'NP_HOST_TCP_HTTP' => 'localhost', 'NP_HOST_TCP_HTTP2' => 'test.monitoring-plugins.org', + 'NP_HOST_TCP_HTTP' => 'localhost', 'NP_HOST_TCP_IMAP' => 'imap.web.de', + 'NP_HOST_TCP_JABBER' => 'jabber.org', 'NP_HOST_TCP_LDAP' => 'localhost', 'NP_HOST_TCP_POP' => 'pop.web.de', + 'NP_HOST_TCP_PROXY' => 'localhost', 'NP_HOST_TCP_SMTP' => 'localhost', 'NP_HOST_TCP_SMTP_NOTLS' => '', 'NP_HOST_TCP_SMTP_TLS' => '', + 'NP_HOST_TLS_CERT' => 'localhost, + 'NP_HOST_TLS_HTTP' => 'localhost', + 'NP_HOST_UDP_TIME' => 'none', 'NP_INTERNET_ACCESS' => 'yes', 'NP_LDAP_BASE_DN' => 'cn=admin,dc=nodomain', 'NP_MOUNTPOINT2_VALID' => '/media/ramdisk', 'NP_MOUNTPOINT_VALID' => '/', + 'NP_MYSQL_LOGIN_DETAILS' => '-u root -d test', 'NP_MYSQL_SERVER' => 'localhost', - 'NP_HOST_UDP_TIME' => 'localhost', 'NP_MYSQL_SOCKET' => '/var/run/mysqld/mysqld.sock', 'NP_MYSQL_WITH_SLAVE' => '', 'NP_MYSQL_WITH_SLAVE_LOGIN' => '', 'NP_NO_NTP_SERVICE' => 'localhost', + 'NP_PORT_TCP_PROXY' => '3128', 'NP_SMB_SHARE' => '', 'NP_SMB_SHARE_DENY' => '', 'NP_SMB_SHARE_SPC' => '', 'NP_SMB_VALID_USER' => '', 'NP_SMB_VALID_USER_PASS' => '', - 'NP_SNMP_COMMUNITY' => 'public', + 'NP_SNMP_COMMUNITY' => '', + 'NP_SNMP_USER' => '', 'NP_SSH_CONFIGFILE' => '~/.ssh/config', 'NP_SSH_HOST' => 'localhost', - 'NP_SSH_IDENTITY' => '~/.ssh/id_dsa', - 'NP_HOST_TCP_JABBER' => 'jabber.org', - 'host_nonresponsive' => '10.0.0.1', - 'host_responsive' => 'localhost', - 'host_snmp' => '', - 'host_tcp_ftp' => '', - 'host_tcp_http' => 'localhost', - 'host_tcp_imap' => 'imap.nierlein.de', - 'host_tcp_smtp' => 'localhost', - 'hostname_invalid' => 'nosuchhost', - 'snmp_community' => '', - 'user_snmp' => '', - 'host_udp_time' => 'none', + 'NP_SSH_IDENTITY' => '~/.ssh/id_rsa' } diff --git a/plugins/t/check_apt.t b/plugins/t/check_apt.t index 9ba0ff8..430eb53 100644 --- a/plugins/t/check_apt.t +++ b/plugins/t/check_apt.t @@ -23,7 +23,7 @@ sub make_result_regexp { } if (-x "./check_apt") { - plan tests => 28; + plan tests => 36; } else { plan skip_all => "No check_apt compiled"; } @@ -40,10 +40,18 @@ $result = NPTest->testCmd( sprintf($testfile_command, "", "debian2") ); is( $result->return_code, 1, "Debian apt output, warning" ); like( $result->output, make_result_regexp(13, 0), "Output correct" ); +$result = NPTest->testCmd( sprintf($testfile_command, "-o", "debian2") ); +is( $result->return_code, 0, "Debian apt output, no critical" ); +like( $result->output, make_result_regexp(13, 0), "Output correct" ); + $result = NPTest->testCmd( sprintf($testfile_command, "", "debian3") ); is( $result->return_code, 2, "Debian apt output, some critical" ); like( $result->output, make_result_regexp(19, 4), "Output correct" ); +$result = NPTest->testCmd( sprintf($testfile_command, "-o", "debian3") ); +is( $result->return_code, 2, "Debian apt output, some critical" ); +like( $result->output, make_result_regexp(19, 4), "Output correct" ); + $result = NPTest->testCmd( sprintf($testfile_command, "-c '^[^\\(]*\\(.* (Debian-Security:|Ubuntu:[^/]*/[^-]*-security)'", "debian3") ); is( $result->return_code, 2, "Debian apt output - should have same result when default security regexp specified via -c" ); like( $result->output, make_result_regexp(19, 4), "Output correct" ); @@ -52,6 +60,10 @@ $result = NPTest->testCmd( sprintf($testfile_command, "-i libc6", "debian3") ); is( $result->return_code, 1, "Debian apt output, filter for libc6" ); like( $result->output, make_result_regexp(3, 0), "Output correct" ); +$result = NPTest->testCmd( sprintf($testfile_command, "-i libc6", "debian3") ); +is( $result->return_code, 1, "Debian apt output, filter for libc6, not critical" ); +like( $result->output, make_result_regexp(3, 0), "Output correct" ); + $result = NPTest->testCmd( sprintf($testfile_command, "-i libc6 -i xen", "debian3") ); is( $result->return_code, 2, "Debian apt output, filter for libc6 and xen" ); like( $result->output, make_result_regexp(9, 4), "Output correct" ); @@ -64,6 +76,10 @@ $result = NPTest->testCmd( sprintf($testfile_command, "-e libc6", "debian3") ); is( $result->return_code, 2, "Debian apt output, filter out libc6" ); like( $result->output, make_result_regexp(16, 4), "Output correct" ); +$result = NPTest->testCmd( sprintf($testfile_command, "-e libc6 -o", "debian3") ); +is( $result->return_code, 2, "Debian apt output, filter out libc6, critical" ); +like( $result->output, make_result_regexp(16, 4), "Output correct" ); + $result = NPTest->testCmd( sprintf($testfile_command, "-e libc6 -e xen", "debian3") ); is( $result->return_code, 1, "Debian apt output, filter out libc6 and xen" ); like( $result->output, make_result_regexp(10, 0), "Output correct" ); diff --git a/plugins/t/check_by_ssh.t b/plugins/t/check_by_ssh.t index 4797390..1d2939e 100644 --- a/plugins/t/check_by_ssh.t +++ b/plugins/t/check_by_ssh.t @@ -9,17 +9,9 @@ use Test::More; use NPTest; # Required parameters -my $ssh_service = getTestParameter( "NP_SSH_HOST", - "A host providing SSH service", - "localhost"); - -my $ssh_key = getTestParameter( "NP_SSH_IDENTITY", - "A key allowing access to NP_SSH_HOST", - "~/.ssh/id_dsa"); - -my $ssh_conf = getTestParameter( "NP_SSH_CONFIGFILE", - "A config file with ssh settings", - "~/.ssh/config"); +my $ssh_service = getTestParameter("NP_SSH_HOST", "A host providing SSH service", "localhost"); +my $ssh_key = getTestParameter("NP_SSH_IDENTITY", "A key allowing access to NP_SSH_HOST", "~/.ssh/id_dsa"); +my $ssh_conf = getTestParameter( "NP_SSH_CONFIGFILE", "A config file with ssh settings", "~/.ssh/config"); plan skip_all => "SSH_HOST and SSH_IDENTITY must be defined" unless ($ssh_service && $ssh_key); diff --git a/plugins/t/check_curl.t b/plugins/t/check_curl.t new file mode 100644 index 0000000..4bff538 --- /dev/null +++ b/plugins/t/check_curl.t @@ -0,0 +1,199 @@ +#! /usr/bin/perl -w -I .. +# +# HyperText Transfer Protocol (HTTP) Test via check_http +# +# + +use strict; +use Test::More; +use POSIX qw/mktime strftime/; +use NPTest; + +plan tests => 57; + +my $successOutput = '/OK.*HTTP.*second/'; + +my $res; +my $plugin = 'check_http'; +$plugin = 'check_curl' if $0 =~ m/check_curl/mx; + +my $host_tcp_http = getTestParameter("NP_HOST_TCP_HTTP", "A host providing the HTTP Service (a web server)", "localhost"); +my $host_tls_http = getTestParameter("NP_HOST_TLS_HTTP", "A host providing the HTTPS Service (a tls web server)", "localhost"); +my $host_tls_cert = getTestParameter("NP_HOST_TLS_CERT", "the common name of the certificate.", "localhost"); +my $host_nonresponsive = getTestParameter("NP_HOST_NONRESPONSIVE", "The hostname of system not responsive to network requests", "10.0.0.1"); +my $hostname_invalid = getTestParameter("NP_HOSTNAME_INVALID", "An invalid (not known to DNS) hostname", "nosuchhost"); +my $internet_access = getTestParameter("NP_INTERNET_ACCESS", "Is this system directly connected to the internet?", "yes"); +my $host_tcp_http2 = getTestParameter("NP_HOST_TCP_HTTP2", "A host providing an index page containing the string 'monitoring'", "test.monitoring-plugins.org"); +my $host_tcp_proxy = getTestParameter("NP_HOST_TCP_PROXY", "A host providing a HTTP proxy with CONNECT support", "localhost"); +my $port_tcp_proxy = getTestParameter("NP_PORT_TCP_PROXY", "Port of the proxy with HTTP and CONNECT support", "3128"); + +my $faketime = -x '/usr/bin/faketime' ? 1 : 0; + + +$res = NPTest->testCmd( + "./$plugin $host_tcp_http -wt 300 -ct 600" + ); +cmp_ok( $res->return_code, '==', 0, "Webserver $host_tcp_http responded" ); +like( $res->output, $successOutput, "Output OK" ); + +$res = NPTest->testCmd( + "./$plugin $host_tcp_http -wt 300 -ct 600 -v -v -v -k 'bob:there' -k 'carl:frown'" + ); +like( $res->output, '/bob:there\r\ncarl:frown\r\n/', "Got headers with multiple -k options" ); + +$res = NPTest->testCmd( + "./$plugin $host_nonresponsive -wt 1 -ct 2 -t 3" + ); +cmp_ok( $res->return_code, '==', 2, "Webserver $host_nonresponsive not responding" ); +# was CRITICAL only, but both check_curl and check_http print HTTP CRITICAL (puzzle?!) +cmp_ok( $res->output, 'eq', "HTTP CRITICAL - Invalid HTTP response received from host on port 80: cURL returned 28 - Timeout was reached", "Output OK"); + +$res = NPTest->testCmd( + "./$plugin $hostname_invalid -wt 1 -ct 2" + ); +cmp_ok( $res->return_code, '==', 2, "Webserver $hostname_invalid not valid" ); +# The first part of the message comes from the OS catalogue, so cannot check this. +# On Debian, it is Name or service not known, on Darwin, it is No address associated with nodename +# Is also possible to get a socket timeout if DNS is not responding fast enough +# cURL gives us consistent strings from it's own 'lib/strerror.c' +like( $res->output, "/cURL returned 6 - Couldn't resolve host name/", "Output OK"); + +# host header checks +$res = NPTest->testCmd("./$plugin -v -H $host_tcp_http"); +like( $res->output, '/^Host: '.$host_tcp_http.'\s*$/ms', "Host Header OK" ); +like( $res->output, '/CURLOPT_URL: http:\/\/'.$host_tcp_http.':80\//ms', "Url OK" ); + +$res = NPTest->testCmd("./$plugin -v -H $host_tcp_http -p 80"); +like( $res->output, '/^Host: '.$host_tcp_http.'\s*$/ms', "Host Header OK" ); +like( $res->output, '/CURLOPT_URL: http:\/\/'.$host_tcp_http.':80\//ms', "Url OK" ); + +$res = NPTest->testCmd("./$plugin -v -H $host_tcp_http:8080 -p 80"); +like( $res->output, '/^Host: '.$host_tcp_http.':8080\s*$/ms', "Host Header OK" ); +like( $res->output, '/CURLOPT_URL: http:\/\/'.$host_tcp_http.':80\//ms', "Url OK" ); + +$res = NPTest->testCmd("./$plugin -v -H $host_tcp_http:8080 -p 80"); +like( $res->output, '/^Host: '.$host_tcp_http.':8080\s*$/ms', "Host Header OK" ); +like( $res->output, '/CURLOPT_URL: http:\/\/'.$host_tcp_http.':80\//ms', "Url OK" ); + +$res = NPTest->testCmd("./$plugin -v -H $host_tcp_http:8080 -p 80 -k 'Host: testhost:8001'"); +like( $res->output, '/^Host: testhost:8001\s*$/ms', "Host Header OK" ); +like( $res->output, '/CURLOPT_URL: http:\/\/'.$host_tcp_http.':80\//ms', "Url OK" ); + +$res = NPTest->testCmd("./$plugin -v -I $host_tcp_http -p 80 -k 'Host: testhost:8001'"); +like( $res->output, '/^Host: testhost:8001\s*$/ms', "Host Header OK" ); +like( $res->output, '/CURLOPT_URL: http:\/\/'.$host_tcp_http.':80\//ms', "Url OK" ); + +SKIP: { + skip "No internet access", 3 if $internet_access eq "no"; + + $res = NPTest->testCmd("./$plugin -v -H $host_tls_http -S"); + like( $res->output, '/^Host: '.$host_tls_http.'\s*$/ms', "Host Header OK" ); + + $res = NPTest->testCmd("./$plugin -v -H $host_tls_http:8080 -S -p 443"); + like( $res->output, '/^Host: '.$host_tls_http.':8080\s*$/ms', "Host Header OK" ); + + $res = NPTest->testCmd("./$plugin -v -H $host_tls_http:443 -S -p 443"); + like( $res->output, '/^Host: '.$host_tls_http.'\s*$/ms', "Host Header OK" ); +}; + +SKIP: { + skip "No host serving monitoring in index file", 7 unless $host_tcp_http2; + + $res = NPTest->testCmd( "./$plugin -H $host_tcp_http2 -r 'monitoring'" ); + cmp_ok( $res->return_code, "==", 0, "Got a reference to 'monitoring'"); + + $res = NPTest->testCmd( "./$plugin -H $host_tcp_http2 -r 'mONiTORing'" ); + cmp_ok( $res->return_code, "==", 2, "Not got 'mONiTORing'"); + like ( $res->output, "/pattern not found/", "Error message says 'pattern not found'"); + + $res = NPTest->testCmd( "./$plugin -H $host_tcp_http2 -R 'mONiTORing'" ); + cmp_ok( $res->return_code, "==", 0, "But case insensitive doesn't mind 'mONiTORing'"); + + $res = NPTest->testCmd( "./$plugin -H $host_tcp_http2 -r 'monitoring' --invert-regex" ); + cmp_ok( $res->return_code, "==", 2, "Invert results work when found"); + like ( $res->output, "/pattern found/", "Error message says 'pattern found'"); + + $res = NPTest->testCmd( "./$plugin -H $host_tcp_http2 -r 'mONiTORing' --invert-regex" ); + cmp_ok( $res->return_code, "==", 0, "And also when not found"); +} +SKIP: { + skip "No internet access", 16 if $internet_access eq "no"; + + $res = NPTest->testCmd( + "./$plugin --ssl $host_tls_http" + ); + cmp_ok( $res->return_code, '==', 0, "Can read https for $host_tls_http" ); + + $res = NPTest->testCmd( "./$plugin -C 1 --ssl $host_tls_http" ); + cmp_ok( $res->return_code, '==', 0, "Checking certificate for $host_tls_http"); + like ( $res->output, "/Certificate '$host_tls_cert' will expire on/", "Output OK" ); + my $saved_cert_output = $res->output; + + $res = NPTest->testCmd( "./$plugin -C 8000,1 --ssl $host_tls_http" ); + cmp_ok( $res->return_code, '==', 1, "Checking certificate for $host_tls_http"); + like ( $res->output, qr/WARNING - Certificate '$host_tls_cert' expires in \d+ day/, "Output Warning" ); + + $res = NPTest->testCmd( "./$plugin $host_tls_http -C 1" ); + is( $res->return_code, 0, "Old syntax for cert checking okay" ); + is( $res->output, $saved_cert_output, "Same output as new syntax" ); + + $res = NPTest->testCmd( "./$plugin -H $host_tls_http -C 1" ); + is( $res->return_code, 0, "Updated syntax for cert checking okay" ); + is( $res->output, $saved_cert_output, "Same output as new syntax" ); + + $res = NPTest->testCmd( "./$plugin -C 1 $host_tls_http" ); + cmp_ok( $res->output, 'eq', $saved_cert_output, "--ssl option automatically added"); + + $res = NPTest->testCmd( "./$plugin $host_tls_http -C 1" ); + cmp_ok( $res->output, 'eq', $saved_cert_output, "Old syntax for cert checking still works"); + + # run some certificate checks with faketime + SKIP: { + skip "No faketime binary found", 12 if !$faketime; + $res = NPTest->testCmd("LC_TIME=C TZ=UTC ./$plugin -C 1 $host_tls_http"); + like($res->output, qr/OK - Certificate '$host_tls_cert' will expire on/, "Catch cert output"); + is( $res->return_code, 0, "Catch cert output exit code" ); + my($mon,$day,$hour,$min,$sec,$year) = ($res->output =~ /(\w+)\s+(\d+)\s+(\d+):(\d+):(\d+)\s+(\d+)/); + if(!defined $year) { + die("parsing date failed from: ".$res->output); + } + my $months = {'Jan' => 0, 'Feb' => 1, 'Mar' => 2, 'Apr' => 3, 'May' => 4, 'Jun' => 5, 'Jul' => 6, 'Aug' => 7, 'Sep' => 8, 'Oct' => 9, 'Nov' => 10, 'Dec' => 11}; + my $ts = mktime($sec, $min, $hour, $day, $months->{$mon}, $year-1900); + my $time = strftime("%Y-%m-%d %H:%M:%S", localtime($ts)); + $res = NPTest->testCmd("LC_TIME=C TZ=UTC faketime -f '".strftime("%Y-%m-%d %H:%M:%S", localtime($ts))."' ./$plugin -C 1 $host_tls_http"); + like($res->output, qr/CRITICAL - Certificate '$host_tls_cert' just expired/, "Output on expire date"); + is( $res->return_code, 2, "Output on expire date" ); + + $res = NPTest->testCmd("LC_TIME=C TZ=UTC faketime -f '".strftime("%Y-%m-%d %H:%M:%S", localtime($ts-1))."' ./$plugin -C 1 $host_tls_http"); + like($res->output, qr/CRITICAL - Certificate '$host_tls_cert' expires in 0 minutes/, "cert expires in 1 second output"); + is( $res->return_code, 2, "cert expires in 1 second exit code" ); + + $res = NPTest->testCmd("LC_TIME=C TZ=UTC faketime -f '".strftime("%Y-%m-%d %H:%M:%S", localtime($ts-120))."' ./$plugin -C 1 $host_tls_http"); + like($res->output, qr/CRITICAL - Certificate '$host_tls_cert' expires in 2 minutes/, "cert expires in 2 minutes output"); + is( $res->return_code, 2, "cert expires in 2 minutes exit code" ); + + $res = NPTest->testCmd("LC_TIME=C TZ=UTC faketime -f '".strftime("%Y-%m-%d %H:%M:%S", localtime($ts-7200))."' ./$plugin -C 1 $host_tls_http"); + like($res->output, qr/CRITICAL - Certificate '$host_tls_cert' expires in 2 hours/, "cert expires in 2 hours output"); + is( $res->return_code, 2, "cert expires in 2 hours exit code" ); + + $res = NPTest->testCmd("LC_TIME=C TZ=UTC faketime -f '".strftime("%Y-%m-%d %H:%M:%S", localtime($ts+1))."' ./$plugin -C 1 $host_tls_http"); + like($res->output, qr/CRITICAL - Certificate '$host_tls_cert' expired on/, "Certificate expired output"); + is( $res->return_code, 2, "Certificate expired exit code" ); + }; + + $res = NPTest->testCmd( "./$plugin --ssl $host_tls_http -E" ); + like ( $res->output, '/time_connect=[\d\.]+/', 'Extended Performance Data Output OK' ); + like ( $res->output, '/time_ssl=[\d\.]+/', 'Extended Performance Data SSL Output OK' ); + + $res = NPTest->testCmd( + "./$plugin --ssl -H www.e-paycobalt.com" + ); + cmp_ok( $res->return_code, "==", 0, "Can read https for www.e-paycobalt.com (uses AES certificate)" ); + + + $res = NPTest->testCmd( "./$plugin -H www.mozilla.com -u /firefox -f follow" ); + is( $res->return_code, 0, "Redirection based on location is okay"); + + $res = NPTest->testCmd( "./$plugin -H www.mozilla.com --extended-perfdata" ); + like ( $res->output, '/time_connect=[\d\.]+/', 'Extended Performance Data Output OK' ); +} diff --git a/plugins/t/check_disk.t b/plugins/t/check_disk.t index 7e0f74b..fdd8769 100644 --- a/plugins/t/check_disk.t +++ b/plugins/t/check_disk.t @@ -248,11 +248,11 @@ $result = NPTest->testCmd( "./check_disk -w 100% -c 100% ".${mountpoint_valid} ) cmp_ok( $result->return_code, "==", 2, "100% empty" ); like( $result->output, $failureOutput, "Right output" ); -$result = NPTest->testCmd( "./check_disk -w 100000 -c 100000 $mountpoint_valid" ); -cmp_ok( $result->return_code, '==', 2, "Check for 100GB free" ); +$result = NPTest->testCmd( "./check_disk -w 100000000 -c 100000000 $mountpoint_valid" ); +cmp_ok( $result->return_code, '==', 2, "Check for 100TB free" ); -$result = NPTest->testCmd( "./check_disk -w 100 -c 100 -u GB ".${mountpoint_valid} ); # 100 GB empty -cmp_ok( $result->return_code, "==", 2, "100 GB empty" ); +$result = NPTest->testCmd( "./check_disk -w 100 -c 100 -u TB ".${mountpoint_valid} ); # 100 TB empty +cmp_ok( $result->return_code, "==", 2, "100 TB empty" ); # Checking old syntax of check_disk warn crit [fs], with warn/crit at USED% thresholds diff --git a/plugins/t/check_dns.t b/plugins/t/check_dns.t index 035e768..cdfbe60 100644 --- a/plugins/t/check_dns.t +++ b/plugins/t/check_dns.t @@ -10,26 +10,38 @@ use NPTest; plan skip_all => "check_dns not compiled" unless (-x "check_dns"); -plan tests => 16; +plan tests => 19; my $successOutput = '/DNS OK: [\.0-9]+ seconds? response time/'; my $hostname_valid = getTestParameter( "NP_HOSTNAME_VALID", "A valid (known to DNS) hostname", - "monitoring-plugins.org" + "monitoring-plugins.org", ); my $hostname_valid_ip = getTestParameter( "NP_HOSTNAME_VALID_IP", "The IP address of the valid hostname $hostname_valid", - "66.118.156.50", + "130.133.8.40", + ); + +my $hostname_valid_cidr = getTestParameter( + "NP_HOSTNAME_VALID_CIDR", + "An valid CIDR range containing $hostname_valid_ip", + "130.133.8.41/30", + ); + +my $hostname_invalid_cidr = getTestParameter( + "NP_HOSTNAME_INVALID_CIDR", + "An (valid) CIDR range NOT containing $hostname_valid_ip", + "130.133.8.39/30", ); my $hostname_valid_reverse = getTestParameter( "NP_HOSTNAME_VALID_REVERSE", "The hostname of $hostname_valid_ip", - "66-118-156-50.static.sagonet.net.", + "orwell.monitoring-plugins.org.", ); my $hostname_invalid = getTestParameter( @@ -87,3 +99,9 @@ $res = NPTest->testCmd("./check_dns -H $hostname_valid_ip -a $hostname_valid_rev cmp_ok( $res->return_code, '==', 0, "Got expected fqdn"); like ( $res->output, $successOutput, "Output OK"); +$res = NPTest->testCmd("./check_dns -H $hostname_valid -a $hostname_valid_cidr -t 5"); +cmp_ok( $res->return_code, '==', 0, "Got expected address"); + +$res = NPTest->testCmd("./check_dns -H $hostname_valid -a $hostname_invalid_cidr -t 5"); +cmp_ok( $res->return_code, '==', 2, "Got wrong address"); +like ( $res->output, "/^DNS CRITICAL.*expected '$hostname_invalid_cidr' but got '$hostname_valid_ip'".'$/', "Output OK"); diff --git a/plugins/t/check_fping.t b/plugins/t/check_fping.t index 08692e4..342b0a7 100644 --- a/plugins/t/check_fping.t +++ b/plugins/t/check_fping.t @@ -15,15 +15,9 @@ BEGIN {$tests = 4; plan tests => $tests} my $successOutput = '/^FPING OK - /'; my $failureOutput = '/^FPING CRITICAL - /'; -my $host_responsive = getTestParameter( "host_responsive", "NP_HOST_RESPONSIVE", "localhost", - "The hostname of system responsive to network requests" ); - -my $host_nonresponsive = getTestParameter( "host_nonresponsive", "NP_HOST_NONRESPONSIVE", "10.0.0.1", - "The hostname of system not responsive to network requests" ); - -my $hostname_invalid = getTestParameter( "hostname_invalid", "NP_HOSTNAME_INVALID", "nosuchhost", - "An invalid (not known to DNS) hostname" ); - +my $host_responsive = getTestParameter("NP_HOST_RESPONSIVE", "The hostname of system responsive to network requests", "localhost"); +my $host_nonresponsive = getTestParameter("NP_HOST_NONRESPONSIVE", "The hostname of system not responsive to network requests", "10.0.0.1"); +my $hostname_invalid = getTestParameter("NP_HOSTNAME_INVALID", "An invalid (not known to DNS) hostname", "nosuchhost"); my $t; diff --git a/plugins/t/check_ftp.t b/plugins/t/check_ftp.t index de6831b..93a7d7c 100644 --- a/plugins/t/check_ftp.t +++ b/plugins/t/check_ftp.t @@ -11,14 +11,9 @@ use NPTest; use vars qw($tests); BEGIN {$tests = 4; plan tests => $tests} -my $host_tcp_ftp = getTestParameter( "host_tcp_ftp", "NP_HOST_TCP_FTP", "localhost", - "A host providing the FTP Service (an FTP server)"); - -my $host_nonresponsive = getTestParameter( "host_nonresponsive", "NP_HOST_NONRESPONSIVE", "10.0.0.1", - "The hostname of system not responsive to network requests" ); - -my $hostname_invalid = getTestParameter( "hostname_invalid", "NP_HOSTNAME_INVALID", "nosuchhost", - "An invalid (not known to DNS) hostname" ); +my $host_tcp_ftp = getTestParameter("NP_HOST_TCP_FTP", "A host providing the FTP Service (an FTP server)", "localhost"); +my $host_nonresponsive = getTestParameter("NP_HOST_NONRESPONSIVE", "The hostname of system not responsive to network requests", "10.0.0.1"); +my $hostname_invalid = getTestParameter("NP_HOSTNAME_INVALID", "An invalid (not known to DNS) hostname", "nosuchhost"); my $successOutput = '/FTP OK -\s+[0-9]?\.?[0-9]+ second response time/'; diff --git a/plugins/t/check_http.t b/plugins/t/check_http.t index 5a90f02..e92681e 100644 --- a/plugins/t/check_http.t +++ b/plugins/t/check_http.t @@ -9,54 +9,46 @@ use Test::More; use POSIX qw/mktime strftime/; use NPTest; -plan tests => 49; +plan tests => 50; my $successOutput = '/OK.*HTTP.*second/'; my $res; +my $plugin = 'check_http'; +$plugin = 'check_curl' if $0 =~ m/check_curl/mx; -my $host_tcp_http = getTestParameter( "NP_HOST_TCP_HTTP", - "A host providing the HTTP Service (a web server)", - "localhost" ); - -my $host_nonresponsive = getTestParameter( "NP_HOST_NONRESPONSIVE", - "The hostname of system not responsive to network requests", - "10.0.0.1" ); - -my $hostname_invalid = getTestParameter( "NP_HOSTNAME_INVALID", - "An invalid (not known to DNS) hostname", - "nosuchhost"); - -my $internet_access = getTestParameter( "NP_INTERNET_ACCESS", - "Is this system directly connected to the internet?", - "yes"); - -my $host_tcp_http2 = getTestParameter( "NP_HOST_TCP_HTTP2", - "A host providing an index page containing the string 'monitoring'", - "test.monitoring-plugins.org" ); +my $host_tcp_http = getTestParameter("NP_HOST_TCP_HTTP", "A host providing the HTTP Service (a web server)", "localhost"); +my $host_tls_http = getTestParameter("NP_HOST_TLS_HTTP", "A host providing the HTTPS Service (a tls web server)", "localhost"); +my $host_tls_cert = getTestParameter("NP_HOST_TLS_CERT", "the common name of the certificate.", "localhost"); +my $host_nonresponsive = getTestParameter("NP_HOST_NONRESPONSIVE", "The hostname of system not responsive to network requests", "10.0.0.1"); +my $hostname_invalid = getTestParameter("NP_HOSTNAME_INVALID", "An invalid (not known to DNS) hostname", "nosuchhost"); +my $internet_access = getTestParameter("NP_INTERNET_ACCESS", "Is this system directly connected to the internet?", "yes"); +my $host_tcp_http2 = getTestParameter("NP_HOST_TCP_HTTP2", "A host providing an index page containing the string 'monitoring'", "test.monitoring-plugins.org"); +my $host_tcp_proxy = getTestParameter("NP_HOST_TCP_PROXY", "A host providing a HTTP proxy with CONNECT support", "localhost"); +my $port_tcp_proxy = getTestParameter("NP_PORT_TCP_PROXY", "Port of the proxy with HTTP and CONNECT support", "3128"); my $faketime = -x '/usr/bin/faketime' ? 1 : 0; $res = NPTest->testCmd( - "./check_http $host_tcp_http -wt 300 -ct 600" + "./$plugin $host_tcp_http -wt 300 -ct 600" ); 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' -k 'carl:frown'" + "./$plugin $host_tcp_http -wt 300 -ct 600 -v -v -v -k 'bob:there' -k 'carl:frown'" ); like( $res->output, '/bob:there\r\ncarl:frown\r\n/', "Got headers with multiple -k options" ); $res = NPTest->testCmd( - "./check_http $host_nonresponsive -wt 1 -ct 2 -t 3" + "./$plugin $host_nonresponsive -wt 1 -ct 2 -t 3" ); cmp_ok( $res->return_code, '==', 2, "Webserver $host_nonresponsive not responding" ); cmp_ok( $res->output, 'eq', "CRITICAL - Socket timeout after 3 seconds", "Output OK"); $res = NPTest->testCmd( - "./check_http $hostname_invalid -wt 1 -ct 2" + "./$plugin $hostname_invalid -wt 1 -ct 2" ); cmp_ok( $res->return_code, '==', 2, "Webserver $hostname_invalid not valid" ); # The first part of the message comes from the OS catalogue, so cannot check this. @@ -65,87 +57,87 @@ cmp_ok( $res->return_code, '==', 2, "Webserver $hostname_invalid not valid" ); like( $res->output, "/Unable to open TCP socket|Socket timeout after/", "Output OK"); # host header checks -$res = NPTest->testCmd("./check_http -v -H $host_tcp_http"); +$res = NPTest->testCmd("./$plugin -v -H $host_tcp_http"); like( $res->output, '/^Host: '.$host_tcp_http.'\s*$/ms', "Host Header OK" ); -$res = NPTest->testCmd("./check_http -v -H $host_tcp_http -p 80"); +$res = NPTest->testCmd("./$plugin -v -H $host_tcp_http -p 80"); like( $res->output, '/^Host: '.$host_tcp_http.'\s*$/ms', "Host Header OK" ); -$res = NPTest->testCmd("./check_http -v -H $host_tcp_http:8080 -p 80"); +$res = NPTest->testCmd("./$plugin -v -H $host_tcp_http:8080 -p 80"); like( $res->output, '/^Host: '.$host_tcp_http.':8080\s*$/ms', "Host Header OK" ); -$res = NPTest->testCmd("./check_http -v -H $host_tcp_http:8080 -p 80"); +$res = NPTest->testCmd("./$plugin -v -H $host_tcp_http:8080 -p 80"); like( $res->output, '/^Host: '.$host_tcp_http.':8080\s*$/ms', "Host Header OK" ); SKIP: { skip "No internet access", 3 if $internet_access eq "no"; - $res = NPTest->testCmd("./check_http -v -H www.verisign.com -S"); - like( $res->output, '/^Host: www.verisign.com\s*$/ms', "Host Header OK" ); + $res = NPTest->testCmd("./$plugin -v -H $host_tls_http -S"); + like( $res->output, '/^Host: '.$host_tls_http.'\s*$/ms', "Host Header OK" ); - $res = NPTest->testCmd("./check_http -v -H www.verisign.com:8080 -S -p 443"); - like( $res->output, '/^Host: www.verisign.com:8080\s*$/ms', "Host Header OK" ); + $res = NPTest->testCmd("./$plugin -v -H $host_tls_http:8080 -S -p 443"); + like( $res->output, '/^Host: '.$host_tls_http.':8080\s*$/ms', "Host Header OK" ); - $res = NPTest->testCmd("./check_http -v -H www.verisign.com:443 -S -p 443"); - like( $res->output, '/^Host: www.verisign.com\s*$/ms', "Host Header OK" ); + $res = NPTest->testCmd("./$plugin -v -H $host_tls_http:443 -S -p 443"); + like( $res->output, '/^Host: '.$host_tls_http.'\s*$/ms', "Host Header OK" ); }; SKIP: { skip "No host serving monitoring in index file", 7 unless $host_tcp_http2; - $res = NPTest->testCmd( "./check_http -H $host_tcp_http2 -r 'monitoring'" ); + $res = NPTest->testCmd( "./$plugin -H $host_tcp_http2 -r 'monitoring'" ); cmp_ok( $res->return_code, "==", 0, "Got a reference to 'monitoring'"); - $res = NPTest->testCmd( "./check_http -H $host_tcp_http2 -r 'mONiTORing'" ); + $res = NPTest->testCmd( "./$plugin -H $host_tcp_http2 -r 'mONiTORing'" ); cmp_ok( $res->return_code, "==", 2, "Not got 'mONiTORing'"); like ( $res->output, "/pattern not found/", "Error message says 'pattern not found'"); - $res = NPTest->testCmd( "./check_http -H $host_tcp_http2 -R 'mONiTORing'" ); + $res = NPTest->testCmd( "./$plugin -H $host_tcp_http2 -R 'mONiTORing'" ); cmp_ok( $res->return_code, "==", 0, "But case insensitive doesn't mind 'mONiTORing'"); - $res = NPTest->testCmd( "./check_http -H $host_tcp_http2 -r 'monitoring' --invert-regex" ); + $res = NPTest->testCmd( "./$plugin -H $host_tcp_http2 -r 'monitoring' --invert-regex" ); cmp_ok( $res->return_code, "==", 2, "Invert results work when found"); like ( $res->output, "/pattern found/", "Error message says 'pattern found'"); - $res = NPTest->testCmd( "./check_http -H $host_tcp_http2 -r 'mONiTORing' --invert-regex" ); + $res = NPTest->testCmd( "./$plugin -H $host_tcp_http2 -r 'mONiTORing' --invert-regex" ); cmp_ok( $res->return_code, "==", 0, "And also when not found"); } SKIP: { skip "No internet access", 16 if $internet_access eq "no"; $res = NPTest->testCmd( - "./check_http --ssl www.verisign.com" + "./$plugin --ssl $host_tls_http" ); - cmp_ok( $res->return_code, '==', 0, "Can read https for www.verisign.com" ); + cmp_ok( $res->return_code, '==', 0, "Can read https for $host_tls_http" ); - $res = NPTest->testCmd( "./check_http -C 1 --ssl www.verisign.com" ); - cmp_ok( $res->return_code, '==', 0, "Checking certificate for www.verisign.com"); - like ( $res->output, "/Certificate 'www.verisign.com' will expire on/", "Output OK" ); + $res = NPTest->testCmd( "./$plugin -C 1 --ssl $host_tls_http" ); + cmp_ok( $res->return_code, '==', 0, "Checking certificate for $host_tls_http"); + like ( $res->output, "/Certificate '$host_tls_cert' will expire on/", "Output OK" ); my $saved_cert_output = $res->output; - $res = NPTest->testCmd( "./check_http -C 8000,1 --ssl www.verisign.com" ); - cmp_ok( $res->return_code, '==', 1, "Checking certificate for www.verisign.com"); - like ( $res->output, qr/WARNING - Certificate 'www.verisign.com' expires in \d+ day/, "Output Warning" ); + $res = NPTest->testCmd( "./$plugin -C 8000,1 --ssl $host_tls_http" ); + cmp_ok( $res->return_code, '==', 1, "Checking certificate for $host_tls_http"); + like ( $res->output, qr/WARNING - Certificate '$host_tls_cert' expires in \d+ day/, "Output Warning" ); - $res = NPTest->testCmd( "./check_http www.verisign.com -C 1" ); + $res = NPTest->testCmd( "./$plugin $host_tls_http -C 1" ); is( $res->return_code, 0, "Old syntax for cert checking okay" ); is( $res->output, $saved_cert_output, "Same output as new syntax" ); - $res = NPTest->testCmd( "./check_http -H www.verisign.com -C 1" ); + $res = NPTest->testCmd( "./$plugin -H $host_tls_http -C 1" ); is( $res->return_code, 0, "Updated syntax for cert checking okay" ); is( $res->output, $saved_cert_output, "Same output as new syntax" ); - $res = NPTest->testCmd( "./check_http -C 1 www.verisign.com" ); + $res = NPTest->testCmd( "./$plugin -C 1 $host_tls_http" ); cmp_ok( $res->output, 'eq', $saved_cert_output, "--ssl option automatically added"); - $res = NPTest->testCmd( "./check_http www.verisign.com -C 1" ); + $res = NPTest->testCmd( "./$plugin $host_tls_http -C 1" ); cmp_ok( $res->output, 'eq', $saved_cert_output, "Old syntax for cert checking still works"); # run some certificate checks with faketime SKIP: { skip "No faketime binary found", 12 if !$faketime; - $res = NPTest->testCmd("LC_TIME=C TZ=UTC ./check_http -C 1 www.verisign.com"); - like($res->output, qr/OK - Certificate 'www.verisign.com' will expire on/, "Catch cert output"); + $res = NPTest->testCmd("LC_TIME=C TZ=UTC ./$plugin -C 1 $host_tls_http"); + like($res->output, qr/OK - Certificate '$host_tls_cert' will expire on/, "Catch cert output"); is( $res->return_code, 0, "Catch cert output exit code" ); my($mon,$day,$hour,$min,$sec,$year) = ($res->output =~ /(\w+)\s+(\d+)\s+(\d+):(\d+):(\d+)\s+(\d+)/); if(!defined $year) { @@ -154,40 +146,51 @@ SKIP: { my $months = {'Jan' => 0, 'Feb' => 1, 'Mar' => 2, 'Apr' => 3, 'May' => 4, 'Jun' => 5, 'Jul' => 6, 'Aug' => 7, 'Sep' => 8, 'Oct' => 9, 'Nov' => 10, 'Dec' => 11}; my $ts = mktime($sec, $min, $hour, $day, $months->{$mon}, $year-1900); my $time = strftime("%Y-%m-%d %H:%M:%S", localtime($ts)); - $res = NPTest->testCmd("LC_TIME=C TZ=UTC faketime -f '".strftime("%Y-%m-%d %H:%M:%S", localtime($ts))."' ./check_http -C 1 www.verisign.com"); - like($res->output, qr/CRITICAL - Certificate 'www.verisign.com' just expired/, "Output on expire date"); - is( $res->return_code, 2, "Output on expire date" ); + $res = NPTest->testCmd("LC_TIME=C TZ=UTC faketime -f '".strftime("%Y-%m-%d %H:%M:%S", localtime($ts))."' ./$plugin -C 1 $host_tls_http"); + like($res->output, qr/CRITICAL - Certificate '$host_tls_cert' just expired/, "Output on expire date"); - $res = NPTest->testCmd("LC_TIME=C TZ=UTC faketime -f '".strftime("%Y-%m-%d %H:%M:%S", localtime($ts-1))."' ./check_http -C 1 www.verisign.com"); - like($res->output, qr/CRITICAL - Certificate 'www.verisign.com' expires in 0 minutes/, "cert expires in 1 second output"); - is( $res->return_code, 2, "cert expires in 1 second exit code" ); + $res = NPTest->testCmd("LC_TIME=C TZ=UTC faketime -f '".strftime("%Y-%m-%d %H:%M:%S", localtime($ts-1))."' ./$plugin -C 1 $host_tls_http"); + like($res->output, qr/CRITICAL - Certificate '$host_tls_cert' expires in 0 minutes/, "cert expires in 1 second output"); - $res = NPTest->testCmd("LC_TIME=C TZ=UTC faketime -f '".strftime("%Y-%m-%d %H:%M:%S", localtime($ts-120))."' ./check_http -C 1 www.verisign.com"); - like($res->output, qr/CRITICAL - Certificate 'www.verisign.com' expires in 2 minutes/, "cert expires in 2 minutes output"); - is( $res->return_code, 2, "cert expires in 2 minutes exit code" ); + $res = NPTest->testCmd("LC_TIME=C TZ=UTC faketime -f '".strftime("%Y-%m-%d %H:%M:%S", localtime($ts-120))."' ./$plugin -C 1 $host_tls_http"); + like($res->output, qr/CRITICAL - Certificate '$host_tls_cert' expires in 2 minutes/, "cert expires in 2 minutes output"); - $res = NPTest->testCmd("LC_TIME=C TZ=UTC faketime -f '".strftime("%Y-%m-%d %H:%M:%S", localtime($ts-7200))."' ./check_http -C 1 www.verisign.com"); - like($res->output, qr/CRITICAL - Certificate 'www.verisign.com' expires in 2 hours/, "cert expires in 2 hours output"); - is( $res->return_code, 2, "cert expires in 2 hours exit code" ); + $res = NPTest->testCmd("LC_TIME=C TZ=UTC faketime -f '".strftime("%Y-%m-%d %H:%M:%S", localtime($ts-7200))."' ./$plugin -C 1 $host_tls_http"); + like($res->output, qr/CRITICAL - Certificate '$host_tls_cert' expires in 2 hours/, "cert expires in 2 hours output"); - $res = NPTest->testCmd("LC_TIME=C TZ=UTC faketime -f '".strftime("%Y-%m-%d %H:%M:%S", localtime($ts+1))."' ./check_http -C 1 www.verisign.com"); - like($res->output, qr/CRITICAL - Certificate 'www.verisign.com' expired on/, "Certificate expired output"); - is( $res->return_code, 2, "Certificate expired exit code" ); + $res = NPTest->testCmd("LC_TIME=C TZ=UTC faketime -f '".strftime("%Y-%m-%d %H:%M:%S", localtime($ts+1))."' ./$plugin -C 1 $host_tls_http"); + like($res->output, qr/CRITICAL - Certificate '$host_tls_cert' expired on/, "Certificate expired output"); }; - $res = NPTest->testCmd( "./check_http --ssl www.verisign.com -E" ); + $res = NPTest->testCmd( "./$plugin --ssl $host_tls_http -E" ); like ( $res->output, '/time_connect=[\d\.]+/', 'Extended Performance Data Output OK' ); like ( $res->output, '/time_ssl=[\d\.]+/', 'Extended Performance Data SSL Output OK' ); $res = NPTest->testCmd( - "./check_http --ssl -H www.e-paycobalt.com" + "./$plugin --ssl -H www.e-paycobalt.com" ); cmp_ok( $res->return_code, "==", 0, "Can read https for www.e-paycobalt.com (uses AES certificate)" ); - $res = NPTest->testCmd( "./check_http -H www.mozilla.com -u /firefox -f follow" ); + $res = NPTest->testCmd( "./$plugin -H www.mozilla.com -u /firefox -f follow" ); is( $res->return_code, 0, "Redirection based on location is okay"); - $res = NPTest->testCmd( "./check_http -H www.mozilla.com --extended-perfdata" ); + $res = NPTest->testCmd( "./$plugin -H www.mozilla.com --extended-perfdata" ); like ( $res->output, '/time_connect=[\d\.]+/', 'Extended Performance Data Output OK' ); } + +SKIP: { + skip "No internet access or proxy configured", 6 if $internet_access eq "no" or ! $host_tcp_proxy; + + $res = NPTest->testCmd( "./$plugin -I $host_tcp_proxy -p $port_tcp_proxy -u http://$host_tcp_http -e 200,301,302"); + is( $res->return_code, 0, "Proxy HTTP works"); + like($res->output, qr/OK: Status line output matched/, "Proxy HTTP Output is sufficent"); + + $res = NPTest->testCmd( "./$plugin -I $host_tcp_proxy -p $port_tcp_proxy -H $host_tls_http -S -j CONNECT"); + is( $res->return_code, 0, "Proxy HTTP CONNECT works"); + like($res->output, qr/HTTP OK:/, "Proxy HTTP CONNECT output sufficent"); + + $res = NPTest->testCmd( "./$plugin -I $host_tcp_proxy -p $port_tcp_proxy -H $host_tls_http -S -j CONNECT:HEAD"); + is( $res->return_code, 0, "Proxy HTTP CONNECT works with override method"); + like($res->output, qr/HTTP OK:/, "Proxy HTTP CONNECT output sufficent"); +} diff --git a/plugins/t/check_imap.t b/plugins/t/check_imap.t index 9c6eae1..7c74e56 100644 --- a/plugins/t/check_imap.t +++ b/plugins/t/check_imap.t @@ -8,17 +8,10 @@ use strict; use Test::More tests => 7; use NPTest; -my $host_tcp_smtp = getTestParameter( "host_tcp_smtp", "NP_HOST_TCP_SMTP", "mailhost", - "A host providing an STMP Service (a mail server)"); - -my $host_tcp_imap = getTestParameter( "host_tcp_imap", "NP_HOST_TCP_IMAP", $host_tcp_smtp, - "A host providing an IMAP Service (a mail server)"); - -my $host_nonresponsive = getTestParameter( "host_nonresponsive", "NP_HOST_NONRESPONSIVE", "10.0.0.1", - "The hostname of system not responsive to network requests" ); - -my $hostname_invalid = getTestParameter( "hostname_invalid", "NP_HOSTNAME_INVALID", "nosuchhost", - "An invalid (not known to DNS) hostname" ); +my $host_tcp_smtp = getTestParameter("NP_HOST_TCP_SMTP", "A host providing an STMP Service (a mail server)", "mailhost"); +my $host_tcp_imap = getTestParameter("NP_HOST_TCP_IMAP", "A host providing an IMAP Service (a mail server)", $host_tcp_smtp); +my $host_nonresponsive = getTestParameter("NP_HOST_NONRESPONSIVE", "The hostname of system not responsive to network requests", "10.0.0.1"); +my $hostname_invalid = getTestParameter("NP_HOSTNAME_INVALID", "An invalid (not known to DNS) hostname", "nosuchhost"); my $t; diff --git a/plugins/t/check_jabber.t b/plugins/t/check_jabber.t index 7a708d5..fcdae17 100644 --- a/plugins/t/check_jabber.t +++ b/plugins/t/check_jabber.t @@ -10,23 +10,9 @@ use NPTest; plan tests => 10; -my $host_tcp_jabber = getTestParameter( - "NP_HOST_TCP_JABBER", - "A host providing the Jabber Service", - "jabber.org" - ); - -my $host_nonresponsive = getTestParameter( - "NP_HOST_NONRESPONSIVE", - "The hostname of system not responsive to network requests", - "10.0.0.1", - ); - -my $hostname_invalid = getTestParameter( - "NP_HOSTNAME_INVALID", - "An invalid (not known to DNS) hostname", - "nosuchhost", - ); +my $host_tcp_jabber = getTestParameter("NP_HOST_TCP_JABBER", "A host providing the Jabber Service", "jabber.de"); +my $host_nonresponsive = getTestParameter("NP_HOST_NONRESPONSIVE", "The hostname of system not responsive to network requests", "10.0.0.1"); +my $hostname_invalid = getTestParameter("NP_HOSTNAME_INVALID", "An invalid (not known to DNS) hostname", "nosuchhost"); my $jabberOK = '/JABBER OK\s-\s\d+\.\d+\ssecond response time on '.$host_tcp_jabber.' port 5222/'; diff --git a/plugins/t/check_ldap.t b/plugins/t/check_ldap.t index b8944d4..b8a4a76 100644 --- a/plugins/t/check_ldap.t +++ b/plugins/t/check_ldap.t @@ -9,19 +9,10 @@ use warnings; use Test::More; use NPTest; -my $host_tcp_ldap = getTestParameter("NP_HOST_TCP_LDAP", - "A host providing the LDAP Service", - "localhost" ); - -my $ldap_base_dn = getTestParameter("NP_LDAP_BASE_DN", - "A base dn for the LDAP Service", - "cn=admin" ); - -my $host_nonresponsive = getTestParameter("host_nonresponsive", "NP_HOST_NONRESPONSIVE", "10.0.0.1", - "The hostname of system not responsive to network requests" ); - -my $hostname_invalid = getTestParameter("hostname_invalid", "NP_HOSTNAME_INVALID", "nosuchhost", - "An invalid (not known to DNS) hostname" ); +my $host_tcp_ldap = getTestParameter("NP_HOST_TCP_LDAP", "A host providing the LDAP Service", "localhost"); +my $ldap_base_dn = getTestParameter("NP_LDAP_BASE_DN", "A base dn for the LDAP Service", "cn=admin"); +my $host_nonresponsive = getTestParameter("NP_HOST_NONRESPONSIVE", "The hostname of system not responsive to network requests", "10.0.0.1"); +my $hostname_invalid = getTestParameter("NP_HOSTNAME_INVALID", "An invalid (not known to DNS) hostname", "nosuchhost"); my($result, $cmd); my $command = './check_ldap'; diff --git a/plugins/t/check_mysql.t b/plugins/t/check_mysql.t index 28cd4cd..e426bf5 100644 --- a/plugins/t/check_mysql.t +++ b/plugins/t/check_mysql.t @@ -21,30 +21,11 @@ plan skip_all => "check_mysql not compiled" unless (-x "check_mysql"); plan tests => 15; my $bad_login_output = '/Access denied for user /'; -my $mysqlserver = getTestParameter( - "NP_MYSQL_SERVER", - "A MySQL Server hostname or IP with no slaves setup" - ); -my $mysqlsocket = getTestParameter( - "NP_MYSQL_SOCKET", - "Full path to a MySQL Server socket with no slaves setup" - ); -my $mysql_login_details = getTestParameter( - "MYSQL_LOGIN_DETAILS", - "Command line parameters to specify login access (requires " . - "REPLICATION CLIENT privleges)", - "-u test -ptest", - ); -my $with_slave = getTestParameter( - "NP_MYSQL_WITH_SLAVE", - "MySQL server with slaves setup" - ); -my $with_slave_login = getTestParameter( - "NP_MYSQL_WITH_SLAVE_LOGIN", - "Login details for server with slave (requires REPLICATION CLIENT " . - "privleges)", - $mysql_login_details || "-u test -ptest" - ); +my $mysqlserver = getTestParameter("NP_MYSQL_SERVER", "A MySQL Server hostname or IP with no slaves setup"); +my $mysqlsocket = getTestParameter("NP_MYSQL_SOCKET", "Full path to a MySQL Server socket with no slaves setup"); +my $mysql_login_details = getTestParameter("NP_MYSQL_LOGIN_DETAILS", "Command line parameters to specify login access (requires REPLICATION CLIENT privleges)", "-u test -ptest"); +my $with_slave = getTestParameter("NP_MYSQL_WITH_SLAVE", "MySQL server with slaves setup"); +my $with_slave_login = getTestParameter("NP_MYSQL_WITH_SLAVE_LOGIN", "Login details for server with slave (requires REPLICATION CLIENT privleges)", $mysql_login_details || "-u test -ptest"); my $result; diff --git a/plugins/t/check_mysql_query.t b/plugins/t/check_mysql_query.t index 407af88..96899ac 100644 --- a/plugins/t/check_mysql_query.t +++ b/plugins/t/check_mysql_query.t @@ -17,15 +17,8 @@ use vars qw($tests); plan skip_all => "check_mysql_query not compiled" unless (-x "check_mysql_query"); -my $mysqlserver = getTestParameter( - "NP_MYSQL_SERVER", - "A MySQL Server with no slaves setup" - ); -my $mysql_login_details = getTestParameter( - "MYSQL_LOGIN_DETAILS", - "Command line parameters to specify login access", - "-u user -ppw -d db", - ); +my $mysqlserver = getTestParameter("NP_MYSQL_SERVER", "A MySQL Server with no slaves setup"); +my $mysql_login_details = getTestParameter("NP_MYSQL_LOGIN_DETAILS", "Command line parameters to specify login access", "-u user -ppw -d db"); my $result; if (! $mysqlserver) { diff --git a/plugins/t/check_snmp.t b/plugins/t/check_snmp.t index eff46ea..f2f218f 100644 --- a/plugins/t/check_snmp.t +++ b/plugins/t/check_snmp.t @@ -15,18 +15,12 @@ BEGIN { my $res; -my $host_snmp = getTestParameter( "host_snmp", "NP_HOST_SNMP", "localhost", - "A host providing an SNMP Service"); +my $host_snmp = getTestParameter("NP_HOST_SNMP", "A host providing an SNMP Service", "localhost"); +my $snmp_community = getTestParameter("NP_SNMP_COMMUNITY", "The SNMP Community string for SNMP Testing (assumes snmp v1)", "public"); +my $host_nonresponsive = getTestParameter("NP_HOST_NONRESPONSIVE", "The hostname of system not responsive to network requests", "10.0.0.1"); +my $hostname_invalid = getTestParameter("NP_HOSTNAME_INVALID", "An invalid (not known to DNS) hostname", "nosuchhost"); +my $user_snmp = getTestParameter("NP_SNMP_USER", "An SNMP user", "auth_md5"); -my $snmp_community = getTestParameter( "snmp_community", "NP_SNMP_COMMUNITY", "public", - "The SNMP Community string for SNMP Testing (assumes snmp v1)" ); - -my $host_nonresponsive = getTestParameter( "host_nonresponsive", "NP_HOST_NONRESPONSIVE", "10.0.0.1", - "The hostname of system not responsive to network requests" ); - -my $hostname_invalid = getTestParameter( "hostname_invalid", "NP_HOSTNAME_INVALID", "nosuchhost", - "An invalid (not known to DNS) hostname" ); -my $user_snmp = getTestParameter( "user_snmp", "NP_SNMP_USER", "auth_md5", "An SNMP user"); $res = NPTest->testCmd( "./check_snmp -t 1" ); is( $res->return_code, 3, "No host name" ); @@ -154,9 +148,9 @@ SKIP: { cmp_ok( $res->return_code, '==', 0, "Timetick used as a string"); like($res->output, '/^SNMP OK - Timeticks:\s\(\d+\)\s+(?:\d+ days?,\s+)?\d+:\d+:\d+\.\d+\s.*$/', "Timetick used as a string, result printed rather than parsed"); - $res = NPTest->testCmd( "./check_snmp -H $host_snmp -C $snmp_community -o HOST-RESOURCES-MIB::hrSWRunParameters.1"); - cmp_ok( $res->return_code, '==', 0, "Timetick used as a string"); - is( $res->output, 'SNMP OK - "" | ', "snmp response without datatype" ); + $res = NPTest->testCmd( "./check_snmp -H $host_snmp -C $snmp_community -o HOST-RESOURCES-MIB::hrSWRunName.1"); + cmp_ok( $res->return_code, '==', 0, "snmp response without datatype"); + like( $res->output, '/^SNMP OK - "(systemd|init)" \| $/', "snmp response without datatype" ); } SKIP: { diff --git a/plugins/t/check_ssh.t b/plugins/t/check_ssh.t index 8008349..a5cd23c 100644 --- a/plugins/t/check_ssh.t +++ b/plugins/t/check_ssh.t @@ -9,17 +9,9 @@ use Test::More; use NPTest; # Required parameters -my $ssh_host = getTestParameter("NP_SSH_HOST", - "A host providing SSH service", - "localhost"); - -my $host_nonresponsive = getTestParameter("NP_HOST_NONRESPONSIVE", - "The hostname of system not responsive to network requests", - "10.0.0.1" ); - -my $hostname_invalid = getTestParameter("NP_HOSTNAME_INVALID", - "An invalid (not known to DNS) hostname", - "nosuchhost" ); +my $ssh_host = getTestParameter("NP_SSH_HOST", "A host providing SSH service", "localhost"); +my $host_nonresponsive = getTestParameter("NP_HOST_NONRESPONSIVE", "The hostname of system not responsive to network requests", "10.0.0.1" ); +my $hostname_invalid = getTestParameter("NP_HOSTNAME_INVALID", "An invalid (not known to DNS) hostname", "nosuchhost" ); plan skip_all => "SSH_HOST must be defined" unless $ssh_host; diff --git a/plugins/t/check_tcp.t b/plugins/t/check_tcp.t index f996685..cb4de53 100644 --- a/plugins/t/check_tcp.t +++ b/plugins/t/check_tcp.t @@ -15,18 +15,11 @@ BEGIN { } -my $host_tcp_http = getTestParameter( "host_tcp_http", "NP_HOST_TCP_HTTP", "localhost", - "A host providing the HTTP Service (a web server)" ); - -my $host_nonresponsive = getTestParameter( "host_nonresponsive", "NP_HOST_NONRESPONSIVE", "10.0.0.1", - "The hostname of system not responsive to network requests" ); - -my $hostname_invalid = getTestParameter( "hostname_invalid", "NP_HOSTNAME_INVALID", "nosuchhost", - "An invalid (not known to DNS) hostname" ); - -my $internet_access = getTestParameter( "NP_INTERNET_ACCESS", - "Is this system directly connected to the internet?", - "yes"); +my $host_tcp_http = getTestParameter("NP_HOST_TCP_HTTP", "A host providing the HTTP Service (a web server)", "localhost"); +my $host_tls_http = getTestParameter("NP_HOST_TLS_HTTP", "A host providing the HTTPS Service (a tls web server)", "localhost"); +my $host_nonresponsive = getTestParameter("NP_HOST_NONRESPONSIVE", "The hostname of system not responsive to network requests", "10.0.0.1"); +my $hostname_invalid = getTestParameter("NP_HOSTNAME_INVALID", "An invalid (not known to DNS) hostname", "nosuchhost"); +my $internet_access = getTestParameter("NP_INTERNET_ACCESS", "Is this system directly connected to the internet?", "yes"); my $successOutput = '/^TCP OK\s-\s+[0-9]?\.?[0-9]+ second response time on port [0-9]+/'; @@ -42,10 +35,10 @@ $t += checkCmd( "./check_tcp $host_tcp_http -p 81 -wt 0 -ct 0 -to 1", 2 $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 ); if($internet_access ne "no") { - $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", 1 ); - $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 -S -D 1 -H $host_tls_http -p 443", 0 ); + $t += checkCmd( "./check_tcp -S -D 9000,1 -H $host_tls_http -p 443", 1 ); + $t += checkCmd( "./check_tcp -S -D 9000 -H $host_tls_http -p 443", 1 ); + $t += checkCmd( "./check_tcp -S -D 9000,8999 -H $host_tls_http -p 443", 2 ); } # Need the \r\n to make it more standards compliant with web servers. Need the various quotes diff --git a/plugins/t/check_time.t b/plugins/t/check_time.t index 961f56e..92c2f89 100644 --- a/plugins/t/check_time.t +++ b/plugins/t/check_time.t @@ -11,14 +11,9 @@ use NPTest; use vars qw($tests); BEGIN {$tests = 8; plan tests => $tests} -my $host_udp_time = getTestParameter( "host_udp_time", "NP_HOST_UDP_TIME", "localhost", - "A host providing the UDP Time Service" ); - -my $host_nonresponsive = getTestParameter( "host_nonresponsive", "NP_HOST_NONRESPONSIVE", "10.0.0.1", - "The hostname of system not responsive to network requests" ); - -my $hostname_invalid = getTestParameter( "hostname_invalid", "NP_HOSTNAME_INVALID", "nosuchhost", - "An invalid (not known to DNS) hostname" ); +my $host_udp_time = getTestParameter("NP_HOST_UDP_TIME", "A host providing the UDP Time Service", "localhost"); +my $host_nonresponsive = getTestParameter("NP_HOST_NONRESPONSIVE", "The hostname of system not responsive to network requests", "10.0.0.1"); +my $hostname_invalid = getTestParameter("NP_HOSTNAME_INVALID", "An invalid (not known to DNS) hostname", "nosuchhost"); my $successOutput = '/^TIME OK - [0-9]+ second time difference/'; diff --git a/plugins/t/check_udp.t b/plugins/t/check_udp.t index 1f6fee7..6c47d09 100644 --- a/plugins/t/check_udp.t +++ b/plugins/t/check_udp.t @@ -34,12 +34,12 @@ my $nc; if(system("which nc.traditional >/dev/null 2>&1") == 0) { $nc = 'nc.traditional -w 3 -l -u -p 3333'; } -elsif(system("which netcat >/dev/null 2>&1") == 0) { - $nc = 'netcat -w 3 -l -u -p 3333'; -} elsif(system("which nc >/dev/null 2>&1") == 0) { $nc = 'nc -w 3 -l -u -4 localhost 3333'; } +elsif(system("which netcat >/dev/null 2>&1") == 0) { + $nc = 'netcat -w 3 -l -u -p 3333'; +} SKIP: { skip "solaris netcat does not listen to udp", 6 if $^O eq 'solaris'; diff --git a/plugins/tests/certs/expired-cert.pem b/plugins/tests/certs/expired-cert.pem index 40324cf..77a9166 100644 --- a/plugins/tests/certs/expired-cert.pem +++ b/plugins/tests/certs/expired-cert.pem @@ -1,21 +1,24 @@ -----BEGIN CERTIFICATE----- -MIIDYzCCAsygAwIBAgIJAJISzcX71f5pMA0GCSqGSIb3DQEBBAUAMH8xCzAJBgNV -BAYTAlVLMRMwEQYDVQQIEwpEZXJieXNoaXJlMQ8wDQYDVQQHEwZCZWxwZXIxFzAV -BgNVBAoTDk5hZ2lvcyBQbHVnaW5zMREwDwYDVQQDEwhUb24gVm9vbjEeMBwGCSqG -SIb3DQEJARYPdG9udm9vbkBtYWMuY29tMB4XDTA5MDMwNjAwMTMxNVoXDTA5MDMw -NTAwMTMxNlowfzELMAkGA1UEBhMCVUsxEzARBgNVBAgTCkRlcmJ5c2hpcmUxDzAN -BgNVBAcTBkJlbHBlcjEXMBUGA1UEChMOTmFnaW9zIFBsdWdpbnMxETAPBgNVBAMT -CFRvbiBWb29uMR4wHAYJKoZIhvcNAQkBFg90b252b29uQG1hYy5jb20wgZ8wDQYJ -KoZIhvcNAQEBBQADgY0AMIGJAoGBAOQHP4JnzACi4q6quXAiK+gTSffG6yyjEV+K -iyutRgBF2MdF03X5ls0wENw/5fnMTrHynl4XoGoV/rD4CR2hGT0m7dv7Vu0MRLlP -J1SCiFeMuQS30zzLMJr0A7IW869qRlKQmzxs1JT6XDbSoNQuF154zoxwNsKlMjoX -tJSHN2YpAgMBAAGjgeYwgeMwHQYDVR0OBBYEFHWjM9OQldrDLMcAfPnUVfGxlzOp -MIGzBgNVHSMEgaswgaiAFHWjM9OQldrDLMcAfPnUVfGxlzOpoYGEpIGBMH8xCzAJ -BgNVBAYTAlVLMRMwEQYDVQQIEwpEZXJieXNoaXJlMQ8wDQYDVQQHEwZCZWxwZXIx -FzAVBgNVBAoTDk5hZ2lvcyBQbHVnaW5zMREwDwYDVQQDEwhUb24gVm9vbjEeMBwG -CSqGSIb3DQEJARYPdG9udm9vbkBtYWMuY29tggkAkhLNxfvV/mkwDAYDVR0TBAUw -AwEB/zANBgkqhkiG9w0BAQQFAAOBgQDHjoXoGwBamCiNplTt93jH/TO08RATdZP5 -45hlxv2+PKCjjTiFa2mjAvopFiqmYsr40XYEmpeYMiaOzOW5rBjtqBAT/JJWyfda -SCmj3swqyKus63rv/iuokIhZzBdhbB+eOJJrmwT2SEc5KdRaipH0QAGF1nZAAGzo -6xW7hkzYog== +MIIEETCCAvmgAwIBAgIUFDsP6WnV/uqeQMpD/DYSqouE13kwDQYJKoZIhvcNAQEL +BQAwgZcxCzAJBgNVBAYTAkRFMRAwDgYDVQQIDAdCYXZhcmlhMQ8wDQYDVQQHDAZN +dW5pY2gxGzAZBgNVBAoMEk1vbml0b3JpbmcgUGx1Z2luczEbMBkGA1UEAwwSTW9u +aXRvcmluZyBQbHVnaW5zMSswKQYJKoZIhvcNAQkBFhxkZXZlbEBtb25pdG9yaW5n +LXBsdWdpbnMub3JnMB4XDTA4MDEwMTExMDAyNloXDTA4MDEwMjExMDAyNlowgZcx +CzAJBgNVBAYTAkRFMRAwDgYDVQQIDAdCYXZhcmlhMQ8wDQYDVQQHDAZNdW5pY2gx +GzAZBgNVBAoMEk1vbml0b3JpbmcgUGx1Z2luczEbMBkGA1UEAwwSTW9uaXRvcmlu +ZyBQbHVnaW5zMSswKQYJKoZIhvcNAQkBFhxkZXZlbEBtb25pdG9yaW5nLXBsdWdp +bnMub3JnMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAyeHKwKFjJWUX +YHKsisypUf9dHlIPQAISyGP1BX6UL26ZLvE6kKbx3LFQ9W2POGoQWlzFiB1soGeV +WDd0U0JtWdCKmOXWdcXpupQlTSUtRCMDQkfqLN8GR5TBTd73rezp5mz08nMfLwu0 +p5VQ191Ui8JHFgrAOalAn8Uw5De8vj4VmTXmU5NJ2UFoC0ddU/Th/lwRCayHc1cn +MVq2F7c/uhMUUQYNBmJy0pxoHawp+j9NKl/xIYsjgQNgahQyNuswuGHjaEwhPu+7 +G03XsW4ehu+H1898M/MkSln6LQAU1syoJ8ypPM8tV+zgx4uwj7udnZ2hceN95uW7 +0PWg5DQyUwIDAQABo1MwUTAdBgNVHQ4EFgQUt9ps3KJ1XiMuy/ijFBjMzf6jgwkw +HwYDVR0jBBgwFoAUt9ps3KJ1XiMuy/ijFBjMzf6jgwkwDwYDVR0TAQH/BAUwAwEB +/zANBgkqhkiG9w0BAQsFAAOCAQEAVPBZwMHbrnHFbmhbcPuvYd5cxk0uSVNAUzsl +2biCq5P+ZHo10VHGygXtdV4utqk/IrAt2u5qSxycWPStCtAgTd3Q8ncfjOkaHM4z +2bxTkhLyQeU8NWPuDBqDszo2GOaFTv+lm36LEKiAfqB1tjQVePSkycdrWIhkamBV +EgMe6uHLdU7QQk1ajQfrBdakN1beqki/dKieA6gm+XF/QS4SSYINmsHB/2X5cT9U +b/KMB8xurCnuJQuk1P4VsSkJCOSeHjWZgK9pKNdsIJZr4wDVfhjQgU0XT6xakSf7 +eCaHtO0VKsbLZoiTmpxidjsdYiXyeKYIQNtUpTjyJ5V/cZsq9w== -----END CERTIFICATE----- diff --git a/plugins/tests/certs/expired-key.pem b/plugins/tests/certs/expired-key.pem index af0e24d..c1510b2 100644 --- a/plugins/tests/certs/expired-key.pem +++ b/plugins/tests/certs/expired-key.pem @@ -1,15 +1,28 @@ ------BEGIN RSA PRIVATE KEY----- -MIICXAIBAAKBgQDkBz+CZ8wAouKuqrlwIivoE0n3xussoxFfiosrrUYARdjHRdN1 -+ZbNMBDcP+X5zE6x8p5eF6BqFf6w+AkdoRk9Ju3b+1btDES5TydUgohXjLkEt9M8 -yzCa9AOyFvOvakZSkJs8bNSU+lw20qDULhdeeM6McDbCpTI6F7SUhzdmKQIDAQAB -AoGARgI3rHjjuDpKMGg4IMZNBqaNaiZHY9/44IVvrww21rSbFqtIfgsQEpU0R/rS -R7xDWPztRGQqmwd/t6OfYNpqHbjO1MWzasVBVnzue5P59Y1xy1h0LZF8+a9GY++0 -uAGUC24jsXSmypNVzoX+ZKyinA3oYV/etdPYx1W8Ms5XIzUCQQD7xwhMuLok6Kbq -UEgiSfBTbx+haP3IiqqMF14z8QoEyD3jchydNaXEYdQxN8jEl2aPrMqTc6x8Jq4/ -ai0OkB+fAkEA59pAmN81HylV7+CsVjLOSbJqzau7NDxSs2uutxhHZRwz0e25wVer -fA03l08u0ebC/TDHkmHV6ikCryM5HU2FNwJAVZJFzd2S1myEHmr+uTisB49jDrbi -WkBWypo+mCS6JPnxntXvx7auClq9haTSBY73eqldiFPuMZvr6P2rJqHxPQJBAOTM -quaxjti7kATy8N73sD9mBKQGju1TgkFxSK+DFCGhnTnToXY9MAtxd6SoDYoyccYu -dyPrzJAR/IYc+mYCdC0CQDKlZuMPVXEgvGaQapzMQ++5yJRvMZF4tWvONBs0OCE9 -QYarsTi5M20cymMBXHOLZIjqwsni4G/C9kqJSvC75Vg= ------END RSA PRIVATE KEY----- +-----BEGIN PRIVATE KEY----- +MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQDJ4crAoWMlZRdg +cqyKzKlR/10eUg9AAhLIY/UFfpQvbpku8TqQpvHcsVD1bY84ahBaXMWIHWygZ5VY +N3RTQm1Z0IqY5dZ1xem6lCVNJS1EIwNCR+os3wZHlMFN3vet7OnmbPTycx8vC7Sn +lVDX3VSLwkcWCsA5qUCfxTDkN7y+PhWZNeZTk0nZQWgLR11T9OH+XBEJrIdzVycx +WrYXtz+6ExRRBg0GYnLSnGgdrCn6P00qX/EhiyOBA2BqFDI26zC4YeNoTCE+77sb +Tdexbh6G74fXz3wz8yRKWfotABTWzKgnzKk8zy1X7ODHi7CPu52dnaFx433m5bvQ +9aDkNDJTAgMBAAECggEACrLFfNnQmD24NGs/S4e2/VpsA9xTZI/3kNkDNgxULANP +aNZtxRajwI9A/BCXQ2UTgsZhzWnJxOJYXrlpl7PweY78mUesysb3MOUC6QisUm0M +kimfdktHWOnAKLFFLNleN9DUVjjVkTeslijqhNX80f80py1grG2UuCLKCX4OqYIm +qACE8TMmSZLz42AO96TndNtKplQ8LuGLEmByW95wEfhx3Gm4ckkL7qII/U3DnQXr +0T+3xLaj+eNJzYDpIFZiw4sNzOuAyCz+4Cc4sPDuMnzquXF+enpkemoycC1RmEpG +KIDTwmFsc8TrbGV0qifC6fsCrDivdYLqL7R/q3IBQQKBgQDmfvO3VYTEKY8NA+AT +5s6+7NTxRsXxJUCEhCNBWimSH3EzmBAvrodLY6A0oYg8i81bgNX1I9GPVXJZ/QA7 +ukd84HUIQoGS5Usmo4rp+kz4P6KkLXDemZtWPU5GXxicfajHRQlkbW6St6SpV7IS +ibJcDADeoiaPL1xvue1ToP/LoQKBgQDgOFHjYpep00gabvjXfYW7vhrg1vVwaKUM +rf0+UW8Exk4nbBw0eEC2YjxIwzdktlkdbzGaXYULnhg8GnfxYesMOpCLPw1JdB8o +ixETAFpW5bKrUsjEFRUGhzWnsCSFIQ4smpmtGLTxOQ8AkoDdORY5Z+Wv7JtFF6Do +PSoblckZcwKBgB3TD3YJesRnHDty5OuuUdIikuslXTd2uoJrFqS+JeLibqNeabnB +u3/lxDULMbWj4U6VvRmbKOKDC+jY887Gq7lc0cff0yROxwqY3sCnwo3crg7QUmp7 +Nb5S8G3qoCSfndcq96wm/Me/O28uCbycVJfUdchY8uRUHIHYbP0FOBQBAoGBAMgh +fPX4imaKr1DovDObVkK87EDDnU84GBm5MtDs3qrkVd3aIVK0Aw7HoAdSN58tI12i +YiPmVVqJQhhjh6tsOuAvZdTj8ngdrbICbrsHFZt6an+A5LIgHyQ0iy+hiPdLCdvG +ImTeKKMmyr04Bs1upueWVO0xw2VoMbcY4Py+NUEBAoGASQqedfCSKGLT+5lLZrhP +CbFVMmswEPjBcRb1trcuA09vfExn9FfUNFnnw3i9miprED5kufvAjb+6nduXizKg +7HQYHCwVvakgtXgbiDMaNgYZcjWm+MdnfiwLJjJTO3DfI1JF2PJ8y9R95DPlAkDm +xH3OV8KV4UiTEVxS7ksmGzY= +-----END PRIVATE KEY----- diff --git a/plugins/tests/certs/server-cert.pem b/plugins/tests/certs/server-cert.pem index 549e4f7..b84b91d 100644 --- a/plugins/tests/certs/server-cert.pem +++ b/plugins/tests/certs/server-cert.pem @@ -1,21 +1,24 @@ -----BEGIN CERTIFICATE----- -MIIDYzCCAsygAwIBAgIJAL8LkpNwzYdxMA0GCSqGSIb3DQEBBAUAMH8xCzAJBgNV -BAYTAlVLMRMwEQYDVQQIEwpEZXJieXNoaXJlMQ8wDQYDVQQHEwZCZWxwZXIxFzAV -BgNVBAoTDk5hZ2lvcyBQbHVnaW5zMREwDwYDVQQDEwhUb24gVm9vbjEeMBwGCSqG -SIb3DQEJARYPdG9udm9vbkBtYWMuY29tMB4XDTA5MDMwNTIxNDEyOFoXDTE5MDMw -MzIxNDEyOFowfzELMAkGA1UEBhMCVUsxEzARBgNVBAgTCkRlcmJ5c2hpcmUxDzAN -BgNVBAcTBkJlbHBlcjEXMBUGA1UEChMOTmFnaW9zIFBsdWdpbnMxETAPBgNVBAMT -CFRvbiBWb29uMR4wHAYJKoZIhvcNAQkBFg90b252b29uQG1hYy5jb20wgZ8wDQYJ -KoZIhvcNAQEBBQADgY0AMIGJAoGBAKcWMBtNtfY8vZXk0SN6/EYTVN/LOvaOSegy -oVdLoGwuwjagk+XmCzvCqHZRp8lnCLay7AO8AQI7TSN02ihCcSrgGA9OT+HciIJ1 -l5/kEYUAuA1PR6YKK/T713zUAlMzy2tsugx5+xSsSEwsXkmne52jJiG/wuE5CLT0 -9pF8HQqHAgMBAAGjgeYwgeMwHQYDVR0OBBYEFGioSPQ/rdE19+zaeY2YvHTXlUDI -MIGzBgNVHSMEgaswgaiAFGioSPQ/rdE19+zaeY2YvHTXlUDIoYGEpIGBMH8xCzAJ -BgNVBAYTAlVLMRMwEQYDVQQIEwpEZXJieXNoaXJlMQ8wDQYDVQQHEwZCZWxwZXIx -FzAVBgNVBAoTDk5hZ2lvcyBQbHVnaW5zMREwDwYDVQQDEwhUb24gVm9vbjEeMBwG -CSqGSIb3DQEJARYPdG9udm9vbkBtYWMuY29tggkAvwuSk3DNh3EwDAYDVR0TBAUw -AwEB/zANBgkqhkiG9w0BAQQFAAOBgQCdqasaIO6JiV5ONFG6Tr1++85UfEdZKMUX -N2NHiNNUunolIZEYR+dW99ezKmHlDiQ/tMgoLVYpl2Ubho2pAkLGQR+W0ZASgWQ1 -NjfV27Rv0y6lYQMTA0lVAU93L1x9reo3FMedmL5+H+lIEpLCxEPtAJNISrJOneZB -W5jDadwkoQ== +MIIEBjCCAu6gAwIBAgIJANbQ5QQrKhUGMA0GCSqGSIb3DQEBCwUAMIGXMQswCQYD +VQQGEwJERTEQMA4GA1UECAwHQmF2YXJpYTEPMA0GA1UEBwwGTXVuaWNoMRswGQYD +VQQKDBJNb25pdG9yaW5nIFBsdWdpbnMxGzAZBgNVBAMMEk1vbml0b3JpbmcgUGx1 +Z2luczErMCkGCSqGSIb3DQEJARYcZGV2ZWxAbW9uaXRvcmluZy1wbHVnaW5zLm9y +ZzAeFw0xOTAyMTkxNTMxNDRaFw0yOTAyMTYxNTMxNDRaMIGXMQswCQYDVQQGEwJE +RTEQMA4GA1UECAwHQmF2YXJpYTEPMA0GA1UEBwwGTXVuaWNoMRswGQYDVQQKDBJN +b25pdG9yaW5nIFBsdWdpbnMxGzAZBgNVBAMMEk1vbml0b3JpbmcgUGx1Z2luczEr +MCkGCSqGSIb3DQEJARYcZGV2ZWxAbW9uaXRvcmluZy1wbHVnaW5zLm9yZzCCASIw +DQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKgV2yp8pQvJuN+aJGdAe6Hd0tja +uteCPcNIcM92WLOF69TLTSYon1XDon4tHTh4Z5d4lD8bfsGzFVBmDSgWidhAUf+v +EqEXwbp293ej/Frc0pXCvmrz6kI1tWrLtQhL/VdbxFYxhV7JjKb+PY3SxGFpSLPe +PQ/5SwVndv7rZIwcjseL22K5Uy2TIrkgzzm2pRs/IvoxRybYr/+LGoHyrtJC6AO8 +ylp8A/etL0gwtUvRnrnZeTQ2pA1uZ5QN3anTL8JP/ZRZYNegIkaawqMtTKbhM6pi +u3/4a3Uppvt0y7vmGfQlYejxCpICnMrvHMpw8L58zv/98AbCGjDU3UwCt6MCAwEA +AaNTMFEwHQYDVR0OBBYEFG/UH6nGYPlVcM75UXzXBF5GZyrcMB8GA1UdIwQYMBaA +FG/UH6nGYPlVcM75UXzXBF5GZyrcMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcN +AQELBQADggEBAGwitJPOnlIKLndNf+iCLMIs0dxsl8kAaejFcjoT0n4ja7Y6Zrqz +VSIidzz9vQWvy24xKJpAOdj/iLRHCUOG+Pf5fA6+/FiuqXr6gE2/lm0eC58BNONr +E5OzjQ/VoQ8RX4hDntgu6FYbaVa/vhwn16igt9qmdNGGZXf2/+DM3JADwyaA4EK8 +vm7KdofX9zkxXecHPNvf3jiVLPiDDt6tkGpHPEsyP/yc+RUdltUeZvHfliV0cCuC +jJX+Fm9ysjSpHIFFr+jUMuMHibWoOD8iy3eYxfCDoWsH488pCbj8MNuAq6vd6DBk +bOZxDz43vjWuYMkwXJTxJQh7Pne6kK0vE1g= -----END CERTIFICATE----- diff --git a/plugins/tests/certs/server-key.pem b/plugins/tests/certs/server-key.pem index eacaeaa..1194755 100644 --- a/plugins/tests/certs/server-key.pem +++ b/plugins/tests/certs/server-key.pem @@ -1,15 +1,28 @@ ------BEGIN RSA PRIVATE KEY----- -MIICWwIBAAKBgQCnFjAbTbX2PL2V5NEjevxGE1Tfyzr2jknoMqFXS6BsLsI2oJPl -5gs7wqh2UafJZwi2suwDvAECO00jdNooQnEq4BgPTk/h3IiCdZef5BGFALgNT0em -Civ0+9d81AJTM8trbLoMefsUrEhMLF5Jp3udoyYhv8LhOQi09PaRfB0KhwIDAQAB -AoGAfpxclcP8N3vteXErXURrd7pcXT0GECDgNjhvc9PV20RPXM+vYs1AA+fMeeQE -TaRqwO6x016aMRO4rz5ztYArecTBznkds1k59pkN/Ne/nsueU4tvGK8MNyS2o986 -Voohqkaq4Lcy1bcHJb9su1ELjegEr1R76Mz452Hsy+uTbAECQQDcg/tZWKVeh5CQ -dOEB3YWHwfn0NDgfPm/X2i2kAZ7n7URaUy/ffdlfsrr1mBtHCfedLoOxmmlNfEpM -hXAAurSHAkEAwfk7fEb0iN0Sj9gTozO7c6Ky10KwePZyjVzqSQIiJq3NX8BEaIeb -51TXxE5VxaLjjMLRkA0hWTYXClgERFZ6AQJAN7ChPqwzf08PRFwwIw911JY5cOHr -NoDHMCUql5vNLNdwBruxgGjBB/kUXEfgw60RusFvgt/zLh1wiii844JDawJAGQBF -sYP3urg7zzx7c3qUe5gJ0wLuefjR1PSX4ecbfb7DDMdcSdjIuG1QDiZGmd2f1KG7 -nwSCOtxk5dloW2KGAQJAQh/iBn0QhfKLFAP5eZBVk8E8XlZuw+S2DLy5SnBlIiYJ -GB5I2OClgtudXMv1labFrcST8O9eFrtsrhU1iUGUOw== ------END RSA PRIVATE KEY----- +-----BEGIN PRIVATE KEY----- +MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQCoFdsqfKULybjf +miRnQHuh3dLY2rrXgj3DSHDPdlizhevUy00mKJ9Vw6J+LR04eGeXeJQ/G37BsxVQ +Zg0oFonYQFH/rxKhF8G6dvd3o/xa3NKVwr5q8+pCNbVqy7UIS/1XW8RWMYVeyYym +/j2N0sRhaUiz3j0P+UsFZ3b+62SMHI7Hi9tiuVMtkyK5IM85tqUbPyL6MUcm2K// +ixqB8q7SQugDvMpafAP3rS9IMLVL0Z652Xk0NqQNbmeUDd2p0y/CT/2UWWDXoCJG +msKjLUym4TOqYrt/+Gt1Kab7dMu75hn0JWHo8QqSApzK7xzKcPC+fM7//fAGwhow +1N1MArejAgMBAAECggEANuvdTwanTzC8jaNqHaq+OuemS2E9B8nwsGxtH/zFgvNR +WZiMPtmrJnTkFWJcV+VPw/iMSAqN4nDHmBugVOb4Z4asxGTKK4T9shXJSnh0rqPU +00ZsvbmxY6z0+E5TesCJqQ+9GYTY1V357V7JchvaOxIRxWPqg9urHbru8OCtW/I5 +Fh5HPUZlgCvlMpjlhyjydIf/oXyVA3RNsXlwe8+2cKuGIrjEzm2j9o3VF0sctTX0 +ItP8A9qDmDQN7GIWX0MW6gncojpS1omC2wcFsdjj/xfPyiDal1X4aq/2YqG8351c +YlM/+6Va0u9WWE/i64gASTAVqpMV4Yg8y0gGycuA0QKBgQDbgI2QeLd3FvMcURiU +l3w9qJgw/Jp3jaNC/9LkVGGz4f4lKKB67lPZvI4noMK8GqO/LcXgqP/RY1oJojoA +/6JKVvzYGASZ7VgMoG9bk1AneP1PGdibuTUEwimGlcObxnDFIC/yjwPFu3jIdqdS +zZi1RZzyqAogN5y3SBEypSmn9wKBgQDECKsqqlcizmCl8v5aVk875AzGN+DOHZqx +bkmztlnLO/2e2Fmk3G5Vvnui0FYisf8Eq19tUTQCF6lSfJlGQeFAT119wkFZhLu+ +FfLGqoEMH0ijJg/8PpdpFRK3I94YcISoTNN6yxMvE6xdDGfKCt5a+IX5bwQi9Zdc +B242gEc6tQKBgA6tM8n7KFlAIZU9HuWgk2AUC8kKutFPmSD7tgAqXDYI4FNfugs+ +MEEYyHCB4UNujJBV4Ss6YZCAkh6eyD4U2aca1eElCfm40vBVMdzvpqZdAqLtWXxg +D9l3mgszrFaYGCY2Fr6jLV9lP5g3xsxUjudf9jSLY9HvpfzjRrMaNATVAoGBALTl +/vYfPMucwKlC5B7++J0e4/7iv6vUu9SyHocdZh1anb9AjPDKjXLIlZT4RhQ8R0XK +0wOw5JpttU2uN08TKkbLNk3/vYhbKVjPLjrQSseh8sjDLgsqw1QwIxYnniLVakVY +p+rvjSNrNyqicQCMKQavwgocvSd5lJRTMwxOMezlAoGBAKWj71BX+0CK00/2S6lC +TcNcuUPG0d8y1czZ4q6tUlG4htwq1FMOpaghATXjkdsOGTLS+H1aA0Kt7Ai9zDhc +/bzOJEJ+jvBXV4Gcs7jl1r/HTKv0tT9ZSI5Vzkida0rfqxDGzcMVlLuCdH0cb8Iu +N0wdmCAqlQwHR13+F1zrAD7V +-----END PRIVATE KEY----- diff --git a/plugins/tests/check_curl.t b/plugins/tests/check_curl.t new file mode 100755 index 0000000..1afbe4b --- /dev/null +++ b/plugins/tests/check_curl.t @@ -0,0 +1,498 @@ +#! /usr/bin/perl -w -I .. +# +# Test check_http by having an actual HTTP server running +# +# To create the https server certificate: +# openssl req -new -x509 -keyout server-key.pem -out server-cert.pem -days 3650 -nodes +# to create a new expired certificate: +# faketime '2008-01-01 12:00:00' openssl req -new -x509 -keyout expired-key.pem -out expired-cert.pem -days 1 -nodes +# Country Name (2 letter code) [AU]:DE +# State or Province Name (full name) [Some-State]:Bavaria +# Locality Name (eg, city) []:Munich +# Organization Name (eg, company) [Internet Widgits Pty Ltd]:Monitoring Plugins +# Organizational Unit Name (eg, section) []: +# Common Name (e.g. server FQDN or YOUR name) []:Monitoring Plugins +# Email Address []:devel@monitoring-plugins.org + +use strict; +use Test::More; +use NPTest; +use FindBin qw($Bin); + +$ENV{'LC_TIME'} = "C"; + +my $common_tests = 70; +my $ssl_only_tests = 8; +# Check that all dependent modules are available +eval "use HTTP::Daemon 6.01;"; +plan skip_all => 'HTTP::Daemon >= 6.01 required' if $@; +eval { + require HTTP::Status; + require HTTP::Response; +}; + +my $plugin = 'check_http'; +$plugin = 'check_curl' if $0 =~ m/check_curl/mx; + +# look for libcurl version to see if some advanced checks are possible (>= 7.49.0) +my $advanced_checks = 12; +my $use_advanced_checks = 0; +my $required_version = '7.49.0'; +my $virtual_host = 'www.somefunnyhost.com'; +my $virtual_port = 42; +my $curl_version = ''; +open (my $fh, '-|', "./$plugin --version") or die; +while (<$fh>) { + if (m{libcurl/([\d.]+)\s}) { + $curl_version = $1; + last; + } +} +close ($fh); +if ($curl_version) { + my ($major, $minor, $release) = split (/\./, $curl_version); + my ($req_major, $req_minor, $req_release) = split (/\./, $required_version); + my $check = ($major <=> $req_major or $minor <=> $req_minor or $release <=> $req_release); + if ($check >= 0) { + $use_advanced_checks = 1; + print "Found libcurl $major.$minor.$release. Using advanced checks\n"; + } +} + +if ($@) { + plan skip_all => "Missing required module for test: $@"; +} else { + if (-x "./$plugin") { + plan tests => $common_tests * 2 + $ssl_only_tests + $advanced_checks; + } else { + plan skip_all => "No $plugin compiled"; + } +} + +my $servers = { http => 0 }; # HTTP::Daemon should always be available +eval { require HTTP::Daemon::SSL }; +if ($@) { + diag "Cannot load HTTP::Daemon::SSL: $@"; +} else { + $servers->{https} = 0; +} + +# set a fixed version, so the header size doesn't vary +$HTTP::Daemon::VERSION = "1.00"; + +my $port_http = 50000 + int(rand(1000)); +my $port_https = $port_http + 1; +my $port_https_expired = $port_http + 2; + +# This array keeps sockets around for implementing timeouts +my @persist; + +# Start up all servers +my @pids; +my $pid = fork(); +if ($pid) { + # Parent + push @pids, $pid; + if (exists $servers->{https}) { + # Fork a normal HTTPS server + $pid = fork(); + if ($pid) { + # Parent + push @pids, $pid; + # Fork an expired cert server + $pid = fork(); + if ($pid) { + push @pids, $pid; + } else { + my $d = HTTP::Daemon::SSL->new( + LocalPort => $port_https_expired, + LocalAddr => "127.0.0.1", + SSL_cert_file => "$Bin/certs/expired-cert.pem", + SSL_key_file => "$Bin/certs/expired-key.pem", + ) || die; + print "Please contact https expired at: url, ">\n"; + run_server( $d ); + exit; + } + } else { + my $d = HTTP::Daemon::SSL->new( + LocalPort => $port_https, + LocalAddr => "127.0.0.1", + SSL_cert_file => "$Bin/certs/server-cert.pem", + SSL_key_file => "$Bin/certs/server-key.pem", + ) || die; + print "Please contact https at: url, ">\n"; + run_server( $d ); + exit; + } + } + # give our webservers some time to startup + sleep(1); +} else { + # Child + #print "child\n"; + my $d = HTTP::Daemon->new( + LocalPort => $port_http, + LocalAddr => "127.0.0.1", + ) || die; + print "Please contact http at: url, ">\n"; + run_server( $d ); + exit; +} + +# Run the same server on http and https +sub run_server { + my $d = shift; + MAINLOOP: while (my $c = $d->accept ) { + while (my $r = $c->get_request) { + if ($r->method eq "GET" and $r->url->path =~ m^/statuscode/(\d+)^) { + $c->send_basic_header($1); + $c->send_crlf; + } elsif ($r->method eq "GET" and $r->url->path =~ m^/file/(.*)^) { + $c->send_basic_header; + $c->send_crlf; + $c->send_file_response("$Bin/var/$1"); + } elsif ($r->method eq "GET" and $r->url->path eq "/slow") { + $c->send_basic_header; + $c->send_crlf; + sleep 1; + $c->send_response("slow"); + } elsif ($r->url->path eq "/method") { + if ($r->method eq "DELETE") { + $c->send_error(HTTP::Status->RC_METHOD_NOT_ALLOWED); + } elsif ($r->method eq "foo") { + $c->send_error(HTTP::Status->RC_NOT_IMPLEMENTED); + } else { + $c->send_status_line(200, $r->method); + } + } elsif ($r->url->path eq "/postdata") { + $c->send_basic_header; + $c->send_crlf; + $c->send_response($r->method.":".$r->content); + } elsif ($r->url->path eq "/redirect") { + $c->send_redirect( "/redirect2" ); + } elsif ($r->url->path eq "/redir_external") { + $c->send_redirect(($d->isa('HTTP::Daemon::SSL') ? "https" : "http") . "://169.254.169.254/redirect2" ); + } elsif ($r->url->path eq "/redirect2") { + $c->send_basic_header; + $c->send_crlf; + $c->send_response(HTTP::Response->new( 200, 'OK', undef, 'redirected' )); + } elsif ($r->url->path eq "/redir_timeout") { + $c->send_redirect( "/timeout" ); + } elsif ($r->url->path eq "/timeout") { + # Keep $c from being destroyed, but prevent severe leaks + unshift @persist, $c; + delete($persist[1000]); + next MAINLOOP; + } elsif ($r->url->path eq "/header_check") { + $c->send_basic_header; + $c->send_header('foo'); + $c->send_crlf; + } elsif ($r->url->path eq "/virtual_port") { + # return sent Host header + $c->send_basic_header; + $c->send_crlf; + $c->send_response(HTTP::Response->new( 200, 'OK', undef, $r->header ('Host'))); + } else { + $c->send_error(HTTP::Status->RC_FORBIDDEN); + } + $c->close; + } + } +} + +END { + foreach my $pid (@pids) { + if ($pid) { print "Killing $pid\n"; kill "INT", $pid } + } +}; + +if ($ARGV[0] && $ARGV[0] eq "-d") { + while (1) { + sleep 100; + } +} + +my $result; +my $command = "./$plugin -H 127.0.0.1"; + +run_common_tests( { command => "$command -p $port_http" } ); +SKIP: { + skip "HTTP::Daemon::SSL not installed", $common_tests + $ssl_only_tests if ! exists $servers->{https}; + run_common_tests( { command => "$command -p $port_https", ssl => 1 } ); + + $result = NPTest->testCmd( "$command -p $port_https -S -C 14" ); + is( $result->return_code, 0, "$command -p $port_https -S -C 14" ); + is( $result->output, "OK - Certificate 'Monitoring Plugins' will expire on Fri Feb 16 15:31:44 2029 +0000.", "output ok" ); + + $result = NPTest->testCmd( "$command -p $port_https -S -C 14000" ); + is( $result->return_code, 1, "$command -p $port_https -S -C 14000" ); + like( $result->output, '/WARNING - Certificate \'Monitoring Plugins\' expires in \d+ day\(s\) \(Fri Feb 16 15:31:44 2029 \+0000\)./', "output ok" ); + + # Expired cert tests + $result = NPTest->testCmd( "$command -p $port_https -S -C 13960,14000" ); + is( $result->return_code, 2, "$command -p $port_https -S -C 13960,14000" ); + like( $result->output, '/CRITICAL - Certificate \'Monitoring Plugins\' expires in \d+ day\(s\) \(Fri Feb 16 15:31:44 2029 \+0000\)./', "output ok" ); + + $result = NPTest->testCmd( "$command -p $port_https_expired -S -C 7" ); + is( $result->return_code, 2, "$command -p $port_https_expired -S -C 7" ); + is( $result->output, + 'CRITICAL - Certificate \'Monitoring Plugins\' expired on Wed Jan 2 11:00:26 2008 +0000.', + "output ok" ); + +} + +my $cmd; + +# advanced checks with virtual hostname and virtual port +SKIP: { + skip "libcurl version is smaller than $required_version", 6 unless $use_advanced_checks; + + # http without virtual port + $cmd = "./$plugin -H $virtual_host -I 127.0.0.1 -p $port_http -u /virtual_port -r ^$virtual_host:$port_http\$"; + $result = NPTest->testCmd( $cmd ); + is( $result->return_code, 0, $cmd); + like( $result->output, '/^HTTP OK: HTTP/1.1 200 OK - \d+ bytes in [\d\.]+ second/', "Output correct: ".$result->output ); + + # http with virtual port (!= 80) + $cmd = "./$plugin -H $virtual_host:$virtual_port -I 127.0.0.1 -p $port_http -u /virtual_port -r ^$virtual_host:$virtual_port\$"; + $result = NPTest->testCmd( $cmd ); + is( $result->return_code, 0, $cmd); + like( $result->output, '/^HTTP OK: HTTP/1.1 200 OK - \d+ bytes in [\d\.]+ second/', "Output correct: ".$result->output ); + + # http with virtual port (80) + $cmd = "./$plugin -H $virtual_host:80 -I 127.0.0.1 -p $port_http -u /virtual_port -r ^$virtual_host\$"; + $result = NPTest->testCmd( $cmd ); + is( $result->return_code, 0, $cmd); + like( $result->output, '/^HTTP OK: HTTP/1.1 200 OK - \d+ bytes in [\d\.]+ second/', "Output correct: ".$result->output ); +} + +# and the same for SSL +SKIP: { + skip "libcurl version is smaller than $required_version and/or HTTP::Daemon::SSL not installed", 6 if ! exists $servers->{https} or not $use_advanced_checks; + # https without virtual port + $cmd = "./$plugin -H $virtual_host -I 127.0.0.1 -p $port_https --ssl -u /virtual_port -r ^$virtual_host:$port_https\$"; + $result = NPTest->testCmd( $cmd ); + is( $result->return_code, 0, $cmd); + like( $result->output, '/^HTTP OK: HTTP/1.1 200 OK - \d+ bytes in [\d\.]+ second/', "Output correct: ".$result->output ); + + # https with virtual port (!= 443) + $cmd = "./$plugin -H $virtual_host:$virtual_port -I 127.0.0.1 -p $port_https --ssl -u /virtual_port -r ^$virtual_host:$virtual_port\$"; + $result = NPTest->testCmd( $cmd ); + is( $result->return_code, 0, $cmd); + like( $result->output, '/^HTTP OK: HTTP/1.1 200 OK - \d+ bytes in [\d\.]+ second/', "Output correct: ".$result->output ); + + # https with virtual port (443) + $cmd = "./$plugin -H $virtual_host:443 -I 127.0.0.1 -p $port_https --ssl -u /virtual_port -r ^$virtual_host\$"; + $result = NPTest->testCmd( $cmd ); + is( $result->return_code, 0, $cmd); + like( $result->output, '/^HTTP OK: HTTP/1.1 200 OK - \d+ bytes in [\d\.]+ second/', "Output correct: ".$result->output ); +} + + +sub run_common_tests { + my ($opts) = @_; + my $command = $opts->{command}; + if ($opts->{ssl}) { + $command .= " --ssl"; + } + + $result = NPTest->testCmd( "$command -u /file/root" ); + is( $result->return_code, 0, "/file/root"); + like( $result->output, '/^HTTP OK: HTTP/1.1 200 OK - 274 bytes in [\d\.]+ second/', "Output correct" ); + + $result = NPTest->testCmd( "$command -u /file/root -s Root" ); + is( $result->return_code, 0, "/file/root search for string"); + like( $result->output, '/^HTTP OK: HTTP/1.1 200 OK - 274 bytes in [\d\.]+ second/', "Output correct" ); + + $result = NPTest->testCmd( "$command -u /file/root -s NonRoot" ); + is( $result->return_code, 2, "Missing string check"); + like( $result->output, qr%^HTTP CRITICAL: HTTP/1\.1 200 OK - string 'NonRoot' not found on 'https?://127\.0\.0\.1:\d+/file/root'%, "Shows search string and location"); + + $result = NPTest->testCmd( "$command -u /file/root -s NonRootWithOver30charsAndMoreFunThanAWetFish" ); + is( $result->return_code, 2, "Missing string check"); + like( $result->output, qr%HTTP CRITICAL: HTTP/1\.1 200 OK - string 'NonRootWithOver30charsAndM...' not found on 'https?://127\.0\.0\.1:\d+/file/root'%, "Shows search string and location"); + + $result = NPTest->testCmd( "$command -u /header_check -d foo" ); + is( $result->return_code, 0, "header_check search for string"); + like( $result->output, '/^HTTP OK: HTTP/1.1 200 OK - 96 bytes in [\d\.]+ second/', "Output correct" ); + + $result = NPTest->testCmd( "$command -u /header_check -d bar" ); + is( $result->return_code, 2, "Missing header string check"); + like( $result->output, qr%^HTTP CRITICAL: HTTP/1\.1 200 OK - header 'bar' not found on 'https?://127\.0\.0\.1:\d+/header_check'%, "Shows search string and location"); + + my $cmd; + $cmd = "$command -u /slow"; + $result = NPTest->testCmd( $cmd ); + is( $result->return_code, 0, "$cmd"); + like( $result->output, '/^HTTP OK: HTTP/1.1 200 OK - \d+ bytes in [\d\.]+ second/', "Output correct: ".$result->output ); + $result->output =~ /in ([\d\.]+) second/; + cmp_ok( $1, ">", 1, "Time is > 1 second" ); + + $cmd = "$command -u /statuscode/200"; + $result = NPTest->testCmd( $cmd ); + is( $result->return_code, 0, $cmd); + like( $result->output, '/^HTTP OK: HTTP/1.1 200 OK - \d+ bytes in [\d\.]+ second/', "Output correct: ".$result->output ); + + $cmd = "$command -u /statuscode/200 -e 200"; + $result = NPTest->testCmd( $cmd ); + is( $result->return_code, 0, $cmd); + like( $result->output, '/^HTTP OK: HTTP/1.1 200 OK - Status line output matched "200" - \d+ bytes in [\d\.]+ second/', "Output correct: ".$result->output ); + + $cmd = "$command -u /statuscode/201"; + $result = NPTest->testCmd( $cmd ); + is( $result->return_code, 0, $cmd); + like( $result->output, '/^HTTP OK: HTTP/1.1 201 Created - \d+ bytes in [\d\.]+ second /', "Output correct: ".$result->output ); + + $cmd = "$command -u /statuscode/201 -e 201"; + $result = NPTest->testCmd( $cmd ); + is( $result->return_code, 0, $cmd); + like( $result->output, '/^HTTP OK: HTTP/1.1 201 Created - Status line output matched "201" - \d+ bytes in [\d\.]+ second /', "Output correct: ".$result->output ); + + $cmd = "$command -u /statuscode/201 -e 200"; + $result = NPTest->testCmd( $cmd ); + is( $result->return_code, 2, $cmd); + like( $result->output, '/^HTTP CRITICAL - Invalid HTTP response received from host on port \d+: HTTP/1.1 201 Created/', "Output correct: ".$result->output ); + + $cmd = "$command -u /statuscode/200 -e 200,201,202"; + $result = NPTest->testCmd( $cmd ); + is( $result->return_code, 0, $cmd); + like( $result->output, '/^HTTP OK: HTTP/1.1 200 OK - Status line output matched "200,201,202" - \d+ bytes in [\d\.]+ second/', "Output correct: ".$result->output ); + + $cmd = "$command -u /statuscode/201 -e 200,201,202"; + $result = NPTest->testCmd( $cmd ); + is( $result->return_code, 0, $cmd); + like( $result->output, '/^HTTP OK: HTTP/1.1 201 Created - Status line output matched "200,201,202" - \d+ bytes in [\d\.]+ second/', "Output correct: ".$result->output ); + + $cmd = "$command -u /statuscode/203 -e 200,201,202"; + $result = NPTest->testCmd( $cmd ); + is( $result->return_code, 2, $cmd); + like( $result->output, '/^HTTP CRITICAL - Invalid HTTP response received from host on port (\d+): HTTP/1.1 203 Non-Authoritative Information/', "Output correct: ".$result->output ); + + $cmd = "$command -j HEAD -u /method"; + $result = NPTest->testCmd( $cmd ); + is( $result->return_code, 0, $cmd); + like( $result->output, '/^HTTP OK: HTTP/1.1 200 HEAD - \d+ bytes in [\d\.]+ second/', "Output correct: ".$result->output ); + + $cmd = "$command -j POST -u /method"; + $result = NPTest->testCmd( $cmd ); + is( $result->return_code, 0, $cmd); + like( $result->output, '/^HTTP OK: HTTP/1.1 200 POST - \d+ bytes in [\d\.]+ second/', "Output correct: ".$result->output ); + + $cmd = "$command -j GET -u /method"; + $result = NPTest->testCmd( $cmd ); + is( $result->return_code, 0, $cmd); + like( $result->output, '/^HTTP OK: HTTP/1.1 200 GET - \d+ bytes in [\d\.]+ second/', "Output correct: ".$result->output ); + + $cmd = "$command -u /method"; + $result = NPTest->testCmd( $cmd ); + is( $result->return_code, 0, $cmd); + like( $result->output, '/^HTTP OK: HTTP/1.1 200 GET - \d+ bytes in [\d\.]+ second/', "Output correct: ".$result->output ); + + $cmd = "$command -P foo -u /method"; + $result = NPTest->testCmd( $cmd ); + is( $result->return_code, 0, $cmd); + like( $result->output, '/^HTTP OK: HTTP/1.1 200 POST - \d+ bytes in [\d\.]+ second/', "Output correct: ".$result->output ); + + $cmd = "$command -j DELETE -u /method"; + $result = NPTest->testCmd( $cmd ); + is( $result->return_code, 1, $cmd); + like( $result->output, '/^HTTP WARNING: HTTP/1.1 405 Method Not Allowed/', "Output correct: ".$result->output ); + + $cmd = "$command -j foo -u /method"; + $result = NPTest->testCmd( $cmd ); + is( $result->return_code, 2, $cmd); + like( $result->output, '/^HTTP CRITICAL: HTTP/1.1 501 Not Implemented/', "Output correct: ".$result->output ); + + $cmd = "$command -P stufftoinclude -u /postdata -s POST:stufftoinclude"; + $result = NPTest->testCmd( $cmd ); + is( $result->return_code, 0, $cmd); + like( $result->output, '/^HTTP OK: HTTP/1.1 200 OK - \d+ bytes in [\d\.]+ second/', "Output correct: ".$result->output ); + + $cmd = "$command -j PUT -P stufftoinclude -u /postdata -s PUT:stufftoinclude"; + $result = NPTest->testCmd( $cmd ); + is( $result->return_code, 0, $cmd); + like( $result->output, '/^HTTP OK: HTTP/1.1 200 OK - \d+ bytes in [\d\.]+ second/', "Output correct: ".$result->output ); + + # To confirm that the free doesn't segfault + $cmd = "$command -P stufftoinclude -j PUT -u /postdata -s PUT:stufftoinclude"; + $result = NPTest->testCmd( $cmd ); + is( $result->return_code, 0, $cmd); + like( $result->output, '/^HTTP OK: HTTP/1.1 200 OK - \d+ bytes in [\d\.]+ second/', "Output correct: ".$result->output ); + + $cmd = "$command -u /redirect"; + $result = NPTest->testCmd( $cmd ); + is( $result->return_code, 0, $cmd); + like( $result->output, '/^HTTP OK: HTTP/1.1 301 Moved Permanently - \d+ bytes in [\d\.]+ second/', "Output correct: ".$result->output ); + + $cmd = "$command -f follow -u /redirect"; + $result = NPTest->testCmd( $cmd ); + is( $result->return_code, 0, $cmd); + like( $result->output, '/^HTTP OK: HTTP/1.1 200 OK - \d+ bytes in [\d\.]+ second/', "Output correct: ".$result->output ); + + $cmd = "$command -u /redirect -k 'follow: me'"; + $result = NPTest->testCmd( $cmd ); + is( $result->return_code, 0, $cmd); + like( $result->output, '/^HTTP OK: HTTP/1.1 301 Moved Permanently - \d+ bytes in [\d\.]+ second/', "Output correct: ".$result->output ); + + $cmd = "$command -f follow -u /redirect -k 'follow: me'"; + $result = NPTest->testCmd( $cmd ); + is( $result->return_code, 0, $cmd); + like( $result->output, '/^HTTP OK: HTTP/1.1 200 OK - \d+ bytes in [\d\.]+ second/', "Output correct: ".$result->output ); + + $cmd = "$command -f sticky -u /redirect -k 'follow: me'"; + $result = NPTest->testCmd( $cmd ); + is( $result->return_code, 0, $cmd); + like( $result->output, '/^HTTP OK: HTTP/1.1 200 OK - \d+ bytes in [\d\.]+ second/', "Output correct: ".$result->output ); + + $cmd = "$command -f stickyport -u /redirect -k 'follow: me'"; + $result = NPTest->testCmd( $cmd ); + is( $result->return_code, 0, $cmd); + like( $result->output, '/^HTTP OK: HTTP/1.1 200 OK - \d+ bytes in [\d\.]+ second/', "Output correct: ".$result->output ); + + # These tests may block + print "ALRM\n"; + + # stickyport - on full urlS port is set back to 80 otherwise + $cmd = "$command -f stickyport -u /redir_external -t 5 -s redirected"; + eval { + local $SIG{ALRM} = sub { die "alarm\n" }; + alarm(2); + $result = NPTest->testCmd( $cmd ); + alarm(0); }; + isnt( $@, "alarm\n", $cmd ); + is( $result->return_code, 0, $cmd ); + + # Let's hope there won't be any web server on :80 returning "redirected"! + $cmd = "$command -f sticky -u /redir_external -t 5 -s redirected"; + eval { + local $SIG{ALRM} = sub { die "alarm\n" }; + alarm(2); + $result = NPTest->testCmd( $cmd ); + alarm(0); }; + isnt( $@, "alarm\n", $cmd ); + isnt( $result->return_code, 0, $cmd ); + + # Test an external address - timeout + SKIP: { + skip "This doesn't seem to work all the time", 1 unless ($ENV{HTTP_EXTERNAL}); + $cmd = "$command -f follow -u /redir_external -t 5"; + eval { + $result = NPTest->testCmd( $cmd, 2 ); + }; + like( $@, "/timeout in command: $cmd/", $cmd ); + } + + $cmd = "$command -u /timeout -t 5"; + eval { + $result = NPTest->testCmd( $cmd, 2 ); + }; + like( $@, "/timeout in command: $cmd/", $cmd ); + + $cmd = "$command -f follow -u /redir_timeout -t 2"; + eval { + $result = NPTest->testCmd( $cmd, 5 ); + }; + is( $@, "", $cmd ); + +} diff --git a/plugins/tests/check_http.t b/plugins/tests/check_http.t index 1bc0ecb..2f051fa 100755 --- a/plugins/tests/check_http.t +++ b/plugins/tests/check_http.t @@ -4,13 +4,15 @@ # # To create the https server certificate: # openssl req -new -x509 -keyout server-key.pem -out server-cert.pem -days 3650 -nodes -# Country Name (2 letter code) [AU]:UK -# State or Province Name (full name) [Some-State]:Derbyshire -# Locality Name (eg, city) []:Belper +# to create a new expired certificate: +# faketime '2008-01-01 12:00:00' openssl req -new -x509 -keyout expired-key.pem -out expired-cert.pem -days 1 -nodes +# Country Name (2 letter code) [AU]:DE +# State or Province Name (full name) [Some-State]:Bavaria +# Locality Name (eg, city) []:Munich # Organization Name (eg, company) [Internet Widgits Pty Ltd]:Monitoring Plugins # Organizational Unit Name (eg, section) []: -# Common Name (eg, YOUR name) []:Ton Voon -# Email Address []:tonvoon@mac.com +# Common Name (e.g. server FQDN or YOUR name) []:Monitoring Plugins +# Email Address []:devel@monitoring-plugins.org use strict; use Test::More; @@ -20,6 +22,7 @@ use FindBin qw($Bin); $ENV{'LC_TIME'} = "C"; my $common_tests = 70; +my $virtual_port_tests = 8; my $ssl_only_tests = 8; # Check that all dependent modules are available eval "use HTTP::Daemon 6.01;"; @@ -29,13 +32,16 @@ eval { require HTTP::Response; }; +my $plugin = 'check_http'; +$plugin = 'check_curl' if $0 =~ m/check_curl/mx; + if ($@) { plan skip_all => "Missing required module for test: $@"; } else { - if (-x "./check_http") { - plan tests => $common_tests * 2 + $ssl_only_tests; + if (-x "./$plugin") { + plan tests => $common_tests * 2 + $ssl_only_tests + $virtual_port_tests; } else { - plan skip_all => "No check_http compiled"; + plan skip_all => "No $plugin compiled"; } } @@ -158,6 +164,11 @@ sub run_server { $c->send_basic_header; $c->send_header('foo'); $c->send_crlf; + } elsif ($r->url->path eq "/virtual_port") { + # return sent Host header + $c->send_basic_header; + $c->send_crlf; + $c->send_response(HTTP::Response->new( 200, 'OK', undef, $r->header ('Host'))); } else { $c->send_error(HTTP::Status->RC_FORBIDDEN); } @@ -179,7 +190,7 @@ if ($ARGV[0] && $ARGV[0] eq "-d") { } my $result; -my $command = "./check_http -H 127.0.0.1"; +my $command = "./$plugin -H 127.0.0.1"; run_common_tests( { command => "$command -p $port_http" } ); SKIP: { @@ -188,25 +199,56 @@ SKIP: { $result = NPTest->testCmd( "$command -p $port_https -S -C 14" ); is( $result->return_code, 0, "$command -p $port_https -S -C 14" ); - is( $result->output, 'OK - Certificate \'Ton Voon\' will expire on Sun Mar 3 21:41:28 2019 +0000.', "output ok" ); + is( $result->output, "OK - Certificate 'Monitoring Plugins' will expire on Fri Feb 16 15:31:44 2029 +0000.", "output ok" ); $result = NPTest->testCmd( "$command -p $port_https -S -C 14000" ); is( $result->return_code, 1, "$command -p $port_https -S -C 14000" ); - like( $result->output, '/WARNING - Certificate \'Ton Voon\' expires in \d+ day\(s\) \(Sun Mar 3 21:41:28 2019 \+0000\)./', "output ok" ); + like( $result->output, '/WARNING - Certificate \'Monitoring Plugins\' expires in \d+ day\(s\) \(Fri Feb 16 15:31:44 2029 \+0000\)./', "output ok" ); # Expired cert tests $result = NPTest->testCmd( "$command -p $port_https -S -C 13960,14000" ); is( $result->return_code, 2, "$command -p $port_https -S -C 13960,14000" ); - like( $result->output, '/CRITICAL - Certificate \'Ton Voon\' expires in \d+ day\(s\) \(Sun Mar 3 21:41:28 2019 \+0000\)./', "output ok" ); + like( $result->output, '/CRITICAL - Certificate \'Monitoring Plugins\' expires in \d+ day\(s\) \(Fri Feb 16 15:31:44 2029 \+0000\)./', "output ok" ); $result = NPTest->testCmd( "$command -p $port_https_expired -S -C 7" ); is( $result->return_code, 2, "$command -p $port_https_expired -S -C 7" ); is( $result->output, - 'CRITICAL - Certificate \'Ton Voon\' expired on Thu Mar 5 00:13:16 2009 +0000.', + 'CRITICAL - Certificate \'Monitoring Plugins\' expired on Wed Jan 2 11:00:26 2008 +0000.', "output ok" ); } +my $cmd; +# check virtual port behaviour +# +# http without virtual port +$cmd = "$command -p $port_http -u /virtual_port -r ^127.0.0.1:$port_http\$"; +$result = NPTest->testCmd( $cmd ); +is( $result->return_code, 0, $cmd); +like( $result->output, '/^HTTP OK: HTTP/1.1 200 OK - \d+ bytes in [\d\.]+ second/', "Output correct: ".$result->output ); + +# http with virtual port +$cmd = "$command:80 -p $port_http -u /virtual_port -r ^127.0.0.1\$"; +$result = NPTest->testCmd( $cmd ); +is( $result->return_code, 0, $cmd); +like( $result->output, '/^HTTP OK: HTTP/1.1 200 OK - \d+ bytes in [\d\.]+ second/', "Output correct: ".$result->output ); + +SKIP: { + skip "HTTP::Daemon::SSL not installed", 4 if ! exists $servers->{https}; + # https without virtual port + $cmd = "$command -p $port_https --ssl -u /virtual_port -r ^127.0.0.1:$port_https\$"; + $result = NPTest->testCmd( $cmd ); + is( $result->return_code, 0, $cmd); + like( $result->output, '/^HTTP OK: HTTP/1.1 200 OK - \d+ bytes in [\d\.]+ second/', "Output correct: ".$result->output ); + + # https with virtual port + $cmd = "$command:443 -p $port_https --ssl -u /virtual_port -r ^127.0.0.1\$"; + $result = NPTest->testCmd( $cmd ); + is( $result->return_code, 0, $cmd); + like( $result->output, '/^HTTP OK: HTTP/1.1 200 OK - \d+ bytes in [\d\.]+ second/', "Output correct: ".$result->output ); +} + + sub run_common_tests { my ($opts) = @_; my $command = $opts->{command}; @@ -392,7 +434,7 @@ sub run_common_tests { # Test an external address - timeout SKIP: { - skip "This doesn't seems to work all the time", 1 unless ($ENV{HTTP_EXTERNAL}); + skip "This doesn't seem to work all the time", 1 unless ($ENV{HTTP_EXTERNAL}); $cmd = "$command -f follow -u /redir_external -t 5"; eval { $result = NPTest->testCmd( $cmd, 2 ); diff --git a/plugins/tests/check_snmp.t b/plugins/tests/check_snmp.t index 73a68b2..85d6bf5 100755 --- a/plugins/tests/check_snmp.t +++ b/plugins/tests/check_snmp.t @@ -7,6 +7,7 @@ use strict; use Test::More; use NPTest; use FindBin qw($Bin); +use POSIX qw/strftime/; my $tests = 67; # Check that all dependent modules are available @@ -37,6 +38,7 @@ if ($@) { my $port_snmp = 16100 + int(rand(100)); +my $faketime = -x '/usr/bin/faketime' ? 1 : 0; # Start up server my @pids; @@ -118,77 +120,81 @@ like($res->output, '/'.quotemeta('SNMP OK - And now have fun with with this: \"C "And now have fun with with this: \"C:\\\\\" because we\'re not done yet!"').'/m', "Attempt to confuse parser No.3"); -system("rm -f ".$ENV{'MP_STATE_PATH'}."/check_snmp/*"); -$res = NPTest->testCmd( "./check_snmp -H 127.0.0.1 -C public -p $port_snmp -o .1.3.6.1.4.1.8072.3.2.67.10 --rate -w 600" ); -is($res->return_code, 0, "Returns OK"); -is($res->output, "No previous data to calculate rate - assume okay"); +system("rm -f ".$ENV{'MP_STATE_PATH'}."/*/check_snmp/*"); -# Need to sleep, otherwise duration=0 -sleep 1; +# run rate checks with faketime. rate checks depend on the exact amount of time spend between the +# plugin runs which may fail on busy machines. +# using faketime removes this race condition and also saves all the sleeps in between. +SKIP: { + skip "No faketime binary found", 28 if !$faketime; -$res = NPTest->testCmd( "./check_snmp -H 127.0.0.1 -C public -p $port_snmp -o .1.3.6.1.4.1.8072.3.2.67.10 --rate -w 600" ); -is($res->return_code, 1, "WARNING - due to going above rate calculation" ); -is($res->output, "SNMP RATE WARNING - *666* | iso.3.6.1.4.1.8072.3.2.67.10=666;600 "); + my $ts = time(); + $res = NPTest->testCmd("LC_TIME=C TZ=UTC faketime -f '".strftime("%Y-%m-%d %H:%M:%S", localtime($ts))."' ./check_snmp -H 127.0.0.1 -C public -p $port_snmp -o .1.3.6.1.4.1.8072.3.2.67.10 --rate -w 600" ); + is($res->return_code, 0, "Returns OK"); + is($res->output, "No previous data to calculate rate - assume okay"); -$res = NPTest->testCmd( "./check_snmp -H 127.0.0.1 -C public -p $port_snmp -o .1.3.6.1.4.1.8072.3.2.67.10 --rate -w 600" ); -is($res->return_code, 3, "UNKNOWN - basically the divide by zero error" ); -is($res->output, "Time duration between plugin calls is invalid"); + # test rate 1 second later + $res = NPTest->testCmd("LC_TIME=C TZ=UTC faketime -f '".strftime("%Y-%m-%d %H:%M:%S", localtime($ts+1))."' ./check_snmp -H 127.0.0.1 -C public -p $port_snmp -o .1.3.6.1.4.1.8072.3.2.67.10 --rate -w 600" ); + is($res->return_code, 1, "WARNING - due to going above rate calculation" ); + is($res->output, "SNMP RATE WARNING - *666* | iso.3.6.1.4.1.8072.3.2.67.10=666;600 "); + + # test rate with same time + $res = NPTest->testCmd("LC_TIME=C TZ=UTC faketime -f '".strftime("%Y-%m-%d %H:%M:%S", localtime($ts+1))."' ./check_snmp -H 127.0.0.1 -C public -p $port_snmp -o .1.3.6.1.4.1.8072.3.2.67.10 --rate -w 600" ); + is($res->return_code, 3, "UNKNOWN - basically the divide by zero error" ); + is($res->output, "Time duration between plugin calls is invalid"); -$res = NPTest->testCmd( "./check_snmp -H 127.0.0.1 -C public -p $port_snmp -o .1.3.6.1.4.1.8072.3.2.67.10 --rate -l inoctets" ); -is($res->return_code, 0, "OK for first call" ); -is($res->output, "No previous data to calculate rate - assume okay" ); + $res = NPTest->testCmd("LC_TIME=C TZ=UTC faketime -f '".strftime("%Y-%m-%d %H:%M:%S", localtime($ts))."' ./check_snmp -H 127.0.0.1 -C public -p $port_snmp -o .1.3.6.1.4.1.8072.3.2.67.10 --rate -l inoctets" ); + is($res->return_code, 0, "OK for first call" ); + is($res->output, "No previous data to calculate rate - assume okay" ); -# Need to sleep, otherwise duration=0 -sleep 1; + # test rate 1 second later + $res = NPTest->testCmd("LC_TIME=C TZ=UTC faketime -f '".strftime("%Y-%m-%d %H:%M:%S", localtime($ts+1))."' ./check_snmp -H 127.0.0.1 -C public -p $port_snmp -o .1.3.6.1.4.1.8072.3.2.67.10 --rate -l inoctets" ); + is($res->return_code, 0, "OK as no thresholds" ); + is($res->output, "SNMP RATE OK - inoctets 666 | inoctets=666 ", "Check label"); -$res = NPTest->testCmd( "./check_snmp -H 127.0.0.1 -C public -p $port_snmp -o .1.3.6.1.4.1.8072.3.2.67.10 --rate -l inoctets" ); -is($res->return_code, 0, "OK as no thresholds" ); -is($res->output, "SNMP RATE OK - inoctets 666 | inoctets=666 ", "Check label"); - -sleep 2; - -$res = NPTest->testCmd( "./check_snmp -H 127.0.0.1 -C public -p $port_snmp -o .1.3.6.1.4.1.8072.3.2.67.10 --rate -l inoctets" ); -is($res->return_code, 0, "OK as no thresholds" ); -is($res->output, "SNMP RATE OK - inoctets 333 | inoctets=333 ", "Check rate decreases due to longer interval"); + # test rate 3 seconds later + $res = NPTest->testCmd("LC_TIME=C TZ=UTC faketime -f '".strftime("%Y-%m-%d %H:%M:%S", localtime($ts+3))."' ./check_snmp -H 127.0.0.1 -C public -p $port_snmp -o .1.3.6.1.4.1.8072.3.2.67.10 --rate -l inoctets" ); + is($res->return_code, 0, "OK as no thresholds" ); + is($res->output, "SNMP RATE OK - inoctets 333 | inoctets=333 ", "Check rate decreases due to longer interval"); -# label performance data check -$res = NPTest->testCmd( "./check_snmp -H 127.0.0.1 -C public -p $port_snmp -o .1.3.6.1.4.1.8072.3.2.67.10 -l test" ); -is($res->return_code, 0, "OK as no thresholds" ); -is($res->output, "SNMP OK - test 67996 | test=67996c ", "Check label"); + # label performance data check + $res = NPTest->testCmd( "./check_snmp -H 127.0.0.1 -C public -p $port_snmp -o .1.3.6.1.4.1.8072.3.2.67.10 -l test" ); + is($res->return_code, 0, "OK as no thresholds" ); + is($res->output, "SNMP OK - test 67996 | test=67996c ", "Check label"); -$res = NPTest->testCmd( "./check_snmp -H 127.0.0.1 -C public -p $port_snmp -o .1.3.6.1.4.1.8072.3.2.67.10 -l \"test'test\"" ); -is($res->return_code, 0, "OK as no thresholds" ); -is($res->output, "SNMP OK - test'test 68662 | \"test'test\"=68662c ", "Check label"); + $res = NPTest->testCmd( "./check_snmp -H 127.0.0.1 -C public -p $port_snmp -o .1.3.6.1.4.1.8072.3.2.67.10 -l \"test'test\"" ); + is($res->return_code, 0, "OK as no thresholds" ); + is($res->output, "SNMP OK - test'test 68662 | \"test'test\"=68662c ", "Check label"); -$res = NPTest->testCmd( "./check_snmp -H 127.0.0.1 -C public -p $port_snmp -o .1.3.6.1.4.1.8072.3.2.67.10 -l 'test\"test'" ); -is($res->return_code, 0, "OK as no thresholds" ); -is($res->output, "SNMP OK - test\"test 69328 | 'test\"test'=69328c ", "Check label"); + $res = NPTest->testCmd( "./check_snmp -H 127.0.0.1 -C public -p $port_snmp -o .1.3.6.1.4.1.8072.3.2.67.10 -l 'test\"test'" ); + is($res->return_code, 0, "OK as no thresholds" ); + is($res->output, "SNMP OK - test\"test 69328 | 'test\"test'=69328c ", "Check label"); -$res = NPTest->testCmd( "./check_snmp -H 127.0.0.1 -C public -p $port_snmp -o .1.3.6.1.4.1.8072.3.2.67.10 -l test -O" ); -is($res->return_code, 0, "OK as no thresholds" ); -is($res->output, "SNMP OK - test 69994 | iso.3.6.1.4.1.8072.3.2.67.10=69994c ", "Check label"); + $res = NPTest->testCmd( "./check_snmp -H 127.0.0.1 -C public -p $port_snmp -o .1.3.6.1.4.1.8072.3.2.67.10 -l test -O" ); + is($res->return_code, 0, "OK as no thresholds" ); + is($res->output, "SNMP OK - test 69994 | iso.3.6.1.4.1.8072.3.2.67.10=69994c ", "Check label"); -$res = NPTest->testCmd( "./check_snmp -H 127.0.0.1 -C public -p $port_snmp -o .1.3.6.1.4.1.8072.3.2.67.10" ); -is($res->return_code, 0, "OK as no thresholds" ); -is($res->output, "SNMP OK - 70660 | iso.3.6.1.4.1.8072.3.2.67.10=70660c ", "Check label"); + $res = NPTest->testCmd( "./check_snmp -H 127.0.0.1 -C public -p $port_snmp -o .1.3.6.1.4.1.8072.3.2.67.10" ); + is($res->return_code, 0, "OK as no thresholds" ); + is($res->output, "SNMP OK - 70660 | iso.3.6.1.4.1.8072.3.2.67.10=70660c ", "Check label"); -$res = NPTest->testCmd( "./check_snmp -H 127.0.0.1 -C public -p $port_snmp -o .1.3.6.1.4.1.8072.3.2.67.10 -l 'test test'" ); -is($res->return_code, 0, "OK as no thresholds" ); -is($res->output, "SNMP OK - test test 71326 | 'test test'=71326c ", "Check label"); + $res = NPTest->testCmd( "./check_snmp -H 127.0.0.1 -C public -p $port_snmp -o .1.3.6.1.4.1.8072.3.2.67.10 -l 'test test'" ); + is($res->return_code, 0, "OK as no thresholds" ); + is($res->output, "SNMP OK - test test 71326 | 'test test'=71326c ", "Check label"); -$res = NPTest->testCmd( "./check_snmp -H 127.0.0.1 -C public -p $port_snmp -o .1.3.6.1.4.1.8072.3.2.67.10 --rate -l inoctets_per_minute --rate-multiplier=60" ); -is($res->return_code, 0, "OK for first call" ); -is($res->output, "No previous data to calculate rate - assume okay" ); + $res = NPTest->testCmd("LC_TIME=C TZ=UTC faketime -f '".strftime("%Y-%m-%d %H:%M:%S", localtime($ts))."' ./check_snmp -H 127.0.0.1 -C public -p $port_snmp -o .1.3.6.1.4.1.8072.3.2.67.10 --rate -l inoctets_per_minute --rate-multiplier=60" ); + is($res->return_code, 0, "OK for first call" ); + is($res->output, "No previous data to calculate rate - assume okay" ); -# Need to sleep, otherwise duration=0 -sleep 1; + # test 1 second later + $res = NPTest->testCmd("LC_TIME=C TZ=UTC faketime -f '".strftime("%Y-%m-%d %H:%M:%S", localtime($ts+1))."' ./check_snmp -H 127.0.0.1 -C public -p $port_snmp -o .1.3.6.1.4.1.8072.3.2.67.10 --rate -l inoctets_per_minute --rate-multiplier=60" ); + is($res->return_code, 0, "OK as no thresholds" ); + is($res->output, "SNMP RATE OK - inoctets_per_minute 39960 | inoctets_per_minute=39960 ", "Checking multiplier"); +}; -$res = NPTest->testCmd( "./check_snmp -H 127.0.0.1 -C public -p $port_snmp -o .1.3.6.1.4.1.8072.3.2.67.10 --rate -l inoctets_per_minute --rate-multiplier=60" ); -is($res->return_code, 0, "OK as no thresholds" ); -is($res->output, "SNMP RATE OK - inoctets_per_minute 39960 | inoctets_per_minute=39960 ", "Checking multiplier"); $res = NPTest->testCmd( "./check_snmp -H 127.0.0.1 -C public -p $port_snmp -o .1.3.6.1.4.1.8072.3.2.67.11 -s '\"stringtests\"'" ); diff --git a/plugins/utils.c b/plugins/utils.c index 231af92..348ec02 100644 --- a/plugins/utils.c +++ b/plugins/utils.c @@ -36,9 +36,6 @@ extern const char *progname; #define STRLEN 64 #define TXTBLK 128 -unsigned int timeout_state = STATE_CRITICAL; -unsigned int timeout_interval = DEFAULT_SOCKET_TIMEOUT; - time_t start_time, end_time; /* ************************************************************************** @@ -148,33 +145,6 @@ print_revision (const char *command_name, const char *revision) command_name, revision, PACKAGE, VERSION); } -const char * -state_text (int result) -{ - switch (result) { - case STATE_OK: - return "OK"; - case STATE_WARNING: - return "WARNING"; - case STATE_CRITICAL: - return "CRITICAL"; - case STATE_DEPENDENT: - return "DEPENDENT"; - default: - return "UNKNOWN"; - } -} - -void -timeout_alarm_handler (int signo) -{ - if (signo == SIGALRM) { - printf (_("%s - Plugin timed out after %d seconds\n"), - state_text(timeout_state), timeout_interval); - exit (timeout_state); - } -} - int is_numeric (char *number) { @@ -709,3 +679,18 @@ char *sperfdata_int (const char *label, return data; } +int +open_max (void) +{ + errno = 0; + if (maxfd > 0) + return(maxfd); + + if ((maxfd = sysconf (_SC_OPEN_MAX)) < 0) { + if (errno == 0) + maxfd = DEFAULT_MAXFD; /* it's indeterminate */ + else + die (STATE_UNKNOWN, _("sysconf error for _SC_OPEN_MAX\n")); + } + return(maxfd); +} diff --git a/plugins/utils.h b/plugins/utils.h index a436e1c..33a2054 100644 --- a/plugins/utils.h +++ b/plugins/utils.h @@ -29,13 +29,6 @@ suite of plugins. */ void support (void); void print_revision (const char *, const char *); -/* Handle timeouts */ - -extern unsigned int timeout_state; -extern unsigned int timeout_interval; - -RETSIGTYPE timeout_alarm_handler (int); - extern time_t start_time, end_time; /* Test input types */ @@ -89,8 +82,6 @@ void usage4(const char *) __attribute__((noreturn)); void usage5(void) __attribute__((noreturn)); void usage_va(const char *fmt, ...) __attribute__((noreturn)); -const char *state_text (int); - #define max(a,b) (((a)>(b))?(a):(b)) #define min(a,b) (((a)<(b))?(a):(b)) @@ -106,6 +97,8 @@ char *sperfdata (const char *, double, const char *, char *, char *, char *sperfdata_int (const char *, int, const char *, char *, char *, int, int, int, int); +int open_max (void); + /* The idea here is that, although not every plugin will use all of these, most will or should. Therefore, for consistency, these very common options should have only these meanings throughout the overall suite */ diff --git a/po/de.gmo b/po/de.gmo index 962fd44..f35d589 100644 Binary files a/po/de.gmo and b/po/de.gmo differ diff --git a/po/de.po b/po/de.po index 8657c6d..a39dacb 100644 --- a/po/de.po +++ b/po/de.po @@ -9,7 +9,7 @@ msgid "" msgstr "" "Project-Id-Version: nagiosplug\n" "Report-Msgid-Bugs-To: devel@monitoring-plugins.org\n" -"POT-Creation-Date: 2016-11-29 09:49+0100\n" +"POT-Creation-Date: 2020-12-09 22:49+0100\n" "PO-Revision-Date: 2004-12-23 17:46+0100\n" "Last-Translator: <>\n" "Language-Team: English \n" @@ -20,23 +20,23 @@ msgstr "" "Plural-Forms: nplurals=2; plural=(n > 1);X-Generator: KBabel 1.3.1\n" #: plugins/check_by_ssh.c:86 plugins/check_cluster.c:76 plugins/check_dig.c:91 -#: plugins/check_disk.c:201 plugins/check_dns.c:101 plugins/check_dummy.c:52 -#: plugins/check_fping.c:93 plugins/check_game.c:82 plugins/check_hpjd.c:104 -#: plugins/check_http.c:169 plugins/check_ldap.c:118 plugins/check_load.c:122 +#: plugins/check_disk.c:204 plugins/check_dns.c:104 plugins/check_dummy.c:52 +#: plugins/check_fping.c:93 plugins/check_game.c:82 plugins/check_hpjd.c:105 +#: plugins/check_http.c:171 plugins/check_ldap.c:118 plugins/check_load.c:126 #: plugins/check_mrtgtraf.c:83 plugins/check_mysql.c:124 #: plugins/check_nagios.c:91 plugins/check_nt.c:127 plugins/check_ntp.c:780 #: plugins/check_ntp_peer.c:575 plugins/check_ntp_time.c:557 #: plugins/check_nwstat.c:173 plugins/check_overcr.c:102 -#: plugins/check_pgsql.c:172 plugins/check_ping.c:95 plugins/check_procs.c:172 +#: plugins/check_pgsql.c:173 plugins/check_ping.c:95 plugins/check_procs.c:172 #: plugins/check_radius.c:172 plugins/check_real.c:80 plugins/check_smtp.c:141 #: plugins/check_snmp.c:242 plugins/check_ssh.c:74 plugins/check_swap.c:111 -#: plugins/check_tcp.c:217 plugins/check_time.c:78 plugins/check_ups.c:122 -#: plugins/check_users.c:84 plugins/negate.c:212 plugins-root/check_dhcp.c:270 +#: plugins/check_tcp.c:222 plugins/check_time.c:78 plugins/check_ups.c:122 +#: plugins/check_users.c:84 plugins/negate.c:210 plugins-root/check_dhcp.c:270 msgid "Could not parse arguments" msgstr "Argumente konnten nicht ausgewertet werden" -#: plugins/check_by_ssh.c:90 plugins/check_dig.c:85 plugins/check_dns.c:94 -#: plugins/check_nagios.c:95 plugins/check_pgsql.c:178 plugins/check_ping.c:99 +#: plugins/check_by_ssh.c:90 plugins/check_dig.c:85 plugins/check_dns.c:97 +#: plugins/check_nagios.c:95 plugins/check_pgsql.c:179 plugins/check_ping.c:99 #: plugins/check_procs.c:188 plugins/check_snmp.c:342 plugins/negate.c:78 msgid "Cannot catch SIGALRM" msgstr "Konnte SIGALRM nicht erhalten" @@ -61,18 +61,18 @@ msgstr "SSH WARNING: Konnte %s nicht msgid "%s: Error parsing output\n" msgstr "" -#: plugins/check_by_ssh.c:228 plugins/check_disk.c:492 -#: plugins/check_http.c:280 plugins/check_ldap.c:334 plugins/check_pgsql.c:311 +#: plugins/check_by_ssh.c:228 plugins/check_disk.c:519 +#: plugins/check_http.c:283 plugins/check_ldap.c:334 plugins/check_pgsql.c:312 #: plugins/check_procs.c:437 plugins/check_radius.c:319 -#: plugins/check_real.c:357 plugins/check_smtp.c:585 plugins/check_snmp.c:763 -#: plugins/check_ssh.c:140 plugins/check_tcp.c:509 plugins/check_time.c:302 -#: plugins/check_ups.c:556 plugins/negate.c:162 +#: plugins/check_real.c:357 plugins/check_smtp.c:586 plugins/check_snmp.c:763 +#: plugins/check_ssh.c:140 plugins/check_tcp.c:519 plugins/check_time.c:302 +#: plugins/check_ups.c:556 plugins/negate.c:160 msgid "Timeout interval must be a positive integer" msgstr "Timeout interval muss ein positiver Integer sein" -#: plugins/check_by_ssh.c:238 plugins/check_pgsql.c:341 +#: plugins/check_by_ssh.c:238 plugins/check_pgsql.c:342 #: plugins/check_radius.c:283 plugins/check_real.c:328 -#: plugins/check_smtp.c:510 plugins/check_tcp.c:515 plugins/check_time.c:296 +#: plugins/check_smtp.c:511 plugins/check_tcp.c:525 plugins/check_time.c:296 #: plugins/check_ups.c:518 msgid "Port must be a positive integer" msgstr "Port muss ein positiver Integer sein" @@ -224,92 +224,92 @@ msgid "" "all of -O, -s, and -n options (servicelist order must match '-C'options)" msgstr "" -#: plugins/check_by_ssh.c:453 plugins/check_cluster.c:261 -#: plugins/check_dig.c:364 plugins/check_disk.c:940 plugins/check_http.c:1647 +#: plugins/check_by_ssh.c:453 plugins/check_cluster.c:271 +#: plugins/check_dig.c:364 plugins/check_disk.c:973 plugins/check_http.c:1684 #: plugins/check_nagios.c:312 plugins/check_ntp.c:879 #: plugins/check_ntp_peer.c:733 plugins/check_ntp_time.c:642 -#: plugins/check_procs.c:763 plugins/negate.c:251 plugins/urlize.c:179 +#: plugins/check_procs.c:763 plugins/negate.c:249 plugins/urlize.c:179 msgid "Examples:" msgstr "" -#: plugins/check_by_ssh.c:468 plugins/check_cluster.c:274 -#: plugins/check_dig.c:376 plugins/check_disk.c:957 plugins/check_dns.c:518 +#: plugins/check_by_ssh.c:468 plugins/check_cluster.c:284 +#: plugins/check_dig.c:376 plugins/check_disk.c:990 plugins/check_dns.c:574 #: plugins/check_dummy.c:122 plugins/check_fping.c:505 -#: plugins/check_game.c:331 plugins/check_hpjd.c:432 plugins/check_http.c:1684 -#: plugins/check_ldap.c:508 plugins/check_load.c:334 plugins/check_mrtg.c:382 -#: plugins/check_mysql.c:581 plugins/check_nagios.c:323 plugins/check_nt.c:797 +#: plugins/check_game.c:331 plugins/check_hpjd.c:438 plugins/check_http.c:1722 +#: plugins/check_ldap.c:508 plugins/check_load.c:348 plugins/check_mrtg.c:382 +#: plugins/check_mysql.c:584 plugins/check_nagios.c:323 plugins/check_nt.c:797 #: plugins/check_ntp.c:898 plugins/check_ntp_peer.c:753 #: plugins/check_ntp_time.c:651 plugins/check_nwstat.c:1685 -#: plugins/check_overcr.c:467 plugins/check_pgsql.c:578 -#: plugins/check_ping.c:610 plugins/check_procs.c:781 +#: plugins/check_overcr.c:467 plugins/check_pgsql.c:579 +#: plugins/check_ping.c:610 plugins/check_procs.c:786 #: plugins/check_radius.c:396 plugins/check_real.c:452 -#: plugins/check_smtp.c:849 plugins/check_snmp.c:1253 plugins/check_ssh.c:325 -#: plugins/check_swap.c:571 plugins/check_tcp.c:689 plugins/check_time.c:371 +#: plugins/check_smtp.c:850 plugins/check_snmp.c:1254 plugins/check_ssh.c:325 +#: plugins/check_swap.c:571 plugins/check_tcp.c:710 plugins/check_time.c:371 #: plugins/check_ups.c:660 plugins/check_users.c:262 -#: plugins/check_ide_smart.c:606 plugins/negate.c:275 plugins/urlize.c:196 -#: plugins-root/check_dhcp.c:1393 plugins-root/check_icmp.c:1408 +#: plugins/check_ide_smart.c:606 plugins/negate.c:273 plugins/urlize.c:196 +#: plugins-root/check_dhcp.c:1394 plugins-root/check_icmp.c:1615 msgid "Usage:" msgstr "" -#: plugins/check_cluster.c:230 +#: plugins/check_cluster.c:240 #, c-format msgid "Host/Service Cluster Plugin for Monitoring" msgstr "" -#: plugins/check_cluster.c:236 plugins/check_nt.c:697 +#: plugins/check_cluster.c:246 plugins/check_nt.c:697 msgid "Options:" msgstr "" -#: plugins/check_cluster.c:239 +#: plugins/check_cluster.c:249 msgid "Check service cluster status" msgstr "" -#: plugins/check_cluster.c:241 +#: plugins/check_cluster.c:251 msgid "Check host cluster status" msgstr "" -#: plugins/check_cluster.c:243 +#: plugins/check_cluster.c:253 msgid "Optional prepended text output (i.e. \"Host cluster\")" msgstr "" -#: plugins/check_cluster.c:245 plugins/check_cluster.c:248 +#: plugins/check_cluster.c:255 plugins/check_cluster.c:258 msgid "Specifies the range of hosts or services in cluster that must be in a" msgstr "" -#: plugins/check_cluster.c:246 +#: plugins/check_cluster.c:256 msgid "non-OK state in order to return a WARNING status level" msgstr "" -#: plugins/check_cluster.c:249 +#: plugins/check_cluster.c:259 msgid "non-OK state in order to return a CRITICAL status level" msgstr "" -#: plugins/check_cluster.c:251 +#: plugins/check_cluster.c:261 msgid "The status codes of the hosts or services in the cluster, separated by" msgstr "" -#: plugins/check_cluster.c:252 +#: plugins/check_cluster.c:262 msgid "commas" msgstr "" -#: plugins/check_cluster.c:257 plugins/check_game.c:318 -#: plugins/check_http.c:1629 plugins/check_ldap.c:494 plugins/check_mrtg.c:363 -#: plugins/check_mrtgtraf.c:361 plugins/check_mysql.c:570 +#: plugins/check_cluster.c:267 plugins/check_game.c:318 +#: plugins/check_http.c:1666 plugins/check_ldap.c:494 plugins/check_mrtg.c:363 +#: plugins/check_mrtgtraf.c:361 plugins/check_mysql.c:573 #: plugins/check_nt.c:781 plugins/check_ntp.c:875 plugins/check_ntp_peer.c:724 #: plugins/check_ntp_time.c:633 plugins/check_nwstat.c:1670 -#: plugins/check_overcr.c:456 plugins/check_snmp.c:1224 +#: plugins/check_overcr.c:456 plugins/check_snmp.c:1225 #: plugins/check_swap.c:559 plugins/check_ups.c:642 -#: plugins/check_ide_smart.c:580 plugins/negate.c:257 -#: plugins-root/check_icmp.c:1383 +#: plugins/check_ide_smart.c:580 plugins/negate.c:255 +#: plugins-root/check_icmp.c:1590 msgid "Notes:" msgstr "" -#: plugins/check_cluster.c:263 +#: plugins/check_cluster.c:273 msgid "" "Will alert critical if there are 3 or more service data points in a non-OK" msgstr "" -#: plugins/check_cluster.c:264 plugins/check_ups.c:639 +#: plugins/check_cluster.c:274 plugins/check_ups.c:639 msgid "state." msgstr "" @@ -357,7 +357,7 @@ msgstr "Timeout interval muss ein positiver Integer sein - %s" #: plugins/check_dig.c:334 #, fuzzy, c-format -msgid "This plugin test the DNS service on the specified host using dig" +msgid "This plugin tests the DNS service on the specified host using dig" msgstr "Testet den DNS Dienst auf dem angegebenen Host mit dig" #: plugins/check_dig.c:347 @@ -394,88 +394,88 @@ msgstr "" msgid "Pass STRING as argument(s) to dig" msgstr "" -#: plugins/check_disk.c:223 +#: plugins/check_disk.c:226 #, fuzzy, c-format msgid "DISK %s: %s not found\n" msgstr "%s [%s nicht gefunden]" -#: plugins/check_disk.c:223 plugins/check_disk.c:972 plugins/check_dns.c:257 +#: plugins/check_disk.c:226 plugins/check_disk.c:1005 plugins/check_dns.c:279 #: plugins/check_dummy.c:74 plugins/check_mysql.c:310 #: plugins/check_nagios.c:104 plugins/check_nagios.c:168 -#: plugins/check_nagios.c:172 plugins/check_pgsql.c:601 -#: plugins/check_pgsql.c:618 plugins/check_pgsql.c:627 -#: plugins/check_pgsql.c:642 plugins/check_procs.c:351 +#: plugins/check_nagios.c:172 plugins/check_pgsql.c:602 +#: plugins/check_pgsql.c:619 plugins/check_pgsql.c:628 +#: plugins/check_pgsql.c:643 plugins/check_procs.c:351 #, c-format msgid "CRITICAL" msgstr "CRITICAL" -#: plugins/check_disk.c:566 +#: plugins/check_disk.c:593 #, c-format msgid "unit type %s not known\n" msgstr "unbekannter unit type: %s\n" -#: plugins/check_disk.c:569 +#: plugins/check_disk.c:596 #, c-format msgid "failed allocating storage for '%s'\n" msgstr "konnte keinen Speicher für '%s' reservieren\n" -#: plugins/check_disk.c:593 plugins/check_disk.c:634 plugins/check_disk.c:642 -#: plugins/check_disk.c:649 plugins/check_disk.c:653 plugins/check_disk.c:693 -#: plugins/check_disk.c:699 plugins/check_disk.c:718 plugins/check_dummy.c:77 -#: plugins/check_dummy.c:80 plugins/check_pgsql.c:643 +#: plugins/check_disk.c:624 plugins/check_disk.c:665 plugins/check_disk.c:673 +#: plugins/check_disk.c:680 plugins/check_disk.c:684 plugins/check_disk.c:724 +#: plugins/check_disk.c:730 plugins/check_disk.c:749 plugins/check_dummy.c:77 +#: plugins/check_dummy.c:80 plugins/check_pgsql.c:644 #: plugins/check_procs.c:506 #, c-format msgid "UNKNOWN" msgstr "UNKNOWN" -#: plugins/check_disk.c:593 +#: plugins/check_disk.c:624 msgid "Must set a threshold value before using -p\n" msgstr "" -#: plugins/check_disk.c:634 +#: plugins/check_disk.c:665 msgid "Must set -E before selecting paths\n" msgstr "" -#: plugins/check_disk.c:642 +#: plugins/check_disk.c:673 msgid "Must set group value before selecting paths\n" msgstr "" -#: plugins/check_disk.c:649 +#: plugins/check_disk.c:680 msgid "" "Paths need to be selected before using -i/-I. Use -A to select all paths " "explicitly" msgstr "" -#: plugins/check_disk.c:653 plugins/check_disk.c:699 plugins/check_procs.c:506 +#: plugins/check_disk.c:684 plugins/check_disk.c:730 plugins/check_procs.c:506 msgid "Could not compile regular expression" msgstr "" -#: plugins/check_disk.c:693 +#: plugins/check_disk.c:724 msgid "Must set a threshold value before using -r/-R\n" msgstr "" -#: plugins/check_disk.c:719 +#: plugins/check_disk.c:750 msgid "Regular expression did not match any path or disk" msgstr "" -#: plugins/check_disk.c:765 +#: plugins/check_disk.c:796 #, fuzzy msgid "Unknown argument" msgstr "Unbekanntes Argument" -#: plugins/check_disk.c:799 +#: plugins/check_disk.c:830 #, c-format msgid " for %s\n" msgstr "" -#: plugins/check_disk.c:873 +#: plugins/check_disk.c:904 #, fuzzy msgid "" "This plugin checks the amount of used disk space on a mounted file system" msgstr "" "Dieses Plugin prüft den freien Speicher auf einem gemounteten Filesystem" -#: plugins/check_disk.c:874 +#: plugins/check_disk.c:905 #, fuzzy msgid "" "and generates an alert if free space is less than one of the threshold values" @@ -483,355 +483,363 @@ msgstr "" "und erzeugt einen Alarm wenn einer der angegebenen Schwellwerte " "unterschritten wird." -#: plugins/check_disk.c:884 +#: plugins/check_disk.c:915 msgid "Exit with WARNING status if less than INTEGER units of disk are free" msgstr "" -#: plugins/check_disk.c:886 +#: plugins/check_disk.c:917 msgid "Exit with WARNING status if less than PERCENT of disk space is free" msgstr "" -#: plugins/check_disk.c:888 +#: plugins/check_disk.c:919 msgid "Exit with CRITICAL status if less than INTEGER units of disk are free" msgstr "" -#: plugins/check_disk.c:890 +#: plugins/check_disk.c:921 msgid "Exit with CRITICAL status if less than PERCENT of disk space is free" msgstr "" -#: plugins/check_disk.c:892 +#: plugins/check_disk.c:923 msgid "Exit with WARNING status if less than PERCENT of inode space is free" msgstr "" -#: plugins/check_disk.c:894 +#: plugins/check_disk.c:925 msgid "Exit with CRITICAL status if less than PERCENT of inode space is free" msgstr "" -#: plugins/check_disk.c:896 +#: plugins/check_disk.c:927 msgid "" "Mount point or block device as emitted by the mount(8) command (may be " "repeated)" msgstr "" -#: plugins/check_disk.c:898 +#: plugins/check_disk.c:929 msgid "Ignore device (only works if -p unspecified)" msgstr "" -#: plugins/check_disk.c:900 +#: plugins/check_disk.c:931 msgid "Clear thresholds" msgstr "" -#: plugins/check_disk.c:902 +#: plugins/check_disk.c:933 msgid "For paths or partitions specified with -p, only check for exact paths" msgstr "" -#: plugins/check_disk.c:904 +#: plugins/check_disk.c:935 msgid "Display only devices/mountpoints with errors" msgstr "" -#: plugins/check_disk.c:906 +#: plugins/check_disk.c:937 msgid "Don't account root-reserved blocks into freespace in perfdata" msgstr "" -#: plugins/check_disk.c:908 +#: plugins/check_disk.c:939 +msgid "Display inode usage in perfdata" +msgstr "" + +#: plugins/check_disk.c:941 msgid "" "Group paths. Thresholds apply to (free-)space of all partitions together" msgstr "" -#: plugins/check_disk.c:910 +#: plugins/check_disk.c:943 msgid "Same as '--units kB'" msgstr "" -#: plugins/check_disk.c:912 +#: plugins/check_disk.c:945 msgid "Only check local filesystems" msgstr "" -#: plugins/check_disk.c:914 +#: plugins/check_disk.c:947 msgid "" "Only check local filesystems against thresholds. Yet call stat on remote " "filesystems" msgstr "" -#: plugins/check_disk.c:915 +#: plugins/check_disk.c:948 msgid "to test if they are accessible (e.g. to detect Stale NFS Handles)" msgstr "" -#: plugins/check_disk.c:917 +#: plugins/check_disk.c:950 msgid "Display the mountpoint instead of the partition" msgstr "" -#: plugins/check_disk.c:919 +#: plugins/check_disk.c:952 msgid "Same as '--units MB'" msgstr "" -#: plugins/check_disk.c:921 +#: plugins/check_disk.c:954 msgid "Explicitly select all paths. This is equivalent to -R '.*'" msgstr "" -#: plugins/check_disk.c:923 +#: plugins/check_disk.c:956 msgid "" "Case insensitive regular expression for path/partition (may be repeated)" msgstr "" -#: plugins/check_disk.c:925 +#: plugins/check_disk.c:958 msgid "Regular expression for path or partition (may be repeated)" msgstr "" -#: plugins/check_disk.c:927 +#: plugins/check_disk.c:960 msgid "" "Regular expression to ignore selected path/partition (case insensitive) (may " "be repeated)" msgstr "" -#: plugins/check_disk.c:929 +#: plugins/check_disk.c:962 msgid "" "Regular expression to ignore selected path or partition (may be repeated)" msgstr "" -#: plugins/check_disk.c:932 +#: plugins/check_disk.c:965 msgid "Choose bytes, kB, MB, GB, TB (default: MB)" msgstr "" -#: plugins/check_disk.c:935 +#: plugins/check_disk.c:968 msgid "Ignore all filesystems of indicated type (may be repeated)" msgstr "" -#: plugins/check_disk.c:937 +#: plugins/check_disk.c:970 msgid "Check only filesystems of indicated type (may be repeated)" msgstr "" -#: plugins/check_disk.c:942 +#: plugins/check_disk.c:975 msgid "Checks /tmp and /var at 10% and 5%, and / at 100MB and 50MB" msgstr "" -#: plugins/check_disk.c:944 +#: plugins/check_disk.c:977 msgid "" "Checks all filesystems not matching -r at 100M and 50M. The fs matching the -" "r regex" msgstr "" -#: plugins/check_disk.c:945 +#: plugins/check_disk.c:978 msgid "" "are grouped which means the freespace thresholds are applied to all disks " "together" msgstr "" -#: plugins/check_disk.c:947 +#: plugins/check_disk.c:980 msgid "" "Checks /foo for 1000M/500M and /bar for 5/3%. All remaining volumes use " "100M/50M" msgstr "" -#: plugins/check_disk.c:973 +#: plugins/check_disk.c:1006 #, c-format msgid "%s %s: %s\n" msgstr "" -#: plugins/check_disk.c:973 +#: plugins/check_disk.c:1006 msgid "is not accessible" msgstr "" -#: plugins/check_dns.c:115 +#: plugins/check_dns.c:118 #, fuzzy msgid "nslookup returned an error status" msgstr "nslookup hat einen Fehler zurückgegeben" -#: plugins/check_dns.c:133 +#: plugins/check_dns.c:136 msgid "Warning plugin error" msgstr "Warnung Plugin Fehler" -#: plugins/check_dns.c:151 +#: plugins/check_dns.c:154 #, fuzzy, c-format msgid "DNS CRITICAL - '%s' returned empty server string\n" msgstr "DNS CRITICAL - '%s' hat einen leeren Hostnamen zurückgegeben\n" -#: plugins/check_dns.c:156 +#: plugins/check_dns.c:159 #, fuzzy, c-format msgid "DNS CRITICAL - No response from DNS %s\n" msgstr "Keine Antwort von DNS %s\n" -#: plugins/check_dns.c:175 +#: plugins/check_dns.c:178 #, c-format msgid "DNS CRITICAL - '%s' returned empty host name string\n" msgstr "DNS CRITICAL - '%s' hat einen leeren Hostnamen zurückgegeben\n" -#: plugins/check_dns.c:181 +#: plugins/check_dns.c:184 msgid "Non-authoritative answer:" msgstr "" -#: plugins/check_dns.c:222 +#: plugins/check_dns.c:228 #, fuzzy, c-format msgid "DNS CRITICAL - '%s' msg parsing exited with no address\n" msgstr "DNS CRITICAL - '%s' Ausgabeverarbeitung hat keine Adresse ergeben\n" -#: plugins/check_dns.c:237 +#: plugins/check_dns.c:259 #, fuzzy, c-format msgid "expected '%s' but got '%s'" msgstr "Erwartet: %s aber: %s erhalten" -#: plugins/check_dns.c:244 +#: plugins/check_dns.c:266 #, c-format msgid "server %s is not authoritative for %s" msgstr "Server %s ist nicht autoritativ für %s" -#: plugins/check_dns.c:253 plugins/check_dummy.c:68 plugins/check_nagios.c:182 -#: plugins/check_pgsql.c:638 plugins/check_procs.c:344 +#: plugins/check_dns.c:275 plugins/check_dummy.c:68 plugins/check_nagios.c:182 +#: plugins/check_pgsql.c:639 plugins/check_procs.c:344 #, c-format msgid "OK" msgstr "OK" -#: plugins/check_dns.c:255 plugins/check_dummy.c:71 plugins/check_mysql.c:307 -#: plugins/check_nagios.c:182 plugins/check_pgsql.c:607 -#: plugins/check_pgsql.c:612 plugins/check_pgsql.c:640 +#: plugins/check_dns.c:277 plugins/check_dummy.c:71 plugins/check_mysql.c:307 +#: plugins/check_nagios.c:182 plugins/check_pgsql.c:608 +#: plugins/check_pgsql.c:613 plugins/check_pgsql.c:641 #: plugins/check_procs.c:346 #, c-format msgid "WARNING" msgstr "WARNING" -#: plugins/check_dns.c:259 +#: plugins/check_dns.c:281 #, fuzzy, c-format msgid "%.3f second response time" msgid_plural "%.3f seconds response time" msgstr[0] "%.3f Sekunden Antwortzeit " msgstr[1] "%.3f Sekunden Antwortzeit " -#: plugins/check_dns.c:260 +#: plugins/check_dns.c:282 #, fuzzy, c-format msgid ". %s returns %s" msgstr "%s hat %s zurückgegeben" -#: plugins/check_dns.c:280 +#: plugins/check_dns.c:302 #, c-format msgid "DNS WARNING - %s\n" msgstr "DNS WARNING - %s\n" -#: plugins/check_dns.c:281 plugins/check_dns.c:284 plugins/check_dns.c:287 +#: plugins/check_dns.c:303 plugins/check_dns.c:306 plugins/check_dns.c:309 msgid " Probably a non-existent host/domain" msgstr "nicht existierender Host/Domain" -#: plugins/check_dns.c:283 +#: plugins/check_dns.c:305 #, c-format msgid "DNS CRITICAL - %s\n" msgstr "DNS CRITICAL - %s\n" -#: plugins/check_dns.c:286 +#: plugins/check_dns.c:308 #, fuzzy, c-format msgid "DNS UNKNOWN - %s\n" -msgstr "DNS UNKNOW - %s\n" +msgstr "DNS UNKNOWN - %s\n" -#: plugins/check_dns.c:299 +#: plugins/check_dns.c:346 msgid "Note: nslookup is deprecated and may be removed from future releases." msgstr "" -#: plugins/check_dns.c:300 +#: plugins/check_dns.c:347 msgid "Consider using the `dig' or `host' programs instead. Run nslookup with" msgstr "" -#: plugins/check_dns.c:301 +#: plugins/check_dns.c:348 msgid "the `-sil[ent]' option to prevent this message from appearing." msgstr "" -#: plugins/check_dns.c:306 +#: plugins/check_dns.c:353 plugins/check_dns.c:355 #, c-format msgid "No response from DNS %s\n" msgstr "Keine Antwort von DNS %s\n" -#: plugins/check_dns.c:310 +#: plugins/check_dns.c:359 #, c-format msgid "DNS %s has no records\n" msgstr "Nameserver %s hat keine Datensätze\n" -#: plugins/check_dns.c:318 +#: plugins/check_dns.c:367 #, c-format msgid "Connection to DNS %s was refused\n" msgstr "Verbindung zum Nameserver %s wurde verweigert\n" -#: plugins/check_dns.c:322 +#: plugins/check_dns.c:371 #, c-format msgid "Query was refused by DNS server at %s\n" msgstr "" -#: plugins/check_dns.c:326 +#: plugins/check_dns.c:375 #, c-format msgid "No information returned by DNS server at %s\n" msgstr "" -#: plugins/check_dns.c:332 +#: plugins/check_dns.c:382 #, c-format msgid "Domain %s was not found by the server\n" msgstr "Domäne %s wurde vom Server nicht gefunden\n" -#: plugins/check_dns.c:336 +#: plugins/check_dns.c:386 msgid "Network is unreachable\n" msgstr "Netzwerk nicht erreichbar\n" -#: plugins/check_dns.c:340 +#: plugins/check_dns.c:390 #, c-format msgid "DNS failure for %s\n" msgstr "DNS Fehler für %s\n" -#: plugins/check_dns.c:404 plugins/check_dns.c:412 plugins/check_dns.c:419 -#: plugins/check_dns.c:424 plugins/check_dns.c:446 plugins/check_dns.c:454 +#: plugins/check_dns.c:455 plugins/check_dns.c:463 plugins/check_dns.c:470 +#: plugins/check_dns.c:475 plugins/check_dns.c:500 plugins/check_dns.c:508 #: plugins/check_game.c:211 plugins/check_game.c:219 msgid "Input buffer overflow\n" msgstr "Eingabe-Pufferüberlauf\n" -#: plugins/check_dns.c:482 +#: plugins/check_dns.c:536 msgid "" "This plugin uses the nslookup program to obtain the IP address for the given " "host/domain query." msgstr "" -#: plugins/check_dns.c:483 +#: plugins/check_dns.c:537 msgid "An optional DNS server to use may be specified." msgstr "" -#: plugins/check_dns.c:484 +#: plugins/check_dns.c:538 msgid "" "If no DNS server is specified, the default server(s) specified in /etc/" "resolv.conf will be used." msgstr "" -#: plugins/check_dns.c:494 +#: plugins/check_dns.c:548 msgid "The name or address you want to query" msgstr "" -#: plugins/check_dns.c:496 +#: plugins/check_dns.c:550 msgid "Optional DNS server you want to use for the lookup" msgstr "" -#: plugins/check_dns.c:498 +#: plugins/check_dns.c:552 msgid "" -"Optional IP-ADDRESS you expect the DNS server to return. HOST must end with" +"Optional IP-ADDRESS/CIDR you expect the DNS server to return. HOST must end" msgstr "" -#: plugins/check_dns.c:499 +#: plugins/check_dns.c:553 msgid "" -"a dot (.). This option can be repeated multiple times (Returns OK if any" +"with a dot (.). This option can be repeated multiple times (Returns OK if any" msgstr "" -#: plugins/check_dns.c:500 -msgid "" -"value match). If multiple addresses are returned at once, you have to match" +#: plugins/check_dns.c:554 +msgid "value matches)." msgstr "" -#: plugins/check_dns.c:501 -msgid "" -"the whole string of addresses separated with commas (sorted alphabetically)." -msgstr "" - -#: plugins/check_dns.c:503 +#: plugins/check_dns.c:556 msgid "Optionally expect the DNS server to be authoritative for the lookup" msgstr "" -#: plugins/check_dns.c:505 +#: plugins/check_dns.c:558 msgid "Return warning if elapsed time exceeds value. Default off" msgstr "" -#: plugins/check_dns.c:507 +#: plugins/check_dns.c:560 msgid "Return critical if elapsed time exceeds value. Default off" msgstr "" +#: plugins/check_dns.c:562 +msgid "" +"Return critical if the list of expected addresses does not match all " +"addresses" +msgstr "" + +#: plugins/check_dns.c:563 +msgid "returned. Default off" +msgstr "" + #: plugins/check_dummy.c:62 msgid "Arguments to check_dummy must be an integer" msgstr "Argument für check_dummy muss ein Integer sein" @@ -850,13 +858,13 @@ msgstr "" msgid "of the argument with optional text" msgstr "" -#: plugins/check_fping.c:125 plugins/check_hpjd.c:129 plugins/check_ping.c:438 +#: plugins/check_fping.c:125 plugins/check_hpjd.c:130 plugins/check_ping.c:438 #: plugins/check_swap.c:176 plugins/check_users.c:130 plugins/urlize.c:109 #, c-format msgid "Could not open pipe: %s\n" msgstr "Pipe: %s konnte nicht geöffnet werden\n" -#: plugins/check_fping.c:131 plugins/check_hpjd.c:135 plugins/check_load.c:153 +#: plugins/check_fping.c:131 plugins/check_hpjd.c:136 plugins/check_load.c:157 #: plugins/check_swap.c:182 plugins/check_users.c:136 plugins/urlize.c:115 #, c-format msgid "Could not open stderr for %s\n" @@ -865,7 +873,7 @@ msgstr "Konnte stderr nicht #: plugins/check_fping.c:157 #, fuzzy msgid "FPING UNKNOWN - IP address not found\n" -msgstr "FPING UNKNOW - %s nicht gefunden\n" +msgstr "FPING UNKNOWN - %s nicht gefunden\n" #: plugins/check_fping.c:160 msgid "FPING UNKNOWN - invalid commandline argument\n" @@ -874,12 +882,12 @@ msgstr "" #: plugins/check_fping.c:163 #, fuzzy msgid "FPING UNKNOWN - failed system call\n" -msgstr "FPING UNKNOW - %s nicht gefunden\n" +msgstr "FPING UNKNOWN - %s nicht gefunden\n" #: plugins/check_fping.c:187 #, c-format -msgid "FPING UNKNOW - %s not found\n" -msgstr "FPING UNKNOW - %s nicht gefunden\n" +msgid "FPING UNKNOWN - %s not found\n" +msgstr "FPING UNKNOWN - %s nicht gefunden\n" #: plugins/check_fping.c:191 #, c-format @@ -889,7 +897,7 @@ msgstr "FPING CRITICAL - %s ist nicht erreichbar\n" #: plugins/check_fping.c:196 #, fuzzy, c-format msgid "FPING UNKNOWN - %s parameter error\n" -msgstr "FPING UNKNOW - %s nicht gefunden\n" +msgstr "FPING UNKNOWN - %s nicht gefunden\n" #: plugins/check_fping.c:200 plugins/check_fping.c:240 #, c-format @@ -907,18 +915,19 @@ msgid "FPING %s - %s (loss=%.0f%% )|%s\n" msgstr "FPING %s - %s (verloren=%.0f%% )|%s\n" #: plugins/check_fping.c:326 plugins/check_fping.c:332 -#: plugins/check_hpjd.c:339 plugins/check_hpjd.c:368 plugins/check_mysql.c:383 -#: plugins/check_mysql.c:470 plugins/check_ntp.c:719 +#: plugins/check_hpjd.c:341 plugins/check_hpjd.c:372 plugins/check_mysql.c:386 +#: plugins/check_mysql.c:473 plugins/check_ntp.c:719 #: plugins/check_ntp_peer.c:497 plugins/check_ntp_time.c:498 -#: plugins/check_pgsql.c:335 plugins/check_ping.c:295 plugins/check_ping.c:418 +#: plugins/check_pgsql.c:336 plugins/check_ping.c:295 plugins/check_ping.c:418 #: plugins/check_radius.c:275 plugins/check_real.c:315 -#: plugins/check_real.c:377 plugins/check_smtp.c:503 plugins/check_smtp.c:645 +#: plugins/check_real.c:377 plugins/check_smtp.c:504 plugins/check_smtp.c:646 #: plugins/check_ssh.c:162 plugins/check_time.c:240 plugins/check_time.c:315 #: plugins/check_ups.c:504 plugins/check_ups.c:573 msgid "Invalid hostname/address" msgstr "Ungültige(r) Hostname/Adresse" #: plugins/check_fping.c:345 plugins/check_ldap.c:400 plugins/check_ping.c:246 +#: plugins-root/check_icmp.c:480 msgid "IPv6 support not available\n" msgstr "" @@ -1085,61 +1094,61 @@ msgid "" "plugin." msgstr "" -#: plugins/check_hpjd.c:240 +#: plugins/check_hpjd.c:241 msgid "Paper Jam" msgstr "Papierstau" -#: plugins/check_hpjd.c:244 +#: plugins/check_hpjd.c:246 msgid "Out of Paper" msgstr "Kein Papier" -#: plugins/check_hpjd.c:249 +#: plugins/check_hpjd.c:251 msgid "Printer Offline" msgstr "Drucker ausgeschaltet" -#: plugins/check_hpjd.c:254 +#: plugins/check_hpjd.c:256 msgid "Peripheral Error" msgstr "Peripheriefehler" -#: plugins/check_hpjd.c:258 +#: plugins/check_hpjd.c:260 msgid "Intervention Required" msgstr "Eingriff benötigt" -#: plugins/check_hpjd.c:262 +#: plugins/check_hpjd.c:264 msgid "Toner Low" msgstr "Wenig Toner" -#: plugins/check_hpjd.c:266 +#: plugins/check_hpjd.c:268 msgid "Insufficient Memory" msgstr "Nicht genügend Speicher" -#: plugins/check_hpjd.c:270 +#: plugins/check_hpjd.c:272 msgid "A Door is Open" msgstr "Eine Abdeckung ist offen" -#: plugins/check_hpjd.c:274 +#: plugins/check_hpjd.c:276 msgid "Output Tray is Full" msgstr "Ausgabeschacht ist voll" -#: plugins/check_hpjd.c:278 +#: plugins/check_hpjd.c:280 msgid "Data too Slow for Engine" msgstr "" -#: plugins/check_hpjd.c:282 +#: plugins/check_hpjd.c:284 msgid "Unknown Paper Error" msgstr "Papierfehler" -#: plugins/check_hpjd.c:287 +#: plugins/check_hpjd.c:289 #, c-format msgid "Printer ok - (%s)\n" msgstr "Printer ok - (%s)\n" -#: plugins/check_hpjd.c:347 +#: plugins/check_hpjd.c:349 #, fuzzy msgid "Port must be a positive short integer" msgstr "Port muss ein positiver Integer sein" -#: plugins/check_hpjd.c:405 +#: plugins/check_hpjd.c:409 #, fuzzy msgid "This plugin tests the STATUS of an HP printer with a JetDirect card." msgstr "" @@ -1148,7 +1157,7 @@ msgstr "" "Net-snmp muss auf dem ausführenden Computer installiert sein.\n" "\n" -#: plugins/check_hpjd.c:406 +#: plugins/check_hpjd.c:410 #, fuzzy msgid "Net-snmp must be installed on the computer running the plugin." msgstr "" @@ -1157,564 +1166,589 @@ msgstr "" "Net-snmp muss auf dem ausführenden Computer installiert sein.\n" "\n" -#: plugins/check_hpjd.c:416 +#: plugins/check_hpjd.c:420 msgid "The SNMP community name " msgstr "" -#: plugins/check_hpjd.c:417 plugins/check_hpjd.c:421 +#: plugins/check_hpjd.c:421 plugins/check_hpjd.c:425 #, c-format msgid "(default=%s)" msgstr "" -#: plugins/check_hpjd.c:420 +#: plugins/check_hpjd.c:424 msgid "Specify the port to check " msgstr "" -#: plugins/check_http.c:191 +#: plugins/check_hpjd.c:428 +msgid "Disable paper check " +msgstr "" + +#: plugins/check_http.c:193 msgid "file does not exist or is not readable" msgstr "" -#: plugins/check_http.c:312 plugins/check_http.c:317 plugins/check_http.c:323 -#: plugins/check_smtp.c:599 plugins/check_tcp.c:580 plugins/check_tcp.c:585 -#: plugins/check_tcp.c:591 +#: plugins/check_http.c:315 plugins/check_http.c:320 plugins/check_http.c:326 +#: plugins/check_smtp.c:600 plugins/check_tcp.c:590 plugins/check_tcp.c:595 +#: plugins/check_tcp.c:601 msgid "Invalid certificate expiration period" msgstr "Ungültiger Zertifikatsablauftermin" -#: plugins/check_http.c:361 +#: plugins/check_http.c:364 msgid "" "Invalid option - Valid SSL/TLS versions: 2, 3, 1, 1.1, 1.2 (with optional " "'+' suffix)" msgstr "" -#: plugins/check_http.c:367 plugins/check_tcp.c:604 +#: plugins/check_http.c:370 plugins/check_tcp.c:614 plugins/check_tcp.c:623 #, fuzzy msgid "Invalid option - SSL is not available" msgstr "Ungültige Option - SSL ist nicht verfügbar\n" -#: plugins/check_http.c:388 +#: plugins/check_http.c:391 msgid "Invalid onredirect option" msgstr "" -#: plugins/check_http.c:390 +#: plugins/check_http.c:393 #, c-format msgid "option f:%d \n" msgstr "Option f:%d \n" -#: plugins/check_http.c:425 +#: plugins/check_http.c:428 msgid "Invalid port number" msgstr "Ungültige Portnummer" -#: plugins/check_http.c:477 +#: plugins/check_http.c:486 #, c-format msgid "Could Not Compile Regular Expression: %s" msgstr "" -#: plugins/check_http.c:491 plugins/check_ntp.c:732 +#: plugins/check_http.c:500 plugins/check_ntp.c:732 #: plugins/check_ntp_peer.c:513 plugins/check_ntp_time.c:517 -#: plugins/check_smtp.c:625 plugins/check_ssh.c:151 plugins/check_tcp.c:481 +#: plugins/check_smtp.c:626 plugins/check_ssh.c:151 plugins/check_tcp.c:491 msgid "IPv6 support not available" msgstr "IPv6 Unterstützung nicht vorhanden" -#: plugins/check_http.c:556 plugins/check_ping.c:422 +#: plugins/check_http.c:568 plugins/check_ping.c:422 msgid "You must specify a server address or host name" msgstr "Hostname oder Serveradresse muss angegeben werden" -#: plugins/check_http.c:570 +#: plugins/check_http.c:585 msgid "" "If you use a client certificate you must also specify a private key file" msgstr "" -#: plugins/check_http.c:697 plugins/check_http.c:865 +#: plugins/check_http.c:712 plugins/check_http.c:880 #, fuzzy msgid "HTTP UNKNOWN - Memory allocation error\n" msgstr "HTTP UNKNOWN - Konnte·url·nicht·zuweisen\n" -#: plugins/check_http.c:769 +#: plugins/check_http.c:784 #, fuzzy, c-format msgid "%sServer date unknown, " msgstr "HTTP UNKNOWN - Serverdatum unbekannt\n" -#: plugins/check_http.c:772 +#: plugins/check_http.c:787 #, fuzzy, c-format msgid "%sDocument modification date unknown, " msgstr "HTTP CRITICAL - Datum der letzten Änderung unbekannt\n" -#: plugins/check_http.c:779 +#: plugins/check_http.c:794 #, fuzzy, c-format msgid "%sServer date \"%100s\" unparsable, " msgstr "HTTP CRITICAL - Serverdatum \"%100s\" konnte nicht verarbeitet werden" -#: plugins/check_http.c:782 +#: plugins/check_http.c:797 #, fuzzy, c-format msgid "%sDocument date \"%100s\" unparsable, " msgstr "" "HTTP CRITICAL - Dokumentendatum \"%100s\" konnte nicht verarbeitet werden" -#: plugins/check_http.c:785 +#: plugins/check_http.c:800 #, fuzzy, c-format msgid "%sDocument is %d seconds in the future, " msgstr "HTTP CRITICAL - Dokumentendatum ist %d Sekunden in der Zukunft\n" -#: plugins/check_http.c:790 +#: plugins/check_http.c:805 #, fuzzy, c-format msgid "%sLast modified %.1f days ago, " msgstr "HTTP CRITICAL - Letzte Änderung vor %.1f Tagen\n" -#: plugins/check_http.c:793 +#: plugins/check_http.c:808 #, fuzzy, c-format msgid "%sLast modified %d:%02d:%02d ago, " msgstr "HTTP CRITICAL - Letzte Änderung vor %d:%02d:%02d \n" -#: plugins/check_http.c:907 +#: plugins/check_http.c:922 msgid "HTTP CRITICAL - Unable to open TCP socket\n" msgstr "HTTP CRITICAL - Konnte TCP socket nicht öffnen\n" -#: plugins/check_http.c:1076 +#: plugins/check_http.c:1106 msgid "HTTP CRITICAL - Error on receive\n" msgstr "HTTP CRITICAL - Fehler beim Empfangen\n" -#: plugins/check_http.c:1086 +#: plugins/check_http.c:1116 #, fuzzy msgid "HTTP CRITICAL - No data received from host\n" msgstr "HTTP CRITICAL - Keine Daten empfangen\n" -#: plugins/check_http.c:1137 +#: plugins/check_http.c:1167 #, fuzzy, c-format msgid "Invalid HTTP response received from host: %s\n" msgstr "Ungültige HTTP Antwort von Host empfangen\n" -#: plugins/check_http.c:1141 +#: plugins/check_http.c:1171 #, fuzzy, c-format msgid "Invalid HTTP response received from host on port %d: %s\n" msgstr "Ungültige HTTP Antwort von Host erhalten auf Port %d\n" -#: plugins/check_http.c:1150 +#: plugins/check_http.c:1174 plugins/check_http.c:1326 +#, c-format +msgid "" +"%s\n" +"%s" +msgstr "" + +#: plugins/check_http.c:1182 #, fuzzy, c-format msgid "Status line output matched \"%s\" - " msgstr "HTTP OK: Statusausgabe passt auf \"%s\"\n" -#: plugins/check_http.c:1161 +#: plugins/check_http.c:1193 #, c-format msgid "HTTP CRITICAL: Invalid Status Line (%s)\n" msgstr "HTTP CRITICAL: Ungültige Statusmeldung (%s)\n" -#: plugins/check_http.c:1168 +#: plugins/check_http.c:1200 #, c-format msgid "HTTP CRITICAL: Invalid Status (%s)\n" msgstr "HTTP CRITICAL: Ungültiger Status (%s)\n" -#: plugins/check_http.c:1172 plugins/check_http.c:1177 -#: plugins/check_http.c:1187 plugins/check_http.c:1191 +#: plugins/check_http.c:1204 plugins/check_http.c:1209 +#: plugins/check_http.c:1219 plugins/check_http.c:1223 #, c-format msgid "%s - " msgstr "" -#: plugins/check_http.c:1210 +#: plugins/check_http.c:1242 #, fuzzy, c-format msgid "%sheader '%s' not found on '%s://%s:%d%s', " msgstr "CRITICAL - Muster nicht gefunden%s|%s %s\n" -#: plugins/check_http.c:1222 +#: plugins/check_http.c:1254 #, fuzzy, c-format msgid "%sstring '%s' not found on '%s://%s:%d%s', " msgstr "CRITICAL - Muster nicht gefunden%s|%s %s\n" -#: plugins/check_http.c:1235 +#: plugins/check_http.c:1267 #, fuzzy, c-format msgid "%spattern not found, " msgstr "CRITICAL - Muster nicht gefunden%s|%s %s\n" -#: plugins/check_http.c:1237 +#: plugins/check_http.c:1269 #, fuzzy, c-format msgid "%spattern found, " msgstr "CRITICAL - Muster nicht gefunden%s|%s %s\n" -#: plugins/check_http.c:1243 +#: plugins/check_http.c:1275 #, fuzzy, c-format msgid "%sExecute Error: %s, " msgstr "HTTP CRITICAL - Fehler: %s\n" -#: plugins/check_http.c:1259 +#: plugins/check_http.c:1291 #, fuzzy, c-format msgid "%spage size %d too large, " msgstr "HTTP WARNING: Seitengröße %d zu klein%s|%s\n" -#: plugins/check_http.c:1262 +#: plugins/check_http.c:1294 #, fuzzy, c-format msgid "%spage size %d too small, " msgstr "HTTP WARNING: Seitengröße %d zu klein%s|%s\n" -#: plugins/check_http.c:1275 +#: plugins/check_http.c:1307 #, fuzzy, c-format msgid "%s - %d bytes in %.3f second response time %s|%s %s %s %s %s %s %s" msgstr " - %s - %.3f Sekunden Antwortzeit %s%s|%s %s\n" -#: plugins/check_http.c:1287 +#: plugins/check_http.c:1319 #, fuzzy, c-format msgid "%s - %d bytes in %.3f second response time %s|%s %s" msgstr " - %s - %.3f Sekunden Antwortzeit %s%s|%s %s\n" -#: plugins/check_http.c:1325 +#: plugins/check_http.c:1360 msgid "HTTP UNKNOWN - Could not allocate addr\n" msgstr "HTTP UNKNOWN - Konnte addr nicht zuweisen\n" -#: plugins/check_http.c:1330 plugins/check_http.c:1361 +#: plugins/check_http.c:1365 plugins/check_http.c:1396 #, fuzzy msgid "HTTP UNKNOWN - Could not allocate URL\n" msgstr "HTTP UNKNOWN - Konnte·url·nicht·zuweisen\n" -#: plugins/check_http.c:1339 +#: plugins/check_http.c:1374 #, c-format msgid "HTTP UNKNOWN - Could not find redirect location - %s%s\n" msgstr "" -#: plugins/check_http.c:1354 +#: plugins/check_http.c:1389 #, fuzzy, c-format msgid "HTTP UNKNOWN - Empty redirect location%s\n" msgstr "HTTP UNKNOWN - Serverdatum unbekannt\n" -#: plugins/check_http.c:1404 +#: plugins/check_http.c:1439 #, c-format msgid "HTTP UNKNOWN - Could not parse redirect location - %s%s\n" msgstr "" -#: plugins/check_http.c:1414 +#: plugins/check_http.c:1449 #, fuzzy, c-format msgid "HTTP WARNING - maximum redirection depth %d exceeded - %s://%s:%d%s%s\n" msgstr "HTTP WARNING - Umleitung verursacht eine Schleife - %s://%s:%d%s%s\n" -#: plugins/check_http.c:1422 +#: plugins/check_http.c:1457 #, c-format msgid "HTTP WARNING - redirection creates an infinite loop - %s://%s:%d%s%s\n" msgstr "HTTP WARNING - Umleitung verursacht eine Schleife - %s://%s:%d%s%s\n" -#: plugins/check_http.c:1443 +#: plugins/check_http.c:1478 #, fuzzy, c-format msgid "HTTP UNKNOWN - Redirection to port above %d - %s://%s:%d%s%s\n" msgstr "HTTP WARNING - Umleitung verursacht eine Schleife - %s://%s:%d%s%s\n" -#: plugins/check_http.c:1451 +#: plugins/check_http.c:1486 #, c-format msgid "Redirection to %s://%s:%d%s\n" msgstr "" -#: plugins/check_http.c:1526 +#: plugins/check_http.c:1561 #, fuzzy msgid "This plugin tests the HTTP service on the specified host. It can test" msgstr "" "Testet den DNS Dienst auf dem angegebenen Host mit dig\n" "\n" -#: plugins/check_http.c:1527 +#: plugins/check_http.c:1562 msgid "normal (http) and secure (https) servers, follow redirects, search for" msgstr "" -#: plugins/check_http.c:1528 +#: plugins/check_http.c:1563 msgid "strings and regular expressions, check connection times, and report on" msgstr "" -#: plugins/check_http.c:1529 +#: plugins/check_http.c:1564 #, fuzzy msgid "certificate expiration times." msgstr "Clientzertifikat benötigt\n" -#: plugins/check_http.c:1535 +#: plugins/check_http.c:1570 #, c-format msgid "NOTE: One or both of -H and -I must be specified" msgstr "" -#: plugins/check_http.c:1543 +#: plugins/check_http.c:1578 msgid "Host name argument for servers using host headers (virtual host)" msgstr "" -#: plugins/check_http.c:1544 +#: plugins/check_http.c:1579 msgid "Append a port to include it in the header (eg: example.com:5000)" msgstr "" -#: plugins/check_http.c:1546 +#: plugins/check_http.c:1581 msgid "" "IP address or name (use numeric address if possible to bypass DNS lookup)." msgstr "" -#: plugins/check_http.c:1548 +#: plugins/check_http.c:1583 msgid "Port number (default: " msgstr "" -#: plugins/check_http.c:1555 +#: plugins/check_http.c:1590 msgid "" "Connect via SSL. Port defaults to 443. VERSION is optional, and prevents" msgstr "" -#: plugins/check_http.c:1556 +#: plugins/check_http.c:1591 msgid "auto-negotiation (2 = SSLv2, 3 = SSLv3, 1 = TLSv1, 1.1 = TLSv1.1," msgstr "" -#: plugins/check_http.c:1557 +#: plugins/check_http.c:1592 msgid "1.2 = TLSv1.2). With a '+' suffix, newer versions are also accepted." msgstr "" -#: plugins/check_http.c:1559 +#: plugins/check_http.c:1594 msgid "Enable SSL/TLS hostname extension support (SNI)" msgstr "" -#: plugins/check_http.c:1561 +#: plugins/check_http.c:1596 msgid "" "Minimum number of days a certificate has to be valid. Port defaults to 443" msgstr "" -#: plugins/check_http.c:1562 +#: plugins/check_http.c:1597 msgid "(when this option is used the URL is not checked.)" msgstr "" -#: plugins/check_http.c:1564 +#: plugins/check_http.c:1599 msgid "Name of file that contains the client certificate (PEM format)" msgstr "" -#: plugins/check_http.c:1565 +#: plugins/check_http.c:1600 msgid "to be used in establishing the SSL session" msgstr "" -#: plugins/check_http.c:1567 +#: plugins/check_http.c:1602 msgid "Name of file containing the private key (PEM format)" msgstr "" -#: plugins/check_http.c:1568 +#: plugins/check_http.c:1603 msgid "matching the client certificate" msgstr "" -#: plugins/check_http.c:1572 +#: plugins/check_http.c:1607 msgid "Comma-delimited list of strings, at least one of them is expected in" msgstr "" -#: plugins/check_http.c:1573 +#: plugins/check_http.c:1608 msgid "the first (status) line of the server response (default: " msgstr "" -#: plugins/check_http.c:1575 +#: plugins/check_http.c:1610 msgid "" "If specified skips all other status line logic (ex: 3xx, 4xx, 5xx processing)" msgstr "" -#: plugins/check_http.c:1577 +#: plugins/check_http.c:1612 msgid "String to expect in the response headers" msgstr "" -#: plugins/check_http.c:1579 +#: plugins/check_http.c:1614 msgid "String to expect in the content" msgstr "" -#: plugins/check_http.c:1581 +#: plugins/check_http.c:1616 msgid "URL to GET or POST (default: /)" msgstr "" -#: plugins/check_http.c:1583 +#: plugins/check_http.c:1618 msgid "URL encoded http POST data" msgstr "" -#: plugins/check_http.c:1585 +#: plugins/check_http.c:1620 msgid "Set HTTP method." msgstr "" -#: plugins/check_http.c:1587 +#: plugins/check_http.c:1622 msgid "Don't wait for document body: stop reading after headers." msgstr "" -#: plugins/check_http.c:1588 +#: plugins/check_http.c:1623 msgid "(Note that this still does an HTTP GET or POST, not a HEAD.)" msgstr "" -#: plugins/check_http.c:1590 +#: plugins/check_http.c:1625 msgid "Warn if document is more than SECONDS old. the number can also be of" msgstr "" -#: plugins/check_http.c:1591 +#: plugins/check_http.c:1626 msgid "the form \"10m\" for minutes, \"10h\" for hours, or \"10d\" for days." msgstr "" -#: plugins/check_http.c:1593 +#: plugins/check_http.c:1628 msgid "specify Content-Type header media type when POSTing\n" msgstr "" -#: plugins/check_http.c:1596 +#: plugins/check_http.c:1631 msgid "Allow regex to span newlines (must precede -r or -R)" msgstr "" -#: plugins/check_http.c:1598 +#: plugins/check_http.c:1633 msgid "Search page for regex STRING" msgstr "" -#: plugins/check_http.c:1600 +#: plugins/check_http.c:1635 msgid "Search page for case-insensitive regex STRING" msgstr "" -#: plugins/check_http.c:1602 +#: plugins/check_http.c:1637 msgid "Return CRITICAL if found, OK if not\n" msgstr "" -#: plugins/check_http.c:1605 +#: plugins/check_http.c:1640 msgid "Username:password on sites with basic authentication" msgstr "" -#: plugins/check_http.c:1607 +#: plugins/check_http.c:1642 msgid "Username:password on proxy-servers with basic authentication" msgstr "" -#: plugins/check_http.c:1609 +#: plugins/check_http.c:1644 msgid "String to be sent in http header as \"User Agent\"" msgstr "" -#: plugins/check_http.c:1611 +#: plugins/check_http.c:1646 msgid "" "Any other tags to be sent in http header. Use multiple times for additional " "headers" msgstr "" -#: plugins/check_http.c:1613 +#: plugins/check_http.c:1648 msgid "Print additional performance data" msgstr "" -#: plugins/check_http.c:1615 +#: plugins/check_http.c:1650 +msgid "Print body content below status line" +msgstr "" + +#: plugins/check_http.c:1652 msgid "Wrap output in HTML link (obsoleted by urlize)" msgstr "" -#: plugins/check_http.c:1617 +#: plugins/check_http.c:1654 msgid "How to handle redirected pages. sticky is like follow but stick to the" msgstr "" -#: plugins/check_http.c:1618 +#: plugins/check_http.c:1655 msgid "specified IP address. stickyport also ensures port stays the same." msgstr "" -#: plugins/check_http.c:1620 +#: plugins/check_http.c:1657 msgid "Minimum page size required (bytes) : Maximum page size required (bytes)" msgstr "" -#: plugins/check_http.c:1630 +#: plugins/check_http.c:1667 #, fuzzy msgid "This plugin will attempt to open an HTTP connection with the host." msgstr "Dieses plugin testet Gameserververbindungen zum angegebenen Host." -#: plugins/check_http.c:1631 +#: plugins/check_http.c:1668 msgid "" "Successful connects return STATE_OK, refusals and timeouts return " "STATE_CRITICAL" msgstr "" -#: plugins/check_http.c:1632 +#: plugins/check_http.c:1669 msgid "" "other errors return STATE_UNKNOWN. Successful connects, but incorrect " -"reponse" +"response" msgstr "" -#: plugins/check_http.c:1633 +#: plugins/check_http.c:1670 msgid "" "messages from the host result in STATE_WARNING return values. If you are" msgstr "" -#: plugins/check_http.c:1634 +#: plugins/check_http.c:1671 msgid "" "checking a virtual server that uses 'host headers' you must supply the FQDN" msgstr "" -#: plugins/check_http.c:1635 +#: plugins/check_http.c:1672 msgid "(fully qualified domain name) as the [host_name] argument." msgstr "" -#: plugins/check_http.c:1639 +#: plugins/check_http.c:1676 msgid "This plugin can also check whether an SSL enabled web server is able to" msgstr "" -#: plugins/check_http.c:1640 +#: plugins/check_http.c:1677 msgid "serve content (optionally within a specified time) or whether the X509 " msgstr "" -#: plugins/check_http.c:1641 +#: plugins/check_http.c:1678 msgid "certificate is still valid for the specified number of days." msgstr "" -#: plugins/check_http.c:1643 +#: plugins/check_http.c:1680 #, fuzzy msgid "Please note that this plugin does not check if the presented server" msgstr "" "Testet den DNS Dienst auf dem angegebenen Host mit dig\n" "\n" -#: plugins/check_http.c:1644 +#: plugins/check_http.c:1681 msgid "certificate matches the hostname of the server, or if the certificate" msgstr "" -#: plugins/check_http.c:1645 +#: plugins/check_http.c:1682 msgid "has a valid chain of trust to one of the locally installed CAs." msgstr "" -#: plugins/check_http.c:1649 +#: plugins/check_http.c:1686 msgid "" "When the 'www.verisign.com' server returns its content within 5 seconds," msgstr "" -#: plugins/check_http.c:1650 plugins/check_http.c:1669 +#: plugins/check_http.c:1687 plugins/check_http.c:1706 msgid "" "a STATE_OK will be returned. When the server returns its content but exceeds" msgstr "" -#: plugins/check_http.c:1651 plugins/check_http.c:1670 +#: plugins/check_http.c:1688 plugins/check_http.c:1707 msgid "" "the 5-second threshold, a STATE_WARNING will be returned. When an error " "occurs," msgstr "" -#: plugins/check_http.c:1652 plugins/check_http.c:1671 +#: plugins/check_http.c:1689 msgid "a STATE_CRITICAL will be returned." msgstr "" -#: plugins/check_http.c:1655 +#: plugins/check_http.c:1692 msgid "" "When the certificate of 'www.verisign.com' is valid for more than 14 days," msgstr "" -#: plugins/check_http.c:1656 plugins/check_http.c:1662 +#: plugins/check_http.c:1693 plugins/check_http.c:1699 msgid "" "a STATE_OK is returned. When the certificate is still valid, but for less " "than" msgstr "" -#: plugins/check_http.c:1657 +#: plugins/check_http.c:1694 msgid "" "14 days, a STATE_WARNING is returned. A STATE_CRITICAL will be returned when" msgstr "" -#: plugins/check_http.c:1658 +#: plugins/check_http.c:1695 #, fuzzy msgid "the certificate is expired." msgstr "Clientzertifikat benötigt\n" -#: plugins/check_http.c:1661 +#: plugins/check_http.c:1698 msgid "" "When the certificate of 'www.verisign.com' is valid for more than 30 days," msgstr "" -#: plugins/check_http.c:1663 +#: plugins/check_http.c:1700 msgid "30 days, but more than 14 days, a STATE_WARNING is returned." msgstr "" -#: plugins/check_http.c:1664 +#: plugins/check_http.c:1701 msgid "" "A STATE_CRITICAL will be returned when certificate expires in less than 14 " "days" msgstr "" -#: plugins/check_http.c:1667 +#: plugins/check_http.c:1704 msgid "" "check_http -I 192.168.100.35 -p 80 -u https://www.verisign.com/ -S -j " "CONNECT -H www.verisign.com " msgstr "" -#: plugins/check_http.c:1668 +#: plugins/check_http.c:1705 msgid "" "all these options are needed: -I -p -u -S" "(sl) -j CONNECT -H " msgstr "" +#: plugins/check_http.c:1708 +msgid "" +"a STATE_CRITICAL will be returned. By adding a colon to the method you can " +"set the method used" +msgstr "" + +#: plugins/check_http.c:1709 +msgid "inside the proxied connection: -j CONNECT:POST" +msgstr "" + #: plugins/check_ldap.c:142 #, c-format msgid "Could not connect to the server at port %i\n" @@ -1851,78 +1885,96 @@ msgstr "" msgid "The parameters --warn-entries and --crit-entries are optional." msgstr "" -#: plugins/check_load.c:87 +#: plugins/check_load.c:91 msgid "Warning threshold must be float or float triplet!\n" msgstr "" -#: plugins/check_load.c:132 plugins/check_load.c:148 +#: plugins/check_load.c:136 plugins/check_load.c:152 #, c-format msgid "Error opening %s\n" msgstr "" -#: plugins/check_load.c:163 +#: plugins/check_load.c:167 #, fuzzy, c-format msgid "could not parse load from uptime %s: %s\n" msgstr "Argumente konnten nicht ausgewertet werden" -#: plugins/check_load.c:169 +#: plugins/check_load.c:173 #, c-format msgid "Error code %d returned in %s\n" msgstr "" -#: plugins/check_load.c:184 +#: plugins/check_load.c:188 #, c-format msgid "Error in getloadavg()\n" msgstr "" -#: plugins/check_load.c:187 plugins/check_load.c:189 +#: plugins/check_load.c:191 plugins/check_load.c:193 #, c-format msgid "Error processing %s\n" msgstr "" -#: plugins/check_load.c:198 +#: plugins/check_load.c:202 #, c-format msgid "load average: %.2f, %.2f, %.2f" msgstr "" -#: plugins/check_load.c:291 +#: plugins/check_load.c:302 #, fuzzy, c-format msgid "Critical threshold for %d-minute load average is not specified\n" msgstr "Critical threshold muss ein positiver Integer sein\n" -#: plugins/check_load.c:293 +#: plugins/check_load.c:304 #, fuzzy, c-format msgid "Warning threshold for %d-minute load average is not specified\n" msgstr "Warning threshold muss ein positiver Integer sein\n" -#: plugins/check_load.c:295 +#: plugins/check_load.c:306 #, c-format msgid "" "Parameter inconsistency: %d-minute \"warning load\" is greater than " "\"critical load\"\n" msgstr "" -#: plugins/check_load.c:311 +#: plugins/check_load.c:322 #, c-format msgid "This plugin tests the current system load average." msgstr "" -#: plugins/check_load.c:321 +#: plugins/check_load.c:332 msgid "Exit with WARNING status if load average exceeds WLOADn" msgstr "" -#: plugins/check_load.c:323 +#: plugins/check_load.c:334 msgid "Exit with CRITICAL status if load average exceed CLOADn" msgstr "" -#: plugins/check_load.c:324 +#: plugins/check_load.c:335 msgid "the load average format is the same used by \"uptime\" and \"w\"" msgstr "" -#: plugins/check_load.c:326 +#: plugins/check_load.c:337 msgid "Divide the load averages by the number of CPUs (when possible)" msgstr "" +#: plugins/check_load.c:339 +msgid "Number of processes to show when printing the top consuming processes." +msgstr "" + +#: plugins/check_load.c:340 +msgid "NUMBER_OF_PROCS=0 disables this feature. Default value is 0" +msgstr "" + +#: plugins/check_load.c:377 +#, c-format +msgid "'%s' exited with non-zero status.\n" +msgstr "" + +#: plugins/check_load.c:381 +#, c-format +msgid "some error occurred getting procs list.\n" +msgstr "" + #: plugins/check_mrtg.c:75 msgid "Could not parse arguments\n" msgstr "" @@ -2212,105 +2264,105 @@ msgstr "" msgid "Slave running: %s" msgstr "" -#: plugins/check_mysql.c:514 +#: plugins/check_mysql.c:517 msgid "This program tests connections to a MySQL server" msgstr "" -#: plugins/check_mysql.c:525 +#: plugins/check_mysql.c:528 msgid "Ignore authentication failure and check for mysql connectivity only" msgstr "" -#: plugins/check_mysql.c:528 +#: plugins/check_mysql.c:531 msgid "Use the specified socket (has no effect if -H is used)" msgstr "" -#: plugins/check_mysql.c:531 +#: plugins/check_mysql.c:534 msgid "Check database with indicated name" msgstr "" -#: plugins/check_mysql.c:533 +#: plugins/check_mysql.c:536 msgid "Read from the specified client options file" msgstr "" -#: plugins/check_mysql.c:535 +#: plugins/check_mysql.c:538 msgid "Use a client options group" msgstr "" -#: plugins/check_mysql.c:537 +#: plugins/check_mysql.c:540 msgid "Connect using the indicated username" msgstr "" -#: plugins/check_mysql.c:539 +#: plugins/check_mysql.c:542 msgid "Use the indicated password to authenticate the connection" msgstr "" -#: plugins/check_mysql.c:540 +#: plugins/check_mysql.c:543 msgid "IMPORTANT: THIS FORM OF AUTHENTICATION IS NOT SECURE!!!" msgstr "" -#: plugins/check_mysql.c:541 +#: plugins/check_mysql.c:544 msgid "Your clear-text password could be visible as a process table entry" msgstr "" -#: plugins/check_mysql.c:543 +#: plugins/check_mysql.c:546 msgid "Check if the slave thread is running properly." msgstr "" -#: plugins/check_mysql.c:545 +#: plugins/check_mysql.c:548 msgid "Exit with WARNING status if slave server is more than INTEGER seconds" msgstr "" -#: plugins/check_mysql.c:546 plugins/check_mysql.c:549 +#: plugins/check_mysql.c:549 plugins/check_mysql.c:552 msgid "behind master" msgstr "" -#: plugins/check_mysql.c:548 +#: plugins/check_mysql.c:551 msgid "Exit with CRITICAL status if slave server is more then INTEGER seconds" msgstr "" -#: plugins/check_mysql.c:551 +#: plugins/check_mysql.c:554 msgid "Use ssl encryptation" msgstr "" -#: plugins/check_mysql.c:553 +#: plugins/check_mysql.c:556 msgid "Path to CA signing the cert" msgstr "" -#: plugins/check_mysql.c:555 +#: plugins/check_mysql.c:558 msgid "Path to SSL certificate" msgstr "" -#: plugins/check_mysql.c:557 +#: plugins/check_mysql.c:560 msgid "Path to private SSL key" msgstr "" -#: plugins/check_mysql.c:559 +#: plugins/check_mysql.c:562 msgid "Path to CA directory" msgstr "" -#: plugins/check_mysql.c:561 +#: plugins/check_mysql.c:564 msgid "List of valid SSL ciphers" msgstr "" -#: plugins/check_mysql.c:565 +#: plugins/check_mysql.c:568 msgid "" "There are no required arguments. By default, the local database is checked" msgstr "" -#: plugins/check_mysql.c:566 +#: plugins/check_mysql.c:569 msgid "" "using the default unix socket. You can force TCP on localhost by using an" msgstr "" -#: plugins/check_mysql.c:567 +#: plugins/check_mysql.c:570 msgid "IP address or FQDN ('localhost' will use the socket as well)." msgstr "" -#: plugins/check_mysql.c:571 +#: plugins/check_mysql.c:574 msgid "You must specify -p with an empty string to force an empty password," msgstr "" -#: plugins/check_mysql.c:572 +#: plugins/check_mysql.c:575 msgid "overriding any my.cnf settings." msgstr "" @@ -3545,214 +3597,214 @@ msgid "" "higher than the warning threshold value, EXCEPT with the uptime variable" msgstr "" -#: plugins/check_pgsql.c:222 +#: plugins/check_pgsql.c:223 #, c-format msgid "CRITICAL - no connection to '%s' (%s).\n" msgstr "" -#: plugins/check_pgsql.c:250 +#: plugins/check_pgsql.c:251 #, c-format msgid " %s - database %s (%f sec.)|%s\n" msgstr "" -#: plugins/check_pgsql.c:317 plugins/check_time.c:277 plugins/check_time.c:289 +#: plugins/check_pgsql.c:318 plugins/check_time.c:277 plugins/check_time.c:289 #: plugins/check_users.c:228 msgid "Critical threshold must be a positive integer" msgstr "Critical threshold muss ein positiver Integer sein" -#: plugins/check_pgsql.c:323 plugins/check_time.c:258 plugins/check_time.c:282 +#: plugins/check_pgsql.c:324 plugins/check_time.c:258 plugins/check_time.c:282 #: plugins/check_users.c:226 msgid "Warning threshold must be a positive integer" msgstr "Warning threshold muss ein positiver Integer sein" -#: plugins/check_pgsql.c:347 +#: plugins/check_pgsql.c:348 msgid "Database name is not valid" msgstr "" -#: plugins/check_pgsql.c:353 +#: plugins/check_pgsql.c:354 msgid "User name is not valid" msgstr "" -#: plugins/check_pgsql.c:504 +#: plugins/check_pgsql.c:505 #, c-format msgid "Test whether a PostgreSQL Database is accepting connections." msgstr "" -#: plugins/check_pgsql.c:516 +#: plugins/check_pgsql.c:517 msgid "Database to check " msgstr "" -#: plugins/check_pgsql.c:517 +#: plugins/check_pgsql.c:518 #, c-format msgid "(default: %s)\n" msgstr "" -#: plugins/check_pgsql.c:519 +#: plugins/check_pgsql.c:520 msgid "Login name of user" msgstr "" -#: plugins/check_pgsql.c:521 +#: plugins/check_pgsql.c:522 msgid "Password (BIG SECURITY ISSUE)" msgstr "" -#: plugins/check_pgsql.c:523 +#: plugins/check_pgsql.c:524 msgid "Connection parameters (keyword = value), see below" msgstr "" -#: plugins/check_pgsql.c:530 +#: plugins/check_pgsql.c:531 msgid "SQL query to run. Only first column in first row will be read" msgstr "" -#: plugins/check_pgsql.c:532 +#: plugins/check_pgsql.c:533 msgid "SQL query value to result in warning status (double)" msgstr "" -#: plugins/check_pgsql.c:534 +#: plugins/check_pgsql.c:535 msgid "SQL query value to result in critical status (double)" msgstr "" -#: plugins/check_pgsql.c:539 +#: plugins/check_pgsql.c:540 msgid "All parameters are optional." msgstr "" -#: plugins/check_pgsql.c:540 +#: plugins/check_pgsql.c:541 msgid "" "This plugin tests a PostgreSQL DBMS to determine whether it is active and" msgstr "" -#: plugins/check_pgsql.c:541 -msgid "accepting queries. In its current operation, it simply connects to the" -msgstr "" - #: plugins/check_pgsql.c:542 -msgid "" -"specified database, and then disconnects. If no database is specified, it" +msgid "accepting queries. In its current operation, it simply connects to the" msgstr "" #: plugins/check_pgsql.c:543 msgid "" -"connects to the template1 database, which is present in every functioning" +"specified database, and then disconnects. If no database is specified, it" msgstr "" #: plugins/check_pgsql.c:544 +msgid "" +"connects to the template1 database, which is present in every functioning" +msgstr "" + +#: plugins/check_pgsql.c:545 msgid "PostgreSQL DBMS." msgstr "" -#: plugins/check_pgsql.c:546 +#: plugins/check_pgsql.c:547 msgid "If a query is specified using the -q option, it will be executed after" msgstr "" -#: plugins/check_pgsql.c:547 +#: plugins/check_pgsql.c:548 msgid "connecting to the server. The result from the query has to be numeric." msgstr "" -#: plugins/check_pgsql.c:548 +#: plugins/check_pgsql.c:549 msgid "" "Multiple SQL commands, separated by semicolon, are allowed but the result " msgstr "" -#: plugins/check_pgsql.c:549 +#: plugins/check_pgsql.c:550 msgid "of the last command is taken into account only. The value of the first" msgstr "" -#: plugins/check_pgsql.c:550 +#: plugins/check_pgsql.c:551 msgid "column in the first row is used as the check result." msgstr "" -#: plugins/check_pgsql.c:552 -msgid "" -"See the chapter \"Monitoring Database Activity\" of the PostgreSQL manual" -msgstr "" - #: plugins/check_pgsql.c:553 msgid "" -"for details about how to access internal statistics of the database server." +"See the chapter \"Monitoring Database Activity\" of the PostgreSQL manual" msgstr "" -#: plugins/check_pgsql.c:555 +#: plugins/check_pgsql.c:554 msgid "" -"For a list of available connection parameters which may be used with the -o" +"for details about how to access internal statistics of the database server." msgstr "" #: plugins/check_pgsql.c:556 msgid "" -"command line option, see the documentation for PQconnectdb() in the chapter" +"For a list of available connection parameters which may be used with the -o" msgstr "" #: plugins/check_pgsql.c:557 msgid "" -"\"libpq - C Library\" of the PostgreSQL manual. For example, this may be" +"command line option, see the documentation for PQconnectdb() in the chapter" msgstr "" #: plugins/check_pgsql.c:558 msgid "" -"used to specify a service name in pg_service.conf to be used for additional" +"\"libpq - C Library\" of the PostgreSQL manual. For example, this may be" msgstr "" #: plugins/check_pgsql.c:559 -msgid "connection parameters: -o 'service=' or to specify the SSL mode:" +msgid "" +"used to specify a service name in pg_service.conf to be used for additional" msgstr "" #: plugins/check_pgsql.c:560 -msgid "-o 'sslmode=require'." +msgid "connection parameters: -o 'service=' or to specify the SSL mode:" msgstr "" -#: plugins/check_pgsql.c:562 -msgid "" -"The plugin will connect to a local postmaster if no host is specified. To" +#: plugins/check_pgsql.c:561 +msgid "-o 'sslmode=require'." msgstr "" #: plugins/check_pgsql.c:563 msgid "" -"connect to a remote host, be sure that the remote postmaster accepts TCP/IP" +"The plugin will connect to a local postmaster if no host is specified. To" msgstr "" #: plugins/check_pgsql.c:564 +msgid "" +"connect to a remote host, be sure that the remote postmaster accepts TCP/IP" +msgstr "" + +#: plugins/check_pgsql.c:565 msgid "connections (start the postmaster with the -i option)." msgstr "" -#: plugins/check_pgsql.c:566 +#: plugins/check_pgsql.c:567 msgid "" "Typically, the monitoring user (unless the --logname option is used) should " "be" msgstr "" -#: plugins/check_pgsql.c:567 +#: plugins/check_pgsql.c:568 msgid "" "able to connect to the database without a password. The plugin can also send" msgstr "" -#: plugins/check_pgsql.c:568 -msgid "a password, but no effort is made to obsure or encrypt the password." +#: plugins/check_pgsql.c:569 +msgid "a password, but no effort is made to obscure or encrypt the password." msgstr "" -#: plugins/check_pgsql.c:601 +#: plugins/check_pgsql.c:602 #, c-format msgid "QUERY %s - %s: %s.\n" msgstr "" -#: plugins/check_pgsql.c:601 +#: plugins/check_pgsql.c:602 msgid "Error with query" msgstr "" -#: plugins/check_pgsql.c:607 +#: plugins/check_pgsql.c:608 msgid "No rows returned" msgstr "" -#: plugins/check_pgsql.c:612 +#: plugins/check_pgsql.c:613 msgid "No columns returned" msgstr "" -#: plugins/check_pgsql.c:618 +#: plugins/check_pgsql.c:619 #, fuzzy msgid "No data returned" msgstr "Keine Daten empfangen %s\n" -#: plugins/check_pgsql.c:627 +#: plugins/check_pgsql.c:628 msgid "Is not a numeric" msgstr "" -#: plugins/check_pgsql.c:644 +#: plugins/check_pgsql.c:645 #, fuzzy, c-format msgid "'%s' returned %f" msgstr "%s hat %s zurückgegeben" @@ -4167,18 +4219,30 @@ msgid "Critical if < 2 or > 1024 processes" msgstr "" #: plugins/check_procs.c:768 -msgid "Warning alert if > 10 processes with command arguments containing" +msgid "Critical if not at least 1 process with command sshd" msgstr "" -#: plugins/check_procs.c:769 -msgid "'/usr/local/bin/perl' and owned by root" +#: plugins/check_procs.c:770 +msgid "Warning if > 1024 processes with command name sshd." msgstr "" #: plugins/check_procs.c:771 -msgid "Alert if VSZ of any processes over 50K or 100K" +msgid "Critical if < 1 processes with command name sshd." msgstr "" #: plugins/check_procs.c:773 +msgid "Warning alert if > 10 processes with command arguments containing" +msgstr "" + +#: plugins/check_procs.c:774 +msgid "'/usr/local/bin/perl' and owned by root" +msgstr "" + +#: plugins/check_procs.c:776 +msgid "Alert if VSZ of any processes over 50K or 100K" +msgstr "" + +#: plugins/check_procs.c:778 #, c-format msgid "Alert if CPU of any processes over 10%% or 20%%" msgstr "" @@ -4259,7 +4323,7 @@ msgid "The user to authenticate" msgstr "" #: plugins/check_radius.c:363 -msgid "Password for autentication (SECURITY RISK)" +msgid "Password for authentication (SECURITY RISK)" msgstr "" #: plugins/check_radius.c:365 @@ -4345,7 +4409,7 @@ msgstr "Ung msgid "Invalid REAL response received from host on port %d\n" msgstr "" -#: plugins/check_real.c:185 plugins/check_tcp.c:310 +#: plugins/check_real.c:185 plugins/check_tcp.c:315 #, c-format msgid "No data received from host\n" msgstr "" @@ -4389,7 +4453,7 @@ msgstr "" msgid "This plugin will attempt to open an RTSP connection with the host." msgstr "Dieses plugin testet Gameserververbindungen zum angegebenen Host." -#: plugins/check_real.c:439 plugins/check_smtp.c:836 +#: plugins/check_real.c:439 plugins/check_smtp.c:837 msgid "Successul connects return STATE_OK, refusals and timeouts return" msgstr "" @@ -4400,7 +4464,7 @@ msgstr "" #: plugins/check_real.c:441 msgid "" -"but incorrect reponse messages from the host result in STATE_WARNING return" +"but incorrect response messages from the host result in STATE_WARNING return" msgstr "" #: plugins/check_real.c:442 @@ -4455,171 +4519,171 @@ msgstr "Ung msgid "Invalid SMTP response received from host on port %d: %s\n" msgstr "Ungültige HTTP Antwort von Host erhalten auf Port %d\n" -#: plugins/check_smtp.c:307 plugins/check_snmp.c:833 +#: plugins/check_smtp.c:308 plugins/check_snmp.c:833 #, c-format msgid "Could Not Compile Regular Expression" msgstr "" -#: plugins/check_smtp.c:316 +#: plugins/check_smtp.c:317 #, c-format msgid "SMTP %s - Invalid response '%s' to command '%s'\n" msgstr "" -#: plugins/check_smtp.c:320 plugins/check_snmp.c:520 +#: plugins/check_smtp.c:321 plugins/check_snmp.c:520 #, c-format msgid "Execute Error: %s\n" msgstr "" -#: plugins/check_smtp.c:334 +#: plugins/check_smtp.c:335 msgid "no authuser specified, " msgstr "" -#: plugins/check_smtp.c:339 +#: plugins/check_smtp.c:340 msgid "no authpass specified, " msgstr "" -#: plugins/check_smtp.c:346 plugins/check_smtp.c:367 plugins/check_smtp.c:387 -#: plugins/check_smtp.c:692 +#: plugins/check_smtp.c:347 plugins/check_smtp.c:368 plugins/check_smtp.c:388 +#: plugins/check_smtp.c:693 #, c-format msgid "sent %s\n" msgstr "" -#: plugins/check_smtp.c:349 +#: plugins/check_smtp.c:350 #, fuzzy msgid "recv() failed after AUTH LOGIN, " msgstr "Ungültige HTTP Antwort von Host empfangen\n" -#: plugins/check_smtp.c:354 plugins/check_smtp.c:375 plugins/check_smtp.c:395 -#: plugins/check_smtp.c:703 +#: plugins/check_smtp.c:355 plugins/check_smtp.c:376 plugins/check_smtp.c:396 +#: plugins/check_smtp.c:704 #, fuzzy, c-format msgid "received %s\n" msgstr "Keine Daten empfangen %s\n" -#: plugins/check_smtp.c:358 +#: plugins/check_smtp.c:359 #, fuzzy msgid "invalid response received after AUTH LOGIN, " msgstr "Ungültige HTTP Antwort von Host empfangen\n" -#: plugins/check_smtp.c:371 +#: plugins/check_smtp.c:372 msgid "recv() failed after sending authuser, " msgstr "" -#: plugins/check_smtp.c:379 +#: plugins/check_smtp.c:380 #, fuzzy msgid "invalid response received after authuser, " msgstr "Ungültige HTTP Antwort von Host empfangen\n" -#: plugins/check_smtp.c:391 +#: plugins/check_smtp.c:392 msgid "recv() failed after sending authpass, " msgstr "" -#: plugins/check_smtp.c:399 +#: plugins/check_smtp.c:400 #, fuzzy msgid "invalid response received after authpass, " msgstr "Ungültige HTTP Antwort von Host empfangen\n" -#: plugins/check_smtp.c:406 +#: plugins/check_smtp.c:407 msgid "only authtype LOGIN is supported, " msgstr "" -#: plugins/check_smtp.c:430 +#: plugins/check_smtp.c:431 #, fuzzy, c-format msgid "SMTP %s - %s%.3f sec. response time%s%s|%s\n" msgstr " - %s - %.3f Sekunden Antwortzeit %s%s|%s %s\n" -#: plugins/check_smtp.c:540 plugins/check_smtp.c:552 +#: plugins/check_smtp.c:541 plugins/check_smtp.c:553 #, c-format msgid "Could not realloc() units [%d]\n" msgstr "" -#: plugins/check_smtp.c:560 +#: plugins/check_smtp.c:561 #, fuzzy msgid "Critical time must be a positive" msgstr "Critical time muss ein positiver Integer sein" -#: plugins/check_smtp.c:568 +#: plugins/check_smtp.c:569 #, fuzzy msgid "Warning time must be a positive" msgstr "Warnung time muss ein positiver Integer sein" -#: plugins/check_smtp.c:611 +#: plugins/check_smtp.c:612 msgid "SSL support not available - install OpenSSL and recompile" msgstr "" -#: plugins/check_smtp.c:683 plugins/check_smtp.c:688 +#: plugins/check_smtp.c:684 plugins/check_smtp.c:689 #, c-format msgid "Connection closed by server before sending QUIT command\n" msgstr "" -#: plugins/check_smtp.c:698 +#: plugins/check_smtp.c:699 #, fuzzy, c-format msgid "recv() failed after QUIT." msgstr "Ungültige HTTP Antwort von Host empfangen\n" -#: plugins/check_smtp.c:700 +#: plugins/check_smtp.c:701 #, c-format msgid "Connection reset by peer." msgstr "" -#: plugins/check_smtp.c:790 +#: plugins/check_smtp.c:791 #, fuzzy msgid "This plugin will attempt to open an SMTP connection with the host." msgstr "Dieses plugin testet Gameserververbindungen zum angegebenen Host." -#: plugins/check_smtp.c:804 +#: plugins/check_smtp.c:805 #, c-format msgid " String to expect in first line of server response (default: '%s')\n" msgstr "" -#: plugins/check_smtp.c:806 +#: plugins/check_smtp.c:807 msgid "SMTP command (may be used repeatedly)" msgstr "" -#: plugins/check_smtp.c:808 +#: plugins/check_smtp.c:809 msgid "Expected response to command (may be used repeatedly)" msgstr "" -#: plugins/check_smtp.c:810 +#: plugins/check_smtp.c:811 msgid "FROM-address to include in MAIL command, required by Exchange 2000" msgstr "" -#: plugins/check_smtp.c:812 +#: plugins/check_smtp.c:813 msgid "FQDN used for HELO" msgstr "" -#: plugins/check_smtp.c:815 plugins/check_tcp.c:670 +#: plugins/check_smtp.c:816 plugins/check_tcp.c:689 msgid "Minimum number of days a certificate has to be valid." msgstr "" -#: plugins/check_smtp.c:817 +#: plugins/check_smtp.c:818 msgid "Use STARTTLS for the connection." msgstr "" -#: plugins/check_smtp.c:821 +#: plugins/check_smtp.c:822 msgid "SMTP AUTH type to check (default none, only LOGIN supported)" msgstr "" -#: plugins/check_smtp.c:823 +#: plugins/check_smtp.c:824 msgid "SMTP AUTH username" msgstr "" -#: plugins/check_smtp.c:825 +#: plugins/check_smtp.c:826 msgid "SMTP AUTH password" msgstr "" -#: plugins/check_smtp.c:827 +#: plugins/check_smtp.c:828 msgid "Ignore failure when sending QUIT command to server" msgstr "" -#: plugins/check_smtp.c:837 +#: plugins/check_smtp.c:838 msgid "STATE_CRITICAL, other errors return STATE_UNKNOWN. Successful" msgstr "" -#: plugins/check_smtp.c:838 -msgid "connects, but incorrect reponse messages from the host result in" +#: plugins/check_smtp.c:839 +msgid "connects, but incorrect response messages from the host result in" msgstr "" -#: plugins/check_smtp.c:839 +#: plugins/check_smtp.c:840 msgid "STATE_WARNING return values." msgstr "" @@ -4845,86 +4909,92 @@ msgstr "" msgid "Separates output on multiple OID requests" msgstr "" -#: plugins/check_snmp.c:1211 -msgid "Number of retries to be used in the requests" -msgstr "" - -#: plugins/check_snmp.c:1214 -msgid "Label performance data with OIDs instead of --label's" -msgstr "" - -#: plugins/check_snmp.c:1219 +#: plugins/check_snmp.c:1210 msgid "" -"This plugin uses the 'snmpget' command included with the NET-SNMP package." +"NOTE the final timeout value is calculated using this formula: " +"timeout_interval * retries + 5" +msgstr "" + +#: plugins/check_snmp.c:1212 +msgid "Number of retries to be used in the requests, default: " +msgstr "" + +#: plugins/check_snmp.c:1215 +msgid "Label performance data with OIDs instead of --label's" msgstr "" #: plugins/check_snmp.c:1220 msgid "" -"if you don't have the package installed, you will need to download it from" +"This plugin uses the 'snmpget' command included with the NET-SNMP package." msgstr "" #: plugins/check_snmp.c:1221 +msgid "" +"if you don't have the package installed, you will need to download it from" +msgstr "" + +#: plugins/check_snmp.c:1222 msgid "http://net-snmp.sourceforge.net before you can use this plugin." msgstr "" -#: plugins/check_snmp.c:1225 +#: plugins/check_snmp.c:1226 msgid "" "- Multiple OIDs (and labels) may be indicated by a comma or space-delimited " msgstr "" -#: plugins/check_snmp.c:1226 +#: plugins/check_snmp.c:1227 msgid "list (lists with internal spaces must be quoted)." msgstr "" -#: plugins/check_snmp.c:1230 +#: plugins/check_snmp.c:1231 msgid "" "- When checking multiple OIDs, separate ranges by commas like '-w " "1:10,1:,:20'" msgstr "" -#: plugins/check_snmp.c:1231 +#: plugins/check_snmp.c:1232 msgid "- Note that only one string and one regex may be checked at present" msgstr "" -#: plugins/check_snmp.c:1232 +#: plugins/check_snmp.c:1233 msgid "" "- All evaluation methods other than PR, STR, and SUBSTR expect that the value" msgstr "" -#: plugins/check_snmp.c:1233 +#: plugins/check_snmp.c:1234 msgid "returned from the SNMP query is an unsigned integer." msgstr "" -#: plugins/check_snmp.c:1236 +#: plugins/check_snmp.c:1237 msgid "Rate Calculation:" msgstr "" -#: plugins/check_snmp.c:1237 +#: plugins/check_snmp.c:1238 msgid "In many places, SNMP returns counters that are only meaningful when" msgstr "" -#: plugins/check_snmp.c:1238 +#: plugins/check_snmp.c:1239 msgid "calculating the counter difference since the last check. check_snmp" msgstr "" -#: plugins/check_snmp.c:1239 +#: plugins/check_snmp.c:1240 msgid "saves the last state information in a file so that the rate per second" msgstr "" -#: plugins/check_snmp.c:1240 +#: plugins/check_snmp.c:1241 msgid "can be calculated. Use the --rate option to save state information." msgstr "" -#: plugins/check_snmp.c:1241 +#: plugins/check_snmp.c:1242 msgid "" "On the first run, there will be no prior state - this will return with OK." msgstr "" -#: plugins/check_snmp.c:1242 +#: plugins/check_snmp.c:1243 msgid "The state is uniquely determined by the arguments to the plugin, so" msgstr "" -#: plugins/check_snmp.c:1243 +#: plugins/check_snmp.c:1244 msgid "changing the arguments will create a new state file." msgstr "" @@ -5071,111 +5141,115 @@ msgstr "" msgid "On AIX, if -a is specified, uses lsps -a, otherwise uses lsps -s." msgstr "" -#: plugins/check_tcp.c:205 +#: plugins/check_tcp.c:210 msgid "CRITICAL - Generic check_tcp called with unknown service\n" msgstr "" -#: plugins/check_tcp.c:229 +#: plugins/check_tcp.c:234 msgid "With UDP checks, a send/expect string must be specified." msgstr "" -#: plugins/check_tcp.c:435 +#: plugins/check_tcp.c:445 msgid "No arguments found" msgstr "" -#: plugins/check_tcp.c:538 +#: plugins/check_tcp.c:548 msgid "Maxbytes must be a positive integer" msgstr "Maxbytes muss ein positiver Integer sein" -#: plugins/check_tcp.c:556 +#: plugins/check_tcp.c:566 msgid "Refuse must be one of ok, warn, crit" msgstr "" -#: plugins/check_tcp.c:566 +#: plugins/check_tcp.c:576 msgid "Mismatch must be one of ok, warn, crit" msgstr "" -#: plugins/check_tcp.c:572 +#: plugins/check_tcp.c:582 msgid "Delay must be a positive integer" msgstr "Delay muss ein positiver Integer sein" -#: plugins/check_tcp.c:618 +#: plugins/check_tcp.c:637 #, fuzzy msgid "You must provide a server address" msgstr "%s: Hostname muss angegeben werden\n" -#: plugins/check_tcp.c:620 +#: plugins/check_tcp.c:639 #, fuzzy msgid "Invalid hostname, address or socket" msgstr "Ungültige(r) Hostname/Adresse" -#: plugins/check_tcp.c:634 +#: plugins/check_tcp.c:653 #, fuzzy, c-format msgid "" "This plugin tests %s connections with the specified host (or unix socket).\n" "\n" msgstr "Dieses plugin testet Gameserververbindungen zum angegebenen Host." -#: plugins/check_tcp.c:647 +#: plugins/check_tcp.c:666 msgid "" "Can use \\n, \\r, \\t or \\\\ in send or quit string. Must come before send " "or quit option" msgstr "" -#: plugins/check_tcp.c:648 +#: plugins/check_tcp.c:667 msgid "Default: nothing added to send, \\r\\n added to end of quit" msgstr "" -#: plugins/check_tcp.c:650 +#: plugins/check_tcp.c:669 msgid "String to send to the server" msgstr "" -#: plugins/check_tcp.c:652 +#: plugins/check_tcp.c:671 msgid "String to expect in server response" msgstr "" -#: plugins/check_tcp.c:652 +#: plugins/check_tcp.c:671 msgid "(may be repeated)" msgstr "" -#: plugins/check_tcp.c:654 +#: plugins/check_tcp.c:673 msgid "All expect strings need to occur in server response. Default is any" msgstr "" -#: plugins/check_tcp.c:656 +#: plugins/check_tcp.c:675 msgid "String to send server to initiate a clean close of the connection" msgstr "" -#: plugins/check_tcp.c:658 +#: plugins/check_tcp.c:677 msgid "Accept TCP refusals with states ok, warn, crit (default: crit)" msgstr "" -#: plugins/check_tcp.c:660 +#: plugins/check_tcp.c:679 msgid "" "Accept expected string mismatches with states ok, warn, crit (default: warn)" msgstr "" -#: plugins/check_tcp.c:662 +#: plugins/check_tcp.c:681 #, fuzzy msgid "Hide output from TCP socket" msgstr "Konnte TCP socket nicht öffnen\n" -#: plugins/check_tcp.c:664 +#: plugins/check_tcp.c:683 msgid "Close connection once more than this number of bytes are received" msgstr "" -#: plugins/check_tcp.c:666 +#: plugins/check_tcp.c:685 msgid "Seconds to wait between sending string and polling for response" msgstr "" -#: plugins/check_tcp.c:671 +#: plugins/check_tcp.c:690 msgid "1st is #days for warning, 2nd is critical (if not specified - 0)." msgstr "" -#: plugins/check_tcp.c:673 +#: plugins/check_tcp.c:692 msgid "Use SSL for the connection." msgstr "" +#: plugins/check_tcp.c:694 +msgid "SSL server_name" +msgstr "" + #: plugins/check_time.c:102 #, c-format msgid "TIME UNKNOWN - could not connect to server %s, port %d\n" @@ -5583,120 +5657,120 @@ msgstr "" msgid "-i/--immediate: use \"smartctl --test=offline\"" msgstr "" -#: plugins/negate.c:98 +#: plugins/negate.c:96 #, fuzzy msgid "No data returned from command\n" msgstr "Keine Daten empfangen %s\n" -#: plugins/negate.c:168 +#: plugins/negate.c:166 msgid "" "Timeout result must be a valid state name (OK, WARNING, CRITICAL, UNKNOWN) " "or integer (0-3)." msgstr "" -#: plugins/negate.c:172 +#: plugins/negate.c:170 msgid "" "Ok must be a valid state name (OK, WARNING, CRITICAL, UNKNOWN) or integer " "(0-3)." msgstr "" -#: plugins/negate.c:178 +#: plugins/negate.c:176 msgid "" "Warning must be a valid state name (OK, WARNING, CRITICAL, UNKNOWN) or " "integer (0-3)." msgstr "" -#: plugins/negate.c:183 +#: plugins/negate.c:181 msgid "" "Critical must be a valid state name (OK, WARNING, CRITICAL, UNKNOWN) or " "integer (0-3)." msgstr "" -#: plugins/negate.c:188 +#: plugins/negate.c:186 msgid "" "Unknown must be a valid state name (OK, WARNING, CRITICAL, UNKNOWN) or " "integer (0-3)." msgstr "" -#: plugins/negate.c:215 +#: plugins/negate.c:213 msgid "Require path to command" msgstr "" -#: plugins/negate.c:226 +#: plugins/negate.c:224 msgid "" "Negates the status of a plugin (returns OK for CRITICAL and vice-versa)." msgstr "" -#: plugins/negate.c:227 +#: plugins/negate.c:225 msgid "Additional switches can be used to control which state becomes what." msgstr "" -#: plugins/negate.c:236 +#: plugins/negate.c:234 msgid "Keep timeout longer than the plugin timeout to retain CRITICAL status." msgstr "" -#: plugins/negate.c:238 +#: plugins/negate.c:236 msgid "Custom result on Negate timeouts; see below for STATUS definition\n" msgstr "" -#: plugins/negate.c:244 +#: plugins/negate.c:242 #, c-format msgid "" " STATUS can be 'OK', 'WARNING', 'CRITICAL' or 'UNKNOWN' without single\n" msgstr "" -#: plugins/negate.c:245 +#: plugins/negate.c:243 #, c-format msgid "" " quotes. Numeric values are accepted. If nothing is specified, permutes\n" msgstr "" -#: plugins/negate.c:246 +#: plugins/negate.c:244 #, c-format msgid " OK and CRITICAL.\n" msgstr "" -#: plugins/negate.c:248 +#: plugins/negate.c:246 #, c-format msgid "" " Substitute output text as well. Will only substitute text in CAPITALS\n" msgstr "" -#: plugins/negate.c:253 +#: plugins/negate.c:251 msgid "Run check_ping and invert result. Must use full path to plugin" msgstr "" -#: plugins/negate.c:255 +#: plugins/negate.c:253 msgid "This will return OK instead of WARNING and UNKNOWN instead of CRITICAL" msgstr "" -#: plugins/negate.c:258 +#: plugins/negate.c:256 msgid "" "This plugin is a wrapper to take the output of another plugin and invert it." msgstr "" -#: plugins/negate.c:259 +#: plugins/negate.c:257 msgid "The full path of the plugin must be provided." msgstr "" -#: plugins/negate.c:260 +#: plugins/negate.c:258 msgid "If the wrapped plugin returns OK, the wrapper will return CRITICAL." msgstr "" -#: plugins/negate.c:261 +#: plugins/negate.c:259 msgid "If the wrapped plugin returns CRITICAL, the wrapper will return OK." msgstr "" -#: plugins/negate.c:262 +#: plugins/negate.c:260 msgid "Otherwise, the output state of the wrapped plugin is unchanged." msgstr "" -#: plugins/negate.c:264 +#: plugins/negate.c:262 msgid "" "Using timeout-result, it is possible to override the timeout behaviour or a" msgstr "" -#: plugins/negate.c:265 +#: plugins/negate.c:263 msgid "plugin by setting the negate timeout a bit lower." msgstr "" @@ -5731,41 +5805,37 @@ msgstr "" msgid "Receive failed" msgstr "" -#: plugins/netutils.c:342 plugins-root/check_dhcp.c:1313 +#: plugins/netutils.c:342 plugins-root/check_dhcp.c:1314 #, fuzzy, c-format msgid "Invalid hostname/address - %s" msgstr "" "Ungültige(r) Name/Adresse: %s\n" "\n" -#: plugins/popen.c:142 +#: plugins/popen.c:133 #, fuzzy msgid "Could not malloc argv array in popen()" msgstr "Konnte addr nicht zuweisen\n" -#: plugins/popen.c:152 +#: plugins/popen.c:143 #, fuzzy msgid "CRITICAL - You need more args!!!" msgstr "CRITICAL - Fehler: %s\n" -#: plugins/popen.c:209 +#: plugins/popen.c:201 #, fuzzy msgid "Cannot catch SIGCHLD" msgstr "Konnte SIGALRM nicht erhalten" -#: plugins/popen.c:304 +#: plugins/popen.c:287 #, fuzzy, c-format msgid "CRITICAL - Plugin timed out after %d seconds\n" msgstr "CRITICAL - Dokumentendatum ist %d Sekunden in der Zukunft\n" -#: plugins/popen.c:307 +#: plugins/popen.c:290 msgid "CRITICAL - popen timeout received, but no child process" msgstr "" -#: plugins/popen.c:323 -msgid "sysconf error for _SC_OPEN_MAX" -msgstr "" - #: plugins/urlize.c:129 #, c-format msgid "" @@ -5819,34 +5889,33 @@ msgstr "" msgid "urlize http://example.com/ \"check_http -H example.com -r 'two words'\"" msgstr "" -#: plugins/utils.c:172 -#, fuzzy, c-format -msgid "%s - Plugin timed out after %d seconds\n" -msgstr "CRITICAL - Dokumentendatum ist %d Sekunden in der Zukunft\n" - -#: plugins/utils.c:467 +#: plugins/utils.c:437 #, fuzzy msgid "failed realloc in strpcpy\n" msgstr "konnte keinen Speicher für '%s' reservieren\n" -#: plugins/utils.c:509 +#: plugins/utils.c:479 #, fuzzy msgid "failed malloc in strscat\n" msgstr "konnte keinen Speicher für '%s' reservieren\n" -#: plugins/utils.c:529 +#: plugins/utils.c:499 #, fuzzy msgid "failed malloc in xvasprintf\n" msgstr "konnte keinen Speicher für '%s' reservieren\n" -#: plugins/utils.h:125 +#: plugins/utils.c:693 +msgid "sysconf error for _SC_OPEN_MAX\n" +msgstr "" + +#: plugins/utils.h:118 #, c-format msgid "" " %s (-h | --help) for detailed help\n" " %s (-V | --version) for version information\n" msgstr "" -#: plugins/utils.h:129 +#: plugins/utils.h:122 msgid "" "\n" "Options:\n" @@ -5856,7 +5925,7 @@ msgid "" " Print version information\n" msgstr "" -#: plugins/utils.h:136 +#: plugins/utils.h:129 #, c-format msgid "" " -H, --hostname=ADDRESS\n" @@ -5865,7 +5934,7 @@ msgid "" " Port number (default: %s)\n" msgstr "" -#: plugins/utils.h:142 +#: plugins/utils.h:135 msgid "" " -4, --use-ipv4\n" " Use IPv4 connection\n" @@ -5873,14 +5942,14 @@ msgid "" " Use IPv6 connection\n" msgstr "" -#: plugins/utils.h:148 +#: plugins/utils.h:141 msgid "" " -v, --verbose\n" " Show details for command-line debugging (output may be truncated by\n" " the monitoring system)\n" msgstr "" -#: plugins/utils.h:153 +#: plugins/utils.h:146 msgid "" " -w, --warning=DOUBLE\n" " Response time to result in warning status (seconds)\n" @@ -5888,7 +5957,7 @@ msgid "" " Response time to result in critical status (seconds)\n" msgstr "" -#: plugins/utils.h:159 +#: plugins/utils.h:152 msgid "" " -w, --warning=RANGE\n" " Warning range (format: start:end). Alert if outside this range\n" @@ -5896,21 +5965,21 @@ msgid "" " Critical range\n" msgstr "" -#: plugins/utils.h:165 +#: plugins/utils.h:158 #, c-format msgid "" " -t, --timeout=INTEGER\n" " Seconds before connection times out (default: %d)\n" msgstr "" -#: plugins/utils.h:169 +#: plugins/utils.h:162 #, c-format msgid "" " -t, --timeout=INTEGER\n" " Seconds before plugin times out (default: %d)\n" msgstr "" -#: plugins/utils.h:174 +#: plugins/utils.h:167 msgid "" " --extra-opts=[section][@file]\n" " Read options from an ini file. See\n" @@ -5918,14 +5987,14 @@ msgid "" " for usage and examples.\n" msgstr "" -#: plugins/utils.h:183 +#: plugins/utils.h:176 msgid "" " See:\n" " https://www.monitoring-plugins.org/doc/guidelines.html#THRESHOLDFORMAT\n" " for THRESHOLD format and examples.\n" msgstr "" -#: plugins/utils.h:188 +#: plugins/utils.h:181 msgid "" "\n" "Send email to help@monitoring-plugins.org if you have questions regarding\n" @@ -5934,7 +6003,7 @@ msgid "" "\n" msgstr "" -#: plugins/utils.h:193 +#: plugins/utils.h:186 msgid "" "\n" "The Monitoring Plugins come with ABSOLUTELY NO WARRANTY. You may " @@ -5948,404 +6017,412 @@ msgstr "" msgid "Error: Could not get hardware address of interface '%s'\n" msgstr "" -#: plugins-root/check_dhcp.c:339 +#: plugins-root/check_dhcp.c:340 #, c-format msgid "Error: if_nametoindex error - %s.\n" msgstr "" -#: plugins-root/check_dhcp.c:344 +#: plugins-root/check_dhcp.c:345 #, c-format msgid "Error: Couldn't get hardware address from %s. sysctl 1 error - %s.\n" msgstr "" -#: plugins-root/check_dhcp.c:349 +#: plugins-root/check_dhcp.c:350 #, c-format msgid "" "Error: Couldn't get hardware address from interface %s. malloc error - %s.\n" msgstr "" -#: plugins-root/check_dhcp.c:354 +#: plugins-root/check_dhcp.c:355 #, c-format msgid "Error: Couldn't get hardware address from %s. sysctl 2 error - %s.\n" msgstr "" -#: plugins-root/check_dhcp.c:385 +#: plugins-root/check_dhcp.c:386 #, c-format msgid "" "Error: can't find unit number in interface_name (%s) - expecting TypeNumber " "eg lnc0.\n" msgstr "" -#: plugins-root/check_dhcp.c:390 plugins-root/check_dhcp.c:402 +#: plugins-root/check_dhcp.c:391 plugins-root/check_dhcp.c:403 #, c-format msgid "" "Error: can't read MAC address from DLPI streams interface for device %s unit " "%d.\n" msgstr "" -#: plugins-root/check_dhcp.c:408 +#: plugins-root/check_dhcp.c:409 #, c-format msgid "" "Error: can't get MAC address for this architecture. Use the --mac option.\n" msgstr "" -#: plugins-root/check_dhcp.c:427 +#: plugins-root/check_dhcp.c:428 #, c-format msgid "Error: Cannot determine IP address of interface %s\n" msgstr "" -#: plugins-root/check_dhcp.c:435 +#: plugins-root/check_dhcp.c:436 #, c-format msgid "Error: Cannot get interface IP address on this platform.\n" msgstr "" -#: plugins-root/check_dhcp.c:440 +#: plugins-root/check_dhcp.c:441 #, c-format msgid "Pretending to be relay client %s\n" msgstr "" -#: plugins-root/check_dhcp.c:524 +#: plugins-root/check_dhcp.c:525 #, c-format msgid "DHCPDISCOVER to %s port %d\n" msgstr "" -#: plugins-root/check_dhcp.c:576 +#: plugins-root/check_dhcp.c:577 #, c-format msgid "Result=ERROR\n" msgstr "" -#: plugins-root/check_dhcp.c:582 +#: plugins-root/check_dhcp.c:583 #, c-format msgid "Result=OK\n" msgstr "" -#: plugins-root/check_dhcp.c:592 +#: plugins-root/check_dhcp.c:593 #, c-format msgid "DHCPOFFER from IP address %s" msgstr "" -#: plugins-root/check_dhcp.c:593 +#: plugins-root/check_dhcp.c:594 #, c-format msgid " via %s\n" msgstr "" -#: plugins-root/check_dhcp.c:600 +#: plugins-root/check_dhcp.c:601 #, c-format msgid "" "DHCPOFFER XID (%u) did not match DHCPDISCOVER XID (%u) - ignoring packet\n" msgstr "" -#: plugins-root/check_dhcp.c:622 +#: plugins-root/check_dhcp.c:623 #, c-format msgid "DHCPOFFER hardware address did not match our own - ignoring packet\n" msgstr "" -#: plugins-root/check_dhcp.c:640 +#: plugins-root/check_dhcp.c:641 #, c-format msgid "Total responses seen on the wire: %d\n" msgstr "" -#: plugins-root/check_dhcp.c:641 +#: plugins-root/check_dhcp.c:642 #, fuzzy, c-format msgid "Valid responses for this machine: %d\n" msgstr "Keine Antwort vom Host \n" -#: plugins-root/check_dhcp.c:656 +#: plugins-root/check_dhcp.c:657 #, c-format msgid "send_dhcp_packet result: %d\n" msgstr "" -#: plugins-root/check_dhcp.c:689 +#: plugins-root/check_dhcp.c:690 #, fuzzy, c-format msgid "No (more) data received (nfound: %d)\n" msgstr "Keine Daten empfangen %s\n" -#: plugins-root/check_dhcp.c:702 +#: plugins-root/check_dhcp.c:703 #, c-format msgid "recvfrom() failed, " msgstr "" -#: plugins-root/check_dhcp.c:709 +#: plugins-root/check_dhcp.c:710 #, c-format msgid "receive_dhcp_packet() result: %d\n" msgstr "" -#: plugins-root/check_dhcp.c:710 +#: plugins-root/check_dhcp.c:711 #, c-format msgid "receive_dhcp_packet() source: %s\n" msgstr "" -#: plugins-root/check_dhcp.c:740 +#: plugins-root/check_dhcp.c:741 #, c-format msgid "Error: Could not create socket!\n" msgstr "" -#: plugins-root/check_dhcp.c:750 +#: plugins-root/check_dhcp.c:751 #, c-format msgid "Error: Could not set reuse address option on DHCP socket!\n" msgstr "" -#: plugins-root/check_dhcp.c:756 +#: plugins-root/check_dhcp.c:757 #, c-format msgid "Error: Could not set broadcast option on DHCP socket!\n" msgstr "" -#: plugins-root/check_dhcp.c:765 +#: plugins-root/check_dhcp.c:766 #, c-format msgid "" "Error: Could not bind socket to interface %s. Check your privileges...\n" msgstr "" -#: plugins-root/check_dhcp.c:776 +#: plugins-root/check_dhcp.c:777 #, c-format msgid "" "Error: Could not bind to DHCP socket (port %d)! Check your privileges...\n" msgstr "" -#: plugins-root/check_dhcp.c:810 +#: plugins-root/check_dhcp.c:811 #, c-format msgid "Requested server address: %s\n" msgstr "" -#: plugins-root/check_dhcp.c:872 +#: plugins-root/check_dhcp.c:873 #, c-format msgid "Lease Time: Infinite\n" msgstr "" -#: plugins-root/check_dhcp.c:874 +#: plugins-root/check_dhcp.c:875 #, c-format msgid "Lease Time: %lu seconds\n" msgstr "" -#: plugins-root/check_dhcp.c:876 +#: plugins-root/check_dhcp.c:877 #, c-format msgid "Renewal Time: Infinite\n" msgstr "" -#: plugins-root/check_dhcp.c:878 +#: plugins-root/check_dhcp.c:879 #, c-format msgid "Renewal Time: %lu seconds\n" msgstr "" -#: plugins-root/check_dhcp.c:880 +#: plugins-root/check_dhcp.c:881 #, c-format msgid "Rebinding Time: Infinite\n" msgstr "" -#: plugins-root/check_dhcp.c:881 +#: plugins-root/check_dhcp.c:882 #, c-format msgid "Rebinding Time: %lu seconds\n" msgstr "" -#: plugins-root/check_dhcp.c:909 +#: plugins-root/check_dhcp.c:910 #, c-format msgid "Added offer from server @ %s" msgstr "" -#: plugins-root/check_dhcp.c:910 +#: plugins-root/check_dhcp.c:911 #, c-format msgid " of IP address %s\n" msgstr "" -#: plugins-root/check_dhcp.c:977 +#: plugins-root/check_dhcp.c:978 #, c-format msgid "DHCP Server Match: Offerer=%s" msgstr "" -#: plugins-root/check_dhcp.c:978 +#: plugins-root/check_dhcp.c:979 #, c-format msgid " Requested=%s" msgstr "" -#: plugins-root/check_dhcp.c:980 +#: plugins-root/check_dhcp.c:981 #, c-format msgid " (duplicate)" msgstr "" -#: plugins-root/check_dhcp.c:981 +#: plugins-root/check_dhcp.c:982 #, c-format msgid "\n" msgstr "" -#: plugins-root/check_dhcp.c:1029 +#: plugins-root/check_dhcp.c:1030 #, c-format msgid "No DHCPOFFERs were received.\n" msgstr "" -#: plugins-root/check_dhcp.c:1033 +#: plugins-root/check_dhcp.c:1034 #, c-format msgid "Received %d DHCPOFFER(s)" msgstr "" -#: plugins-root/check_dhcp.c:1036 +#: plugins-root/check_dhcp.c:1037 #, c-format msgid ", %s%d of %d requested servers responded" msgstr "" -#: plugins-root/check_dhcp.c:1039 +#: plugins-root/check_dhcp.c:1040 #, c-format msgid ", requested address (%s) was %soffered" msgstr "" -#: plugins-root/check_dhcp.c:1039 +#: plugins-root/check_dhcp.c:1040 msgid "not " msgstr "" -#: plugins-root/check_dhcp.c:1041 +#: plugins-root/check_dhcp.c:1042 #, c-format msgid ", max lease time = " msgstr "" -#: plugins-root/check_dhcp.c:1043 +#: plugins-root/check_dhcp.c:1044 #, c-format msgid "Infinity" msgstr "" -#: plugins-root/check_dhcp.c:1163 +#: plugins-root/check_dhcp.c:1164 msgid "Got unexpected non-option argument" msgstr "" -#: plugins-root/check_dhcp.c:1205 +#: plugins-root/check_dhcp.c:1206 #, c-format msgid "Error: DLPI stream API failed to get MAC in check_ctrl: %s.\n" msgstr "" -#: plugins-root/check_dhcp.c:1217 +#: plugins-root/check_dhcp.c:1218 #, c-format msgid "Error: DLPI stream API failed to get MAC in put_ctrl/putmsg(): %s.\n" msgstr "" -#: plugins-root/check_dhcp.c:1230 +#: plugins-root/check_dhcp.c:1231 #, c-format msgid "Error: DLPI stream API failed to get MAC in put_both/putmsg().\n" msgstr "" -#: plugins-root/check_dhcp.c:1242 +#: plugins-root/check_dhcp.c:1243 #, c-format msgid "" "Error: DLPI stream API failed to get MAC in dl_attach_req/open(%s..): %s.\n" msgstr "" -#: plugins-root/check_dhcp.c:1266 +#: plugins-root/check_dhcp.c:1267 #, c-format msgid "Error: DLPI stream API failed to get MAC in dl_bind/check_ctrl(): %s.\n" msgstr "" -#: plugins-root/check_dhcp.c:1345 +#: plugins-root/check_dhcp.c:1346 #, c-format msgid "Hardware address: " msgstr "" -#: plugins-root/check_dhcp.c:1361 +#: plugins-root/check_dhcp.c:1362 msgid "This plugin tests the availability of DHCP servers on a network." msgstr "" -#: plugins-root/check_dhcp.c:1373 +#: plugins-root/check_dhcp.c:1374 msgid "IP address of DHCP server that we must hear from" msgstr "" -#: plugins-root/check_dhcp.c:1375 +#: plugins-root/check_dhcp.c:1376 msgid "IP address that should be offered by at least one DHCP server" msgstr "" -#: plugins-root/check_dhcp.c:1377 +#: plugins-root/check_dhcp.c:1378 msgid "Seconds to wait for DHCPOFFER before timeout occurs" msgstr "" -#: plugins-root/check_dhcp.c:1379 +#: plugins-root/check_dhcp.c:1380 msgid "Interface to to use for listening (i.e. eth0)" msgstr "" -#: plugins-root/check_dhcp.c:1381 +#: plugins-root/check_dhcp.c:1382 msgid "MAC address to use in the DHCP request" msgstr "" -#: plugins-root/check_dhcp.c:1383 +#: plugins-root/check_dhcp.c:1384 msgid "Unicast testing: mimic a DHCP relay, requires -s" msgstr "" -#: plugins-root/check_icmp.c:1349 +#: plugins-root/check_icmp.c:1554 msgid "specify a target" msgstr "" -#: plugins-root/check_icmp.c:1351 +#: plugins-root/check_icmp.c:1556 +msgid "Use IPv4 (default) or IPv6 to communicate with the targets" +msgstr "" + +#: plugins-root/check_icmp.c:1558 #, fuzzy msgid "warning threshold (currently " msgstr "Warning threshold Integer sein" -#: plugins-root/check_icmp.c:1354 +#: plugins-root/check_icmp.c:1561 #, fuzzy msgid "critical threshold (currently " msgstr "Critical threshold muss ein Integer sein" -#: plugins-root/check_icmp.c:1357 +#: plugins-root/check_icmp.c:1564 #, fuzzy msgid "specify a source IP address or device name" msgstr "Hostname oder Serveradresse muss angegeben werden" -#: plugins-root/check_icmp.c:1359 +#: plugins-root/check_icmp.c:1566 msgid "number of packets to send (currently " msgstr "" -#: plugins-root/check_icmp.c:1362 +#: plugins-root/check_icmp.c:1569 msgid "max packet interval (currently " msgstr "" -#: plugins-root/check_icmp.c:1365 +#: plugins-root/check_icmp.c:1572 msgid "max target interval (currently " msgstr "" -#: plugins-root/check_icmp.c:1368 +#: plugins-root/check_icmp.c:1575 msgid "number of alive hosts required for success" msgstr "" -#: plugins-root/check_icmp.c:1371 +#: plugins-root/check_icmp.c:1578 msgid "TTL on outgoing packets (currently " msgstr "" -#: plugins-root/check_icmp.c:1374 +#: plugins-root/check_icmp.c:1581 msgid "timeout value (seconds, currently " msgstr "" -#: plugins-root/check_icmp.c:1377 +#: plugins-root/check_icmp.c:1584 msgid "Number of icmp data bytes to send" msgstr "" -#: plugins-root/check_icmp.c:1378 +#: plugins-root/check_icmp.c:1585 msgid "Packet size will be data bytes + icmp header (currently" msgstr "" -#: plugins-root/check_icmp.c:1380 +#: plugins-root/check_icmp.c:1587 msgid "verbose" msgstr "" -#: plugins-root/check_icmp.c:1384 +#: plugins-root/check_icmp.c:1591 msgid "The -H switch is optional. Naming a host (or several) to check is not." msgstr "" -#: plugins-root/check_icmp.c:1386 +#: plugins-root/check_icmp.c:1593 msgid "" "Threshold format for -w and -c is 200.25,60% for 200.25 msec RTA and 60%" msgstr "" -#: plugins-root/check_icmp.c:1387 +#: plugins-root/check_icmp.c:1594 msgid "packet loss. The default values should work well for most users." msgstr "" -#: plugins-root/check_icmp.c:1388 +#: plugins-root/check_icmp.c:1595 msgid "" "You can specify different RTA factors using the standardized abbreviations" msgstr "" -#: plugins-root/check_icmp.c:1389 +#: plugins-root/check_icmp.c:1596 msgid "" "us (microseconds), ms (milliseconds, default) or just plain s for seconds." msgstr "" -#: plugins-root/check_icmp.c:1395 +#: plugins-root/check_icmp.c:1602 msgid "The -v switch can be specified several times for increased verbosity." msgstr "" +#, fuzzy +#~ msgid "%s - Plugin timed out after %d seconds\n" +#~ msgstr "CRITICAL - Dokumentendatum ist %d Sekunden in der Zukunft\n" + #~ msgid "Critical threshold must be integer" #~ msgstr "Critical threshold muss ein Integer sein" diff --git a/po/fr.gmo b/po/fr.gmo index 4629e13..fd6e3d0 100644 Binary files a/po/fr.gmo and b/po/fr.gmo differ diff --git a/po/fr.po b/po/fr.po index 80c7ce5..e8a0f81 100644 --- a/po/fr.po +++ b/po/fr.po @@ -10,7 +10,7 @@ msgid "" msgstr "" "Project-Id-Version: fr\n" "Report-Msgid-Bugs-To: devel@monitoring-plugins.org\n" -"POT-Creation-Date: 2016-11-29 09:49+0100\n" +"POT-Creation-Date: 2020-12-09 22:49+0100\n" "PO-Revision-Date: 2010-04-21 23:38-0400\n" "Last-Translator: Thomas Guyot-Sionnest \n" "Language-Team: Nagios Plugin Development Mailing List argument with optional text" msgstr "du paramètre avec un texte optionnel" -#: plugins/check_fping.c:125 plugins/check_hpjd.c:129 plugins/check_ping.c:438 +#: plugins/check_fping.c:125 plugins/check_hpjd.c:130 plugins/check_ping.c:438 #: plugins/check_swap.c:176 plugins/check_users.c:130 plugins/urlize.c:109 #, c-format msgid "Could not open pipe: %s\n" msgstr "Impossible d'ouvrir le pipe: %s\n" -#: plugins/check_fping.c:131 plugins/check_hpjd.c:135 plugins/check_load.c:153 +#: plugins/check_fping.c:131 plugins/check_hpjd.c:136 plugins/check_load.c:157 #: plugins/check_swap.c:182 plugins/check_users.c:136 plugins/urlize.c:115 #, c-format msgid "Could not open stderr for %s\n" @@ -915,7 +922,7 @@ msgstr "PING INCONNU - Hôte non trouvé (%s)\n" #: plugins/check_fping.c:187 #, c-format -msgid "FPING UNKNOW - %s not found\n" +msgid "FPING UNKNOWN - %s not found\n" msgstr "PING INCONNU - Hôte non trouvé (%s)\n" #: plugins/check_fping.c:191 @@ -944,18 +951,19 @@ msgid "FPING %s - %s (loss=%.0f%% )|%s\n" msgstr "FPING %s - %s (perte=%.0f%% )|%s\n" #: plugins/check_fping.c:326 plugins/check_fping.c:332 -#: plugins/check_hpjd.c:339 plugins/check_hpjd.c:368 plugins/check_mysql.c:383 -#: plugins/check_mysql.c:470 plugins/check_ntp.c:719 +#: plugins/check_hpjd.c:341 plugins/check_hpjd.c:372 plugins/check_mysql.c:386 +#: plugins/check_mysql.c:473 plugins/check_ntp.c:719 #: plugins/check_ntp_peer.c:497 plugins/check_ntp_time.c:498 -#: plugins/check_pgsql.c:335 plugins/check_ping.c:295 plugins/check_ping.c:418 +#: plugins/check_pgsql.c:336 plugins/check_ping.c:295 plugins/check_ping.c:418 #: plugins/check_radius.c:275 plugins/check_real.c:315 -#: plugins/check_real.c:377 plugins/check_smtp.c:503 plugins/check_smtp.c:645 +#: plugins/check_real.c:377 plugins/check_smtp.c:504 plugins/check_smtp.c:646 #: plugins/check_ssh.c:162 plugins/check_time.c:240 plugins/check_time.c:315 #: plugins/check_ups.c:504 plugins/check_ups.c:573 msgid "Invalid hostname/address" msgstr "Adresse/Nom d'hôte invalide" #: plugins/check_fping.c:345 plugins/check_ldap.c:400 plugins/check_ping.c:246 +#: plugins-root/check_icmp.c:480 msgid "IPv6 support not available\n" msgstr "Support IPv6 non disponible\n" @@ -1133,632 +1141,658 @@ msgstr "" "http://www.activesw.com/people/steve/qstat.html avant de pouvoir utiliser ce " "plugin." -#: plugins/check_hpjd.c:240 +#: plugins/check_hpjd.c:241 msgid "Paper Jam" msgstr "Bourrage Papier" -#: plugins/check_hpjd.c:244 +#: plugins/check_hpjd.c:246 msgid "Out of Paper" msgstr "Plus de Papier" -#: plugins/check_hpjd.c:249 +#: plugins/check_hpjd.c:251 msgid "Printer Offline" msgstr "Imprimante hors ligne" -#: plugins/check_hpjd.c:254 +#: plugins/check_hpjd.c:256 msgid "Peripheral Error" msgstr "Erreur du périphérique" -#: plugins/check_hpjd.c:258 +#: plugins/check_hpjd.c:260 msgid "Intervention Required" msgstr "Intervention Requise" -#: plugins/check_hpjd.c:262 +#: plugins/check_hpjd.c:264 msgid "Toner Low" msgstr "Toner Faible" -#: plugins/check_hpjd.c:266 +#: plugins/check_hpjd.c:268 msgid "Insufficient Memory" msgstr "Mémoire Insuffisante" -#: plugins/check_hpjd.c:270 +#: plugins/check_hpjd.c:272 msgid "A Door is Open" msgstr "Une porte est ouverte" -#: plugins/check_hpjd.c:274 +#: plugins/check_hpjd.c:276 msgid "Output Tray is Full" msgstr "Le bac de sortie est plein" -#: plugins/check_hpjd.c:278 +#: plugins/check_hpjd.c:280 msgid "Data too Slow for Engine" msgstr "Le données arrivent trop lentement pour l'imprimante" -#: plugins/check_hpjd.c:282 +#: plugins/check_hpjd.c:284 msgid "Unknown Paper Error" msgstr "Erreur de papier inconnue" -#: plugins/check_hpjd.c:287 +#: plugins/check_hpjd.c:289 #, c-format msgid "Printer ok - (%s)\n" msgstr "Imprimante ok - (%s)\n" -#: plugins/check_hpjd.c:347 +#: plugins/check_hpjd.c:349 #, fuzzy msgid "Port must be a positive short integer" msgstr "Le numéro du port doit être un entier positif" -#: plugins/check_hpjd.c:405 +#: plugins/check_hpjd.c:409 msgid "This plugin tests the STATUS of an HP printer with a JetDirect card." msgstr "Ce plugin teste l'état d'une imprimante HP avec une carte JetDirect." -#: plugins/check_hpjd.c:406 +#: plugins/check_hpjd.c:410 msgid "Net-snmp must be installed on the computer running the plugin." msgstr "Net-snmp doit être installé sur l'ordinateur qui exécute le plugin." -#: plugins/check_hpjd.c:416 +#: plugins/check_hpjd.c:420 msgid "The SNMP community name " msgstr "Le nom de la communauté SNMP " -#: plugins/check_hpjd.c:417 plugins/check_hpjd.c:421 +#: plugins/check_hpjd.c:421 plugins/check_hpjd.c:425 #, c-format msgid "(default=%s)" msgstr "(défaut=%s)" -#: plugins/check_hpjd.c:420 +#: plugins/check_hpjd.c:424 #, fuzzy msgid "Specify the port to check " msgstr "Nom de l'hôte à vérifier" -#: plugins/check_http.c:191 +#: plugins/check_hpjd.c:428 +#, fuzzy +msgid "Disable paper check " +msgstr "Variable a vérifier" + +#: plugins/check_http.c:193 msgid "file does not exist or is not readable" msgstr "" -#: plugins/check_http.c:312 plugins/check_http.c:317 plugins/check_http.c:323 -#: plugins/check_smtp.c:599 plugins/check_tcp.c:580 plugins/check_tcp.c:585 -#: plugins/check_tcp.c:591 +#: plugins/check_http.c:315 plugins/check_http.c:320 plugins/check_http.c:326 +#: plugins/check_smtp.c:600 plugins/check_tcp.c:590 plugins/check_tcp.c:595 +#: plugins/check_tcp.c:601 msgid "Invalid certificate expiration period" msgstr "Période d'expiration du certificat invalide" -#: plugins/check_http.c:361 +#: plugins/check_http.c:364 msgid "" "Invalid option - Valid SSL/TLS versions: 2, 3, 1, 1.1, 1.2 (with optional " "'+' suffix)" msgstr "" -#: plugins/check_http.c:367 plugins/check_tcp.c:604 +#: plugins/check_http.c:370 plugins/check_tcp.c:614 plugins/check_tcp.c:623 msgid "Invalid option - SSL is not available" msgstr "Option invalide - SSL n'est pas disponible" -#: plugins/check_http.c:388 +#: plugins/check_http.c:391 msgid "Invalid onredirect option" msgstr "" -#: plugins/check_http.c:390 +#: plugins/check_http.c:393 #, c-format msgid "option f:%d \n" msgstr "option f:%d \n" -#: plugins/check_http.c:425 +#: plugins/check_http.c:428 msgid "Invalid port number" msgstr "Numéro de port invalide" -#: plugins/check_http.c:477 +#: plugins/check_http.c:486 #, c-format msgid "Could Not Compile Regular Expression: %s" msgstr "Impossible de compiler l'expression rationnelle: %s" -#: plugins/check_http.c:491 plugins/check_ntp.c:732 +#: plugins/check_http.c:500 plugins/check_ntp.c:732 #: plugins/check_ntp_peer.c:513 plugins/check_ntp_time.c:517 -#: plugins/check_smtp.c:625 plugins/check_ssh.c:151 plugins/check_tcp.c:481 +#: plugins/check_smtp.c:626 plugins/check_ssh.c:151 plugins/check_tcp.c:491 msgid "IPv6 support not available" msgstr "Support IPv6 non disponible" -#: plugins/check_http.c:556 plugins/check_ping.c:422 +#: plugins/check_http.c:568 plugins/check_ping.c:422 msgid "You must specify a server address or host name" msgstr "Vous devez spécifier une adresse ou un nom d'hôte" -#: plugins/check_http.c:570 +#: plugins/check_http.c:585 msgid "" "If you use a client certificate you must also specify a private key file" msgstr "" -#: plugins/check_http.c:697 plugins/check_http.c:865 +#: plugins/check_http.c:712 plugins/check_http.c:880 msgid "HTTP UNKNOWN - Memory allocation error\n" msgstr "HTTP INCONNU - Impossible d'allouer la mémoire\n" -#: plugins/check_http.c:769 +#: plugins/check_http.c:784 #, c-format msgid "%sServer date unknown, " msgstr "%sDate du serveur inconnue, " -#: plugins/check_http.c:772 +#: plugins/check_http.c:787 #, c-format msgid "%sDocument modification date unknown, " msgstr "%sDate de modification du document inconnue, " -#: plugins/check_http.c:779 +#: plugins/check_http.c:794 #, c-format msgid "%sServer date \"%100s\" unparsable, " msgstr "%sDate du serveur \"%100s\" illisible, " -#: plugins/check_http.c:782 +#: plugins/check_http.c:797 #, c-format msgid "%sDocument date \"%100s\" unparsable, " msgstr "%sDate du document \"%100s\" illisible, " -#: plugins/check_http.c:785 +#: plugins/check_http.c:800 #, c-format msgid "%sDocument is %d seconds in the future, " msgstr "%sLa date du document est %d secondes dans le futur, " -#: plugins/check_http.c:790 +#: plugins/check_http.c:805 #, c-format msgid "%sLast modified %.1f days ago, " msgstr "%sDernière modification %.1f jours auparavant, " -#: plugins/check_http.c:793 +#: plugins/check_http.c:808 #, c-format msgid "%sLast modified %d:%02d:%02d ago, " msgstr "%sDernière modification %d:%02d:%02d auparavant, " -#: plugins/check_http.c:907 +#: plugins/check_http.c:922 msgid "HTTP CRITICAL - Unable to open TCP socket\n" msgstr "HTTP CRITIQUE - Impossible d'ouvrir un socket TCP\n" -#: plugins/check_http.c:1076 +#: plugins/check_http.c:1106 msgid "HTTP CRITICAL - Error on receive\n" msgstr "HTTP CRITIQUE - Erreur dans la réception\n" -#: plugins/check_http.c:1086 +#: plugins/check_http.c:1116 msgid "HTTP CRITICAL - No data received from host\n" msgstr "HTTP CRITIQUE - Pas de données reçues de l'hôte\n" -#: plugins/check_http.c:1137 +#: plugins/check_http.c:1167 #, c-format msgid "Invalid HTTP response received from host: %s\n" msgstr "Réponse HTTP reçue de l'hôte invalide: %s\n" -#: plugins/check_http.c:1141 +#: plugins/check_http.c:1171 #, c-format msgid "Invalid HTTP response received from host on port %d: %s\n" msgstr "Réponse HTTP reçue de l'hôte sur le port %d invalide: %s\n" -#: plugins/check_http.c:1150 +#: plugins/check_http.c:1174 plugins/check_http.c:1326 +#, c-format +msgid "" +"%s\n" +"%s" +msgstr "" + +#: plugins/check_http.c:1182 #, c-format msgid "Status line output matched \"%s\" - " msgstr "La ligne d'état correspond à \"%s\" - " -#: plugins/check_http.c:1161 +#: plugins/check_http.c:1193 #, c-format msgid "HTTP CRITICAL: Invalid Status Line (%s)\n" msgstr "HTTP CRITIQUE: Ligne d'état non valide (%s)\n" -#: plugins/check_http.c:1168 +#: plugins/check_http.c:1200 #, c-format msgid "HTTP CRITICAL: Invalid Status (%s)\n" msgstr "HTTP CRITIQUE: Etat Invalide (%s)\n" -#: plugins/check_http.c:1172 plugins/check_http.c:1177 -#: plugins/check_http.c:1187 plugins/check_http.c:1191 +#: plugins/check_http.c:1204 plugins/check_http.c:1209 +#: plugins/check_http.c:1219 plugins/check_http.c:1223 #, c-format msgid "%s - " msgstr "" -#: plugins/check_http.c:1210 +#: plugins/check_http.c:1242 #, fuzzy, c-format msgid "%sheader '%s' not found on '%s://%s:%d%s', " msgstr "%schaîne non trouvée, " -#: plugins/check_http.c:1222 +#: plugins/check_http.c:1254 #, fuzzy, c-format msgid "%sstring '%s' not found on '%s://%s:%d%s', " msgstr "%schaîne non trouvée, " -#: plugins/check_http.c:1235 +#: plugins/check_http.c:1267 #, c-format msgid "%spattern not found, " msgstr "%sexpression non trouvée, " -#: plugins/check_http.c:1237 +#: plugins/check_http.c:1269 #, c-format msgid "%spattern found, " msgstr "%sexpression trouvée, " -#: plugins/check_http.c:1243 +#: plugins/check_http.c:1275 #, c-format msgid "%sExecute Error: %s, " msgstr "%sErreur d'exécution: %s, " -#: plugins/check_http.c:1259 +#: plugins/check_http.c:1291 #, c-format msgid "%spage size %d too large, " msgstr "%sla taille de la page est trop grande (%d), " -#: plugins/check_http.c:1262 +#: plugins/check_http.c:1294 #, c-format msgid "%spage size %d too small, " msgstr "%sla taille de la page est trop petite (%d), " -#: plugins/check_http.c:1275 +#: plugins/check_http.c:1307 #, fuzzy, c-format msgid "%s - %d bytes in %.3f second response time %s|%s %s %s %s %s %s %s" msgstr "%s - %d octets en %.3f secondes de temps de réponse %s|%s %s" -#: plugins/check_http.c:1287 +#: plugins/check_http.c:1319 #, c-format msgid "%s - %d bytes in %.3f second response time %s|%s %s" msgstr "%s - %d octets en %.3f secondes de temps de réponse %s|%s %s" -#: plugins/check_http.c:1325 +#: plugins/check_http.c:1360 msgid "HTTP UNKNOWN - Could not allocate addr\n" msgstr "HTTP INCONNU - Impossible d'allouer une adresse\n" -#: plugins/check_http.c:1330 plugins/check_http.c:1361 +#: plugins/check_http.c:1365 plugins/check_http.c:1396 msgid "HTTP UNKNOWN - Could not allocate URL\n" msgstr "HTTP INCONNU - Impossible d'allouer l'URL\n" -#: plugins/check_http.c:1339 +#: plugins/check_http.c:1374 #, c-format msgid "HTTP UNKNOWN - Could not find redirect location - %s%s\n" msgstr "" "HTTP INCONNU - Impossible de trouver l'endroit de la redirection - %s%s\n" -#: plugins/check_http.c:1354 +#: plugins/check_http.c:1389 #, c-format msgid "HTTP UNKNOWN - Empty redirect location%s\n" msgstr "HTTP INCONNU - endroit de redirection vide%s\n" -#: plugins/check_http.c:1404 +#: plugins/check_http.c:1439 #, c-format msgid "HTTP UNKNOWN - Could not parse redirect location - %s%s\n" msgstr "" "HTTP INCONNU - Impossible de définir l'endroit de la redirection - %s%s\n" -#: plugins/check_http.c:1414 +#: plugins/check_http.c:1449 #, c-format msgid "HTTP WARNING - maximum redirection depth %d exceeded - %s://%s:%d%s%s\n" msgstr "" "HTTP AVERTISSEMENT - le niveau maximum de redirection %d à été dépassé - " "%s://%s:%d%s%s\n" -#: plugins/check_http.c:1422 +#: plugins/check_http.c:1457 #, c-format msgid "HTTP WARNING - redirection creates an infinite loop - %s://%s:%d%s%s\n" msgstr "" "HTTP AVERTISSEMENT - la redirection crée une boucle infinie - %s://%s:%d%s" "%s\n" -#: plugins/check_http.c:1443 +#: plugins/check_http.c:1478 #, c-format msgid "HTTP UNKNOWN - Redirection to port above %d - %s://%s:%d%s%s\n" msgstr "HTTP INCONNU - Redirection à un port supérieur à %d - %s://%s:%d%s%s\n" -#: plugins/check_http.c:1451 +#: plugins/check_http.c:1486 #, c-format msgid "Redirection to %s://%s:%d%s\n" msgstr "Redirection vers %s://%s:%d%s\n" -#: plugins/check_http.c:1526 +#: plugins/check_http.c:1561 msgid "This plugin tests the HTTP service on the specified host. It can test" msgstr "" "Ce plugin teste le service HTTP sur l'hôte spécifié. Il peut tester les" -#: plugins/check_http.c:1527 +#: plugins/check_http.c:1562 msgid "normal (http) and secure (https) servers, follow redirects, search for" msgstr "" "serveurs normaux (http) et sécurisés (https), suivre les redirections, " "rechercher des" -#: plugins/check_http.c:1528 +#: plugins/check_http.c:1563 msgid "strings and regular expressions, check connection times, and report on" msgstr "" "chaînes de caractères et expressions rationnelles, vérifier le temps de " "réponse" -#: plugins/check_http.c:1529 +#: plugins/check_http.c:1564 msgid "certificate expiration times." msgstr "et rapporter la date d'expiration du certificat." -#: plugins/check_http.c:1535 +#: plugins/check_http.c:1570 #, c-format msgid "NOTE: One or both of -H and -I must be specified" msgstr "NOTE: les paramètres -H et -I peuvent être spécifiés" -#: plugins/check_http.c:1543 +#: plugins/check_http.c:1578 msgid "Host name argument for servers using host headers (virtual host)" msgstr "" -#: plugins/check_http.c:1544 +#: plugins/check_http.c:1579 msgid "Append a port to include it in the header (eg: example.com:5000)" msgstr "" -#: plugins/check_http.c:1546 +#: plugins/check_http.c:1581 msgid "" "IP address or name (use numeric address if possible to bypass DNS lookup)." msgstr "" -#: plugins/check_http.c:1548 +#: plugins/check_http.c:1583 msgid "Port number (default: " msgstr "Numéro du port (défaut: " -#: plugins/check_http.c:1555 +#: plugins/check_http.c:1590 msgid "" "Connect via SSL. Port defaults to 443. VERSION is optional, and prevents" msgstr "" -#: plugins/check_http.c:1556 +#: plugins/check_http.c:1591 msgid "auto-negotiation (2 = SSLv2, 3 = SSLv3, 1 = TLSv1, 1.1 = TLSv1.1," msgstr "" -#: plugins/check_http.c:1557 +#: plugins/check_http.c:1592 msgid "1.2 = TLSv1.2). With a '+' suffix, newer versions are also accepted." msgstr "" -#: plugins/check_http.c:1559 +#: plugins/check_http.c:1594 msgid "Enable SSL/TLS hostname extension support (SNI)" msgstr "" -#: plugins/check_http.c:1561 +#: plugins/check_http.c:1596 msgid "" "Minimum number of days a certificate has to be valid. Port defaults to 443" msgstr "" "Nombre de jours minimum pour que le certificat soit valide. Port par défaut " "443" -#: plugins/check_http.c:1562 +#: plugins/check_http.c:1597 msgid "(when this option is used the URL is not checked.)" msgstr "" -#: plugins/check_http.c:1564 +#: plugins/check_http.c:1599 msgid "Name of file that contains the client certificate (PEM format)" msgstr "" -#: plugins/check_http.c:1565 +#: plugins/check_http.c:1600 msgid "to be used in establishing the SSL session" msgstr "" -#: plugins/check_http.c:1567 +#: plugins/check_http.c:1602 msgid "Name of file containing the private key (PEM format)" msgstr "" -#: plugins/check_http.c:1568 +#: plugins/check_http.c:1603 msgid "matching the client certificate" msgstr "" -#: plugins/check_http.c:1572 +#: plugins/check_http.c:1607 msgid "Comma-delimited list of strings, at least one of them is expected in" msgstr "" "Liste the chaines de charactères séparées par des virgules, au moins une " "d'elles" -#: plugins/check_http.c:1573 +#: plugins/check_http.c:1608 msgid "the first (status) line of the server response (default: " msgstr "est attendue dans la première ligne de réponse du serveur (défaut: " -#: plugins/check_http.c:1575 +#: plugins/check_http.c:1610 msgid "" "If specified skips all other status line logic (ex: 3xx, 4xx, 5xx processing)" msgstr "" "Si spécifié, surpasse toute autre logique de status (ex: 3xx, 4xx, 5xx)" -#: plugins/check_http.c:1577 +#: plugins/check_http.c:1612 #, fuzzy msgid "String to expect in the response headers" msgstr "Chaîne de caractères à attendre en réponse" -#: plugins/check_http.c:1579 +#: plugins/check_http.c:1614 msgid "String to expect in the content" msgstr "Chaîne de caractère attendue dans le contenu" -#: plugins/check_http.c:1581 +#: plugins/check_http.c:1616 msgid "URL to GET or POST (default: /)" msgstr "URL pour le GET ou le POST (défaut: /)" -#: plugins/check_http.c:1583 +#: plugins/check_http.c:1618 msgid "URL encoded http POST data" msgstr "" -#: plugins/check_http.c:1585 +#: plugins/check_http.c:1620 msgid "Set HTTP method." msgstr "" -#: plugins/check_http.c:1587 +#: plugins/check_http.c:1622 msgid "Don't wait for document body: stop reading after headers." msgstr "" "Ne pas attendre pour le corps du document: arrêter de lire après les entêtes" -#: plugins/check_http.c:1588 +#: plugins/check_http.c:1623 msgid "(Note that this still does an HTTP GET or POST, not a HEAD.)" msgstr "(Veuillez noter qu'un HTTP GET ou POST est effectué, pas un HEAD.)" -#: plugins/check_http.c:1590 +#: plugins/check_http.c:1625 msgid "Warn if document is more than SECONDS old. the number can also be of" msgstr "" -#: plugins/check_http.c:1591 +#: plugins/check_http.c:1626 msgid "the form \"10m\" for minutes, \"10h\" for hours, or \"10d\" for days." msgstr "" -#: plugins/check_http.c:1593 +#: plugins/check_http.c:1628 msgid "specify Content-Type header media type when POSTing\n" msgstr "" -#: plugins/check_http.c:1596 +#: plugins/check_http.c:1631 msgid "Allow regex to span newlines (must precede -r or -R)" msgstr "" -#: plugins/check_http.c:1598 +#: plugins/check_http.c:1633 msgid "Search page for regex STRING" msgstr "" -#: plugins/check_http.c:1600 +#: plugins/check_http.c:1635 msgid "Search page for case-insensitive regex STRING" msgstr "" -#: plugins/check_http.c:1602 +#: plugins/check_http.c:1637 msgid "Return CRITICAL if found, OK if not\n" msgstr "" -#: plugins/check_http.c:1605 +#: plugins/check_http.c:1640 msgid "Username:password on sites with basic authentication" msgstr "" -#: plugins/check_http.c:1607 +#: plugins/check_http.c:1642 msgid "Username:password on proxy-servers with basic authentication" msgstr "" -#: plugins/check_http.c:1609 +#: plugins/check_http.c:1644 msgid "String to be sent in http header as \"User Agent\"" msgstr "" -#: plugins/check_http.c:1611 +#: plugins/check_http.c:1646 msgid "" "Any other tags to be sent in http header. Use multiple times for additional " "headers" msgstr "" -#: plugins/check_http.c:1613 +#: plugins/check_http.c:1648 msgid "Print additional performance data" msgstr "" -#: plugins/check_http.c:1615 +#: plugins/check_http.c:1650 +msgid "Print body content below status line" +msgstr "" + +#: plugins/check_http.c:1652 msgid "Wrap output in HTML link (obsoleted by urlize)" msgstr "" -#: plugins/check_http.c:1617 +#: plugins/check_http.c:1654 msgid "How to handle redirected pages. sticky is like follow but stick to the" msgstr "" -#: plugins/check_http.c:1618 +#: plugins/check_http.c:1655 msgid "specified IP address. stickyport also ensures port stays the same." msgstr "" -#: plugins/check_http.c:1620 +#: plugins/check_http.c:1657 msgid "Minimum page size required (bytes) : Maximum page size required (bytes)" msgstr "" -#: plugins/check_http.c:1630 +#: plugins/check_http.c:1667 msgid "This plugin will attempt to open an HTTP connection with the host." msgstr "Ce plugin va essayer d'ouvrir un connexion SMTP avec l'hôte." -#: plugins/check_http.c:1631 +#: plugins/check_http.c:1668 msgid "" "Successful connects return STATE_OK, refusals and timeouts return " "STATE_CRITICAL" msgstr "" -#: plugins/check_http.c:1632 +#: plugins/check_http.c:1669 msgid "" "other errors return STATE_UNKNOWN. Successful connects, but incorrect " -"reponse" +"response" msgstr "" -#: plugins/check_http.c:1633 +#: plugins/check_http.c:1670 msgid "" "messages from the host result in STATE_WARNING return values. If you are" msgstr "" -#: plugins/check_http.c:1634 +#: plugins/check_http.c:1671 msgid "" "checking a virtual server that uses 'host headers' you must supply the FQDN" msgstr "" -#: plugins/check_http.c:1635 +#: plugins/check_http.c:1672 msgid "(fully qualified domain name) as the [host_name] argument." msgstr "" -#: plugins/check_http.c:1639 +#: plugins/check_http.c:1676 msgid "This plugin can also check whether an SSL enabled web server is able to" msgstr "" -#: plugins/check_http.c:1640 +#: plugins/check_http.c:1677 msgid "serve content (optionally within a specified time) or whether the X509 " msgstr "" -#: plugins/check_http.c:1641 +#: plugins/check_http.c:1678 msgid "certificate is still valid for the specified number of days." msgstr "" -#: plugins/check_http.c:1643 +#: plugins/check_http.c:1680 #, fuzzy msgid "Please note that this plugin does not check if the presented server" msgstr "Ce plugin vérifie le service ntp sur l'hôte" -#: plugins/check_http.c:1644 +#: plugins/check_http.c:1681 msgid "certificate matches the hostname of the server, or if the certificate" msgstr "" -#: plugins/check_http.c:1645 +#: plugins/check_http.c:1682 msgid "has a valid chain of trust to one of the locally installed CAs." msgstr "" -#: plugins/check_http.c:1649 +#: plugins/check_http.c:1686 msgid "" "When the 'www.verisign.com' server returns its content within 5 seconds," msgstr "" -#: plugins/check_http.c:1650 plugins/check_http.c:1669 +#: plugins/check_http.c:1687 plugins/check_http.c:1706 msgid "" "a STATE_OK will be returned. When the server returns its content but exceeds" msgstr "" -#: plugins/check_http.c:1651 plugins/check_http.c:1670 +#: plugins/check_http.c:1688 plugins/check_http.c:1707 msgid "" "the 5-second threshold, a STATE_WARNING will be returned. When an error " "occurs," msgstr "" -#: plugins/check_http.c:1652 plugins/check_http.c:1671 +#: plugins/check_http.c:1689 msgid "a STATE_CRITICAL will be returned." msgstr "" -#: plugins/check_http.c:1655 +#: plugins/check_http.c:1692 msgid "" "When the certificate of 'www.verisign.com' is valid for more than 14 days," msgstr "" -#: plugins/check_http.c:1656 plugins/check_http.c:1662 +#: plugins/check_http.c:1693 plugins/check_http.c:1699 msgid "" "a STATE_OK is returned. When the certificate is still valid, but for less " "than" msgstr "" -#: plugins/check_http.c:1657 +#: plugins/check_http.c:1694 msgid "" "14 days, a STATE_WARNING is returned. A STATE_CRITICAL will be returned when" msgstr "" -#: plugins/check_http.c:1658 +#: plugins/check_http.c:1695 msgid "the certificate is expired." msgstr "le certificat est expiré." -#: plugins/check_http.c:1661 +#: plugins/check_http.c:1698 msgid "" "When the certificate of 'www.verisign.com' is valid for more than 30 days," msgstr "" -#: plugins/check_http.c:1663 +#: plugins/check_http.c:1700 msgid "30 days, but more than 14 days, a STATE_WARNING is returned." msgstr "" -#: plugins/check_http.c:1664 +#: plugins/check_http.c:1701 msgid "" "A STATE_CRITICAL will be returned when certificate expires in less than 14 " "days" msgstr "" -#: plugins/check_http.c:1667 +#: plugins/check_http.c:1704 msgid "" "check_http -I 192.168.100.35 -p 80 -u https://www.verisign.com/ -S -j " "CONNECT -H www.verisign.com " msgstr "" -#: plugins/check_http.c:1668 +#: plugins/check_http.c:1705 msgid "" "all these options are needed: -I -p -u -S" "(sl) -j CONNECT -H " msgstr "" +#: plugins/check_http.c:1708 +msgid "" +"a STATE_CRITICAL will be returned. By adding a colon to the method you can " +"set the method used" +msgstr "" + +#: plugins/check_http.c:1709 +msgid "inside the proxied connection: -j CONNECT:POST" +msgstr "" + #: plugins/check_ldap.c:142 #, c-format msgid "Could not connect to the server at port %i\n" @@ -1898,55 +1932,55 @@ msgstr "" msgid "The parameters --warn-entries and --crit-entries are optional." msgstr "" -#: plugins/check_load.c:87 +#: plugins/check_load.c:91 msgid "Warning threshold must be float or float triplet!\n" msgstr "Le seuil d'alerte doit être un nombre à virgule flottante!\n" -#: plugins/check_load.c:132 plugins/check_load.c:148 +#: plugins/check_load.c:136 plugins/check_load.c:152 #, c-format msgid "Error opening %s\n" msgstr "Erreur à l'ouverture de %s\n" -#: plugins/check_load.c:163 +#: plugins/check_load.c:167 #, fuzzy, c-format msgid "could not parse load from uptime %s: %s\n" msgstr "Lecture des arguments impossible\n" -#: plugins/check_load.c:169 +#: plugins/check_load.c:173 #, c-format msgid "Error code %d returned in %s\n" msgstr "Le code erreur %d à été retourné par %s\n" -#: plugins/check_load.c:184 +#: plugins/check_load.c:188 #, c-format msgid "Error in getloadavg()\n" msgstr "Erreur dans la fonction getloadavg()\n" -#: plugins/check_load.c:187 plugins/check_load.c:189 +#: plugins/check_load.c:191 plugins/check_load.c:193 #, c-format msgid "Error processing %s\n" msgstr "Erreur lors de l'utilisation de %s\n" -#: plugins/check_load.c:198 +#: plugins/check_load.c:202 #, c-format msgid "load average: %.2f, %.2f, %.2f" msgstr "Charge moyenne: %.2f, %.2f, %.2f" -#: plugins/check_load.c:291 +#: plugins/check_load.c:302 #, c-format msgid "Critical threshold for %d-minute load average is not specified\n" msgstr "" "Le seuil critique pour la charge système après %d minutes n'est pas " "spécifié\n" -#: plugins/check_load.c:293 +#: plugins/check_load.c:304 #, c-format msgid "Warning threshold for %d-minute load average is not specified\n" msgstr "" "Le seuil d'avertissement pour la charge système après %d minutes n'est pas " "spécifié\n" -#: plugins/check_load.c:295 +#: plugins/check_load.c:306 #, c-format msgid "" "Parameter inconsistency: %d-minute \"warning load\" is greater than " @@ -1955,28 +1989,46 @@ msgstr "" "Arguments Incorrects: %d-minute \"alerte charge système\" est plus grand que " "\"alerte critique charge système\"\n" -#: plugins/check_load.c:311 +#: plugins/check_load.c:322 #, c-format msgid "This plugin tests the current system load average." msgstr "Ce plugin teste la charge système actuelle." -#: plugins/check_load.c:321 +#: plugins/check_load.c:332 msgid "Exit with WARNING status if load average exceeds WLOADn" msgstr "" "Sortir avec un résultat AVERTISSEMENT si la charge moyenne dépasse WLOAD" -#: plugins/check_load.c:323 +#: plugins/check_load.c:334 msgid "Exit with CRITICAL status if load average exceed CLOADn" msgstr "Sortir avec un résultat CRITIQUE si la charge moyenne excède CLOAD" -#: plugins/check_load.c:324 +#: plugins/check_load.c:335 msgid "the load average format is the same used by \"uptime\" and \"w\"" msgstr "" -#: plugins/check_load.c:326 +#: plugins/check_load.c:337 msgid "Divide the load averages by the number of CPUs (when possible)" msgstr "" +#: plugins/check_load.c:339 +msgid "Number of processes to show when printing the top consuming processes." +msgstr "" + +#: plugins/check_load.c:340 +msgid "NUMBER_OF_PROCS=0 disables this feature. Default value is 0" +msgstr "" + +#: plugins/check_load.c:377 +#, c-format +msgid "'%s' exited with non-zero status.\n" +msgstr "" + +#: plugins/check_load.c:381 +#, c-format +msgid "some error occurred getting procs list.\n" +msgstr "" + #: plugins/check_mrtg.c:75 msgid "Could not parse arguments\n" msgstr "Lecture des arguments impossible\n" @@ -2268,108 +2320,108 @@ msgstr "erreur esclave lecture d'une ligne: %s\n" msgid "Slave running: %s" msgstr "L'esclave fonctionne: %s" -#: plugins/check_mysql.c:514 +#: plugins/check_mysql.c:517 msgid "This program tests connections to a MySQL server" msgstr "Ce plugin teste une connexion vers un serveur MySQL" -#: plugins/check_mysql.c:525 +#: plugins/check_mysql.c:528 msgid "Ignore authentication failure and check for mysql connectivity only" msgstr "" -#: plugins/check_mysql.c:528 +#: plugins/check_mysql.c:531 msgid "Use the specified socket (has no effect if -H is used)" msgstr "" -#: plugins/check_mysql.c:531 +#: plugins/check_mysql.c:534 msgid "Check database with indicated name" msgstr "" -#: plugins/check_mysql.c:533 +#: plugins/check_mysql.c:536 msgid "Read from the specified client options file" msgstr "" -#: plugins/check_mysql.c:535 +#: plugins/check_mysql.c:538 msgid "Use a client options group" msgstr "" -#: plugins/check_mysql.c:537 +#: plugins/check_mysql.c:540 msgid "Connect using the indicated username" msgstr "" -#: plugins/check_mysql.c:539 +#: plugins/check_mysql.c:542 msgid "Use the indicated password to authenticate the connection" msgstr "" -#: plugins/check_mysql.c:540 +#: plugins/check_mysql.c:543 msgid "IMPORTANT: THIS FORM OF AUTHENTICATION IS NOT SECURE!!!" msgstr "" -#: plugins/check_mysql.c:541 +#: plugins/check_mysql.c:544 msgid "Your clear-text password could be visible as a process table entry" msgstr "" -#: plugins/check_mysql.c:543 +#: plugins/check_mysql.c:546 msgid "Check if the slave thread is running properly." msgstr "" -#: plugins/check_mysql.c:545 +#: plugins/check_mysql.c:548 msgid "Exit with WARNING status if slave server is more than INTEGER seconds" msgstr "" "Sortir avec un résultat AVERTISSEMENT si le serveur esclave est plus de X " -#: plugins/check_mysql.c:546 plugins/check_mysql.c:549 +#: plugins/check_mysql.c:549 plugins/check_mysql.c:552 msgid "behind master" msgstr "secondes en retard sur le maître" -#: plugins/check_mysql.c:548 +#: plugins/check_mysql.c:551 msgid "Exit with CRITICAL status if slave server is more then INTEGER seconds" msgstr "Sortir avec un résultat CRITIQUE si le serveur esclave est plus de X " -#: plugins/check_mysql.c:551 +#: plugins/check_mysql.c:554 msgid "Use ssl encryptation" msgstr "" -#: plugins/check_mysql.c:553 +#: plugins/check_mysql.c:556 msgid "Path to CA signing the cert" msgstr "" -#: plugins/check_mysql.c:555 +#: plugins/check_mysql.c:558 msgid "Path to SSL certificate" msgstr "" -#: plugins/check_mysql.c:557 +#: plugins/check_mysql.c:560 msgid "Path to private SSL key" msgstr "" -#: plugins/check_mysql.c:559 +#: plugins/check_mysql.c:562 msgid "Path to CA directory" msgstr "" -#: plugins/check_mysql.c:561 +#: plugins/check_mysql.c:564 msgid "List of valid SSL ciphers" msgstr "" -#: plugins/check_mysql.c:565 +#: plugins/check_mysql.c:568 msgid "" "There are no required arguments. By default, the local database is checked" msgstr "" "Il n'y a pas d'arguments nécessaires. Par défaut la base de donnée locale " "est testée" -#: plugins/check_mysql.c:566 +#: plugins/check_mysql.c:569 msgid "" "using the default unix socket. You can force TCP on localhost by using an" msgstr "" -#: plugins/check_mysql.c:567 +#: plugins/check_mysql.c:570 msgid "IP address or FQDN ('localhost' will use the socket as well)." msgstr "" -#: plugins/check_mysql.c:571 +#: plugins/check_mysql.c:574 msgid "You must specify -p with an empty string to force an empty password," msgstr "" -#: plugins/check_mysql.c:572 +#: plugins/check_mysql.c:575 msgid "overriding any my.cnf settings." msgstr "" @@ -3606,220 +3658,220 @@ msgid "" "higher than the warning threshold value, EXCEPT with the uptime variable" msgstr "plus grand que le seuil d'alerte SAUF pour l'option uptime" -#: plugins/check_pgsql.c:222 +#: plugins/check_pgsql.c:223 #, c-format msgid "CRITICAL - no connection to '%s' (%s).\n" msgstr "CRITIQUE - pas de connexion à '%s' (%s).\n" -#: plugins/check_pgsql.c:250 +#: plugins/check_pgsql.c:251 #, fuzzy, c-format msgid " %s - database %s (%f sec.)|%s\n" msgstr " %s - base de données %s (%d sec.)|%s\n" -#: plugins/check_pgsql.c:317 plugins/check_time.c:277 plugins/check_time.c:289 +#: plugins/check_pgsql.c:318 plugins/check_time.c:277 plugins/check_time.c:289 #: plugins/check_users.c:228 msgid "Critical threshold must be a positive integer" msgstr "Le seuil critique doit être un entier positif" -#: plugins/check_pgsql.c:323 plugins/check_time.c:258 plugins/check_time.c:282 +#: plugins/check_pgsql.c:324 plugins/check_time.c:258 plugins/check_time.c:282 #: plugins/check_users.c:226 msgid "Warning threshold must be a positive integer" msgstr "Le seuil d'avertissement doit être un entier positif" -#: plugins/check_pgsql.c:347 +#: plugins/check_pgsql.c:348 msgid "Database name is not valid" msgstr "Le nom de la base de données est invalide" -#: plugins/check_pgsql.c:353 +#: plugins/check_pgsql.c:354 msgid "User name is not valid" msgstr "Le nom de l'utilisateur est invalide" -#: plugins/check_pgsql.c:504 +#: plugins/check_pgsql.c:505 #, c-format msgid "Test whether a PostgreSQL Database is accepting connections." msgstr "Teste si une base de données Postgresql accepte les connections." -#: plugins/check_pgsql.c:516 +#: plugins/check_pgsql.c:517 msgid "Database to check " msgstr "" -#: plugins/check_pgsql.c:517 +#: plugins/check_pgsql.c:518 #, fuzzy, c-format msgid "(default: %s)\n" msgstr "(Défaut: %d)\n" -#: plugins/check_pgsql.c:519 +#: plugins/check_pgsql.c:520 msgid "Login name of user" msgstr "Le nom d'un utilisateur" -#: plugins/check_pgsql.c:521 +#: plugins/check_pgsql.c:522 msgid "Password (BIG SECURITY ISSUE)" msgstr "" -#: plugins/check_pgsql.c:523 +#: plugins/check_pgsql.c:524 msgid "Connection parameters (keyword = value), see below" msgstr "" -#: plugins/check_pgsql.c:530 +#: plugins/check_pgsql.c:531 msgid "SQL query to run. Only first column in first row will be read" msgstr "" -#: plugins/check_pgsql.c:532 +#: plugins/check_pgsql.c:533 #, fuzzy msgid "SQL query value to result in warning status (double)" msgstr "Décalage résultant en un avertissement (secondes)" -#: plugins/check_pgsql.c:534 +#: plugins/check_pgsql.c:535 #, fuzzy msgid "SQL query value to result in critical status (double)" msgstr "Décalage résultant en un état critique (secondes)" -#: plugins/check_pgsql.c:539 +#: plugins/check_pgsql.c:540 msgid "All parameters are optional." msgstr "" -#: plugins/check_pgsql.c:540 +#: plugins/check_pgsql.c:541 msgid "" "This plugin tests a PostgreSQL DBMS to determine whether it is active and" msgstr "" -#: plugins/check_pgsql.c:541 -msgid "accepting queries. In its current operation, it simply connects to the" -msgstr "" - #: plugins/check_pgsql.c:542 -msgid "" -"specified database, and then disconnects. If no database is specified, it" +msgid "accepting queries. In its current operation, it simply connects to the" msgstr "" #: plugins/check_pgsql.c:543 msgid "" -"connects to the template1 database, which is present in every functioning" +"specified database, and then disconnects. If no database is specified, it" msgstr "" #: plugins/check_pgsql.c:544 +msgid "" +"connects to the template1 database, which is present in every functioning" +msgstr "" + +#: plugins/check_pgsql.c:545 msgid "PostgreSQL DBMS." msgstr "" -#: plugins/check_pgsql.c:546 +#: plugins/check_pgsql.c:547 msgid "If a query is specified using the -q option, it will be executed after" msgstr "" -#: plugins/check_pgsql.c:547 +#: plugins/check_pgsql.c:548 msgid "connecting to the server. The result from the query has to be numeric." msgstr "" -#: plugins/check_pgsql.c:548 +#: plugins/check_pgsql.c:549 msgid "" "Multiple SQL commands, separated by semicolon, are allowed but the result " msgstr "" -#: plugins/check_pgsql.c:549 +#: plugins/check_pgsql.c:550 msgid "of the last command is taken into account only. The value of the first" msgstr "" -#: plugins/check_pgsql.c:550 +#: plugins/check_pgsql.c:551 msgid "column in the first row is used as the check result." msgstr "" -#: plugins/check_pgsql.c:552 -msgid "" -"See the chapter \"Monitoring Database Activity\" of the PostgreSQL manual" -msgstr "" - #: plugins/check_pgsql.c:553 msgid "" -"for details about how to access internal statistics of the database server." +"See the chapter \"Monitoring Database Activity\" of the PostgreSQL manual" msgstr "" -#: plugins/check_pgsql.c:555 +#: plugins/check_pgsql.c:554 msgid "" -"For a list of available connection parameters which may be used with the -o" +"for details about how to access internal statistics of the database server." msgstr "" #: plugins/check_pgsql.c:556 msgid "" -"command line option, see the documentation for PQconnectdb() in the chapter" +"For a list of available connection parameters which may be used with the -o" msgstr "" #: plugins/check_pgsql.c:557 msgid "" -"\"libpq - C Library\" of the PostgreSQL manual. For example, this may be" +"command line option, see the documentation for PQconnectdb() in the chapter" msgstr "" #: plugins/check_pgsql.c:558 msgid "" -"used to specify a service name in pg_service.conf to be used for additional" +"\"libpq - C Library\" of the PostgreSQL manual. For example, this may be" msgstr "" #: plugins/check_pgsql.c:559 -msgid "connection parameters: -o 'service=' or to specify the SSL mode:" +msgid "" +"used to specify a service name in pg_service.conf to be used for additional" msgstr "" #: plugins/check_pgsql.c:560 +msgid "connection parameters: -o 'service=' or to specify the SSL mode:" +msgstr "" + +#: plugins/check_pgsql.c:561 msgid "-o 'sslmode=require'." msgstr "" -#: plugins/check_pgsql.c:562 +#: plugins/check_pgsql.c:563 msgid "" "The plugin will connect to a local postmaster if no host is specified. To" msgstr "" "Ce plugin va se connecter sur un postmaster local si aucun hôte n'est " "spécifié." -#: plugins/check_pgsql.c:563 +#: plugins/check_pgsql.c:564 msgid "" "connect to a remote host, be sure that the remote postmaster accepts TCP/IP" msgstr "" -#: plugins/check_pgsql.c:564 +#: plugins/check_pgsql.c:565 msgid "connections (start the postmaster with the -i option)." msgstr "" -#: plugins/check_pgsql.c:566 +#: plugins/check_pgsql.c:567 msgid "" "Typically, the monitoring user (unless the --logname option is used) should " "be" msgstr "" -#: plugins/check_pgsql.c:567 +#: plugins/check_pgsql.c:568 msgid "" "able to connect to the database without a password. The plugin can also send" msgstr "" -#: plugins/check_pgsql.c:568 -msgid "a password, but no effort is made to obsure or encrypt the password." +#: plugins/check_pgsql.c:569 +msgid "a password, but no effort is made to obscure or encrypt the password." msgstr "" -#: plugins/check_pgsql.c:601 +#: plugins/check_pgsql.c:602 #, c-format msgid "QUERY %s - %s: %s.\n" msgstr "" -#: plugins/check_pgsql.c:601 +#: plugins/check_pgsql.c:602 msgid "Error with query" msgstr "" -#: plugins/check_pgsql.c:607 +#: plugins/check_pgsql.c:608 #, fuzzy msgid "No rows returned" msgstr "Pas de données valides reçues" -#: plugins/check_pgsql.c:612 +#: plugins/check_pgsql.c:613 #, fuzzy msgid "No columns returned" msgstr "Pas de données valides reçues" -#: plugins/check_pgsql.c:618 +#: plugins/check_pgsql.c:619 #, fuzzy msgid "No data returned" msgstr "Pas de données valides reçues" -#: plugins/check_pgsql.c:627 +#: plugins/check_pgsql.c:628 msgid "Is not a numeric" msgstr "" -#: plugins/check_pgsql.c:644 +#: plugins/check_pgsql.c:645 #, fuzzy, c-format msgid "'%s' returned %f" msgstr ". %s renvoie %s" @@ -4247,18 +4299,30 @@ msgid "Critical if < 2 or > 1024 processes" msgstr "" #: plugins/check_procs.c:768 -msgid "Warning alert if > 10 processes with command arguments containing" +msgid "Critical if not at least 1 process with command sshd" msgstr "" -#: plugins/check_procs.c:769 -msgid "'/usr/local/bin/perl' and owned by root" +#: plugins/check_procs.c:770 +msgid "Warning if > 1024 processes with command name sshd." msgstr "" #: plugins/check_procs.c:771 -msgid "Alert if VSZ of any processes over 50K or 100K" +msgid "Critical if < 1 processes with command name sshd." msgstr "" #: plugins/check_procs.c:773 +msgid "Warning alert if > 10 processes with command arguments containing" +msgstr "" + +#: plugins/check_procs.c:774 +msgid "'/usr/local/bin/perl' and owned by root" +msgstr "" + +#: plugins/check_procs.c:776 +msgid "Alert if VSZ of any processes over 50K or 100K" +msgstr "" + +#: plugins/check_procs.c:778 #, c-format msgid "Alert if CPU of any processes over 10%% or 20%%" msgstr "" @@ -4343,7 +4407,7 @@ msgid "The user to authenticate" msgstr "" #: plugins/check_radius.c:363 -msgid "Password for autentication (SECURITY RISK)" +msgid "Password for authentication (SECURITY RISK)" msgstr "" #: plugins/check_radius.c:365 @@ -4429,7 +4493,7 @@ msgstr "Réponses REAL invalide reçue de l'hôte" msgid "Invalid REAL response received from host on port %d\n" msgstr "Réponses REAL invalide reçue de l'hôte sur le port %d\n" -#: plugins/check_real.c:185 plugins/check_tcp.c:310 +#: plugins/check_real.c:185 plugins/check_tcp.c:315 #, c-format msgid "No data received from host\n" msgstr "Pas de données reçues de l'hôte\n" @@ -4469,7 +4533,7 @@ msgstr "" msgid "This plugin will attempt to open an RTSP connection with the host." msgstr "Ce plugin va essayer d'ouvrir un connexion RTSP avec l'hôte." -#: plugins/check_real.c:439 plugins/check_smtp.c:836 +#: plugins/check_real.c:439 plugins/check_smtp.c:837 msgid "Successul connects return STATE_OK, refusals and timeouts return" msgstr "" @@ -4480,7 +4544,7 @@ msgstr "" #: plugins/check_real.c:441 msgid "" -"but incorrect reponse messages from the host result in STATE_WARNING return" +"but incorrect response messages from the host result in STATE_WARNING return" msgstr "" #: plugins/check_real.c:442 @@ -4535,168 +4599,168 @@ msgstr "Réponse SMTP reçue de l'hôte invalide: %s\n" msgid "Invalid SMTP response received from host on port %d: %s\n" msgstr "Réponse SMTP reçue de l'hôte sur le port %d invalide: %s\n" -#: plugins/check_smtp.c:307 plugins/check_snmp.c:833 +#: plugins/check_smtp.c:308 plugins/check_snmp.c:833 #, c-format msgid "Could Not Compile Regular Expression" msgstr "Impossible de compiler l'expression rationnelle" -#: plugins/check_smtp.c:316 +#: plugins/check_smtp.c:317 #, c-format msgid "SMTP %s - Invalid response '%s' to command '%s'\n" msgstr "SMTP %s - réponse invalide de '%s' à la commande '%s'\n" -#: plugins/check_smtp.c:320 plugins/check_snmp.c:520 +#: plugins/check_smtp.c:321 plugins/check_snmp.c:520 #, c-format msgid "Execute Error: %s\n" msgstr "Erreur d'exécution: %s\n" -#: plugins/check_smtp.c:334 +#: plugins/check_smtp.c:335 msgid "no authuser specified, " msgstr "Pas d'utilisateur pour l'authentification spécifié, " -#: plugins/check_smtp.c:339 +#: plugins/check_smtp.c:340 msgid "no authpass specified, " msgstr "pas de mot de passe spécifié, " -#: plugins/check_smtp.c:346 plugins/check_smtp.c:367 plugins/check_smtp.c:387 -#: plugins/check_smtp.c:692 +#: plugins/check_smtp.c:347 plugins/check_smtp.c:368 plugins/check_smtp.c:388 +#: plugins/check_smtp.c:693 #, c-format msgid "sent %s\n" msgstr "envoyé %s\n" -#: plugins/check_smtp.c:349 +#: plugins/check_smtp.c:350 msgid "recv() failed after AUTH LOGIN, " msgstr "recv() à échoué après AUTH LOGIN, " -#: plugins/check_smtp.c:354 plugins/check_smtp.c:375 plugins/check_smtp.c:395 -#: plugins/check_smtp.c:703 +#: plugins/check_smtp.c:355 plugins/check_smtp.c:376 plugins/check_smtp.c:396 +#: plugins/check_smtp.c:704 #, c-format msgid "received %s\n" msgstr "reçu %s\n" -#: plugins/check_smtp.c:358 +#: plugins/check_smtp.c:359 msgid "invalid response received after AUTH LOGIN, " msgstr "Réponse invalide reçue après AUTH LOGIN, " -#: plugins/check_smtp.c:371 +#: plugins/check_smtp.c:372 msgid "recv() failed after sending authuser, " msgstr "La commande recv() a échoué après authuser, " -#: plugins/check_smtp.c:379 +#: plugins/check_smtp.c:380 msgid "invalid response received after authuser, " msgstr "Réponse invalide reçue après authuser, " -#: plugins/check_smtp.c:391 +#: plugins/check_smtp.c:392 msgid "recv() failed after sending authpass, " msgstr "la commande recv() à échoué après authpass, " -#: plugins/check_smtp.c:399 +#: plugins/check_smtp.c:400 msgid "invalid response received after authpass, " msgstr "Réponse invalide reçue après authpass, " -#: plugins/check_smtp.c:406 +#: plugins/check_smtp.c:407 msgid "only authtype LOGIN is supported, " msgstr "seul la méthode d'authentification LOGIN est supportée, " -#: plugins/check_smtp.c:430 +#: plugins/check_smtp.c:431 #, c-format msgid "SMTP %s - %s%.3f sec. response time%s%s|%s\n" msgstr "SMTP %s - %s%.3f sec. de temps de réponse%s%s|%s\n" -#: plugins/check_smtp.c:540 plugins/check_smtp.c:552 +#: plugins/check_smtp.c:541 plugins/check_smtp.c:553 #, c-format msgid "Could not realloc() units [%d]\n" msgstr "Impossible de réallouer des unités [%d]\n" -#: plugins/check_smtp.c:560 +#: plugins/check_smtp.c:561 #, fuzzy msgid "Critical time must be a positive" msgstr "Le seuil critique doit être un entier positif" -#: plugins/check_smtp.c:568 +#: plugins/check_smtp.c:569 #, fuzzy msgid "Warning time must be a positive" msgstr "Le seuil d'avertissement doit être un entier positif" -#: plugins/check_smtp.c:611 +#: plugins/check_smtp.c:612 msgid "SSL support not available - install OpenSSL and recompile" msgstr "SSL n'est pas disponible - installer OpenSSL et recompilez" -#: plugins/check_smtp.c:683 plugins/check_smtp.c:688 +#: plugins/check_smtp.c:684 plugins/check_smtp.c:689 #, c-format msgid "Connection closed by server before sending QUIT command\n" msgstr "" -#: plugins/check_smtp.c:698 +#: plugins/check_smtp.c:699 #, c-format msgid "recv() failed after QUIT." msgstr "recv() à échoué après QUIT." -#: plugins/check_smtp.c:700 +#: plugins/check_smtp.c:701 #, c-format msgid "Connection reset by peer." msgstr "" -#: plugins/check_smtp.c:790 +#: plugins/check_smtp.c:791 msgid "This plugin will attempt to open an SMTP connection with the host." msgstr "Ce plugin va essayer d'ouvrir un connexion SMTP avec l'hôte." -#: plugins/check_smtp.c:804 +#: plugins/check_smtp.c:805 #, c-format msgid " String to expect in first line of server response (default: '%s')\n" msgstr "" " Texte attendu dans la première ligne de réponse du serveur (défaut: " "'%s')\n" -#: plugins/check_smtp.c:806 +#: plugins/check_smtp.c:807 msgid "SMTP command (may be used repeatedly)" msgstr "Commande SMTP (peut être utilisé plusieurs fois)" -#: plugins/check_smtp.c:808 +#: plugins/check_smtp.c:809 msgid "Expected response to command (may be used repeatedly)" msgstr "" -#: plugins/check_smtp.c:810 +#: plugins/check_smtp.c:811 msgid "FROM-address to include in MAIL command, required by Exchange 2000" msgstr "" -#: plugins/check_smtp.c:812 +#: plugins/check_smtp.c:813 msgid "FQDN used for HELO" msgstr "" -#: plugins/check_smtp.c:815 plugins/check_tcp.c:670 +#: plugins/check_smtp.c:816 plugins/check_tcp.c:689 msgid "Minimum number of days a certificate has to be valid." msgstr "Nombre de jours minimum pour que le certificat soit valide." -#: plugins/check_smtp.c:817 +#: plugins/check_smtp.c:818 msgid "Use STARTTLS for the connection." msgstr "" -#: plugins/check_smtp.c:821 +#: plugins/check_smtp.c:822 msgid "SMTP AUTH type to check (default none, only LOGIN supported)" msgstr "" -#: plugins/check_smtp.c:823 +#: plugins/check_smtp.c:824 msgid "SMTP AUTH username" msgstr "" -#: plugins/check_smtp.c:825 +#: plugins/check_smtp.c:826 msgid "SMTP AUTH password" msgstr "" -#: plugins/check_smtp.c:827 +#: plugins/check_smtp.c:828 msgid "Ignore failure when sending QUIT command to server" msgstr "" -#: plugins/check_smtp.c:837 +#: plugins/check_smtp.c:838 msgid "STATE_CRITICAL, other errors return STATE_UNKNOWN. Successful" msgstr "" -#: plugins/check_smtp.c:838 -msgid "connects, but incorrect reponse messages from the host result in" +#: plugins/check_smtp.c:839 +msgid "connects, but incorrect response messages from the host result in" msgstr "" -#: plugins/check_smtp.c:839 +#: plugins/check_smtp.c:840 msgid "STATE_WARNING return values." msgstr "" @@ -4916,90 +4980,97 @@ msgstr "" msgid "Separates output on multiple OID requests" msgstr "" -#: plugins/check_snmp.c:1211 -msgid "Number of retries to be used in the requests" +#: plugins/check_snmp.c:1210 +msgid "" +"NOTE the final timeout value is calculated using this formula: " +"timeout_interval * retries + 5" +msgstr "" + +#: plugins/check_snmp.c:1212 +#, fuzzy +msgid "Number of retries to be used in the requests, default: " msgstr "Le nombre d'essai pour les requêtes" -#: plugins/check_snmp.c:1214 +#: plugins/check_snmp.c:1215 msgid "Label performance data with OIDs instead of --label's" msgstr "" -#: plugins/check_snmp.c:1219 +#: plugins/check_snmp.c:1220 msgid "" "This plugin uses the 'snmpget' command included with the NET-SNMP package." msgstr "" -#: plugins/check_snmp.c:1220 +#: plugins/check_snmp.c:1221 msgid "" "if you don't have the package installed, you will need to download it from" msgstr "" "Si vous n'avez pas le programme installé, vous devrez le télécharger depuis" -#: plugins/check_snmp.c:1221 +#: plugins/check_snmp.c:1222 msgid "http://net-snmp.sourceforge.net before you can use this plugin." msgstr "http://net-snmp.sourceforge.net avant de pouvoir utiliser ce plugin." -#: plugins/check_snmp.c:1225 +#: plugins/check_snmp.c:1226 #, fuzzy msgid "" "- Multiple OIDs (and labels) may be indicated by a comma or space-delimited " msgstr "" "- Des OIDs multiples peuvent être séparées par des virgules ou des espaces" -#: plugins/check_snmp.c:1226 +#: plugins/check_snmp.c:1227 #, fuzzy msgid "list (lists with internal spaces must be quoted)." msgstr "(Les liste avec espaces doivent être entre guillemets). Max:" -#: plugins/check_snmp.c:1230 +#: plugins/check_snmp.c:1231 msgid "" "- When checking multiple OIDs, separate ranges by commas like '-w " "1:10,1:,:20'" msgstr "" -#: plugins/check_snmp.c:1231 +#: plugins/check_snmp.c:1232 msgid "- Note that only one string and one regex may be checked at present" msgstr "" -#: plugins/check_snmp.c:1232 +#: plugins/check_snmp.c:1233 msgid "" "- All evaluation methods other than PR, STR, and SUBSTR expect that the value" msgstr "" -#: plugins/check_snmp.c:1233 +#: plugins/check_snmp.c:1234 msgid "returned from the SNMP query is an unsigned integer." msgstr "" -#: plugins/check_snmp.c:1236 +#: plugins/check_snmp.c:1237 msgid "Rate Calculation:" msgstr "" -#: plugins/check_snmp.c:1237 +#: plugins/check_snmp.c:1238 msgid "In many places, SNMP returns counters that are only meaningful when" msgstr "" -#: plugins/check_snmp.c:1238 +#: plugins/check_snmp.c:1239 msgid "calculating the counter difference since the last check. check_snmp" msgstr "" -#: plugins/check_snmp.c:1239 +#: plugins/check_snmp.c:1240 msgid "saves the last state information in a file so that the rate per second" msgstr "" -#: plugins/check_snmp.c:1240 +#: plugins/check_snmp.c:1241 msgid "can be calculated. Use the --rate option to save state information." msgstr "" -#: plugins/check_snmp.c:1241 +#: plugins/check_snmp.c:1242 msgid "" "On the first run, there will be no prior state - this will return with OK." msgstr "" -#: plugins/check_snmp.c:1242 +#: plugins/check_snmp.c:1243 msgid "The state is uniquely determined by the arguments to the plugin, so" msgstr "" -#: plugins/check_snmp.c:1243 +#: plugins/check_snmp.c:1244 msgid "changing the arguments will create a new state file." msgstr "" @@ -5171,46 +5242,46 @@ msgstr "" "Sur AIX, si -a est spécifié, le plugin utilise lsps -a, sinon il utilise " "lsps -s." -#: plugins/check_tcp.c:205 +#: plugins/check_tcp.c:210 msgid "CRITICAL - Generic check_tcp called with unknown service\n" msgstr "" "CRITIQUE -check_tcp version générique utilisé avec un service inconnu\n" -#: plugins/check_tcp.c:229 +#: plugins/check_tcp.c:234 msgid "With UDP checks, a send/expect string must be specified." msgstr "" "Avec la surveillance UDP, une chaîne d'envoi et un chaîne de réponse doit " "être spécifiée." -#: plugins/check_tcp.c:435 +#: plugins/check_tcp.c:445 msgid "No arguments found" msgstr "Pas de paramètres" -#: plugins/check_tcp.c:538 +#: plugins/check_tcp.c:548 msgid "Maxbytes must be a positive integer" msgstr "Maxbytes doit être un entier positif" -#: plugins/check_tcp.c:556 +#: plugins/check_tcp.c:566 msgid "Refuse must be one of ok, warn, crit" msgstr "Refuse doit être parmis ok, warn, crit" -#: plugins/check_tcp.c:566 +#: plugins/check_tcp.c:576 msgid "Mismatch must be one of ok, warn, crit" msgstr "Mismatch doit être parmis ok, warn, crit" -#: plugins/check_tcp.c:572 +#: plugins/check_tcp.c:582 msgid "Delay must be a positive integer" msgstr "Delay doit être un entier positif" -#: plugins/check_tcp.c:618 +#: plugins/check_tcp.c:637 msgid "You must provide a server address" msgstr "Vous devez fournir une adresse serveur" -#: plugins/check_tcp.c:620 +#: plugins/check_tcp.c:639 msgid "Invalid hostname, address or socket" msgstr "Adresse/Nom/Socket invalide" -#: plugins/check_tcp.c:634 +#: plugins/check_tcp.c:653 #, c-format msgid "" "This plugin tests %s connections with the specified host (or unix socket).\n" @@ -5219,7 +5290,7 @@ msgstr "" "Ce plugin teste %s connections avec l'hôte spécifié (ou socket unix).\n" "\n" -#: plugins/check_tcp.c:647 +#: plugins/check_tcp.c:666 #, fuzzy msgid "" "Can use \\n, \\r, \\t or \\\\ in send or quit string. Must come before send " @@ -5228,62 +5299,67 @@ msgstr "" "Permet d'utiliser \\n, \\r, \\t ou \\ dans la chaîne de caractères send ou " "quit. Doit être placé avant ces dernières." -#: plugins/check_tcp.c:648 +#: plugins/check_tcp.c:667 msgid "Default: nothing added to send, \\r\\n added to end of quit" msgstr "" "Par défaut: Rien n'est ajouté à send, \\r\\n est ajouté à la fin de quit" -#: plugins/check_tcp.c:650 +#: plugins/check_tcp.c:669 msgid "String to send to the server" msgstr "Chaîne de caractères à envoyer au serveur" -#: plugins/check_tcp.c:652 +#: plugins/check_tcp.c:671 msgid "String to expect in server response" msgstr "Chaîne de caractères à attendre en réponse" -#: plugins/check_tcp.c:652 +#: plugins/check_tcp.c:671 msgid "(may be repeated)" msgstr "(peut être utilisé plusieurs fois)" -#: plugins/check_tcp.c:654 +#: plugins/check_tcp.c:673 msgid "All expect strings need to occur in server response. Default is any" msgstr "" "Toutes les chaînes attendus (expect) doivent être repérés dans la réponse. " "Par défaut, n'importe laquelle suffit." -#: plugins/check_tcp.c:656 +#: plugins/check_tcp.c:675 msgid "String to send server to initiate a clean close of the connection" msgstr "Chaîne de caractères à envoyer pour fermer gracieusement la connection" -#: plugins/check_tcp.c:658 +#: plugins/check_tcp.c:677 msgid "Accept TCP refusals with states ok, warn, crit (default: crit)" msgstr "" -#: plugins/check_tcp.c:660 +#: plugins/check_tcp.c:679 msgid "" "Accept expected string mismatches with states ok, warn, crit (default: warn)" msgstr "" -#: plugins/check_tcp.c:662 +#: plugins/check_tcp.c:681 msgid "Hide output from TCP socket" msgstr "Cacher la réponse provenant du socket TCP" -#: plugins/check_tcp.c:664 +#: plugins/check_tcp.c:683 msgid "Close connection once more than this number of bytes are received" msgstr "" -#: plugins/check_tcp.c:666 +#: plugins/check_tcp.c:685 msgid "Seconds to wait between sending string and polling for response" msgstr "" -#: plugins/check_tcp.c:671 +#: plugins/check_tcp.c:690 msgid "1st is #days for warning, 2nd is critical (if not specified - 0)." msgstr "" -#: plugins/check_tcp.c:673 +#: plugins/check_tcp.c:692 msgid "Use SSL for the connection." msgstr "" +#: plugins/check_tcp.c:694 +#, fuzzy +msgid "SSL server_name" +msgstr "Nom d'utilisateur SNMPv3" + #: plugins/check_time.c:102 #, c-format msgid "TIME UNKNOWN - could not connect to server %s, port %d\n" @@ -5696,11 +5772,11 @@ msgstr "" msgid "-i/--immediate: use \"smartctl --test=offline\"" msgstr "" -#: plugins/negate.c:98 +#: plugins/negate.c:96 msgid "No data returned from command\n" msgstr "Pas de données reçues de la commande\n" -#: plugins/negate.c:168 +#: plugins/negate.c:166 msgid "" "Timeout result must be a valid state name (OK, WARNING, CRITICAL, UNKNOWN) " "or integer (0-3)." @@ -5708,7 +5784,7 @@ msgstr "" "Le résultat de temps dépassé doit être un nom d'état valide (OK, WARNING, " "CRITICAL, UNKNOWN) ou un nombre entier (0-3)." -#: plugins/negate.c:172 +#: plugins/negate.c:170 msgid "" "Ok must be a valid state name (OK, WARNING, CRITICAL, UNKNOWN) or integer " "(0-3)." @@ -5716,7 +5792,7 @@ msgstr "" "Ok doit être un nom d'état valide (OK, WARNING, CRITICAL, UNKNOWN) ou un " "nombre entier (0-3)." -#: plugins/negate.c:178 +#: plugins/negate.c:176 msgid "" "Warning must be a valid state name (OK, WARNING, CRITICAL, UNKNOWN) or " "integer (0-3)." @@ -5724,7 +5800,7 @@ msgstr "" "Warning doit être un nom d'état valide (OK, WARNING, CRITICAL, UNKNOWN) ou " "un nombre entier (0-3)." -#: plugins/negate.c:183 +#: plugins/negate.c:181 msgid "" "Critical must be a valid state name (OK, WARNING, CRITICAL, UNKNOWN) or " "integer (0-3)." @@ -5732,7 +5808,7 @@ msgstr "" "Critical doit être un nom d'état valide (OK, WARNING, CRITICAL, UNKNOWN) ou " "un nombre entier (0-3)." -#: plugins/negate.c:188 +#: plugins/negate.c:186 msgid "" "Unknown must be a valid state name (OK, WARNING, CRITICAL, UNKNOWN) or " "integer (0-3)." @@ -5740,33 +5816,33 @@ msgstr "" "Unknown doit être un nom d'état valide (OK, WARNING, CRITICAL, UNKNOWN) ou " "un nombre entier (0-3)." -#: plugins/negate.c:215 +#: plugins/negate.c:213 msgid "Require path to command" msgstr "Chemin vers la commande requis" -#: plugins/negate.c:226 +#: plugins/negate.c:224 msgid "" "Negates the status of a plugin (returns OK for CRITICAL and vice-versa)." msgstr "" "Inverse le statut d'un plugin (retourne OK pour CRITIQUE et vice-versa)." -#: plugins/negate.c:227 +#: plugins/negate.c:225 msgid "Additional switches can be used to control which state becomes what." msgstr "" "Des options additionnelles peuvent être utilisées pour contrôler quel état " "devient quoi." -#: plugins/negate.c:236 +#: plugins/negate.c:234 msgid "Keep timeout longer than the plugin timeout to retain CRITICAL status." msgstr "" "Utilisez un délai de réponse plus long que celui du plugin afin de conserver " "les résultats CRITIQUE" -#: plugins/negate.c:238 +#: plugins/negate.c:236 msgid "Custom result on Negate timeouts; see below for STATUS definition\n" msgstr "" -#: plugins/negate.c:244 +#: plugins/negate.c:242 #, c-format msgid "" " STATUS can be 'OK', 'WARNING', 'CRITICAL' or 'UNKNOWN' without single\n" @@ -5774,63 +5850,63 @@ msgstr "" " STATUS peut être 'OK', 'WARNING', 'CRITICAL' ou 'UNKNOWN' sans les " "simple\n" -#: plugins/negate.c:245 +#: plugins/negate.c:243 #, c-format msgid "" " quotes. Numeric values are accepted. If nothing is specified, permutes\n" msgstr " quotes. Les valeurs numériques sont acceptées. Si rien n'est\n" -#: plugins/negate.c:246 +#: plugins/negate.c:244 #, c-format msgid " OK and CRITICAL.\n" msgstr " spécifié, inverse OK et CRITIQUE.\n" -#: plugins/negate.c:248 +#: plugins/negate.c:246 #, c-format msgid "" " Substitute output text as well. Will only substitute text in CAPITALS\n" msgstr "" -#: plugins/negate.c:253 +#: plugins/negate.c:251 msgid "Run check_ping and invert result. Must use full path to plugin" msgstr "" "Execute check_ping et inverse le résultat. Le chemin complet du plug-in doit " "être spécifié" -#: plugins/negate.c:255 +#: plugins/negate.c:253 msgid "This will return OK instead of WARNING and UNKNOWN instead of CRITICAL" msgstr "" "Ceci retournera OK au lieu de AVERTISSEMENT et INCONNU au lieu de CRITIQUE" -#: plugins/negate.c:258 +#: plugins/negate.c:256 msgid "" "This plugin is a wrapper to take the output of another plugin and invert it." msgstr "" "Ce plugin est un adaptateur qui prends l'état d'un autre plug-in et " "l'inverse." -#: plugins/negate.c:259 +#: plugins/negate.c:257 msgid "The full path of the plugin must be provided." msgstr "Le chemin complet du plugin doit être spécifié." -#: plugins/negate.c:260 +#: plugins/negate.c:258 msgid "If the wrapped plugin returns OK, the wrapper will return CRITICAL." msgstr "Si le plugin executé retourne OK, l'adaptateur retournera CRITIQUE." -#: plugins/negate.c:261 +#: plugins/negate.c:259 msgid "If the wrapped plugin returns CRITICAL, the wrapper will return OK." msgstr "Si le plugin executé retourne CRITIQUE, l'adaptateur retournera OK." -#: plugins/negate.c:262 +#: plugins/negate.c:260 msgid "Otherwise, the output state of the wrapped plugin is unchanged." msgstr "Autrement, l'état du plugin executé reste inchangé." -#: plugins/negate.c:264 +#: plugins/negate.c:262 msgid "" "Using timeout-result, it is possible to override the timeout behaviour or a" msgstr "" -#: plugins/negate.c:265 +#: plugins/negate.c:263 msgid "plugin by setting the negate timeout a bit lower." msgstr "" @@ -5864,38 +5940,34 @@ msgstr "Le chemin fourni est trop long pour un socket unix" msgid "Receive failed" msgstr "La réception à échoué" -#: plugins/netutils.c:342 plugins-root/check_dhcp.c:1313 +#: plugins/netutils.c:342 plugins-root/check_dhcp.c:1314 #, c-format msgid "Invalid hostname/address - %s" msgstr "Adresse/Nom invalide - %s" -#: plugins/popen.c:142 +#: plugins/popen.c:133 msgid "Could not malloc argv array in popen()" msgstr "Impossible de réallouer un tableau pour les paramètres dans popen()" -#: plugins/popen.c:152 +#: plugins/popen.c:143 msgid "CRITICAL - You need more args!!!" msgstr "CRITIQUE - Vous devez spécifier plus d'arguments!!!" -#: plugins/popen.c:209 +#: plugins/popen.c:201 msgid "Cannot catch SIGCHLD" msgstr "impossible d'obtenir le signal SIGCHLD" -#: plugins/popen.c:304 +#: plugins/popen.c:287 #, c-format msgid "CRITICAL - Plugin timed out after %d seconds\n" msgstr "CRITIQUE - Le plugin n'as pas répondu dans les %d secondes\n" -#: plugins/popen.c:307 +#: plugins/popen.c:290 msgid "CRITICAL - popen timeout received, but no child process" msgstr "" "CRITIQUE - le temps d'attente à été dépassé dans la fonction popen, mais il " "n'y a pas de processus fils" -#: plugins/popen.c:323 -msgid "sysconf error for _SC_OPEN_MAX" -msgstr "" - #: plugins/urlize.c:129 #, c-format msgid "" @@ -5954,25 +6026,24 @@ msgstr "" msgid "urlize http://example.com/ \"check_http -H example.com -r 'two words'\"" msgstr "" -#: plugins/utils.c:172 -#, c-format -msgid "%s - Plugin timed out after %d seconds\n" -msgstr "%s - Le plugin n'as pas répondu dans les %d secondes\n" - -#: plugins/utils.c:467 +#: plugins/utils.c:437 msgid "failed realloc in strpcpy\n" msgstr "La fonction realloc à échoué dans strpcpy\n" -#: plugins/utils.c:509 +#: plugins/utils.c:479 msgid "failed malloc in strscat\n" msgstr "La fonction malloc à échoué dans strscat\n" -#: plugins/utils.c:529 +#: plugins/utils.c:499 #, fuzzy msgid "failed malloc in xvasprintf\n" msgstr "La fonction malloc à échoué dans strscat\n" -#: plugins/utils.h:125 +#: plugins/utils.c:693 +msgid "sysconf error for _SC_OPEN_MAX\n" +msgstr "" + +#: plugins/utils.h:118 #, c-format msgid "" " %s (-h | --help) for detailed help\n" @@ -5981,7 +6052,7 @@ msgstr "" " %s (-h | --help) pour l'aide détaillée\n" " %s (-V | --version) pour les informations relative à la version\n" -#: plugins/utils.h:129 +#: plugins/utils.h:122 msgid "" "\n" "Options:\n" @@ -5997,7 +6068,7 @@ msgstr "" " -V, --version\n" " Afficher les informations relative à la version\n" -#: plugins/utils.h:136 +#: plugins/utils.h:129 #, c-format msgid "" " -H, --hostname=ADDRESS\n" @@ -6010,7 +6081,7 @@ msgstr "" " -%c, --port=INTEGER\n" " Numéro de port (défaut: %s)\n" -#: plugins/utils.h:142 +#: plugins/utils.h:135 msgid "" " -4, --use-ipv4\n" " Use IPv4 connection\n" @@ -6022,7 +6093,7 @@ msgstr "" " -6, --use-ipv6\n" " Utiliser une connection IPv6\n" -#: plugins/utils.h:148 +#: plugins/utils.h:141 #, fuzzy msgid "" " -v, --verbose\n" @@ -6033,7 +6104,7 @@ msgstr "" " Affiche les informations de déboguage en ligne de commande (Nagios peut " "tronquer la sortie)\n" -#: plugins/utils.h:153 +#: plugins/utils.h:146 msgid "" " -w, --warning=DOUBLE\n" " Response time to result in warning status (seconds)\n" @@ -6045,7 +6116,7 @@ msgstr "" " -c, --critical=DOUBLE\n" " Temps de réponse résultant en un état critique (secondes)\n" -#: plugins/utils.h:159 +#: plugins/utils.h:152 msgid "" " -w, --warning=RANGE\n" " Warning range (format: start:end). Alert if outside this range\n" @@ -6058,7 +6129,7 @@ msgstr "" " -c, --critical=RANGE\n" " Seuil critique\n" -#: plugins/utils.h:165 +#: plugins/utils.h:158 #, c-format msgid "" " -t, --timeout=INTEGER\n" @@ -6067,7 +6138,7 @@ msgstr "" " -t, --timeout=INTEGER\n" " Délais de connection en secondes (défaut: %d)\n" -#: plugins/utils.h:169 +#: plugins/utils.h:162 #, fuzzy, c-format msgid "" " -t, --timeout=INTEGER\n" @@ -6076,7 +6147,7 @@ msgstr "" " -t, --timeout=INTEGER\n" " Délais de connection en secondes (défaut: %d)\n" -#: plugins/utils.h:174 +#: plugins/utils.h:167 #, fuzzy msgid "" " --extra-opts=[section][@file]\n" @@ -6089,7 +6160,7 @@ msgstr "" " https://www.monitoring-plugins.org/doc/extra-opts.html\n" " pour les instructions et examples.\n" -#: plugins/utils.h:183 +#: plugins/utils.h:176 #, fuzzy msgid "" " See:\n" @@ -6101,7 +6172,7 @@ msgstr "" "html#THRESHOLDFORMAT\n" " pour le format et examples des seuils (THRESHOLD).\n" -#: plugins/utils.h:188 +#: plugins/utils.h:181 #, fuzzy msgid "" "\n" @@ -6117,7 +6188,7 @@ msgstr "" "améliorations, envoyez un email à devel@monitoring-plugins.org\n" "\n" -#: plugins/utils.h:193 +#: plugins/utils.h:186 #, fuzzy msgid "" "\n" @@ -6137,19 +6208,19 @@ msgid "Error: Could not get hardware address of interface '%s'\n" msgstr "" "Erreur: Impossible d'obtenir l'adresse matérielle pour l'interface '%s'\n" -#: plugins-root/check_dhcp.c:339 +#: plugins-root/check_dhcp.c:340 #, c-format msgid "Error: if_nametoindex error - %s.\n" msgstr "Erreur: if_nametoindex erreur - %s.\n" -#: plugins-root/check_dhcp.c:344 +#: plugins-root/check_dhcp.c:345 #, c-format msgid "Error: Couldn't get hardware address from %s. sysctl 1 error - %s.\n" msgstr "" "Erreur: Impossible d'obtenir l'adresse matérielle depuis %s. erreur sysctl 1 " "- %s.\n" -#: plugins-root/check_dhcp.c:349 +#: plugins-root/check_dhcp.c:350 #, c-format msgid "" "Error: Couldn't get hardware address from interface %s. malloc error - %s.\n" @@ -6157,14 +6228,14 @@ msgstr "" "Erreur: Impossible d'obtenir l'adresse matérielle depuis l'interface %s\n" " erreur malloc - %s.\n" -#: plugins-root/check_dhcp.c:354 +#: plugins-root/check_dhcp.c:355 #, c-format msgid "Error: Couldn't get hardware address from %s. sysctl 2 error - %s.\n" msgstr "" "Erreur: Impossible d'obtenir l'adresse matérielle depuis %s erreur sysctl 2 " "- %s.\n" -#: plugins-root/check_dhcp.c:385 +#: plugins-root/check_dhcp.c:386 #, c-format msgid "" "Error: can't find unit number in interface_name (%s) - expecting TypeNumber " @@ -6173,7 +6244,7 @@ msgstr "" "Erreur: impossible de trouver le numéro dans le nom de l'interface (%s).\n" "J'attendais le nom suivi du type ex lnc0.\n" -#: plugins-root/check_dhcp.c:390 plugins-root/check_dhcp.c:402 +#: plugins-root/check_dhcp.c:391 plugins-root/check_dhcp.c:403 #, c-format msgid "" "Error: can't read MAC address from DLPI streams interface for device %s unit " @@ -6182,7 +6253,7 @@ msgstr "" "Erreur: impossible de lire l'adresse MAC depuis l'interface DLPI pour le \n" "périphérique %s numéro %d.\n" -#: plugins-root/check_dhcp.c:408 +#: plugins-root/check_dhcp.c:409 #, c-format msgid "" "Error: can't get MAC address for this architecture. Use the --mac option.\n" @@ -6190,47 +6261,47 @@ msgstr "" "Erreur: impossible d'obtenir l'adresse MAC sur cette architecture. Utilisez " "l'option --mac.\n" -#: plugins-root/check_dhcp.c:427 +#: plugins-root/check_dhcp.c:428 #, c-format msgid "Error: Cannot determine IP address of interface %s\n" msgstr "Erreur: Impossible d'obtenir l'adresse IP de l'interface %s\n" -#: plugins-root/check_dhcp.c:435 +#: plugins-root/check_dhcp.c:436 #, c-format msgid "Error: Cannot get interface IP address on this platform.\n" msgstr "Erreur: Impossible d'obtenir l'adresse IP sur cette architecture.\n" -#: plugins-root/check_dhcp.c:440 +#: plugins-root/check_dhcp.c:441 #, c-format msgid "Pretending to be relay client %s\n" msgstr "" -#: plugins-root/check_dhcp.c:524 +#: plugins-root/check_dhcp.c:525 #, c-format msgid "DHCPDISCOVER to %s port %d\n" msgstr "DHCPDISCOVER vers %s port %d\n" -#: plugins-root/check_dhcp.c:576 +#: plugins-root/check_dhcp.c:577 #, c-format msgid "Result=ERROR\n" msgstr "Résultat=ERREUR\n" -#: plugins-root/check_dhcp.c:582 +#: plugins-root/check_dhcp.c:583 #, c-format msgid "Result=OK\n" msgstr "Résultat=OK\n" -#: plugins-root/check_dhcp.c:592 +#: plugins-root/check_dhcp.c:593 #, c-format msgid "DHCPOFFER from IP address %s" msgstr "DHCPOFFER depuis l'adresse IP %s" -#: plugins-root/check_dhcp.c:593 +#: plugins-root/check_dhcp.c:594 #, c-format msgid " via %s\n" msgstr " depuis %s\n" -#: plugins-root/check_dhcp.c:600 +#: plugins-root/check_dhcp.c:601 #, c-format msgid "" "DHCPOFFER XID (%u) did not match DHCPDISCOVER XID (%u) - ignoring packet\n" @@ -6238,67 +6309,67 @@ msgstr "" "DHCPOFFER XID (%u) ne correspond pas au DHCPDISCOVER XID (%u) - paquet " "ignoré\n" -#: plugins-root/check_dhcp.c:622 +#: plugins-root/check_dhcp.c:623 #, c-format msgid "DHCPOFFER hardware address did not match our own - ignoring packet\n" msgstr "" "l'adresse matérielle du DHCPOFFER ne correspond pas à la notre paquet " "ignoré\n" -#: plugins-root/check_dhcp.c:640 +#: plugins-root/check_dhcp.c:641 #, c-format msgid "Total responses seen on the wire: %d\n" msgstr "Nombre total de réponses vues: %d\n" -#: plugins-root/check_dhcp.c:641 +#: plugins-root/check_dhcp.c:642 #, c-format msgid "Valid responses for this machine: %d\n" msgstr "Nombre de réponse valides pour cette machine: %d\n" -#: plugins-root/check_dhcp.c:656 +#: plugins-root/check_dhcp.c:657 #, c-format msgid "send_dhcp_packet result: %d\n" msgstr "résultat de send_dchp_packet: %d\n" -#: plugins-root/check_dhcp.c:689 +#: plugins-root/check_dhcp.c:690 #, c-format msgid "No (more) data received (nfound: %d)\n" msgstr "Plus de données reçues (nfound: %d)\n" -#: plugins-root/check_dhcp.c:702 +#: plugins-root/check_dhcp.c:703 #, c-format msgid "recvfrom() failed, " msgstr "recvfrom() a échoué, " -#: plugins-root/check_dhcp.c:709 +#: plugins-root/check_dhcp.c:710 #, c-format msgid "receive_dhcp_packet() result: %d\n" msgstr "résultat de receive_dchp_packet(): %d\n" -#: plugins-root/check_dhcp.c:710 +#: plugins-root/check_dhcp.c:711 #, c-format msgid "receive_dhcp_packet() source: %s\n" msgstr "source de receive_dchp_packet(): %s\n" -#: plugins-root/check_dhcp.c:740 +#: plugins-root/check_dhcp.c:741 #, c-format msgid "Error: Could not create socket!\n" msgstr "Erreur: Impossible de créer un socket!\n" -#: plugins-root/check_dhcp.c:750 +#: plugins-root/check_dhcp.c:751 #, c-format msgid "Error: Could not set reuse address option on DHCP socket!\n" msgstr "" "Erreur: Impossible de configurer l'option de réutilisation de l'adresse sur\n" "le socket DHCP!\n" -#: plugins-root/check_dhcp.c:756 +#: plugins-root/check_dhcp.c:757 #, c-format msgid "Error: Could not set broadcast option on DHCP socket!\n" msgstr "" "Erreur: Impossible de configurer l'option broadcast sur le socket DHCP!\n" -#: plugins-root/check_dhcp.c:765 +#: plugins-root/check_dhcp.c:766 #, c-format msgid "" "Error: Could not bind socket to interface %s. Check your privileges...\n" @@ -6306,7 +6377,7 @@ msgstr "" "Erreur: Impossible de connecter le socket à l'interface %s.\n" "Vérifiez vos droits...\n" -#: plugins-root/check_dhcp.c:776 +#: plugins-root/check_dhcp.c:777 #, c-format msgid "" "Error: Could not bind to DHCP socket (port %d)! Check your privileges...\n" @@ -6314,129 +6385,129 @@ msgstr "" "Erreur: Impossible de se connecter au socket (port %d)! Vérifiez vos " "droits..\n" -#: plugins-root/check_dhcp.c:810 +#: plugins-root/check_dhcp.c:811 #, c-format msgid "Requested server address: %s\n" msgstr "Adresse serveur demandée: %s\n" -#: plugins-root/check_dhcp.c:872 +#: plugins-root/check_dhcp.c:873 #, c-format msgid "Lease Time: Infinite\n" msgstr "Durée du Bail: Infini\n" -#: plugins-root/check_dhcp.c:874 +#: plugins-root/check_dhcp.c:875 #, c-format msgid "Lease Time: %lu seconds\n" msgstr "Durée du Bail: %lu secondes\n" -#: plugins-root/check_dhcp.c:876 +#: plugins-root/check_dhcp.c:877 #, c-format msgid "Renewal Time: Infinite\n" msgstr "Renouvellement du bail: Infini\n" -#: plugins-root/check_dhcp.c:878 +#: plugins-root/check_dhcp.c:879 #, c-format msgid "Renewal Time: %lu seconds\n" msgstr "Durée du renouvellement = %lu secondes\n" -#: plugins-root/check_dhcp.c:880 +#: plugins-root/check_dhcp.c:881 #, c-format msgid "Rebinding Time: Infinite\n" msgstr "Délai de nouvelle demande: Infini\n" -#: plugins-root/check_dhcp.c:881 +#: plugins-root/check_dhcp.c:882 #, c-format msgid "Rebinding Time: %lu seconds\n" msgstr "Délai de nouvelle demande: %lu secondes\n" -#: plugins-root/check_dhcp.c:909 +#: plugins-root/check_dhcp.c:910 #, c-format msgid "Added offer from server @ %s" msgstr "Rajouté offre du serveur @ %s" -#: plugins-root/check_dhcp.c:910 +#: plugins-root/check_dhcp.c:911 #, c-format msgid " of IP address %s\n" msgstr "de l'adresse IP %s\n" -#: plugins-root/check_dhcp.c:977 +#: plugins-root/check_dhcp.c:978 #, c-format msgid "DHCP Server Match: Offerer=%s" msgstr "Correspondance du serveur DHCP: Offrant=%s" -#: plugins-root/check_dhcp.c:978 +#: plugins-root/check_dhcp.c:979 #, c-format msgid " Requested=%s" msgstr " Demandé=%s" -#: plugins-root/check_dhcp.c:980 +#: plugins-root/check_dhcp.c:981 #, c-format msgid " (duplicate)" msgstr "" -#: plugins-root/check_dhcp.c:981 +#: plugins-root/check_dhcp.c:982 #, c-format msgid "\n" msgstr "" -#: plugins-root/check_dhcp.c:1029 +#: plugins-root/check_dhcp.c:1030 #, c-format msgid "No DHCPOFFERs were received.\n" msgstr "Pas de DHCPOFFERs reçus.\n" -#: plugins-root/check_dhcp.c:1033 +#: plugins-root/check_dhcp.c:1034 #, c-format msgid "Received %d DHCPOFFER(s)" msgstr "Reçu %d DHCPOFFER(s)" -#: plugins-root/check_dhcp.c:1036 +#: plugins-root/check_dhcp.c:1037 #, c-format msgid ", %s%d of %d requested servers responded" msgstr ", %s%d de %d serveurs ont répondus" -#: plugins-root/check_dhcp.c:1039 +#: plugins-root/check_dhcp.c:1040 #, c-format msgid ", requested address (%s) was %soffered" msgstr ", l'adresse demandée (%s) %s été offerte" -#: plugins-root/check_dhcp.c:1039 +#: plugins-root/check_dhcp.c:1040 msgid "not " msgstr "n'as pas" -#: plugins-root/check_dhcp.c:1041 +#: plugins-root/check_dhcp.c:1042 #, c-format msgid ", max lease time = " msgstr ", bail maximum = " -#: plugins-root/check_dhcp.c:1043 +#: plugins-root/check_dhcp.c:1044 #, c-format msgid "Infinity" msgstr "Infini" -#: plugins-root/check_dhcp.c:1163 +#: plugins-root/check_dhcp.c:1164 msgid "Got unexpected non-option argument" msgstr "" -#: plugins-root/check_dhcp.c:1205 +#: plugins-root/check_dhcp.c:1206 #, c-format msgid "Error: DLPI stream API failed to get MAC in check_ctrl: %s.\n" msgstr "" "Erreur: Impossible d'obtenir la MAC par l'API DLPI dans check_ctrl: %s.\n" -#: plugins-root/check_dhcp.c:1217 +#: plugins-root/check_dhcp.c:1218 #, c-format msgid "Error: DLPI stream API failed to get MAC in put_ctrl/putmsg(): %s.\n" msgstr "" "Erreur: Impossible d'obtenir la MAC par l'API DLPI dans put_ctrl/putmsg(): " "%s.\n" -#: plugins-root/check_dhcp.c:1230 +#: plugins-root/check_dhcp.c:1231 #, c-format msgid "Error: DLPI stream API failed to get MAC in put_both/putmsg().\n" msgstr "" "Erreur: Impossible d'obtenir la MAC par l'API DLPI dans put_both/putmsg().\n" -#: plugins-root/check_dhcp.c:1242 +#: plugins-root/check_dhcp.c:1243 #, c-format msgid "" "Error: DLPI stream API failed to get MAC in dl_attach_req/open(%s..): %s.\n" @@ -6444,134 +6515,154 @@ msgstr "" "Erreur: Impossible d'obtenir la MAC par l'API DLPI dans dl_attach_req/open" "(%s..): %s.\n" -#: plugins-root/check_dhcp.c:1266 +#: plugins-root/check_dhcp.c:1267 #, c-format msgid "Error: DLPI stream API failed to get MAC in dl_bind/check_ctrl(): %s.\n" msgstr "" "Erreur: Impossible d'obtenir la MAC par l'API DLPI dans dl_bind/check_ctrl" "(): %s.\n" -#: plugins-root/check_dhcp.c:1345 +#: plugins-root/check_dhcp.c:1346 #, c-format msgid "Hardware address: " msgstr "Adresse matérielle: " -#: plugins-root/check_dhcp.c:1361 +#: plugins-root/check_dhcp.c:1362 msgid "This plugin tests the availability of DHCP servers on a network." msgstr "Ce plugin teste la disponibilité de serveurs DHCP dans un réseau." -#: plugins-root/check_dhcp.c:1373 +#: plugins-root/check_dhcp.c:1374 msgid "IP address of DHCP server that we must hear from" msgstr "" -#: plugins-root/check_dhcp.c:1375 +#: plugins-root/check_dhcp.c:1376 msgid "IP address that should be offered by at least one DHCP server" msgstr "" -#: plugins-root/check_dhcp.c:1377 +#: plugins-root/check_dhcp.c:1378 msgid "Seconds to wait for DHCPOFFER before timeout occurs" msgstr "" -#: plugins-root/check_dhcp.c:1379 +#: plugins-root/check_dhcp.c:1380 msgid "Interface to to use for listening (i.e. eth0)" msgstr "" -#: plugins-root/check_dhcp.c:1381 +#: plugins-root/check_dhcp.c:1382 msgid "MAC address to use in the DHCP request" msgstr "" -#: plugins-root/check_dhcp.c:1383 +#: plugins-root/check_dhcp.c:1384 msgid "Unicast testing: mimic a DHCP relay, requires -s" msgstr "" -#: plugins-root/check_icmp.c:1349 +#: plugins-root/check_icmp.c:1554 msgid "specify a target" msgstr "" -#: plugins-root/check_icmp.c:1351 +#: plugins-root/check_icmp.c:1556 +msgid "Use IPv4 (default) or IPv6 to communicate with the targets" +msgstr "" + +#: plugins-root/check_icmp.c:1558 msgid "warning threshold (currently " msgstr "Valeurs pour le seuil d'avertissement (actuellement " -#: plugins-root/check_icmp.c:1354 +#: plugins-root/check_icmp.c:1561 msgid "critical threshold (currently " msgstr "Valeurs pour le seuil critique (actuellement " -#: plugins-root/check_icmp.c:1357 +#: plugins-root/check_icmp.c:1564 msgid "specify a source IP address or device name" msgstr "spécifiez une adresse ou un nom d'hôte" -#: plugins-root/check_icmp.c:1359 +#: plugins-root/check_icmp.c:1566 msgid "number of packets to send (currently " msgstr "nombre de paquets à envoyer (actuellement " -#: plugins-root/check_icmp.c:1362 +#: plugins-root/check_icmp.c:1569 msgid "max packet interval (currently " msgstr "" -#: plugins-root/check_icmp.c:1365 +#: plugins-root/check_icmp.c:1572 msgid "max target interval (currently " msgstr "" -#: plugins-root/check_icmp.c:1368 +#: plugins-root/check_icmp.c:1575 msgid "number of alive hosts required for success" msgstr "nombre d'hôtes vivants requis pour réussite" -#: plugins-root/check_icmp.c:1371 +#: plugins-root/check_icmp.c:1578 msgid "TTL on outgoing packets (currently " msgstr "" -#: plugins-root/check_icmp.c:1374 +#: plugins-root/check_icmp.c:1581 msgid "timeout value (seconds, currently " msgstr "" -#: plugins-root/check_icmp.c:1377 +#: plugins-root/check_icmp.c:1584 msgid "Number of icmp data bytes to send" msgstr "Nombre de paquets ICMP à envoyer" -#: plugins-root/check_icmp.c:1378 +#: plugins-root/check_icmp.c:1585 msgid "Packet size will be data bytes + icmp header (currently" msgstr "" -#: plugins-root/check_icmp.c:1380 +#: plugins-root/check_icmp.c:1587 msgid "verbose" msgstr "" -#: plugins-root/check_icmp.c:1384 +#: plugins-root/check_icmp.c:1591 msgid "The -H switch is optional. Naming a host (or several) to check is not." msgstr "" -#: plugins-root/check_icmp.c:1386 +#: plugins-root/check_icmp.c:1593 msgid "" "Threshold format for -w and -c is 200.25,60% for 200.25 msec RTA and 60%" msgstr "" -#: plugins-root/check_icmp.c:1387 +#: plugins-root/check_icmp.c:1594 msgid "packet loss. The default values should work well for most users." msgstr "" -#: plugins-root/check_icmp.c:1388 +#: plugins-root/check_icmp.c:1595 msgid "" "You can specify different RTA factors using the standardized abbreviations" msgstr "" -#: plugins-root/check_icmp.c:1389 +#: plugins-root/check_icmp.c:1596 msgid "" "us (microseconds), ms (milliseconds, default) or just plain s for seconds." msgstr "" -#: plugins-root/check_icmp.c:1395 +#: plugins-root/check_icmp.c:1602 msgid "The -v switch can be specified several times for increased verbosity." msgstr "" #~ msgid "Path or partition (may be repeated)" #~ msgstr "Répertoire ou partition (peut être utilisé plusieurs fois)" +#~ msgid "" +#~ "value match). If multiple addresses are returned at once, you have to " +#~ "match" +#~ msgstr "" +#~ "valeur correspond). Si plusieurs adresses sont retournées en même temps," + +#~ msgid "" +#~ "the whole string of addresses separated with commas (sorted " +#~ "alphabetically)." +#~ msgstr "" +#~ "vous devrez toutes les inscrire séparées pas des virgules (en ordre " +#~ "alphabétique)" + #~ msgid "No specific parameters. No warning or critical threshold" #~ msgstr "Pas d'argument spécifique. Pas de seuil d'avertissement ou critique" #~ msgid "Can't find local IP for NAS-IP-Address" #~ msgstr "Impossible de trouver une addresse IP locale pour le NAS-IP-Address" +#~ msgid "%s - Plugin timed out after %d seconds\n" +#~ msgstr "%s - Le plugin n'as pas répondu dans les %d secondes\n" + #~ msgid "Critical threshold must be integer" #~ msgstr "le seuil critique doit être un entier positif" diff --git a/po/monitoring-plugins.pot b/po/monitoring-plugins.pot index 60eb275..de8eacb 100644 --- a/po/monitoring-plugins.pot +++ b/po/monitoring-plugins.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: devel@monitoring-plugins.org\n" -"POT-Creation-Date: 2016-11-29 09:49+0100\n" +"POT-Creation-Date: 2020-12-09 22:49+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -19,23 +19,23 @@ msgstr "" "Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n" #: plugins/check_by_ssh.c:86 plugins/check_cluster.c:76 plugins/check_dig.c:91 -#: plugins/check_disk.c:201 plugins/check_dns.c:101 plugins/check_dummy.c:52 -#: plugins/check_fping.c:93 plugins/check_game.c:82 plugins/check_hpjd.c:104 -#: plugins/check_http.c:169 plugins/check_ldap.c:118 plugins/check_load.c:122 +#: plugins/check_disk.c:204 plugins/check_dns.c:104 plugins/check_dummy.c:52 +#: plugins/check_fping.c:93 plugins/check_game.c:82 plugins/check_hpjd.c:105 +#: plugins/check_http.c:171 plugins/check_ldap.c:118 plugins/check_load.c:126 #: plugins/check_mrtgtraf.c:83 plugins/check_mysql.c:124 #: plugins/check_nagios.c:91 plugins/check_nt.c:127 plugins/check_ntp.c:780 #: plugins/check_ntp_peer.c:575 plugins/check_ntp_time.c:557 #: plugins/check_nwstat.c:173 plugins/check_overcr.c:102 -#: plugins/check_pgsql.c:172 plugins/check_ping.c:95 plugins/check_procs.c:172 +#: plugins/check_pgsql.c:173 plugins/check_ping.c:95 plugins/check_procs.c:172 #: plugins/check_radius.c:172 plugins/check_real.c:80 plugins/check_smtp.c:141 #: plugins/check_snmp.c:242 plugins/check_ssh.c:74 plugins/check_swap.c:111 -#: plugins/check_tcp.c:217 plugins/check_time.c:78 plugins/check_ups.c:122 -#: plugins/check_users.c:84 plugins/negate.c:212 plugins-root/check_dhcp.c:270 +#: plugins/check_tcp.c:222 plugins/check_time.c:78 plugins/check_ups.c:122 +#: plugins/check_users.c:84 plugins/negate.c:210 plugins-root/check_dhcp.c:270 msgid "Could not parse arguments" msgstr "" -#: plugins/check_by_ssh.c:90 plugins/check_dig.c:85 plugins/check_dns.c:94 -#: plugins/check_nagios.c:95 plugins/check_pgsql.c:178 plugins/check_ping.c:99 +#: plugins/check_by_ssh.c:90 plugins/check_dig.c:85 plugins/check_dns.c:97 +#: plugins/check_nagios.c:95 plugins/check_pgsql.c:179 plugins/check_ping.c:99 #: plugins/check_procs.c:188 plugins/check_snmp.c:342 plugins/negate.c:78 msgid "Cannot catch SIGALRM" msgstr "" @@ -60,18 +60,18 @@ msgstr "" msgid "%s: Error parsing output\n" msgstr "" -#: plugins/check_by_ssh.c:228 plugins/check_disk.c:492 -#: plugins/check_http.c:280 plugins/check_ldap.c:334 plugins/check_pgsql.c:311 +#: plugins/check_by_ssh.c:228 plugins/check_disk.c:519 +#: plugins/check_http.c:283 plugins/check_ldap.c:334 plugins/check_pgsql.c:312 #: plugins/check_procs.c:437 plugins/check_radius.c:319 -#: plugins/check_real.c:357 plugins/check_smtp.c:585 plugins/check_snmp.c:763 -#: plugins/check_ssh.c:140 plugins/check_tcp.c:509 plugins/check_time.c:302 -#: plugins/check_ups.c:556 plugins/negate.c:162 +#: plugins/check_real.c:357 plugins/check_smtp.c:586 plugins/check_snmp.c:763 +#: plugins/check_ssh.c:140 plugins/check_tcp.c:519 plugins/check_time.c:302 +#: plugins/check_ups.c:556 plugins/negate.c:160 msgid "Timeout interval must be a positive integer" msgstr "" -#: plugins/check_by_ssh.c:238 plugins/check_pgsql.c:341 +#: plugins/check_by_ssh.c:238 plugins/check_pgsql.c:342 #: plugins/check_radius.c:283 plugins/check_real.c:328 -#: plugins/check_smtp.c:510 plugins/check_tcp.c:515 plugins/check_time.c:296 +#: plugins/check_smtp.c:511 plugins/check_tcp.c:525 plugins/check_time.c:296 #: plugins/check_ups.c:518 msgid "Port must be a positive integer" msgstr "" @@ -215,92 +215,92 @@ msgid "" "all of -O, -s, and -n options (servicelist order must match '-C'options)" msgstr "" -#: plugins/check_by_ssh.c:453 plugins/check_cluster.c:261 -#: plugins/check_dig.c:364 plugins/check_disk.c:940 plugins/check_http.c:1647 +#: plugins/check_by_ssh.c:453 plugins/check_cluster.c:271 +#: plugins/check_dig.c:364 plugins/check_disk.c:973 plugins/check_http.c:1684 #: plugins/check_nagios.c:312 plugins/check_ntp.c:879 #: plugins/check_ntp_peer.c:733 plugins/check_ntp_time.c:642 -#: plugins/check_procs.c:763 plugins/negate.c:251 plugins/urlize.c:179 +#: plugins/check_procs.c:763 plugins/negate.c:249 plugins/urlize.c:179 msgid "Examples:" msgstr "" -#: plugins/check_by_ssh.c:468 plugins/check_cluster.c:274 -#: plugins/check_dig.c:376 plugins/check_disk.c:957 plugins/check_dns.c:518 +#: plugins/check_by_ssh.c:468 plugins/check_cluster.c:284 +#: plugins/check_dig.c:376 plugins/check_disk.c:990 plugins/check_dns.c:574 #: plugins/check_dummy.c:122 plugins/check_fping.c:505 -#: plugins/check_game.c:331 plugins/check_hpjd.c:432 plugins/check_http.c:1684 -#: plugins/check_ldap.c:508 plugins/check_load.c:334 plugins/check_mrtg.c:382 -#: plugins/check_mysql.c:581 plugins/check_nagios.c:323 plugins/check_nt.c:797 +#: plugins/check_game.c:331 plugins/check_hpjd.c:438 plugins/check_http.c:1722 +#: plugins/check_ldap.c:508 plugins/check_load.c:348 plugins/check_mrtg.c:382 +#: plugins/check_mysql.c:584 plugins/check_nagios.c:323 plugins/check_nt.c:797 #: plugins/check_ntp.c:898 plugins/check_ntp_peer.c:753 #: plugins/check_ntp_time.c:651 plugins/check_nwstat.c:1685 -#: plugins/check_overcr.c:467 plugins/check_pgsql.c:578 -#: plugins/check_ping.c:610 plugins/check_procs.c:781 +#: plugins/check_overcr.c:467 plugins/check_pgsql.c:579 +#: plugins/check_ping.c:610 plugins/check_procs.c:786 #: plugins/check_radius.c:396 plugins/check_real.c:452 -#: plugins/check_smtp.c:849 plugins/check_snmp.c:1253 plugins/check_ssh.c:325 -#: plugins/check_swap.c:571 plugins/check_tcp.c:689 plugins/check_time.c:371 +#: plugins/check_smtp.c:850 plugins/check_snmp.c:1254 plugins/check_ssh.c:325 +#: plugins/check_swap.c:571 plugins/check_tcp.c:710 plugins/check_time.c:371 #: plugins/check_ups.c:660 plugins/check_users.c:262 -#: plugins/check_ide_smart.c:606 plugins/negate.c:275 plugins/urlize.c:196 -#: plugins-root/check_dhcp.c:1393 plugins-root/check_icmp.c:1408 +#: plugins/check_ide_smart.c:606 plugins/negate.c:273 plugins/urlize.c:196 +#: plugins-root/check_dhcp.c:1394 plugins-root/check_icmp.c:1615 msgid "Usage:" msgstr "" -#: plugins/check_cluster.c:230 +#: plugins/check_cluster.c:240 #, c-format msgid "Host/Service Cluster Plugin for Monitoring" msgstr "" -#: plugins/check_cluster.c:236 plugins/check_nt.c:697 +#: plugins/check_cluster.c:246 plugins/check_nt.c:697 msgid "Options:" msgstr "" -#: plugins/check_cluster.c:239 +#: plugins/check_cluster.c:249 msgid "Check service cluster status" msgstr "" -#: plugins/check_cluster.c:241 +#: plugins/check_cluster.c:251 msgid "Check host cluster status" msgstr "" -#: plugins/check_cluster.c:243 +#: plugins/check_cluster.c:253 msgid "Optional prepended text output (i.e. \"Host cluster\")" msgstr "" -#: plugins/check_cluster.c:245 plugins/check_cluster.c:248 +#: plugins/check_cluster.c:255 plugins/check_cluster.c:258 msgid "Specifies the range of hosts or services in cluster that must be in a" msgstr "" -#: plugins/check_cluster.c:246 +#: plugins/check_cluster.c:256 msgid "non-OK state in order to return a WARNING status level" msgstr "" -#: plugins/check_cluster.c:249 +#: plugins/check_cluster.c:259 msgid "non-OK state in order to return a CRITICAL status level" msgstr "" -#: plugins/check_cluster.c:251 +#: plugins/check_cluster.c:261 msgid "The status codes of the hosts or services in the cluster, separated by" msgstr "" -#: plugins/check_cluster.c:252 +#: plugins/check_cluster.c:262 msgid "commas" msgstr "" -#: plugins/check_cluster.c:257 plugins/check_game.c:318 -#: plugins/check_http.c:1629 plugins/check_ldap.c:494 plugins/check_mrtg.c:363 -#: plugins/check_mrtgtraf.c:361 plugins/check_mysql.c:570 +#: plugins/check_cluster.c:267 plugins/check_game.c:318 +#: plugins/check_http.c:1666 plugins/check_ldap.c:494 plugins/check_mrtg.c:363 +#: plugins/check_mrtgtraf.c:361 plugins/check_mysql.c:573 #: plugins/check_nt.c:781 plugins/check_ntp.c:875 plugins/check_ntp_peer.c:724 #: plugins/check_ntp_time.c:633 plugins/check_nwstat.c:1670 -#: plugins/check_overcr.c:456 plugins/check_snmp.c:1224 +#: plugins/check_overcr.c:456 plugins/check_snmp.c:1225 #: plugins/check_swap.c:559 plugins/check_ups.c:642 -#: plugins/check_ide_smart.c:580 plugins/negate.c:257 -#: plugins-root/check_icmp.c:1383 +#: plugins/check_ide_smart.c:580 plugins/negate.c:255 +#: plugins-root/check_icmp.c:1590 msgid "Notes:" msgstr "" -#: plugins/check_cluster.c:263 +#: plugins/check_cluster.c:273 msgid "" "Will alert critical if there are 3 or more service data points in a non-OK" msgstr "" -#: plugins/check_cluster.c:264 plugins/check_ups.c:639 +#: plugins/check_cluster.c:274 plugins/check_ups.c:639 msgid "state." msgstr "" @@ -347,7 +347,7 @@ msgstr "" #: plugins/check_dig.c:334 #, c-format -msgid "This plugin test the DNS service on the specified host using dig" +msgid "This plugin tests the DNS service on the specified host using dig" msgstr "" #: plugins/check_dig.c:347 @@ -379,437 +379,445 @@ msgstr "" msgid "Pass STRING as argument(s) to dig" msgstr "" -#: plugins/check_disk.c:223 +#: plugins/check_disk.c:226 #, c-format msgid "DISK %s: %s not found\n" msgstr "" -#: plugins/check_disk.c:223 plugins/check_disk.c:972 plugins/check_dns.c:257 +#: plugins/check_disk.c:226 plugins/check_disk.c:1005 plugins/check_dns.c:279 #: plugins/check_dummy.c:74 plugins/check_mysql.c:310 #: plugins/check_nagios.c:104 plugins/check_nagios.c:168 -#: plugins/check_nagios.c:172 plugins/check_pgsql.c:601 -#: plugins/check_pgsql.c:618 plugins/check_pgsql.c:627 -#: plugins/check_pgsql.c:642 plugins/check_procs.c:351 +#: plugins/check_nagios.c:172 plugins/check_pgsql.c:602 +#: plugins/check_pgsql.c:619 plugins/check_pgsql.c:628 +#: plugins/check_pgsql.c:643 plugins/check_procs.c:351 #, c-format msgid "CRITICAL" msgstr "" -#: plugins/check_disk.c:566 +#: plugins/check_disk.c:593 #, c-format msgid "unit type %s not known\n" msgstr "" -#: plugins/check_disk.c:569 +#: plugins/check_disk.c:596 #, c-format msgid "failed allocating storage for '%s'\n" msgstr "" -#: plugins/check_disk.c:593 plugins/check_disk.c:634 plugins/check_disk.c:642 -#: plugins/check_disk.c:649 plugins/check_disk.c:653 plugins/check_disk.c:693 -#: plugins/check_disk.c:699 plugins/check_disk.c:718 plugins/check_dummy.c:77 -#: plugins/check_dummy.c:80 plugins/check_pgsql.c:643 +#: plugins/check_disk.c:624 plugins/check_disk.c:665 plugins/check_disk.c:673 +#: plugins/check_disk.c:680 plugins/check_disk.c:684 plugins/check_disk.c:724 +#: plugins/check_disk.c:730 plugins/check_disk.c:749 plugins/check_dummy.c:77 +#: plugins/check_dummy.c:80 plugins/check_pgsql.c:644 #: plugins/check_procs.c:506 #, c-format msgid "UNKNOWN" msgstr "" -#: plugins/check_disk.c:593 +#: plugins/check_disk.c:624 msgid "Must set a threshold value before using -p\n" msgstr "" -#: plugins/check_disk.c:634 +#: plugins/check_disk.c:665 msgid "Must set -E before selecting paths\n" msgstr "" -#: plugins/check_disk.c:642 +#: plugins/check_disk.c:673 msgid "Must set group value before selecting paths\n" msgstr "" -#: plugins/check_disk.c:649 +#: plugins/check_disk.c:680 msgid "" "Paths need to be selected before using -i/-I. Use -A to select all paths " "explicitly" msgstr "" -#: plugins/check_disk.c:653 plugins/check_disk.c:699 plugins/check_procs.c:506 +#: plugins/check_disk.c:684 plugins/check_disk.c:730 plugins/check_procs.c:506 msgid "Could not compile regular expression" msgstr "" -#: plugins/check_disk.c:693 +#: plugins/check_disk.c:724 msgid "Must set a threshold value before using -r/-R\n" msgstr "" -#: plugins/check_disk.c:719 +#: plugins/check_disk.c:750 msgid "Regular expression did not match any path or disk" msgstr "" -#: plugins/check_disk.c:765 +#: plugins/check_disk.c:796 msgid "Unknown argument" msgstr "" -#: plugins/check_disk.c:799 +#: plugins/check_disk.c:830 #, c-format msgid " for %s\n" msgstr "" -#: plugins/check_disk.c:873 +#: plugins/check_disk.c:904 msgid "" "This plugin checks the amount of used disk space on a mounted file system" msgstr "" -#: plugins/check_disk.c:874 +#: plugins/check_disk.c:905 msgid "" "and generates an alert if free space is less than one of the threshold values" msgstr "" -#: plugins/check_disk.c:884 +#: plugins/check_disk.c:915 msgid "Exit with WARNING status if less than INTEGER units of disk are free" msgstr "" -#: plugins/check_disk.c:886 +#: plugins/check_disk.c:917 msgid "Exit with WARNING status if less than PERCENT of disk space is free" msgstr "" -#: plugins/check_disk.c:888 +#: plugins/check_disk.c:919 msgid "Exit with CRITICAL status if less than INTEGER units of disk are free" msgstr "" -#: plugins/check_disk.c:890 +#: plugins/check_disk.c:921 msgid "Exit with CRITICAL status if less than PERCENT of disk space is free" msgstr "" -#: plugins/check_disk.c:892 +#: plugins/check_disk.c:923 msgid "Exit with WARNING status if less than PERCENT of inode space is free" msgstr "" -#: plugins/check_disk.c:894 +#: plugins/check_disk.c:925 msgid "Exit with CRITICAL status if less than PERCENT of inode space is free" msgstr "" -#: plugins/check_disk.c:896 +#: plugins/check_disk.c:927 msgid "" "Mount point or block device as emitted by the mount(8) command (may be " "repeated)" msgstr "" -#: plugins/check_disk.c:898 +#: plugins/check_disk.c:929 msgid "Ignore device (only works if -p unspecified)" msgstr "" -#: plugins/check_disk.c:900 +#: plugins/check_disk.c:931 msgid "Clear thresholds" msgstr "" -#: plugins/check_disk.c:902 +#: plugins/check_disk.c:933 msgid "For paths or partitions specified with -p, only check for exact paths" msgstr "" -#: plugins/check_disk.c:904 +#: plugins/check_disk.c:935 msgid "Display only devices/mountpoints with errors" msgstr "" -#: plugins/check_disk.c:906 +#: plugins/check_disk.c:937 msgid "Don't account root-reserved blocks into freespace in perfdata" msgstr "" -#: plugins/check_disk.c:908 +#: plugins/check_disk.c:939 +msgid "Display inode usage in perfdata" +msgstr "" + +#: plugins/check_disk.c:941 msgid "" "Group paths. Thresholds apply to (free-)space of all partitions together" msgstr "" -#: plugins/check_disk.c:910 +#: plugins/check_disk.c:943 msgid "Same as '--units kB'" msgstr "" -#: plugins/check_disk.c:912 +#: plugins/check_disk.c:945 msgid "Only check local filesystems" msgstr "" -#: plugins/check_disk.c:914 +#: plugins/check_disk.c:947 msgid "" "Only check local filesystems against thresholds. Yet call stat on remote " "filesystems" msgstr "" -#: plugins/check_disk.c:915 +#: plugins/check_disk.c:948 msgid "to test if they are accessible (e.g. to detect Stale NFS Handles)" msgstr "" -#: plugins/check_disk.c:917 +#: plugins/check_disk.c:950 msgid "Display the mountpoint instead of the partition" msgstr "" -#: plugins/check_disk.c:919 +#: plugins/check_disk.c:952 msgid "Same as '--units MB'" msgstr "" -#: plugins/check_disk.c:921 +#: plugins/check_disk.c:954 msgid "Explicitly select all paths. This is equivalent to -R '.*'" msgstr "" -#: plugins/check_disk.c:923 +#: plugins/check_disk.c:956 msgid "" "Case insensitive regular expression for path/partition (may be repeated)" msgstr "" -#: plugins/check_disk.c:925 +#: plugins/check_disk.c:958 msgid "Regular expression for path or partition (may be repeated)" msgstr "" -#: plugins/check_disk.c:927 +#: plugins/check_disk.c:960 msgid "" "Regular expression to ignore selected path/partition (case insensitive) (may " "be repeated)" msgstr "" -#: plugins/check_disk.c:929 +#: plugins/check_disk.c:962 msgid "" "Regular expression to ignore selected path or partition (may be repeated)" msgstr "" -#: plugins/check_disk.c:932 +#: plugins/check_disk.c:965 msgid "Choose bytes, kB, MB, GB, TB (default: MB)" msgstr "" -#: plugins/check_disk.c:935 +#: plugins/check_disk.c:968 msgid "Ignore all filesystems of indicated type (may be repeated)" msgstr "" -#: plugins/check_disk.c:937 +#: plugins/check_disk.c:970 msgid "Check only filesystems of indicated type (may be repeated)" msgstr "" -#: plugins/check_disk.c:942 +#: plugins/check_disk.c:975 msgid "Checks /tmp and /var at 10% and 5%, and / at 100MB and 50MB" msgstr "" -#: plugins/check_disk.c:944 +#: plugins/check_disk.c:977 msgid "" "Checks all filesystems not matching -r at 100M and 50M. The fs matching the -" "r regex" msgstr "" -#: plugins/check_disk.c:945 +#: plugins/check_disk.c:978 msgid "" "are grouped which means the freespace thresholds are applied to all disks " "together" msgstr "" -#: plugins/check_disk.c:947 +#: plugins/check_disk.c:980 msgid "" "Checks /foo for 1000M/500M and /bar for 5/3%. All remaining volumes use " "100M/50M" msgstr "" -#: plugins/check_disk.c:973 +#: plugins/check_disk.c:1006 #, c-format msgid "%s %s: %s\n" msgstr "" -#: plugins/check_disk.c:973 +#: plugins/check_disk.c:1006 msgid "is not accessible" msgstr "" -#: plugins/check_dns.c:115 +#: plugins/check_dns.c:118 msgid "nslookup returned an error status" msgstr "" -#: plugins/check_dns.c:133 +#: plugins/check_dns.c:136 msgid "Warning plugin error" msgstr "" -#: plugins/check_dns.c:151 +#: plugins/check_dns.c:154 #, c-format msgid "DNS CRITICAL - '%s' returned empty server string\n" msgstr "" -#: plugins/check_dns.c:156 +#: plugins/check_dns.c:159 #, c-format msgid "DNS CRITICAL - No response from DNS %s\n" msgstr "" -#: plugins/check_dns.c:175 +#: plugins/check_dns.c:178 #, c-format msgid "DNS CRITICAL - '%s' returned empty host name string\n" msgstr "" -#: plugins/check_dns.c:181 +#: plugins/check_dns.c:184 msgid "Non-authoritative answer:" msgstr "" -#: plugins/check_dns.c:222 +#: plugins/check_dns.c:228 #, c-format msgid "DNS CRITICAL - '%s' msg parsing exited with no address\n" msgstr "" -#: plugins/check_dns.c:237 +#: plugins/check_dns.c:259 #, c-format msgid "expected '%s' but got '%s'" msgstr "" -#: plugins/check_dns.c:244 +#: plugins/check_dns.c:266 #, c-format msgid "server %s is not authoritative for %s" msgstr "" -#: plugins/check_dns.c:253 plugins/check_dummy.c:68 plugins/check_nagios.c:182 -#: plugins/check_pgsql.c:638 plugins/check_procs.c:344 +#: plugins/check_dns.c:275 plugins/check_dummy.c:68 plugins/check_nagios.c:182 +#: plugins/check_pgsql.c:639 plugins/check_procs.c:344 #, c-format msgid "OK" msgstr "" -#: plugins/check_dns.c:255 plugins/check_dummy.c:71 plugins/check_mysql.c:307 -#: plugins/check_nagios.c:182 plugins/check_pgsql.c:607 -#: plugins/check_pgsql.c:612 plugins/check_pgsql.c:640 +#: plugins/check_dns.c:277 plugins/check_dummy.c:71 plugins/check_mysql.c:307 +#: plugins/check_nagios.c:182 plugins/check_pgsql.c:608 +#: plugins/check_pgsql.c:613 plugins/check_pgsql.c:641 #: plugins/check_procs.c:346 #, c-format msgid "WARNING" msgstr "" -#: plugins/check_dns.c:259 +#: plugins/check_dns.c:281 #, c-format msgid "%.3f second response time" msgid_plural "%.3f seconds response time" msgstr[0] "" msgstr[1] "" -#: plugins/check_dns.c:260 +#: plugins/check_dns.c:282 #, c-format msgid ". %s returns %s" msgstr "" -#: plugins/check_dns.c:280 +#: plugins/check_dns.c:302 #, c-format msgid "DNS WARNING - %s\n" msgstr "" -#: plugins/check_dns.c:281 plugins/check_dns.c:284 plugins/check_dns.c:287 +#: plugins/check_dns.c:303 plugins/check_dns.c:306 plugins/check_dns.c:309 msgid " Probably a non-existent host/domain" msgstr "" -#: plugins/check_dns.c:283 +#: plugins/check_dns.c:305 #, c-format msgid "DNS CRITICAL - %s\n" msgstr "" -#: plugins/check_dns.c:286 +#: plugins/check_dns.c:308 #, c-format msgid "DNS UNKNOWN - %s\n" msgstr "" -#: plugins/check_dns.c:299 +#: plugins/check_dns.c:346 msgid "Note: nslookup is deprecated and may be removed from future releases." msgstr "" -#: plugins/check_dns.c:300 +#: plugins/check_dns.c:347 msgid "Consider using the `dig' or `host' programs instead. Run nslookup with" msgstr "" -#: plugins/check_dns.c:301 +#: plugins/check_dns.c:348 msgid "the `-sil[ent]' option to prevent this message from appearing." msgstr "" -#: plugins/check_dns.c:306 +#: plugins/check_dns.c:353 plugins/check_dns.c:355 #, c-format msgid "No response from DNS %s\n" msgstr "" -#: plugins/check_dns.c:310 +#: plugins/check_dns.c:359 #, c-format msgid "DNS %s has no records\n" msgstr "" -#: plugins/check_dns.c:318 +#: plugins/check_dns.c:367 #, c-format msgid "Connection to DNS %s was refused\n" msgstr "" -#: plugins/check_dns.c:322 +#: plugins/check_dns.c:371 #, c-format msgid "Query was refused by DNS server at %s\n" msgstr "" -#: plugins/check_dns.c:326 +#: plugins/check_dns.c:375 #, c-format msgid "No information returned by DNS server at %s\n" msgstr "" -#: plugins/check_dns.c:332 +#: plugins/check_dns.c:382 #, c-format msgid "Domain %s was not found by the server\n" msgstr "" -#: plugins/check_dns.c:336 +#: plugins/check_dns.c:386 msgid "Network is unreachable\n" msgstr "" -#: plugins/check_dns.c:340 +#: plugins/check_dns.c:390 #, c-format msgid "DNS failure for %s\n" msgstr "" -#: plugins/check_dns.c:404 plugins/check_dns.c:412 plugins/check_dns.c:419 -#: plugins/check_dns.c:424 plugins/check_dns.c:446 plugins/check_dns.c:454 +#: plugins/check_dns.c:455 plugins/check_dns.c:463 plugins/check_dns.c:470 +#: plugins/check_dns.c:475 plugins/check_dns.c:500 plugins/check_dns.c:508 #: plugins/check_game.c:211 plugins/check_game.c:219 msgid "Input buffer overflow\n" msgstr "" -#: plugins/check_dns.c:482 +#: plugins/check_dns.c:536 msgid "" "This plugin uses the nslookup program to obtain the IP address for the given " "host/domain query." msgstr "" -#: plugins/check_dns.c:483 +#: plugins/check_dns.c:537 msgid "An optional DNS server to use may be specified." msgstr "" -#: plugins/check_dns.c:484 +#: plugins/check_dns.c:538 msgid "" "If no DNS server is specified, the default server(s) specified in /etc/" "resolv.conf will be used." msgstr "" -#: plugins/check_dns.c:494 +#: plugins/check_dns.c:548 msgid "The name or address you want to query" msgstr "" -#: plugins/check_dns.c:496 +#: plugins/check_dns.c:550 msgid "Optional DNS server you want to use for the lookup" msgstr "" -#: plugins/check_dns.c:498 +#: plugins/check_dns.c:552 msgid "" -"Optional IP-ADDRESS you expect the DNS server to return. HOST must end with" +"Optional IP-ADDRESS/CIDR you expect the DNS server to return. HOST must end" msgstr "" -#: plugins/check_dns.c:499 +#: plugins/check_dns.c:553 msgid "" -"a dot (.). This option can be repeated multiple times (Returns OK if any" +"with a dot (.). This option can be repeated multiple times (Returns OK if any" msgstr "" -#: plugins/check_dns.c:500 -msgid "" -"value match). If multiple addresses are returned at once, you have to match" +#: plugins/check_dns.c:554 +msgid "value matches)." msgstr "" -#: plugins/check_dns.c:501 -msgid "" -"the whole string of addresses separated with commas (sorted alphabetically)." -msgstr "" - -#: plugins/check_dns.c:503 +#: plugins/check_dns.c:556 msgid "Optionally expect the DNS server to be authoritative for the lookup" msgstr "" -#: plugins/check_dns.c:505 +#: plugins/check_dns.c:558 msgid "Return warning if elapsed time exceeds value. Default off" msgstr "" -#: plugins/check_dns.c:507 +#: plugins/check_dns.c:560 msgid "Return critical if elapsed time exceeds value. Default off" msgstr "" +#: plugins/check_dns.c:562 +msgid "" +"Return critical if the list of expected addresses does not match all " +"addresses" +msgstr "" + +#: plugins/check_dns.c:563 +msgid "returned. Default off" +msgstr "" + #: plugins/check_dummy.c:62 msgid "Arguments to check_dummy must be an integer" msgstr "" @@ -828,13 +836,13 @@ msgstr "" msgid "of the argument with optional text" msgstr "" -#: plugins/check_fping.c:125 plugins/check_hpjd.c:129 plugins/check_ping.c:438 +#: plugins/check_fping.c:125 plugins/check_hpjd.c:130 plugins/check_ping.c:438 #: plugins/check_swap.c:176 plugins/check_users.c:130 plugins/urlize.c:109 #, c-format msgid "Could not open pipe: %s\n" msgstr "" -#: plugins/check_fping.c:131 plugins/check_hpjd.c:135 plugins/check_load.c:153 +#: plugins/check_fping.c:131 plugins/check_hpjd.c:136 plugins/check_load.c:157 #: plugins/check_swap.c:182 plugins/check_users.c:136 plugins/urlize.c:115 #, c-format msgid "Could not open stderr for %s\n" @@ -854,7 +862,7 @@ msgstr "" #: plugins/check_fping.c:187 #, c-format -msgid "FPING UNKNOW - %s not found\n" +msgid "FPING UNKNOWN - %s not found\n" msgstr "" #: plugins/check_fping.c:191 @@ -883,18 +891,19 @@ msgid "FPING %s - %s (loss=%.0f%% )|%s\n" msgstr "" #: plugins/check_fping.c:326 plugins/check_fping.c:332 -#: plugins/check_hpjd.c:339 plugins/check_hpjd.c:368 plugins/check_mysql.c:383 -#: plugins/check_mysql.c:470 plugins/check_ntp.c:719 +#: plugins/check_hpjd.c:341 plugins/check_hpjd.c:372 plugins/check_mysql.c:386 +#: plugins/check_mysql.c:473 plugins/check_ntp.c:719 #: plugins/check_ntp_peer.c:497 plugins/check_ntp_time.c:498 -#: plugins/check_pgsql.c:335 plugins/check_ping.c:295 plugins/check_ping.c:418 +#: plugins/check_pgsql.c:336 plugins/check_ping.c:295 plugins/check_ping.c:418 #: plugins/check_radius.c:275 plugins/check_real.c:315 -#: plugins/check_real.c:377 plugins/check_smtp.c:503 plugins/check_smtp.c:645 +#: plugins/check_real.c:377 plugins/check_smtp.c:504 plugins/check_smtp.c:646 #: plugins/check_ssh.c:162 plugins/check_time.c:240 plugins/check_time.c:315 #: plugins/check_ups.c:504 plugins/check_ups.c:573 msgid "Invalid hostname/address" msgstr "" #: plugins/check_fping.c:345 plugins/check_ldap.c:400 plugins/check_ping.c:246 +#: plugins-root/check_icmp.c:480 msgid "IPv6 support not available\n" msgstr "" @@ -1056,611 +1065,636 @@ msgid "" "plugin." msgstr "" -#: plugins/check_hpjd.c:240 +#: plugins/check_hpjd.c:241 msgid "Paper Jam" msgstr "" -#: plugins/check_hpjd.c:244 +#: plugins/check_hpjd.c:246 msgid "Out of Paper" msgstr "" -#: plugins/check_hpjd.c:249 +#: plugins/check_hpjd.c:251 msgid "Printer Offline" msgstr "" -#: plugins/check_hpjd.c:254 +#: plugins/check_hpjd.c:256 msgid "Peripheral Error" msgstr "" -#: plugins/check_hpjd.c:258 +#: plugins/check_hpjd.c:260 msgid "Intervention Required" msgstr "" -#: plugins/check_hpjd.c:262 +#: plugins/check_hpjd.c:264 msgid "Toner Low" msgstr "" -#: plugins/check_hpjd.c:266 +#: plugins/check_hpjd.c:268 msgid "Insufficient Memory" msgstr "" -#: plugins/check_hpjd.c:270 +#: plugins/check_hpjd.c:272 msgid "A Door is Open" msgstr "" -#: plugins/check_hpjd.c:274 +#: plugins/check_hpjd.c:276 msgid "Output Tray is Full" msgstr "" -#: plugins/check_hpjd.c:278 +#: plugins/check_hpjd.c:280 msgid "Data too Slow for Engine" msgstr "" -#: plugins/check_hpjd.c:282 +#: plugins/check_hpjd.c:284 msgid "Unknown Paper Error" msgstr "" -#: plugins/check_hpjd.c:287 +#: plugins/check_hpjd.c:289 #, c-format msgid "Printer ok - (%s)\n" msgstr "" -#: plugins/check_hpjd.c:347 +#: plugins/check_hpjd.c:349 msgid "Port must be a positive short integer" msgstr "" -#: plugins/check_hpjd.c:405 +#: plugins/check_hpjd.c:409 msgid "This plugin tests the STATUS of an HP printer with a JetDirect card." msgstr "" -#: plugins/check_hpjd.c:406 +#: plugins/check_hpjd.c:410 msgid "Net-snmp must be installed on the computer running the plugin." msgstr "" -#: plugins/check_hpjd.c:416 +#: plugins/check_hpjd.c:420 msgid "The SNMP community name " msgstr "" -#: plugins/check_hpjd.c:417 plugins/check_hpjd.c:421 +#: plugins/check_hpjd.c:421 plugins/check_hpjd.c:425 #, c-format msgid "(default=%s)" msgstr "" -#: plugins/check_hpjd.c:420 +#: plugins/check_hpjd.c:424 msgid "Specify the port to check " msgstr "" -#: plugins/check_http.c:191 +#: plugins/check_hpjd.c:428 +msgid "Disable paper check " +msgstr "" + +#: plugins/check_http.c:193 msgid "file does not exist or is not readable" msgstr "" -#: plugins/check_http.c:312 plugins/check_http.c:317 plugins/check_http.c:323 -#: plugins/check_smtp.c:599 plugins/check_tcp.c:580 plugins/check_tcp.c:585 -#: plugins/check_tcp.c:591 +#: plugins/check_http.c:315 plugins/check_http.c:320 plugins/check_http.c:326 +#: plugins/check_smtp.c:600 plugins/check_tcp.c:590 plugins/check_tcp.c:595 +#: plugins/check_tcp.c:601 msgid "Invalid certificate expiration period" msgstr "" -#: plugins/check_http.c:361 +#: plugins/check_http.c:364 msgid "" "Invalid option - Valid SSL/TLS versions: 2, 3, 1, 1.1, 1.2 (with optional " "'+' suffix)" msgstr "" -#: plugins/check_http.c:367 plugins/check_tcp.c:604 +#: plugins/check_http.c:370 plugins/check_tcp.c:614 plugins/check_tcp.c:623 msgid "Invalid option - SSL is not available" msgstr "" -#: plugins/check_http.c:388 +#: plugins/check_http.c:391 msgid "Invalid onredirect option" msgstr "" -#: plugins/check_http.c:390 +#: plugins/check_http.c:393 #, c-format msgid "option f:%d \n" msgstr "" -#: plugins/check_http.c:425 +#: plugins/check_http.c:428 msgid "Invalid port number" msgstr "" -#: plugins/check_http.c:477 +#: plugins/check_http.c:486 #, c-format msgid "Could Not Compile Regular Expression: %s" msgstr "" -#: plugins/check_http.c:491 plugins/check_ntp.c:732 +#: plugins/check_http.c:500 plugins/check_ntp.c:732 #: plugins/check_ntp_peer.c:513 plugins/check_ntp_time.c:517 -#: plugins/check_smtp.c:625 plugins/check_ssh.c:151 plugins/check_tcp.c:481 +#: plugins/check_smtp.c:626 plugins/check_ssh.c:151 plugins/check_tcp.c:491 msgid "IPv6 support not available" msgstr "" -#: plugins/check_http.c:556 plugins/check_ping.c:422 +#: plugins/check_http.c:568 plugins/check_ping.c:422 msgid "You must specify a server address or host name" msgstr "" -#: plugins/check_http.c:570 +#: plugins/check_http.c:585 msgid "" "If you use a client certificate you must also specify a private key file" msgstr "" -#: plugins/check_http.c:697 plugins/check_http.c:865 +#: plugins/check_http.c:712 plugins/check_http.c:880 msgid "HTTP UNKNOWN - Memory allocation error\n" msgstr "" -#: plugins/check_http.c:769 +#: plugins/check_http.c:784 #, c-format msgid "%sServer date unknown, " msgstr "" -#: plugins/check_http.c:772 +#: plugins/check_http.c:787 #, c-format msgid "%sDocument modification date unknown, " msgstr "" -#: plugins/check_http.c:779 +#: plugins/check_http.c:794 #, c-format msgid "%sServer date \"%100s\" unparsable, " msgstr "" -#: plugins/check_http.c:782 +#: plugins/check_http.c:797 #, c-format msgid "%sDocument date \"%100s\" unparsable, " msgstr "" -#: plugins/check_http.c:785 +#: plugins/check_http.c:800 #, c-format msgid "%sDocument is %d seconds in the future, " msgstr "" -#: plugins/check_http.c:790 +#: plugins/check_http.c:805 #, c-format msgid "%sLast modified %.1f days ago, " msgstr "" -#: plugins/check_http.c:793 +#: plugins/check_http.c:808 #, c-format msgid "%sLast modified %d:%02d:%02d ago, " msgstr "" -#: plugins/check_http.c:907 +#: plugins/check_http.c:922 msgid "HTTP CRITICAL - Unable to open TCP socket\n" msgstr "" -#: plugins/check_http.c:1076 +#: plugins/check_http.c:1106 msgid "HTTP CRITICAL - Error on receive\n" msgstr "" -#: plugins/check_http.c:1086 +#: plugins/check_http.c:1116 msgid "HTTP CRITICAL - No data received from host\n" msgstr "" -#: plugins/check_http.c:1137 +#: plugins/check_http.c:1167 #, c-format msgid "Invalid HTTP response received from host: %s\n" msgstr "" -#: plugins/check_http.c:1141 +#: plugins/check_http.c:1171 #, c-format msgid "Invalid HTTP response received from host on port %d: %s\n" msgstr "" -#: plugins/check_http.c:1150 +#: plugins/check_http.c:1174 plugins/check_http.c:1326 +#, c-format +msgid "" +"%s\n" +"%s" +msgstr "" + +#: plugins/check_http.c:1182 #, c-format msgid "Status line output matched \"%s\" - " msgstr "" -#: plugins/check_http.c:1161 +#: plugins/check_http.c:1193 #, c-format msgid "HTTP CRITICAL: Invalid Status Line (%s)\n" msgstr "" -#: plugins/check_http.c:1168 +#: plugins/check_http.c:1200 #, c-format msgid "HTTP CRITICAL: Invalid Status (%s)\n" msgstr "" -#: plugins/check_http.c:1172 plugins/check_http.c:1177 -#: plugins/check_http.c:1187 plugins/check_http.c:1191 +#: plugins/check_http.c:1204 plugins/check_http.c:1209 +#: plugins/check_http.c:1219 plugins/check_http.c:1223 #, c-format msgid "%s - " msgstr "" -#: plugins/check_http.c:1210 +#: plugins/check_http.c:1242 #, c-format msgid "%sheader '%s' not found on '%s://%s:%d%s', " msgstr "" -#: plugins/check_http.c:1222 +#: plugins/check_http.c:1254 #, c-format msgid "%sstring '%s' not found on '%s://%s:%d%s', " msgstr "" -#: plugins/check_http.c:1235 +#: plugins/check_http.c:1267 #, c-format msgid "%spattern not found, " msgstr "" -#: plugins/check_http.c:1237 +#: plugins/check_http.c:1269 #, c-format msgid "%spattern found, " msgstr "" -#: plugins/check_http.c:1243 +#: plugins/check_http.c:1275 #, c-format msgid "%sExecute Error: %s, " msgstr "" -#: plugins/check_http.c:1259 +#: plugins/check_http.c:1291 #, c-format msgid "%spage size %d too large, " msgstr "" -#: plugins/check_http.c:1262 +#: plugins/check_http.c:1294 #, c-format msgid "%spage size %d too small, " msgstr "" -#: plugins/check_http.c:1275 +#: plugins/check_http.c:1307 #, c-format msgid "%s - %d bytes in %.3f second response time %s|%s %s %s %s %s %s %s" msgstr "" -#: plugins/check_http.c:1287 +#: plugins/check_http.c:1319 #, c-format msgid "%s - %d bytes in %.3f second response time %s|%s %s" msgstr "" -#: plugins/check_http.c:1325 +#: plugins/check_http.c:1360 msgid "HTTP UNKNOWN - Could not allocate addr\n" msgstr "" -#: plugins/check_http.c:1330 plugins/check_http.c:1361 +#: plugins/check_http.c:1365 plugins/check_http.c:1396 msgid "HTTP UNKNOWN - Could not allocate URL\n" msgstr "" -#: plugins/check_http.c:1339 +#: plugins/check_http.c:1374 #, c-format msgid "HTTP UNKNOWN - Could not find redirect location - %s%s\n" msgstr "" -#: plugins/check_http.c:1354 +#: plugins/check_http.c:1389 #, c-format msgid "HTTP UNKNOWN - Empty redirect location%s\n" msgstr "" -#: plugins/check_http.c:1404 +#: plugins/check_http.c:1439 #, c-format msgid "HTTP UNKNOWN - Could not parse redirect location - %s%s\n" msgstr "" -#: plugins/check_http.c:1414 +#: plugins/check_http.c:1449 #, c-format msgid "HTTP WARNING - maximum redirection depth %d exceeded - %s://%s:%d%s%s\n" msgstr "" -#: plugins/check_http.c:1422 +#: plugins/check_http.c:1457 #, c-format msgid "HTTP WARNING - redirection creates an infinite loop - %s://%s:%d%s%s\n" msgstr "" -#: plugins/check_http.c:1443 +#: plugins/check_http.c:1478 #, c-format msgid "HTTP UNKNOWN - Redirection to port above %d - %s://%s:%d%s%s\n" msgstr "" -#: plugins/check_http.c:1451 +#: plugins/check_http.c:1486 #, c-format msgid "Redirection to %s://%s:%d%s\n" msgstr "" -#: plugins/check_http.c:1526 +#: plugins/check_http.c:1561 msgid "This plugin tests the HTTP service on the specified host. It can test" msgstr "" -#: plugins/check_http.c:1527 +#: plugins/check_http.c:1562 msgid "normal (http) and secure (https) servers, follow redirects, search for" msgstr "" -#: plugins/check_http.c:1528 +#: plugins/check_http.c:1563 msgid "strings and regular expressions, check connection times, and report on" msgstr "" -#: plugins/check_http.c:1529 +#: plugins/check_http.c:1564 msgid "certificate expiration times." msgstr "" -#: plugins/check_http.c:1535 +#: plugins/check_http.c:1570 #, c-format msgid "NOTE: One or both of -H and -I must be specified" msgstr "" -#: plugins/check_http.c:1543 +#: plugins/check_http.c:1578 msgid "Host name argument for servers using host headers (virtual host)" msgstr "" -#: plugins/check_http.c:1544 +#: plugins/check_http.c:1579 msgid "Append a port to include it in the header (eg: example.com:5000)" msgstr "" -#: plugins/check_http.c:1546 +#: plugins/check_http.c:1581 msgid "" "IP address or name (use numeric address if possible to bypass DNS lookup)." msgstr "" -#: plugins/check_http.c:1548 +#: plugins/check_http.c:1583 msgid "Port number (default: " msgstr "" -#: plugins/check_http.c:1555 +#: plugins/check_http.c:1590 msgid "" "Connect via SSL. Port defaults to 443. VERSION is optional, and prevents" msgstr "" -#: plugins/check_http.c:1556 +#: plugins/check_http.c:1591 msgid "auto-negotiation (2 = SSLv2, 3 = SSLv3, 1 = TLSv1, 1.1 = TLSv1.1," msgstr "" -#: plugins/check_http.c:1557 +#: plugins/check_http.c:1592 msgid "1.2 = TLSv1.2). With a '+' suffix, newer versions are also accepted." msgstr "" -#: plugins/check_http.c:1559 +#: plugins/check_http.c:1594 msgid "Enable SSL/TLS hostname extension support (SNI)" msgstr "" -#: plugins/check_http.c:1561 +#: plugins/check_http.c:1596 msgid "" "Minimum number of days a certificate has to be valid. Port defaults to 443" msgstr "" -#: plugins/check_http.c:1562 +#: plugins/check_http.c:1597 msgid "(when this option is used the URL is not checked.)" msgstr "" -#: plugins/check_http.c:1564 +#: plugins/check_http.c:1599 msgid "Name of file that contains the client certificate (PEM format)" msgstr "" -#: plugins/check_http.c:1565 +#: plugins/check_http.c:1600 msgid "to be used in establishing the SSL session" msgstr "" -#: plugins/check_http.c:1567 +#: plugins/check_http.c:1602 msgid "Name of file containing the private key (PEM format)" msgstr "" -#: plugins/check_http.c:1568 +#: plugins/check_http.c:1603 msgid "matching the client certificate" msgstr "" -#: plugins/check_http.c:1572 +#: plugins/check_http.c:1607 msgid "Comma-delimited list of strings, at least one of them is expected in" msgstr "" -#: plugins/check_http.c:1573 +#: plugins/check_http.c:1608 msgid "the first (status) line of the server response (default: " msgstr "" -#: plugins/check_http.c:1575 +#: plugins/check_http.c:1610 msgid "" "If specified skips all other status line logic (ex: 3xx, 4xx, 5xx processing)" msgstr "" -#: plugins/check_http.c:1577 +#: plugins/check_http.c:1612 msgid "String to expect in the response headers" msgstr "" -#: plugins/check_http.c:1579 +#: plugins/check_http.c:1614 msgid "String to expect in the content" msgstr "" -#: plugins/check_http.c:1581 +#: plugins/check_http.c:1616 msgid "URL to GET or POST (default: /)" msgstr "" -#: plugins/check_http.c:1583 +#: plugins/check_http.c:1618 msgid "URL encoded http POST data" msgstr "" -#: plugins/check_http.c:1585 +#: plugins/check_http.c:1620 msgid "Set HTTP method." msgstr "" -#: plugins/check_http.c:1587 +#: plugins/check_http.c:1622 msgid "Don't wait for document body: stop reading after headers." msgstr "" -#: plugins/check_http.c:1588 +#: plugins/check_http.c:1623 msgid "(Note that this still does an HTTP GET or POST, not a HEAD.)" msgstr "" -#: plugins/check_http.c:1590 +#: plugins/check_http.c:1625 msgid "Warn if document is more than SECONDS old. the number can also be of" msgstr "" -#: plugins/check_http.c:1591 +#: plugins/check_http.c:1626 msgid "the form \"10m\" for minutes, \"10h\" for hours, or \"10d\" for days." msgstr "" -#: plugins/check_http.c:1593 +#: plugins/check_http.c:1628 msgid "specify Content-Type header media type when POSTing\n" msgstr "" -#: plugins/check_http.c:1596 +#: plugins/check_http.c:1631 msgid "Allow regex to span newlines (must precede -r or -R)" msgstr "" -#: plugins/check_http.c:1598 +#: plugins/check_http.c:1633 msgid "Search page for regex STRING" msgstr "" -#: plugins/check_http.c:1600 +#: plugins/check_http.c:1635 msgid "Search page for case-insensitive regex STRING" msgstr "" -#: plugins/check_http.c:1602 +#: plugins/check_http.c:1637 msgid "Return CRITICAL if found, OK if not\n" msgstr "" -#: plugins/check_http.c:1605 +#: plugins/check_http.c:1640 msgid "Username:password on sites with basic authentication" msgstr "" -#: plugins/check_http.c:1607 +#: plugins/check_http.c:1642 msgid "Username:password on proxy-servers with basic authentication" msgstr "" -#: plugins/check_http.c:1609 +#: plugins/check_http.c:1644 msgid "String to be sent in http header as \"User Agent\"" msgstr "" -#: plugins/check_http.c:1611 +#: plugins/check_http.c:1646 msgid "" "Any other tags to be sent in http header. Use multiple times for additional " "headers" msgstr "" -#: plugins/check_http.c:1613 +#: plugins/check_http.c:1648 msgid "Print additional performance data" msgstr "" -#: plugins/check_http.c:1615 +#: plugins/check_http.c:1650 +msgid "Print body content below status line" +msgstr "" + +#: plugins/check_http.c:1652 msgid "Wrap output in HTML link (obsoleted by urlize)" msgstr "" -#: plugins/check_http.c:1617 +#: plugins/check_http.c:1654 msgid "How to handle redirected pages. sticky is like follow but stick to the" msgstr "" -#: plugins/check_http.c:1618 +#: plugins/check_http.c:1655 msgid "specified IP address. stickyport also ensures port stays the same." msgstr "" -#: plugins/check_http.c:1620 +#: plugins/check_http.c:1657 msgid "Minimum page size required (bytes) : Maximum page size required (bytes)" msgstr "" -#: plugins/check_http.c:1630 +#: plugins/check_http.c:1667 msgid "This plugin will attempt to open an HTTP connection with the host." msgstr "" -#: plugins/check_http.c:1631 +#: plugins/check_http.c:1668 msgid "" "Successful connects return STATE_OK, refusals and timeouts return " "STATE_CRITICAL" msgstr "" -#: plugins/check_http.c:1632 +#: plugins/check_http.c:1669 msgid "" "other errors return STATE_UNKNOWN. Successful connects, but incorrect " -"reponse" +"response" msgstr "" -#: plugins/check_http.c:1633 +#: plugins/check_http.c:1670 msgid "" "messages from the host result in STATE_WARNING return values. If you are" msgstr "" -#: plugins/check_http.c:1634 +#: plugins/check_http.c:1671 msgid "" "checking a virtual server that uses 'host headers' you must supply the FQDN" msgstr "" -#: plugins/check_http.c:1635 +#: plugins/check_http.c:1672 msgid "(fully qualified domain name) as the [host_name] argument." msgstr "" -#: plugins/check_http.c:1639 +#: plugins/check_http.c:1676 msgid "This plugin can also check whether an SSL enabled web server is able to" msgstr "" -#: plugins/check_http.c:1640 +#: plugins/check_http.c:1677 msgid "serve content (optionally within a specified time) or whether the X509 " msgstr "" -#: plugins/check_http.c:1641 +#: plugins/check_http.c:1678 msgid "certificate is still valid for the specified number of days." msgstr "" -#: plugins/check_http.c:1643 +#: plugins/check_http.c:1680 msgid "Please note that this plugin does not check if the presented server" msgstr "" -#: plugins/check_http.c:1644 +#: plugins/check_http.c:1681 msgid "certificate matches the hostname of the server, or if the certificate" msgstr "" -#: plugins/check_http.c:1645 +#: plugins/check_http.c:1682 msgid "has a valid chain of trust to one of the locally installed CAs." msgstr "" -#: plugins/check_http.c:1649 +#: plugins/check_http.c:1686 msgid "" "When the 'www.verisign.com' server returns its content within 5 seconds," msgstr "" -#: plugins/check_http.c:1650 plugins/check_http.c:1669 +#: plugins/check_http.c:1687 plugins/check_http.c:1706 msgid "" "a STATE_OK will be returned. When the server returns its content but exceeds" msgstr "" -#: plugins/check_http.c:1651 plugins/check_http.c:1670 +#: plugins/check_http.c:1688 plugins/check_http.c:1707 msgid "" "the 5-second threshold, a STATE_WARNING will be returned. When an error " "occurs," msgstr "" -#: plugins/check_http.c:1652 plugins/check_http.c:1671 +#: plugins/check_http.c:1689 msgid "a STATE_CRITICAL will be returned." msgstr "" -#: plugins/check_http.c:1655 +#: plugins/check_http.c:1692 msgid "" "When the certificate of 'www.verisign.com' is valid for more than 14 days," msgstr "" -#: plugins/check_http.c:1656 plugins/check_http.c:1662 +#: plugins/check_http.c:1693 plugins/check_http.c:1699 msgid "" "a STATE_OK is returned. When the certificate is still valid, but for less " "than" msgstr "" -#: plugins/check_http.c:1657 +#: plugins/check_http.c:1694 msgid "" "14 days, a STATE_WARNING is returned. A STATE_CRITICAL will be returned when" msgstr "" -#: plugins/check_http.c:1658 +#: plugins/check_http.c:1695 msgid "the certificate is expired." msgstr "" -#: plugins/check_http.c:1661 +#: plugins/check_http.c:1698 msgid "" "When the certificate of 'www.verisign.com' is valid for more than 30 days," msgstr "" -#: plugins/check_http.c:1663 +#: plugins/check_http.c:1700 msgid "30 days, but more than 14 days, a STATE_WARNING is returned." msgstr "" -#: plugins/check_http.c:1664 +#: plugins/check_http.c:1701 msgid "" "A STATE_CRITICAL will be returned when certificate expires in less than 14 " "days" msgstr "" -#: plugins/check_http.c:1667 +#: plugins/check_http.c:1704 msgid "" "check_http -I 192.168.100.35 -p 80 -u https://www.verisign.com/ -S -j " "CONNECT -H www.verisign.com " msgstr "" -#: plugins/check_http.c:1668 +#: plugins/check_http.c:1705 msgid "" "all these options are needed: -I -p -u -S" "(sl) -j CONNECT -H " msgstr "" +#: plugins/check_http.c:1708 +msgid "" +"a STATE_CRITICAL will be returned. By adding a colon to the method you can " +"set the method used" +msgstr "" + +#: plugins/check_http.c:1709 +msgid "inside the proxied connection: -j CONNECT:POST" +msgstr "" + #: plugins/check_ldap.c:142 #, c-format msgid "Could not connect to the server at port %i\n" @@ -1797,78 +1831,96 @@ msgstr "" msgid "The parameters --warn-entries and --crit-entries are optional." msgstr "" -#: plugins/check_load.c:87 +#: plugins/check_load.c:91 msgid "Warning threshold must be float or float triplet!\n" msgstr "" -#: plugins/check_load.c:132 plugins/check_load.c:148 +#: plugins/check_load.c:136 plugins/check_load.c:152 #, c-format msgid "Error opening %s\n" msgstr "" -#: plugins/check_load.c:163 +#: plugins/check_load.c:167 #, c-format msgid "could not parse load from uptime %s: %s\n" msgstr "" -#: plugins/check_load.c:169 +#: plugins/check_load.c:173 #, c-format msgid "Error code %d returned in %s\n" msgstr "" -#: plugins/check_load.c:184 +#: plugins/check_load.c:188 #, c-format msgid "Error in getloadavg()\n" msgstr "" -#: plugins/check_load.c:187 plugins/check_load.c:189 +#: plugins/check_load.c:191 plugins/check_load.c:193 #, c-format msgid "Error processing %s\n" msgstr "" -#: plugins/check_load.c:198 +#: plugins/check_load.c:202 #, c-format msgid "load average: %.2f, %.2f, %.2f" msgstr "" -#: plugins/check_load.c:291 +#: plugins/check_load.c:302 #, c-format msgid "Critical threshold for %d-minute load average is not specified\n" msgstr "" -#: plugins/check_load.c:293 +#: plugins/check_load.c:304 #, c-format msgid "Warning threshold for %d-minute load average is not specified\n" msgstr "" -#: plugins/check_load.c:295 +#: plugins/check_load.c:306 #, c-format msgid "" "Parameter inconsistency: %d-minute \"warning load\" is greater than " "\"critical load\"\n" msgstr "" -#: plugins/check_load.c:311 +#: plugins/check_load.c:322 #, c-format msgid "This plugin tests the current system load average." msgstr "" -#: plugins/check_load.c:321 +#: plugins/check_load.c:332 msgid "Exit with WARNING status if load average exceeds WLOADn" msgstr "" -#: plugins/check_load.c:323 +#: plugins/check_load.c:334 msgid "Exit with CRITICAL status if load average exceed CLOADn" msgstr "" -#: plugins/check_load.c:324 +#: plugins/check_load.c:335 msgid "the load average format is the same used by \"uptime\" and \"w\"" msgstr "" -#: plugins/check_load.c:326 +#: plugins/check_load.c:337 msgid "Divide the load averages by the number of CPUs (when possible)" msgstr "" +#: plugins/check_load.c:339 +msgid "Number of processes to show when printing the top consuming processes." +msgstr "" + +#: plugins/check_load.c:340 +msgid "NUMBER_OF_PROCS=0 disables this feature. Default value is 0" +msgstr "" + +#: plugins/check_load.c:377 +#, c-format +msgid "'%s' exited with non-zero status.\n" +msgstr "" + +#: plugins/check_load.c:381 +#, c-format +msgid "some error occurred getting procs list.\n" +msgstr "" + #: plugins/check_mrtg.c:75 msgid "Could not parse arguments\n" msgstr "" @@ -2155,105 +2207,105 @@ msgstr "" msgid "Slave running: %s" msgstr "" -#: plugins/check_mysql.c:514 +#: plugins/check_mysql.c:517 msgid "This program tests connections to a MySQL server" msgstr "" -#: plugins/check_mysql.c:525 +#: plugins/check_mysql.c:528 msgid "Ignore authentication failure and check for mysql connectivity only" msgstr "" -#: plugins/check_mysql.c:528 +#: plugins/check_mysql.c:531 msgid "Use the specified socket (has no effect if -H is used)" msgstr "" -#: plugins/check_mysql.c:531 +#: plugins/check_mysql.c:534 msgid "Check database with indicated name" msgstr "" -#: plugins/check_mysql.c:533 +#: plugins/check_mysql.c:536 msgid "Read from the specified client options file" msgstr "" -#: plugins/check_mysql.c:535 +#: plugins/check_mysql.c:538 msgid "Use a client options group" msgstr "" -#: plugins/check_mysql.c:537 +#: plugins/check_mysql.c:540 msgid "Connect using the indicated username" msgstr "" -#: plugins/check_mysql.c:539 +#: plugins/check_mysql.c:542 msgid "Use the indicated password to authenticate the connection" msgstr "" -#: plugins/check_mysql.c:540 +#: plugins/check_mysql.c:543 msgid "IMPORTANT: THIS FORM OF AUTHENTICATION IS NOT SECURE!!!" msgstr "" -#: plugins/check_mysql.c:541 +#: plugins/check_mysql.c:544 msgid "Your clear-text password could be visible as a process table entry" msgstr "" -#: plugins/check_mysql.c:543 +#: plugins/check_mysql.c:546 msgid "Check if the slave thread is running properly." msgstr "" -#: plugins/check_mysql.c:545 +#: plugins/check_mysql.c:548 msgid "Exit with WARNING status if slave server is more than INTEGER seconds" msgstr "" -#: plugins/check_mysql.c:546 plugins/check_mysql.c:549 +#: plugins/check_mysql.c:549 plugins/check_mysql.c:552 msgid "behind master" msgstr "" -#: plugins/check_mysql.c:548 +#: plugins/check_mysql.c:551 msgid "Exit with CRITICAL status if slave server is more then INTEGER seconds" msgstr "" -#: plugins/check_mysql.c:551 +#: plugins/check_mysql.c:554 msgid "Use ssl encryptation" msgstr "" -#: plugins/check_mysql.c:553 +#: plugins/check_mysql.c:556 msgid "Path to CA signing the cert" msgstr "" -#: plugins/check_mysql.c:555 +#: plugins/check_mysql.c:558 msgid "Path to SSL certificate" msgstr "" -#: plugins/check_mysql.c:557 +#: plugins/check_mysql.c:560 msgid "Path to private SSL key" msgstr "" -#: plugins/check_mysql.c:559 +#: plugins/check_mysql.c:562 msgid "Path to CA directory" msgstr "" -#: plugins/check_mysql.c:561 +#: plugins/check_mysql.c:564 msgid "List of valid SSL ciphers" msgstr "" -#: plugins/check_mysql.c:565 +#: plugins/check_mysql.c:568 msgid "" "There are no required arguments. By default, the local database is checked" msgstr "" -#: plugins/check_mysql.c:566 +#: plugins/check_mysql.c:569 msgid "" "using the default unix socket. You can force TCP on localhost by using an" msgstr "" -#: plugins/check_mysql.c:567 +#: plugins/check_mysql.c:570 msgid "IP address or FQDN ('localhost' will use the socket as well)." msgstr "" -#: plugins/check_mysql.c:571 +#: plugins/check_mysql.c:574 msgid "You must specify -p with an empty string to force an empty password," msgstr "" -#: plugins/check_mysql.c:572 +#: plugins/check_mysql.c:575 msgid "overriding any my.cnf settings." msgstr "" @@ -3451,213 +3503,213 @@ msgid "" "higher than the warning threshold value, EXCEPT with the uptime variable" msgstr "" -#: plugins/check_pgsql.c:222 +#: plugins/check_pgsql.c:223 #, c-format msgid "CRITICAL - no connection to '%s' (%s).\n" msgstr "" -#: plugins/check_pgsql.c:250 +#: plugins/check_pgsql.c:251 #, c-format msgid " %s - database %s (%f sec.)|%s\n" msgstr "" -#: plugins/check_pgsql.c:317 plugins/check_time.c:277 plugins/check_time.c:289 +#: plugins/check_pgsql.c:318 plugins/check_time.c:277 plugins/check_time.c:289 #: plugins/check_users.c:228 msgid "Critical threshold must be a positive integer" msgstr "" -#: plugins/check_pgsql.c:323 plugins/check_time.c:258 plugins/check_time.c:282 +#: plugins/check_pgsql.c:324 plugins/check_time.c:258 plugins/check_time.c:282 #: plugins/check_users.c:226 msgid "Warning threshold must be a positive integer" msgstr "" -#: plugins/check_pgsql.c:347 +#: plugins/check_pgsql.c:348 msgid "Database name is not valid" msgstr "" -#: plugins/check_pgsql.c:353 +#: plugins/check_pgsql.c:354 msgid "User name is not valid" msgstr "" -#: plugins/check_pgsql.c:504 +#: plugins/check_pgsql.c:505 #, c-format msgid "Test whether a PostgreSQL Database is accepting connections." msgstr "" -#: plugins/check_pgsql.c:516 +#: plugins/check_pgsql.c:517 msgid "Database to check " msgstr "" -#: plugins/check_pgsql.c:517 +#: plugins/check_pgsql.c:518 #, c-format msgid "(default: %s)\n" msgstr "" -#: plugins/check_pgsql.c:519 +#: plugins/check_pgsql.c:520 msgid "Login name of user" msgstr "" -#: plugins/check_pgsql.c:521 +#: plugins/check_pgsql.c:522 msgid "Password (BIG SECURITY ISSUE)" msgstr "" -#: plugins/check_pgsql.c:523 +#: plugins/check_pgsql.c:524 msgid "Connection parameters (keyword = value), see below" msgstr "" -#: plugins/check_pgsql.c:530 +#: plugins/check_pgsql.c:531 msgid "SQL query to run. Only first column in first row will be read" msgstr "" -#: plugins/check_pgsql.c:532 +#: plugins/check_pgsql.c:533 msgid "SQL query value to result in warning status (double)" msgstr "" -#: plugins/check_pgsql.c:534 +#: plugins/check_pgsql.c:535 msgid "SQL query value to result in critical status (double)" msgstr "" -#: plugins/check_pgsql.c:539 +#: plugins/check_pgsql.c:540 msgid "All parameters are optional." msgstr "" -#: plugins/check_pgsql.c:540 +#: plugins/check_pgsql.c:541 msgid "" "This plugin tests a PostgreSQL DBMS to determine whether it is active and" msgstr "" -#: plugins/check_pgsql.c:541 -msgid "accepting queries. In its current operation, it simply connects to the" -msgstr "" - #: plugins/check_pgsql.c:542 -msgid "" -"specified database, and then disconnects. If no database is specified, it" +msgid "accepting queries. In its current operation, it simply connects to the" msgstr "" #: plugins/check_pgsql.c:543 msgid "" -"connects to the template1 database, which is present in every functioning" +"specified database, and then disconnects. If no database is specified, it" msgstr "" #: plugins/check_pgsql.c:544 +msgid "" +"connects to the template1 database, which is present in every functioning" +msgstr "" + +#: plugins/check_pgsql.c:545 msgid "PostgreSQL DBMS." msgstr "" -#: plugins/check_pgsql.c:546 +#: plugins/check_pgsql.c:547 msgid "If a query is specified using the -q option, it will be executed after" msgstr "" -#: plugins/check_pgsql.c:547 +#: plugins/check_pgsql.c:548 msgid "connecting to the server. The result from the query has to be numeric." msgstr "" -#: plugins/check_pgsql.c:548 +#: plugins/check_pgsql.c:549 msgid "" "Multiple SQL commands, separated by semicolon, are allowed but the result " msgstr "" -#: plugins/check_pgsql.c:549 +#: plugins/check_pgsql.c:550 msgid "of the last command is taken into account only. The value of the first" msgstr "" -#: plugins/check_pgsql.c:550 +#: plugins/check_pgsql.c:551 msgid "column in the first row is used as the check result." msgstr "" -#: plugins/check_pgsql.c:552 -msgid "" -"See the chapter \"Monitoring Database Activity\" of the PostgreSQL manual" -msgstr "" - #: plugins/check_pgsql.c:553 msgid "" -"for details about how to access internal statistics of the database server." +"See the chapter \"Monitoring Database Activity\" of the PostgreSQL manual" msgstr "" -#: plugins/check_pgsql.c:555 +#: plugins/check_pgsql.c:554 msgid "" -"For a list of available connection parameters which may be used with the -o" +"for details about how to access internal statistics of the database server." msgstr "" #: plugins/check_pgsql.c:556 msgid "" -"command line option, see the documentation for PQconnectdb() in the chapter" +"For a list of available connection parameters which may be used with the -o" msgstr "" #: plugins/check_pgsql.c:557 msgid "" -"\"libpq - C Library\" of the PostgreSQL manual. For example, this may be" +"command line option, see the documentation for PQconnectdb() in the chapter" msgstr "" #: plugins/check_pgsql.c:558 msgid "" -"used to specify a service name in pg_service.conf to be used for additional" +"\"libpq - C Library\" of the PostgreSQL manual. For example, this may be" msgstr "" #: plugins/check_pgsql.c:559 -msgid "connection parameters: -o 'service=' or to specify the SSL mode:" +msgid "" +"used to specify a service name in pg_service.conf to be used for additional" msgstr "" #: plugins/check_pgsql.c:560 -msgid "-o 'sslmode=require'." +msgid "connection parameters: -o 'service=' or to specify the SSL mode:" msgstr "" -#: plugins/check_pgsql.c:562 -msgid "" -"The plugin will connect to a local postmaster if no host is specified. To" +#: plugins/check_pgsql.c:561 +msgid "-o 'sslmode=require'." msgstr "" #: plugins/check_pgsql.c:563 msgid "" -"connect to a remote host, be sure that the remote postmaster accepts TCP/IP" +"The plugin will connect to a local postmaster if no host is specified. To" msgstr "" #: plugins/check_pgsql.c:564 +msgid "" +"connect to a remote host, be sure that the remote postmaster accepts TCP/IP" +msgstr "" + +#: plugins/check_pgsql.c:565 msgid "connections (start the postmaster with the -i option)." msgstr "" -#: plugins/check_pgsql.c:566 +#: plugins/check_pgsql.c:567 msgid "" "Typically, the monitoring user (unless the --logname option is used) should " "be" msgstr "" -#: plugins/check_pgsql.c:567 +#: plugins/check_pgsql.c:568 msgid "" "able to connect to the database without a password. The plugin can also send" msgstr "" -#: plugins/check_pgsql.c:568 -msgid "a password, but no effort is made to obsure or encrypt the password." +#: plugins/check_pgsql.c:569 +msgid "a password, but no effort is made to obscure or encrypt the password." msgstr "" -#: plugins/check_pgsql.c:601 +#: plugins/check_pgsql.c:602 #, c-format msgid "QUERY %s - %s: %s.\n" msgstr "" -#: plugins/check_pgsql.c:601 +#: plugins/check_pgsql.c:602 msgid "Error with query" msgstr "" -#: plugins/check_pgsql.c:607 +#: plugins/check_pgsql.c:608 msgid "No rows returned" msgstr "" -#: plugins/check_pgsql.c:612 +#: plugins/check_pgsql.c:613 msgid "No columns returned" msgstr "" -#: plugins/check_pgsql.c:618 +#: plugins/check_pgsql.c:619 msgid "No data returned" msgstr "" -#: plugins/check_pgsql.c:627 +#: plugins/check_pgsql.c:628 msgid "Is not a numeric" msgstr "" -#: plugins/check_pgsql.c:644 +#: plugins/check_pgsql.c:645 #, c-format msgid "'%s' returned %f" msgstr "" @@ -4066,18 +4118,30 @@ msgid "Critical if < 2 or > 1024 processes" msgstr "" #: plugins/check_procs.c:768 -msgid "Warning alert if > 10 processes with command arguments containing" +msgid "Critical if not at least 1 process with command sshd" msgstr "" -#: plugins/check_procs.c:769 -msgid "'/usr/local/bin/perl' and owned by root" +#: plugins/check_procs.c:770 +msgid "Warning if > 1024 processes with command name sshd." msgstr "" #: plugins/check_procs.c:771 -msgid "Alert if VSZ of any processes over 50K or 100K" +msgid "Critical if < 1 processes with command name sshd." msgstr "" #: plugins/check_procs.c:773 +msgid "Warning alert if > 10 processes with command arguments containing" +msgstr "" + +#: plugins/check_procs.c:774 +msgid "'/usr/local/bin/perl' and owned by root" +msgstr "" + +#: plugins/check_procs.c:776 +msgid "Alert if VSZ of any processes over 50K or 100K" +msgstr "" + +#: plugins/check_procs.c:778 #, c-format msgid "Alert if CPU of any processes over 10%% or 20%%" msgstr "" @@ -4153,7 +4217,7 @@ msgid "The user to authenticate" msgstr "" #: plugins/check_radius.c:363 -msgid "Password for autentication (SECURITY RISK)" +msgid "Password for authentication (SECURITY RISK)" msgstr "" #: plugins/check_radius.c:365 @@ -4237,7 +4301,7 @@ msgstr "" msgid "Invalid REAL response received from host on port %d\n" msgstr "" -#: plugins/check_real.c:185 plugins/check_tcp.c:310 +#: plugins/check_real.c:185 plugins/check_tcp.c:315 #, c-format msgid "No data received from host\n" msgstr "" @@ -4276,7 +4340,7 @@ msgstr "" msgid "This plugin will attempt to open an RTSP connection with the host." msgstr "" -#: plugins/check_real.c:439 plugins/check_smtp.c:836 +#: plugins/check_real.c:439 plugins/check_smtp.c:837 msgid "Successul connects return STATE_OK, refusals and timeouts return" msgstr "" @@ -4287,7 +4351,7 @@ msgstr "" #: plugins/check_real.c:441 msgid "" -"but incorrect reponse messages from the host result in STATE_WARNING return" +"but incorrect response messages from the host result in STATE_WARNING return" msgstr "" #: plugins/check_real.c:442 @@ -4342,164 +4406,164 @@ msgstr "" msgid "Invalid SMTP response received from host on port %d: %s\n" msgstr "" -#: plugins/check_smtp.c:307 plugins/check_snmp.c:833 +#: plugins/check_smtp.c:308 plugins/check_snmp.c:833 #, c-format msgid "Could Not Compile Regular Expression" msgstr "" -#: plugins/check_smtp.c:316 +#: plugins/check_smtp.c:317 #, c-format msgid "SMTP %s - Invalid response '%s' to command '%s'\n" msgstr "" -#: plugins/check_smtp.c:320 plugins/check_snmp.c:520 +#: plugins/check_smtp.c:321 plugins/check_snmp.c:520 #, c-format msgid "Execute Error: %s\n" msgstr "" -#: plugins/check_smtp.c:334 +#: plugins/check_smtp.c:335 msgid "no authuser specified, " msgstr "" -#: plugins/check_smtp.c:339 +#: plugins/check_smtp.c:340 msgid "no authpass specified, " msgstr "" -#: plugins/check_smtp.c:346 plugins/check_smtp.c:367 plugins/check_smtp.c:387 -#: plugins/check_smtp.c:692 +#: plugins/check_smtp.c:347 plugins/check_smtp.c:368 plugins/check_smtp.c:388 +#: plugins/check_smtp.c:693 #, c-format msgid "sent %s\n" msgstr "" -#: plugins/check_smtp.c:349 +#: plugins/check_smtp.c:350 msgid "recv() failed after AUTH LOGIN, " msgstr "" -#: plugins/check_smtp.c:354 plugins/check_smtp.c:375 plugins/check_smtp.c:395 -#: plugins/check_smtp.c:703 +#: plugins/check_smtp.c:355 plugins/check_smtp.c:376 plugins/check_smtp.c:396 +#: plugins/check_smtp.c:704 #, c-format msgid "received %s\n" msgstr "" -#: plugins/check_smtp.c:358 +#: plugins/check_smtp.c:359 msgid "invalid response received after AUTH LOGIN, " msgstr "" -#: plugins/check_smtp.c:371 +#: plugins/check_smtp.c:372 msgid "recv() failed after sending authuser, " msgstr "" -#: plugins/check_smtp.c:379 +#: plugins/check_smtp.c:380 msgid "invalid response received after authuser, " msgstr "" -#: plugins/check_smtp.c:391 +#: plugins/check_smtp.c:392 msgid "recv() failed after sending authpass, " msgstr "" -#: plugins/check_smtp.c:399 +#: plugins/check_smtp.c:400 msgid "invalid response received after authpass, " msgstr "" -#: plugins/check_smtp.c:406 +#: plugins/check_smtp.c:407 msgid "only authtype LOGIN is supported, " msgstr "" -#: plugins/check_smtp.c:430 +#: plugins/check_smtp.c:431 #, c-format msgid "SMTP %s - %s%.3f sec. response time%s%s|%s\n" msgstr "" -#: plugins/check_smtp.c:540 plugins/check_smtp.c:552 +#: plugins/check_smtp.c:541 plugins/check_smtp.c:553 #, c-format msgid "Could not realloc() units [%d]\n" msgstr "" -#: plugins/check_smtp.c:560 +#: plugins/check_smtp.c:561 msgid "Critical time must be a positive" msgstr "" -#: plugins/check_smtp.c:568 +#: plugins/check_smtp.c:569 msgid "Warning time must be a positive" msgstr "" -#: plugins/check_smtp.c:611 +#: plugins/check_smtp.c:612 msgid "SSL support not available - install OpenSSL and recompile" msgstr "" -#: plugins/check_smtp.c:683 plugins/check_smtp.c:688 +#: plugins/check_smtp.c:684 plugins/check_smtp.c:689 #, c-format msgid "Connection closed by server before sending QUIT command\n" msgstr "" -#: plugins/check_smtp.c:698 +#: plugins/check_smtp.c:699 #, c-format msgid "recv() failed after QUIT." msgstr "" -#: plugins/check_smtp.c:700 +#: plugins/check_smtp.c:701 #, c-format msgid "Connection reset by peer." msgstr "" -#: plugins/check_smtp.c:790 +#: plugins/check_smtp.c:791 msgid "This plugin will attempt to open an SMTP connection with the host." msgstr "" -#: plugins/check_smtp.c:804 +#: plugins/check_smtp.c:805 #, c-format msgid " String to expect in first line of server response (default: '%s')\n" msgstr "" -#: plugins/check_smtp.c:806 +#: plugins/check_smtp.c:807 msgid "SMTP command (may be used repeatedly)" msgstr "" -#: plugins/check_smtp.c:808 +#: plugins/check_smtp.c:809 msgid "Expected response to command (may be used repeatedly)" msgstr "" -#: plugins/check_smtp.c:810 +#: plugins/check_smtp.c:811 msgid "FROM-address to include in MAIL command, required by Exchange 2000" msgstr "" -#: plugins/check_smtp.c:812 +#: plugins/check_smtp.c:813 msgid "FQDN used for HELO" msgstr "" -#: plugins/check_smtp.c:815 plugins/check_tcp.c:670 +#: plugins/check_smtp.c:816 plugins/check_tcp.c:689 msgid "Minimum number of days a certificate has to be valid." msgstr "" -#: plugins/check_smtp.c:817 +#: plugins/check_smtp.c:818 msgid "Use STARTTLS for the connection." msgstr "" -#: plugins/check_smtp.c:821 +#: plugins/check_smtp.c:822 msgid "SMTP AUTH type to check (default none, only LOGIN supported)" msgstr "" -#: plugins/check_smtp.c:823 +#: plugins/check_smtp.c:824 msgid "SMTP AUTH username" msgstr "" -#: plugins/check_smtp.c:825 +#: plugins/check_smtp.c:826 msgid "SMTP AUTH password" msgstr "" -#: plugins/check_smtp.c:827 +#: plugins/check_smtp.c:828 msgid "Ignore failure when sending QUIT command to server" msgstr "" -#: plugins/check_smtp.c:837 +#: plugins/check_smtp.c:838 msgid "STATE_CRITICAL, other errors return STATE_UNKNOWN. Successful" msgstr "" -#: plugins/check_smtp.c:838 -msgid "connects, but incorrect reponse messages from the host result in" +#: plugins/check_smtp.c:839 +msgid "connects, but incorrect response messages from the host result in" msgstr "" -#: plugins/check_smtp.c:839 +#: plugins/check_smtp.c:840 msgid "STATE_WARNING return values." msgstr "" @@ -4714,86 +4778,92 @@ msgstr "" msgid "Separates output on multiple OID requests" msgstr "" -#: plugins/check_snmp.c:1211 -msgid "Number of retries to be used in the requests" -msgstr "" - -#: plugins/check_snmp.c:1214 -msgid "Label performance data with OIDs instead of --label's" -msgstr "" - -#: plugins/check_snmp.c:1219 +#: plugins/check_snmp.c:1210 msgid "" -"This plugin uses the 'snmpget' command included with the NET-SNMP package." +"NOTE the final timeout value is calculated using this formula: " +"timeout_interval * retries + 5" +msgstr "" + +#: plugins/check_snmp.c:1212 +msgid "Number of retries to be used in the requests, default: " +msgstr "" + +#: plugins/check_snmp.c:1215 +msgid "Label performance data with OIDs instead of --label's" msgstr "" #: plugins/check_snmp.c:1220 msgid "" -"if you don't have the package installed, you will need to download it from" +"This plugin uses the 'snmpget' command included with the NET-SNMP package." msgstr "" #: plugins/check_snmp.c:1221 +msgid "" +"if you don't have the package installed, you will need to download it from" +msgstr "" + +#: plugins/check_snmp.c:1222 msgid "http://net-snmp.sourceforge.net before you can use this plugin." msgstr "" -#: plugins/check_snmp.c:1225 +#: plugins/check_snmp.c:1226 msgid "" "- Multiple OIDs (and labels) may be indicated by a comma or space-delimited " msgstr "" -#: plugins/check_snmp.c:1226 +#: plugins/check_snmp.c:1227 msgid "list (lists with internal spaces must be quoted)." msgstr "" -#: plugins/check_snmp.c:1230 +#: plugins/check_snmp.c:1231 msgid "" "- When checking multiple OIDs, separate ranges by commas like '-w " "1:10,1:,:20'" msgstr "" -#: plugins/check_snmp.c:1231 +#: plugins/check_snmp.c:1232 msgid "- Note that only one string and one regex may be checked at present" msgstr "" -#: plugins/check_snmp.c:1232 +#: plugins/check_snmp.c:1233 msgid "" "- All evaluation methods other than PR, STR, and SUBSTR expect that the value" msgstr "" -#: plugins/check_snmp.c:1233 +#: plugins/check_snmp.c:1234 msgid "returned from the SNMP query is an unsigned integer." msgstr "" -#: plugins/check_snmp.c:1236 +#: plugins/check_snmp.c:1237 msgid "Rate Calculation:" msgstr "" -#: plugins/check_snmp.c:1237 +#: plugins/check_snmp.c:1238 msgid "In many places, SNMP returns counters that are only meaningful when" msgstr "" -#: plugins/check_snmp.c:1238 +#: plugins/check_snmp.c:1239 msgid "calculating the counter difference since the last check. check_snmp" msgstr "" -#: plugins/check_snmp.c:1239 +#: plugins/check_snmp.c:1240 msgid "saves the last state information in a file so that the rate per second" msgstr "" -#: plugins/check_snmp.c:1240 +#: plugins/check_snmp.c:1241 msgid "can be calculated. Use the --rate option to save state information." msgstr "" -#: plugins/check_snmp.c:1241 +#: plugins/check_snmp.c:1242 msgid "" "On the first run, there will be no prior state - this will return with OK." msgstr "" -#: plugins/check_snmp.c:1242 +#: plugins/check_snmp.c:1243 msgid "The state is uniquely determined by the arguments to the plugin, so" msgstr "" -#: plugins/check_snmp.c:1243 +#: plugins/check_snmp.c:1244 msgid "changing the arguments will create a new state file." msgstr "" @@ -4938,108 +5008,112 @@ msgstr "" msgid "On AIX, if -a is specified, uses lsps -a, otherwise uses lsps -s." msgstr "" -#: plugins/check_tcp.c:205 +#: plugins/check_tcp.c:210 msgid "CRITICAL - Generic check_tcp called with unknown service\n" msgstr "" -#: plugins/check_tcp.c:229 +#: plugins/check_tcp.c:234 msgid "With UDP checks, a send/expect string must be specified." msgstr "" -#: plugins/check_tcp.c:435 +#: plugins/check_tcp.c:445 msgid "No arguments found" msgstr "" -#: plugins/check_tcp.c:538 +#: plugins/check_tcp.c:548 msgid "Maxbytes must be a positive integer" msgstr "" -#: plugins/check_tcp.c:556 +#: plugins/check_tcp.c:566 msgid "Refuse must be one of ok, warn, crit" msgstr "" -#: plugins/check_tcp.c:566 +#: plugins/check_tcp.c:576 msgid "Mismatch must be one of ok, warn, crit" msgstr "" -#: plugins/check_tcp.c:572 +#: plugins/check_tcp.c:582 msgid "Delay must be a positive integer" msgstr "" -#: plugins/check_tcp.c:618 +#: plugins/check_tcp.c:637 msgid "You must provide a server address" msgstr "" -#: plugins/check_tcp.c:620 +#: plugins/check_tcp.c:639 msgid "Invalid hostname, address or socket" msgstr "" -#: plugins/check_tcp.c:634 +#: plugins/check_tcp.c:653 #, c-format msgid "" "This plugin tests %s connections with the specified host (or unix socket).\n" "\n" msgstr "" -#: plugins/check_tcp.c:647 +#: plugins/check_tcp.c:666 msgid "" "Can use \\n, \\r, \\t or \\\\ in send or quit string. Must come before send " "or quit option" msgstr "" -#: plugins/check_tcp.c:648 +#: plugins/check_tcp.c:667 msgid "Default: nothing added to send, \\r\\n added to end of quit" msgstr "" -#: plugins/check_tcp.c:650 +#: plugins/check_tcp.c:669 msgid "String to send to the server" msgstr "" -#: plugins/check_tcp.c:652 +#: plugins/check_tcp.c:671 msgid "String to expect in server response" msgstr "" -#: plugins/check_tcp.c:652 +#: plugins/check_tcp.c:671 msgid "(may be repeated)" msgstr "" -#: plugins/check_tcp.c:654 +#: plugins/check_tcp.c:673 msgid "All expect strings need to occur in server response. Default is any" msgstr "" -#: plugins/check_tcp.c:656 +#: plugins/check_tcp.c:675 msgid "String to send server to initiate a clean close of the connection" msgstr "" -#: plugins/check_tcp.c:658 +#: plugins/check_tcp.c:677 msgid "Accept TCP refusals with states ok, warn, crit (default: crit)" msgstr "" -#: plugins/check_tcp.c:660 +#: plugins/check_tcp.c:679 msgid "" "Accept expected string mismatches with states ok, warn, crit (default: warn)" msgstr "" -#: plugins/check_tcp.c:662 +#: plugins/check_tcp.c:681 msgid "Hide output from TCP socket" msgstr "" -#: plugins/check_tcp.c:664 +#: plugins/check_tcp.c:683 msgid "Close connection once more than this number of bytes are received" msgstr "" -#: plugins/check_tcp.c:666 +#: plugins/check_tcp.c:685 msgid "Seconds to wait between sending string and polling for response" msgstr "" -#: plugins/check_tcp.c:671 +#: plugins/check_tcp.c:690 msgid "1st is #days for warning, 2nd is critical (if not specified - 0)." msgstr "" -#: plugins/check_tcp.c:673 +#: plugins/check_tcp.c:692 msgid "Use SSL for the connection." msgstr "" +#: plugins/check_tcp.c:694 +msgid "SSL server_name" +msgstr "" + #: plugins/check_time.c:102 #, c-format msgid "TIME UNKNOWN - could not connect to server %s, port %d\n" @@ -5433,119 +5507,119 @@ msgstr "" msgid "-i/--immediate: use \"smartctl --test=offline\"" msgstr "" -#: plugins/negate.c:98 +#: plugins/negate.c:96 msgid "No data returned from command\n" msgstr "" -#: plugins/negate.c:168 +#: plugins/negate.c:166 msgid "" "Timeout result must be a valid state name (OK, WARNING, CRITICAL, UNKNOWN) " "or integer (0-3)." msgstr "" -#: plugins/negate.c:172 +#: plugins/negate.c:170 msgid "" "Ok must be a valid state name (OK, WARNING, CRITICAL, UNKNOWN) or integer " "(0-3)." msgstr "" -#: plugins/negate.c:178 +#: plugins/negate.c:176 msgid "" "Warning must be a valid state name (OK, WARNING, CRITICAL, UNKNOWN) or " "integer (0-3)." msgstr "" -#: plugins/negate.c:183 +#: plugins/negate.c:181 msgid "" "Critical must be a valid state name (OK, WARNING, CRITICAL, UNKNOWN) or " "integer (0-3)." msgstr "" -#: plugins/negate.c:188 +#: plugins/negate.c:186 msgid "" "Unknown must be a valid state name (OK, WARNING, CRITICAL, UNKNOWN) or " "integer (0-3)." msgstr "" -#: plugins/negate.c:215 +#: plugins/negate.c:213 msgid "Require path to command" msgstr "" -#: plugins/negate.c:226 +#: plugins/negate.c:224 msgid "" "Negates the status of a plugin (returns OK for CRITICAL and vice-versa)." msgstr "" -#: plugins/negate.c:227 +#: plugins/negate.c:225 msgid "Additional switches can be used to control which state becomes what." msgstr "" -#: plugins/negate.c:236 +#: plugins/negate.c:234 msgid "Keep timeout longer than the plugin timeout to retain CRITICAL status." msgstr "" -#: plugins/negate.c:238 +#: plugins/negate.c:236 msgid "Custom result on Negate timeouts; see below for STATUS definition\n" msgstr "" -#: plugins/negate.c:244 +#: plugins/negate.c:242 #, c-format msgid "" " STATUS can be 'OK', 'WARNING', 'CRITICAL' or 'UNKNOWN' without single\n" msgstr "" -#: plugins/negate.c:245 +#: plugins/negate.c:243 #, c-format msgid "" " quotes. Numeric values are accepted. If nothing is specified, permutes\n" msgstr "" -#: plugins/negate.c:246 +#: plugins/negate.c:244 #, c-format msgid " OK and CRITICAL.\n" msgstr "" -#: plugins/negate.c:248 +#: plugins/negate.c:246 #, c-format msgid "" " Substitute output text as well. Will only substitute text in CAPITALS\n" msgstr "" -#: plugins/negate.c:253 +#: plugins/negate.c:251 msgid "Run check_ping and invert result. Must use full path to plugin" msgstr "" -#: plugins/negate.c:255 +#: plugins/negate.c:253 msgid "This will return OK instead of WARNING and UNKNOWN instead of CRITICAL" msgstr "" -#: plugins/negate.c:258 +#: plugins/negate.c:256 msgid "" "This plugin is a wrapper to take the output of another plugin and invert it." msgstr "" -#: plugins/negate.c:259 +#: plugins/negate.c:257 msgid "The full path of the plugin must be provided." msgstr "" -#: plugins/negate.c:260 +#: plugins/negate.c:258 msgid "If the wrapped plugin returns OK, the wrapper will return CRITICAL." msgstr "" -#: plugins/negate.c:261 +#: plugins/negate.c:259 msgid "If the wrapped plugin returns CRITICAL, the wrapper will return OK." msgstr "" -#: plugins/negate.c:262 +#: plugins/negate.c:260 msgid "Otherwise, the output state of the wrapped plugin is unchanged." msgstr "" -#: plugins/negate.c:264 +#: plugins/negate.c:262 msgid "" "Using timeout-result, it is possible to override the timeout behaviour or a" msgstr "" -#: plugins/negate.c:265 +#: plugins/negate.c:263 msgid "plugin by setting the negate timeout a bit lower." msgstr "" @@ -5579,36 +5653,32 @@ msgstr "" msgid "Receive failed" msgstr "" -#: plugins/netutils.c:342 plugins-root/check_dhcp.c:1313 +#: plugins/netutils.c:342 plugins-root/check_dhcp.c:1314 #, c-format msgid "Invalid hostname/address - %s" msgstr "" -#: plugins/popen.c:142 +#: plugins/popen.c:133 msgid "Could not malloc argv array in popen()" msgstr "" -#: plugins/popen.c:152 +#: plugins/popen.c:143 msgid "CRITICAL - You need more args!!!" msgstr "" -#: plugins/popen.c:209 +#: plugins/popen.c:201 msgid "Cannot catch SIGCHLD" msgstr "" -#: plugins/popen.c:304 +#: plugins/popen.c:287 #, c-format msgid "CRITICAL - Plugin timed out after %d seconds\n" msgstr "" -#: plugins/popen.c:307 +#: plugins/popen.c:290 msgid "CRITICAL - popen timeout received, but no child process" msgstr "" -#: plugins/popen.c:323 -msgid "sysconf error for _SC_OPEN_MAX" -msgstr "" - #: plugins/urlize.c:129 #, c-format msgid "" @@ -5662,31 +5732,30 @@ msgstr "" msgid "urlize http://example.com/ \"check_http -H example.com -r 'two words'\"" msgstr "" -#: plugins/utils.c:172 -#, c-format -msgid "%s - Plugin timed out after %d seconds\n" -msgstr "" - -#: plugins/utils.c:467 +#: plugins/utils.c:437 msgid "failed realloc in strpcpy\n" msgstr "" -#: plugins/utils.c:509 +#: plugins/utils.c:479 msgid "failed malloc in strscat\n" msgstr "" -#: plugins/utils.c:529 +#: plugins/utils.c:499 msgid "failed malloc in xvasprintf\n" msgstr "" -#: plugins/utils.h:125 +#: plugins/utils.c:693 +msgid "sysconf error for _SC_OPEN_MAX\n" +msgstr "" + +#: plugins/utils.h:118 #, c-format msgid "" " %s (-h | --help) for detailed help\n" " %s (-V | --version) for version information\n" msgstr "" -#: plugins/utils.h:129 +#: plugins/utils.h:122 msgid "" "\n" "Options:\n" @@ -5696,7 +5765,7 @@ msgid "" " Print version information\n" msgstr "" -#: plugins/utils.h:136 +#: plugins/utils.h:129 #, c-format msgid "" " -H, --hostname=ADDRESS\n" @@ -5705,7 +5774,7 @@ msgid "" " Port number (default: %s)\n" msgstr "" -#: plugins/utils.h:142 +#: plugins/utils.h:135 msgid "" " -4, --use-ipv4\n" " Use IPv4 connection\n" @@ -5713,14 +5782,14 @@ msgid "" " Use IPv6 connection\n" msgstr "" -#: plugins/utils.h:148 +#: plugins/utils.h:141 msgid "" " -v, --verbose\n" " Show details for command-line debugging (output may be truncated by\n" " the monitoring system)\n" msgstr "" -#: plugins/utils.h:153 +#: plugins/utils.h:146 msgid "" " -w, --warning=DOUBLE\n" " Response time to result in warning status (seconds)\n" @@ -5728,7 +5797,7 @@ msgid "" " Response time to result in critical status (seconds)\n" msgstr "" -#: plugins/utils.h:159 +#: plugins/utils.h:152 msgid "" " -w, --warning=RANGE\n" " Warning range (format: start:end). Alert if outside this range\n" @@ -5736,21 +5805,21 @@ msgid "" " Critical range\n" msgstr "" -#: plugins/utils.h:165 +#: plugins/utils.h:158 #, c-format msgid "" " -t, --timeout=INTEGER\n" " Seconds before connection times out (default: %d)\n" msgstr "" -#: plugins/utils.h:169 +#: plugins/utils.h:162 #, c-format msgid "" " -t, --timeout=INTEGER\n" " Seconds before plugin times out (default: %d)\n" msgstr "" -#: plugins/utils.h:174 +#: plugins/utils.h:167 msgid "" " --extra-opts=[section][@file]\n" " Read options from an ini file. See\n" @@ -5758,14 +5827,14 @@ msgid "" " for usage and examples.\n" msgstr "" -#: plugins/utils.h:183 +#: plugins/utils.h:176 msgid "" " See:\n" " https://www.monitoring-plugins.org/doc/guidelines.html#THRESHOLDFORMAT\n" " for THRESHOLD format and examples.\n" msgstr "" -#: plugins/utils.h:188 +#: plugins/utils.h:181 msgid "" "\n" "Send email to help@monitoring-plugins.org if you have questions regarding\n" @@ -5774,7 +5843,7 @@ msgid "" "\n" msgstr "" -#: plugins/utils.h:193 +#: plugins/utils.h:186 msgid "" "\n" "The Monitoring Plugins come with ABSOLUTELY NO WARRANTY. You may " @@ -5788,397 +5857,401 @@ msgstr "" msgid "Error: Could not get hardware address of interface '%s'\n" msgstr "" -#: plugins-root/check_dhcp.c:339 +#: plugins-root/check_dhcp.c:340 #, c-format msgid "Error: if_nametoindex error - %s.\n" msgstr "" -#: plugins-root/check_dhcp.c:344 +#: plugins-root/check_dhcp.c:345 #, c-format msgid "Error: Couldn't get hardware address from %s. sysctl 1 error - %s.\n" msgstr "" -#: plugins-root/check_dhcp.c:349 +#: plugins-root/check_dhcp.c:350 #, c-format msgid "" "Error: Couldn't get hardware address from interface %s. malloc error - %s.\n" msgstr "" -#: plugins-root/check_dhcp.c:354 +#: plugins-root/check_dhcp.c:355 #, c-format msgid "Error: Couldn't get hardware address from %s. sysctl 2 error - %s.\n" msgstr "" -#: plugins-root/check_dhcp.c:385 +#: plugins-root/check_dhcp.c:386 #, c-format msgid "" "Error: can't find unit number in interface_name (%s) - expecting TypeNumber " "eg lnc0.\n" msgstr "" -#: plugins-root/check_dhcp.c:390 plugins-root/check_dhcp.c:402 +#: plugins-root/check_dhcp.c:391 plugins-root/check_dhcp.c:403 #, c-format msgid "" "Error: can't read MAC address from DLPI streams interface for device %s unit " "%d.\n" msgstr "" -#: plugins-root/check_dhcp.c:408 +#: plugins-root/check_dhcp.c:409 #, c-format msgid "" "Error: can't get MAC address for this architecture. Use the --mac option.\n" msgstr "" -#: plugins-root/check_dhcp.c:427 +#: plugins-root/check_dhcp.c:428 #, c-format msgid "Error: Cannot determine IP address of interface %s\n" msgstr "" -#: plugins-root/check_dhcp.c:435 +#: plugins-root/check_dhcp.c:436 #, c-format msgid "Error: Cannot get interface IP address on this platform.\n" msgstr "" -#: plugins-root/check_dhcp.c:440 +#: plugins-root/check_dhcp.c:441 #, c-format msgid "Pretending to be relay client %s\n" msgstr "" -#: plugins-root/check_dhcp.c:524 +#: plugins-root/check_dhcp.c:525 #, c-format msgid "DHCPDISCOVER to %s port %d\n" msgstr "" -#: plugins-root/check_dhcp.c:576 +#: plugins-root/check_dhcp.c:577 #, c-format msgid "Result=ERROR\n" msgstr "" -#: plugins-root/check_dhcp.c:582 +#: plugins-root/check_dhcp.c:583 #, c-format msgid "Result=OK\n" msgstr "" -#: plugins-root/check_dhcp.c:592 +#: plugins-root/check_dhcp.c:593 #, c-format msgid "DHCPOFFER from IP address %s" msgstr "" -#: plugins-root/check_dhcp.c:593 +#: plugins-root/check_dhcp.c:594 #, c-format msgid " via %s\n" msgstr "" -#: plugins-root/check_dhcp.c:600 +#: plugins-root/check_dhcp.c:601 #, c-format msgid "" "DHCPOFFER XID (%u) did not match DHCPDISCOVER XID (%u) - ignoring packet\n" msgstr "" -#: plugins-root/check_dhcp.c:622 +#: plugins-root/check_dhcp.c:623 #, c-format msgid "DHCPOFFER hardware address did not match our own - ignoring packet\n" msgstr "" -#: plugins-root/check_dhcp.c:640 +#: plugins-root/check_dhcp.c:641 #, c-format msgid "Total responses seen on the wire: %d\n" msgstr "" -#: plugins-root/check_dhcp.c:641 +#: plugins-root/check_dhcp.c:642 #, c-format msgid "Valid responses for this machine: %d\n" msgstr "" -#: plugins-root/check_dhcp.c:656 +#: plugins-root/check_dhcp.c:657 #, c-format msgid "send_dhcp_packet result: %d\n" msgstr "" -#: plugins-root/check_dhcp.c:689 +#: plugins-root/check_dhcp.c:690 #, c-format msgid "No (more) data received (nfound: %d)\n" msgstr "" -#: plugins-root/check_dhcp.c:702 +#: plugins-root/check_dhcp.c:703 #, c-format msgid "recvfrom() failed, " msgstr "" -#: plugins-root/check_dhcp.c:709 +#: plugins-root/check_dhcp.c:710 #, c-format msgid "receive_dhcp_packet() result: %d\n" msgstr "" -#: plugins-root/check_dhcp.c:710 +#: plugins-root/check_dhcp.c:711 #, c-format msgid "receive_dhcp_packet() source: %s\n" msgstr "" -#: plugins-root/check_dhcp.c:740 +#: plugins-root/check_dhcp.c:741 #, c-format msgid "Error: Could not create socket!\n" msgstr "" -#: plugins-root/check_dhcp.c:750 +#: plugins-root/check_dhcp.c:751 #, c-format msgid "Error: Could not set reuse address option on DHCP socket!\n" msgstr "" -#: plugins-root/check_dhcp.c:756 +#: plugins-root/check_dhcp.c:757 #, c-format msgid "Error: Could not set broadcast option on DHCP socket!\n" msgstr "" -#: plugins-root/check_dhcp.c:765 +#: plugins-root/check_dhcp.c:766 #, c-format msgid "" "Error: Could not bind socket to interface %s. Check your privileges...\n" msgstr "" -#: plugins-root/check_dhcp.c:776 +#: plugins-root/check_dhcp.c:777 #, c-format msgid "" "Error: Could not bind to DHCP socket (port %d)! Check your privileges...\n" msgstr "" -#: plugins-root/check_dhcp.c:810 +#: plugins-root/check_dhcp.c:811 #, c-format msgid "Requested server address: %s\n" msgstr "" -#: plugins-root/check_dhcp.c:872 +#: plugins-root/check_dhcp.c:873 #, c-format msgid "Lease Time: Infinite\n" msgstr "" -#: plugins-root/check_dhcp.c:874 +#: plugins-root/check_dhcp.c:875 #, c-format msgid "Lease Time: %lu seconds\n" msgstr "" -#: plugins-root/check_dhcp.c:876 +#: plugins-root/check_dhcp.c:877 #, c-format msgid "Renewal Time: Infinite\n" msgstr "" -#: plugins-root/check_dhcp.c:878 +#: plugins-root/check_dhcp.c:879 #, c-format msgid "Renewal Time: %lu seconds\n" msgstr "" -#: plugins-root/check_dhcp.c:880 +#: plugins-root/check_dhcp.c:881 #, c-format msgid "Rebinding Time: Infinite\n" msgstr "" -#: plugins-root/check_dhcp.c:881 +#: plugins-root/check_dhcp.c:882 #, c-format msgid "Rebinding Time: %lu seconds\n" msgstr "" -#: plugins-root/check_dhcp.c:909 +#: plugins-root/check_dhcp.c:910 #, c-format msgid "Added offer from server @ %s" msgstr "" -#: plugins-root/check_dhcp.c:910 +#: plugins-root/check_dhcp.c:911 #, c-format msgid " of IP address %s\n" msgstr "" -#: plugins-root/check_dhcp.c:977 +#: plugins-root/check_dhcp.c:978 #, c-format msgid "DHCP Server Match: Offerer=%s" msgstr "" -#: plugins-root/check_dhcp.c:978 +#: plugins-root/check_dhcp.c:979 #, c-format msgid " Requested=%s" msgstr "" -#: plugins-root/check_dhcp.c:980 +#: plugins-root/check_dhcp.c:981 #, c-format msgid " (duplicate)" msgstr "" -#: plugins-root/check_dhcp.c:981 +#: plugins-root/check_dhcp.c:982 #, c-format msgid "\n" msgstr "" -#: plugins-root/check_dhcp.c:1029 +#: plugins-root/check_dhcp.c:1030 #, c-format msgid "No DHCPOFFERs were received.\n" msgstr "" -#: plugins-root/check_dhcp.c:1033 +#: plugins-root/check_dhcp.c:1034 #, c-format msgid "Received %d DHCPOFFER(s)" msgstr "" -#: plugins-root/check_dhcp.c:1036 +#: plugins-root/check_dhcp.c:1037 #, c-format msgid ", %s%d of %d requested servers responded" msgstr "" -#: plugins-root/check_dhcp.c:1039 +#: plugins-root/check_dhcp.c:1040 #, c-format msgid ", requested address (%s) was %soffered" msgstr "" -#: plugins-root/check_dhcp.c:1039 +#: plugins-root/check_dhcp.c:1040 msgid "not " msgstr "" -#: plugins-root/check_dhcp.c:1041 +#: plugins-root/check_dhcp.c:1042 #, c-format msgid ", max lease time = " msgstr "" -#: plugins-root/check_dhcp.c:1043 +#: plugins-root/check_dhcp.c:1044 #, c-format msgid "Infinity" msgstr "" -#: plugins-root/check_dhcp.c:1163 +#: plugins-root/check_dhcp.c:1164 msgid "Got unexpected non-option argument" msgstr "" -#: plugins-root/check_dhcp.c:1205 +#: plugins-root/check_dhcp.c:1206 #, c-format msgid "Error: DLPI stream API failed to get MAC in check_ctrl: %s.\n" msgstr "" -#: plugins-root/check_dhcp.c:1217 +#: plugins-root/check_dhcp.c:1218 #, c-format msgid "Error: DLPI stream API failed to get MAC in put_ctrl/putmsg(): %s.\n" msgstr "" -#: plugins-root/check_dhcp.c:1230 +#: plugins-root/check_dhcp.c:1231 #, c-format msgid "Error: DLPI stream API failed to get MAC in put_both/putmsg().\n" msgstr "" -#: plugins-root/check_dhcp.c:1242 +#: plugins-root/check_dhcp.c:1243 #, c-format msgid "" "Error: DLPI stream API failed to get MAC in dl_attach_req/open(%s..): %s.\n" msgstr "" -#: plugins-root/check_dhcp.c:1266 +#: plugins-root/check_dhcp.c:1267 #, c-format msgid "Error: DLPI stream API failed to get MAC in dl_bind/check_ctrl(): %s.\n" msgstr "" -#: plugins-root/check_dhcp.c:1345 +#: plugins-root/check_dhcp.c:1346 #, c-format msgid "Hardware address: " msgstr "" -#: plugins-root/check_dhcp.c:1361 +#: plugins-root/check_dhcp.c:1362 msgid "This plugin tests the availability of DHCP servers on a network." msgstr "" -#: plugins-root/check_dhcp.c:1373 +#: plugins-root/check_dhcp.c:1374 msgid "IP address of DHCP server that we must hear from" msgstr "" -#: plugins-root/check_dhcp.c:1375 +#: plugins-root/check_dhcp.c:1376 msgid "IP address that should be offered by at least one DHCP server" msgstr "" -#: plugins-root/check_dhcp.c:1377 +#: plugins-root/check_dhcp.c:1378 msgid "Seconds to wait for DHCPOFFER before timeout occurs" msgstr "" -#: plugins-root/check_dhcp.c:1379 +#: plugins-root/check_dhcp.c:1380 msgid "Interface to to use for listening (i.e. eth0)" msgstr "" -#: plugins-root/check_dhcp.c:1381 +#: plugins-root/check_dhcp.c:1382 msgid "MAC address to use in the DHCP request" msgstr "" -#: plugins-root/check_dhcp.c:1383 +#: plugins-root/check_dhcp.c:1384 msgid "Unicast testing: mimic a DHCP relay, requires -s" msgstr "" -#: plugins-root/check_icmp.c:1349 +#: plugins-root/check_icmp.c:1554 msgid "specify a target" msgstr "" -#: plugins-root/check_icmp.c:1351 +#: plugins-root/check_icmp.c:1556 +msgid "Use IPv4 (default) or IPv6 to communicate with the targets" +msgstr "" + +#: plugins-root/check_icmp.c:1558 msgid "warning threshold (currently " msgstr "" -#: plugins-root/check_icmp.c:1354 +#: plugins-root/check_icmp.c:1561 msgid "critical threshold (currently " msgstr "" -#: plugins-root/check_icmp.c:1357 +#: plugins-root/check_icmp.c:1564 msgid "specify a source IP address or device name" msgstr "" -#: plugins-root/check_icmp.c:1359 +#: plugins-root/check_icmp.c:1566 msgid "number of packets to send (currently " msgstr "" -#: plugins-root/check_icmp.c:1362 +#: plugins-root/check_icmp.c:1569 msgid "max packet interval (currently " msgstr "" -#: plugins-root/check_icmp.c:1365 +#: plugins-root/check_icmp.c:1572 msgid "max target interval (currently " msgstr "" -#: plugins-root/check_icmp.c:1368 +#: plugins-root/check_icmp.c:1575 msgid "number of alive hosts required for success" msgstr "" -#: plugins-root/check_icmp.c:1371 +#: plugins-root/check_icmp.c:1578 msgid "TTL on outgoing packets (currently " msgstr "" -#: plugins-root/check_icmp.c:1374 +#: plugins-root/check_icmp.c:1581 msgid "timeout value (seconds, currently " msgstr "" -#: plugins-root/check_icmp.c:1377 +#: plugins-root/check_icmp.c:1584 msgid "Number of icmp data bytes to send" msgstr "" -#: plugins-root/check_icmp.c:1378 +#: plugins-root/check_icmp.c:1585 msgid "Packet size will be data bytes + icmp header (currently" msgstr "" -#: plugins-root/check_icmp.c:1380 +#: plugins-root/check_icmp.c:1587 msgid "verbose" msgstr "" -#: plugins-root/check_icmp.c:1384 +#: plugins-root/check_icmp.c:1591 msgid "The -H switch is optional. Naming a host (or several) to check is not." msgstr "" -#: plugins-root/check_icmp.c:1386 +#: plugins-root/check_icmp.c:1593 msgid "" "Threshold format for -w and -c is 200.25,60% for 200.25 msec RTA and 60%" msgstr "" -#: plugins-root/check_icmp.c:1387 +#: plugins-root/check_icmp.c:1594 msgid "packet loss. The default values should work well for most users." msgstr "" -#: plugins-root/check_icmp.c:1388 +#: plugins-root/check_icmp.c:1595 msgid "" "You can specify different RTA factors using the standardized abbreviations" msgstr "" -#: plugins-root/check_icmp.c:1389 +#: plugins-root/check_icmp.c:1596 msgid "" "us (microseconds), ms (milliseconds, default) or just plain s for seconds." msgstr "" -#: plugins-root/check_icmp.c:1395 +#: plugins-root/check_icmp.c:1602 msgid "The -v switch can be specified several times for increased verbosity." msgstr "" diff --git a/release b/release index 8bbe6cf..bb576db 100644 --- a/release +++ b/release @@ -1 +1 @@ -2.2 +2.3 diff --git a/tap/Makefile.in b/tap/Makefile.in index 191c87b..bfedc3e 100644 --- a/tap/Makefile.in +++ b/tap/Makefile.in @@ -58,8 +58,10 @@ subdir = tap DIST_COMMON = README $(am__include_HEADERS_DIST) $(srcdir)/Makefile.am \ $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/m4/np_mysqlclient.m4 \ - $(top_srcdir)/gl/m4/00gnulib.m4 $(top_srcdir)/gl/m4/alloca.m4 \ +am__aclocal_m4_deps = $(top_srcdir)/m4/libcurl.m4 \ + $(top_srcdir)/m4/np_mysqlclient.m4 \ + $(top_srcdir)/m4/uriparser.m4 $(top_srcdir)/gl/m4/00gnulib.m4 \ + $(top_srcdir)/gl/m4/alloca.m4 \ $(top_srcdir)/gl/m4/arpa_inet_h.m4 \ $(top_srcdir)/gl/m4/base64.m4 $(top_srcdir)/gl/m4/btowc.m4 \ $(top_srcdir)/gl/m4/codeset.m4 \ @@ -934,6 +936,11 @@ LD = @LD@ LDAPINCLUDE = @LDAPINCLUDE@ LDAPLIBS = @LDAPLIBS@ LDFLAGS = @LDFLAGS@ +LIBCURL = @LIBCURL@ +LIBCURLCFLAGS = @LIBCURLCFLAGS@ +LIBCURLINCLUDE = @LIBCURLINCLUDE@ +LIBCURLLIBS = @LIBCURLLIBS@ +LIBCURL_CPPFLAGS = @LIBCURL_CPPFLAGS@ LIBGNU_LIBDEPS = @LIBGNU_LIBDEPS@ LIBGNU_LTLIBDEPS = @LIBGNU_LTLIBDEPS@ LIBICONV = @LIBICONV@ @@ -1059,6 +1066,7 @@ PERL = @PERL@ PERLMODS_DIR = @PERLMODS_DIR@ PGINCLUDE = @PGINCLUDE@ PGLIBS = @PGLIBS@ +PKGCONFIG = @PKGCONFIG@ PKG_ARCH = @PKG_ARCH@ PLUGIN_TEST = @PLUGIN_TEST@ POSUB = @POSUB@ @@ -1276,6 +1284,11 @@ TIME_H_DEFINES_STRUCT_TIMESPEC = @TIME_H_DEFINES_STRUCT_TIMESPEC@ UNDEFINE_STRTOK_R = @UNDEFINE_STRTOK_R@ UNISTD_H_HAVE_WINSOCK2_H = @UNISTD_H_HAVE_WINSOCK2_H@ UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS = @UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS@ +URIPARSER = @URIPARSER@ +URIPARSERCFLAGS = @URIPARSERCFLAGS@ +URIPARSERINCLUDE = @URIPARSERINCLUDE@ +URIPARSERLIBS = @URIPARSERLIBS@ +URIPARSER_CPPFLAGS = @URIPARSER_CPPFLAGS@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ WARRANTY = @WARRANTY@ @@ -1286,6 +1299,7 @@ WTSAPI32LIBS = @WTSAPI32LIBS@ XGETTEXT = @XGETTEXT@ XGETTEXT_015 = @XGETTEXT_015@ XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ +_libcurl_config = @_libcurl_config@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@