From 5c6ba24b611a8f17415bfec1e6060f167d955f71 Mon Sep 17 00:00:00 2001 From: Jan Wagner Date: Thu, 10 Dec 2020 21:00:09 +0100 Subject: [PATCH] New upstream version 2.3 --- ACKNOWLEDGEMENTS | 8 +- Makefile.am | 5 +- Makefile.in | 23 +- NEWS | 47 + NP-VERSION-GEN | 2 +- NPTest.pm | 242 +- README | 4 +- REQUIREMENTS | 16 + THANKS | 26 + aclocal.m4 | 2 + config.h.in | 77 +- configure | 770 ++++++- configure.ac | 54 +- gl/Makefile.in | 18 +- gl/fsusage.c | 5 + gl/fsusage.h | 3 +- lib/Makefile.in | 18 +- lib/tests/Makefile.in | 18 +- lib/utils_base.c | 30 +- lib/utils_base.h | 5 + lib/utils_cmd.c | 42 +- lib/utils_cmd.h | 13 + lib/utils_disk.c | 2 + lib/utils_disk.h | 3 +- m4/libcurl.m4 | 272 +++ m4/np_mysqlclient.m4 | 28 +- m4/uriparser.m4 | 140 ++ perlmods/Class-Accessor-0.34.tar.gz | Bin 0 -> 12315 bytes perlmods/Config-Tiny-2.14.tar.gz | Bin 0 -> 16963 bytes perlmods/Makefile | 1514 +++++++++++++ perlmods/Makefile.am | 14 + perlmods/Makefile.in | 1514 +++++++++++++ perlmods/Math-Calc-Units-1.07.tar.gz | Bin 0 -> 34025 bytes perlmods/Module-Build-0.4007.tar.gz | Bin 0 -> 307248 bytes perlmods/Module-Implementation-0.07.tar.gz | Bin 0 -> 11388 bytes perlmods/Module-Metadata-1.000014.tar.gz | Bin 0 -> 30648 bytes perlmods/Module-Runtime-0.013.tar.gz | Bin 0 -> 15849 bytes perlmods/Monitoring-Plugin-0.39.tar.gz | Bin 0 -> 62733 bytes perlmods/Params-Validate-1.08.tar.gz | Bin 0 -> 103728 bytes perlmods/Perl-OSType-1.003.tar.gz | Bin 0 -> 14850 bytes perlmods/Test-Simple-0.98.tar.gz | Bin 0 -> 107255 bytes perlmods/Try-Tiny-0.18.tar.gz | Bin 0 -> 16499 bytes perlmods/install_order | 16 + perlmods/parent-0.226.tar.gz | Bin 0 -> 5883 bytes perlmods/version-0.9903.tar.gz | Bin 0 -> 108336 bytes pkg/solaris/pkginfo | 4 +- plugins-root/Makefile.in | 18 +- plugins-root/check_dhcp.c | 5 +- plugins-root/check_icmp.c | 465 ++-- plugins-scripts/Makefile.am | 2 + plugins-scripts/Makefile.in | 20 +- plugins-scripts/check_disk_smb.pl | 7 +- plugins-scripts/check_file_age.pl | 61 +- plugins-scripts/check_mailq.pl | 8 +- plugins-scripts/check_uptime.pl | 315 +++ plugins-scripts/t/check_file_age.t | 75 +- plugins-scripts/t/check_uptime.t | 129 ++ plugins-scripts/t/utils.t | 1 + plugins/Makefile.am | 9 +- plugins/Makefile.in | 359 ++- plugins/check_apt.c | 94 +- plugins/check_cluster.c | 10 + plugins/check_curl.c | 2335 ++++++++++++++++++++ plugins/check_dbi.c | 1 + plugins/check_dig.c | 2 +- plugins/check_disk.c | 52 +- plugins/check_dns.c | 82 +- plugins/check_fping.c | 2 +- plugins/check_hpjd.c | 12 +- plugins/check_http.c | 48 +- plugins/check_ide_smart.c | 2 +- plugins/check_ldap.c | 2 +- plugins/check_load.c | 61 +- plugins/check_mysql.c | 3 + plugins/check_ntp.c | 4 +- plugins/check_ntp_peer.c | 2 +- plugins/check_pgsql.c | 3 +- plugins/check_procs.c | 5 + plugins/check_radius.c | 2 +- plugins/check_real.c | 2 +- plugins/check_smtp.c | 3 +- plugins/check_snmp.c | 3 +- plugins/check_swap.c | 16 +- plugins/check_tcp.c | 23 +- plugins/common.h | 19 + plugins/negate.c | 4 +- plugins/picohttpparser/Makefile.am | 3 + plugins/picohttpparser/Makefile.in | 1612 ++++++++++++++ plugins/picohttpparser/picohttpparser.c | 645 ++++++ plugins/picohttpparser/picohttpparser.h | 87 + plugins/popen.c | 85 +- plugins/popen.h | 1 - plugins/runcmd.c | 23 +- plugins/sslutils.c | 33 +- plugins/t/NPTest.cache.travis | 44 +- plugins/t/check_apt.t | 18 +- plugins/t/check_by_ssh.t | 14 +- plugins/t/check_curl.t | 199 ++ plugins/t/check_disk.t | 8 +- plugins/t/check_dns.t | 26 +- plugins/t/check_fping.t | 12 +- plugins/t/check_ftp.t | 11 +- plugins/t/check_http.t | 147 +- plugins/t/check_imap.t | 15 +- plugins/t/check_jabber.t | 20 +- plugins/t/check_ldap.t | 17 +- plugins/t/check_mysql.t | 29 +- plugins/t/check_mysql_query.t | 11 +- plugins/t/check_snmp.t | 22 +- plugins/t/check_ssh.t | 14 +- plugins/t/check_tcp.t | 25 +- plugins/t/check_time.t | 11 +- plugins/t/check_udp.t | 6 +- plugins/tests/certs/expired-cert.pem | 41 +- plugins/tests/certs/expired-key.pem | 43 +- plugins/tests/certs/server-cert.pem | 41 +- plugins/tests/certs/server-key.pem | 43 +- plugins/tests/check_curl.t | 498 +++++ plugins/tests/check_http.t | 70 +- plugins/tests/check_snmp.t | 112 +- plugins/utils.c | 45 +- plugins/utils.h | 11 +- po/de.gmo | Bin 7632 -> 7634 bytes po/de.po | 1355 ++++++------ po/fr.gmo | Bin 90889 -> 89843 bytes po/fr.po | 1353 ++++++------ po/monitoring-plugins.pot | 1341 +++++------ release | 2 +- tap/Makefile.in | 18 +- 129 files changed, 14313 insertions(+), 2999 deletions(-) create mode 100644 m4/libcurl.m4 create mode 100644 m4/uriparser.m4 create mode 100644 perlmods/Class-Accessor-0.34.tar.gz create mode 100644 perlmods/Config-Tiny-2.14.tar.gz create mode 100644 perlmods/Makefile create mode 100644 perlmods/Makefile.am create mode 100644 perlmods/Makefile.in create mode 100644 perlmods/Math-Calc-Units-1.07.tar.gz create mode 100644 perlmods/Module-Build-0.4007.tar.gz create mode 100644 perlmods/Module-Implementation-0.07.tar.gz create mode 100644 perlmods/Module-Metadata-1.000014.tar.gz create mode 100644 perlmods/Module-Runtime-0.013.tar.gz create mode 100644 perlmods/Monitoring-Plugin-0.39.tar.gz create mode 100644 perlmods/Params-Validate-1.08.tar.gz create mode 100644 perlmods/Perl-OSType-1.003.tar.gz create mode 100644 perlmods/Test-Simple-0.98.tar.gz create mode 100644 perlmods/Try-Tiny-0.18.tar.gz create mode 100644 perlmods/install_order create mode 100644 perlmods/parent-0.226.tar.gz create mode 100644 perlmods/version-0.9903.tar.gz create mode 100755 plugins-scripts/check_uptime.pl create mode 100644 plugins-scripts/t/check_uptime.t create mode 100644 plugins/check_curl.c create mode 100644 plugins/picohttpparser/Makefile.am create mode 100644 plugins/picohttpparser/Makefile.in create mode 100644 plugins/picohttpparser/picohttpparser.c create mode 100644 plugins/picohttpparser/picohttpparser.h create mode 100644 plugins/t/check_curl.t create mode 100755 plugins/tests/check_curl.t 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 0000000000000000000000000000000000000000..53de05732804371c1f9218256687695344545548 GIT binary patch literal 12315 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 B9%BFi literal 0 HcmV?d00001 diff --git a/perlmods/Config-Tiny-2.14.tar.gz b/perlmods/Config-Tiny-2.14.tar.gz new file mode 100644 index 0000000000000000000000000000000000000000..f0c49d92d5cd5c2f22105ec9daeb265a1ab8a17a GIT binary patch literal 16963 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 literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..cf26b50e13a8bb5959c1d76c0d118dfd3e9c083d GIT binary patch literal 34025 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%0ANVD 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
    =N1yb*hrI9I z^)K|^Fn7+tZz7+(;t>xTIQP8H554_G*N@J=>4lGa)w78(+6NxA{KjeBrm(UHRfSe(ZmqeBj?+ z_Qtor@Smp6`sJ17uRQmI)t?;fjBokc+m_BacT@g7xBa9e{fCK>-+lPWH-BXQqaS|# zmEWAX${D@+Z4Y|<4|;xb@w12c~}4BMOPI!-|(%`?1#Sl z4&E-c*#%S@{pe2e)OudZ+_e}uYb;s|8Hu3(>Fi)>yO=MapdTx^FDCX*Z#)* z=Er}tu^uf9L1^^}TPp{f)Q3JqyDNVGiT8c)(Ptmp{`GC|`M0yLdf&s|-}!*!AFN+}$-!q^&pPno z;TwOsbk_3B58ry;)vy1bpQmoSbn5v({@Q_u-}>WkKjQ1(x&7yxe)jO!S!aCV#vi@$ zS8smU(wX0z`piFEHh<-e@#5!CZ~EtNy<}Uh_RgioP4hb%AAW7+x-Y(V!_thg`5$k} zf9X^Aow)QtzZ#hM(C@cC>zSY3|HaFm_?p4%uFAjWw({S6{ShDf%MTTXo_NQ;$9J9g z%nv{HY0rN6`S;&7`GL#_DtA7!XaD=2|IaVo_Wox+;^hw=dGJ#o{2zaH?YSR0XXW)j z9=Uwqq};;%8S~QK|gog1#%i^I-c^ z=e^;p1K0n{_3v8z>?6;7+p`}#{_$UoKjpR7gTJ@;mP+NA&qX7!FoH)>N(egT{WWBc*R z=ltlB+kUqBSHHYp?!UkK=?f1$|9h``;04<*{LNRs@x@PMfBN>bD!2d74NrXJH4nb( z@N&U)esbT-x4rS@ue|i!Cw=%MPy4UGNIZONwK4JiJAVFxA0K}7?8^^C7aD!HzyE*# z;UQPO^Cb`ez?<9~&${!{`;@*NTVDLu;lZa|_OkIGzwm7zdeBeryzoiio}2#l(%btk zeD%|xeEX*#)phlAwteNso!@`Pw!yuBDBX7MZ>=k@`rhjXB4>Se+k=)rfBmsTGY4Xi z{lNF$bMph=wc*w$9(cmjzrK8*@vYz9{+^Fd&h>Bm|ChG2J9t;f-Vd^y#I!^CX75?C zMcZeAfX(^IDUTz?U+#|iQ5=)`N5!vm>C^7m2KGwVqv7XTy-KUwt2XlGh?3T|b{6eJtZ$KU;75<>gmv zz8OvYy!`iZeg4nOI{%;ahfj zVooOLtj=Pfd8uHdOz|6qy!;O|kOy8J36cOULj!F=C@lb=98wN)XfgCQdeFuzphZ=n zL9vq3v^20qCLmp&NXF@cu6avLSI|hzPDDCB+t$tyJ}?g&fhvFurGh5Q5Q?A|Gk^^? z1{v&@SpgI@(6g{aI?g{mwWI{;_HM`~K(I7SuaSa+FEF0KzBdAT+RDJt%E%mi+ZM>w z#1!x%JkYv}lEmDCVx$`^AyO&e)mrGH;8TH$NG(sT^-!MjHlG)mJm^z`(Ai34(xIw(Xm!M-w7P;e{CR0vKj0H!a5 zKfu>AgKv%l-8TU=zzBSAyn=}t^mchogj&#bZ@_3uOb6W#ZU78q6Ub`Va@esJkiaz7 zGf~xqrjw%lGKfalebflkAY0ME_CvN6LY60j)~bWn-NDrX<5@R9O&78t6iH<&AIEM!_f;1*2dTjDk@x3Pu4T0044gL+k+H0RTtZd`JKQ literal 0 HcmV?d00001 diff --git a/perlmods/Module-Build-0.4007.tar.gz b/perlmods/Module-Build-0.4007.tar.gz new file mode 100644 index 0000000000000000000000000000000000000000..e55375e42c104656c21cb436adad5c88ca1307b0 GIT binary patch literal 307248 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�kbo_`o+0oLHLNIkmc04X0Ibzt8 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ʅ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 literal 0 HcmV?d00001 diff --git a/perlmods/Params-Validate-1.08.tar.gz b/perlmods/Params-Validate-1.08.tar.gz new file mode 100644 index 0000000000000000000000000000000000000000..418d2a1c253fe207e96d056aed5c3718a7c8d67c GIT binary patch literal 103728 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 aIla4Y2XS!z_s{M&KvQ7bMoz#*O7LG+%~P@f literal 0 HcmV?d00001 diff --git a/perlmods/Perl-OSType-1.003.tar.gz b/perlmods/Perl-OSType-1.003.tar.gz new file mode 100644 index 0000000000000000000000000000000000000000..2bb819ab058b38cdd240131045a15cf11aabf20a GIT binary patch literal 14850 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

    gmsZu?_+}?#J{B2L~vRGB-hY`5o};|zhr(_ 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 literal 0 HcmV?d00001 diff --git a/perlmods/Test-Simple-0.98.tar.gz b/perlmods/Test-Simple-0.98.tar.gz new file mode 100644 index 0000000000000000000000000000000000000000..de7d881d9645a96cc03b160e7d5fd9258860db4a GIT binary patch literal 107255 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 z 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 literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..f638b27fff9e6aef87467ee66bec670ddf5ec4cb GIT binary patch literal 5883 zcmVv`;1h=t4;Xu5%fOZX?e*>}|C4^E+4(ft;u>34+U|%LM=}`!i4=i$j7r zFMzLy?bD_?n|SQL&!Kc;Pq2xIc+uezXPew{gu@0ih6Km|f-TkEuc7oG*xf&SN8S7S zyi5Ky2dr5CSL@Ze{9ARB|N2gCE&r?d(8M!V2AY?4%FhhsCX>B!Ke3Zj_H?(t`>a%8 zfe0he5G;bfA)A7jxc-O@Wx#5twfnuHm=FZjKMPqT*|CTMcI<{gSgaI{1#~f$L1Y*R zuSW2!Ql+%3;WejI&jnWH%#rq#NA?)G_CyX`pS|J%FfMjG1gx+xs1r|sYk34SqJi^) zj3X+&;DL|mfnIX`u?XCVkOjGBGZ_b=@P?*t1j7^|4YXdb)}ATss)QZLb6Uy9RXQP_Stnj@k8EDaAmEhGQ9f4x4~@GAd^nf$a}mI#aAqqkC)^P*a8@?0s>wP-pa}qRu~(pk z%{_0%LQh`M%m6_$eZengb3Y%kcsdHOA0!w903l)n1U(jkSD=9*r6r(!!DptTTLtM> zdItXzx^-d7V&BH0a8KhG7ML%YFJQ8fL<$bo|DL!mV{TX|0Su4WW+1j)ALP{Ya4MC` zVzKWCV!)DVB`m0G!FYY>eG1ra(=)*xL_c&Rv0Y%qU`jFm(|m2d6QCv&J{qPhQGHe^ z@2a7d_0V?9yI(l8*IAY&Mh@cH@%Ee{d)*;^S*JTcRaPNAIY;#48&nKq?Bb~hR$ z!-Fw|o~9^U1wDdrDkJO`XB0<60J^R{mcU#93B)Nu3JhxC4r0Pdj{#Aidfeub&{n0< zI1!%Up-{B2h!(pby!9`n1r7_!JKf%C^Wflh=cK0_IW*7#0CRBaa1sSHBq=A@r4)Ac z3t^v#i9AP=fRSXtD^VO$*VZ%YddDi2OJCS^lZ@>_r`7KE+AI{*603nw2kvl2BICKX z@Iic}mP=bYimukKLZGy3J-Z754Xg$2pku-PcnXSXk(-((JLV(qMZdXvbUSJ1wYjX} zAc(`b>%~E$qE#2K`MK+`7Wbn-cwRz0cRGb)hPQ(sm-%fWC}$s{wY(k({LZI60W?+~utGyokQ)$JhHYhE0bb+^9}JBMMnL%DX}~AacQwFG91kc)H_C^E9}y;uL0>4G z2cVL{wwb26r6^k01T86o!sG**ik!g1n^D01P$?>Jwnd{s)x{aPuGr#0KT;#~84m_7 zv>OG* z)QfhMBOOW)&Up~Bj~AO;`Wa{eRR^9d(3C(DcqE@DCeRS=IPw#5*Wt+#AyP>YQ5N%! z1W!lvJPHV|XN*;@|L2RrukQcXtJPcA|5mN?#Df3Ts`W~>4(kM~TG^?r{r^>b2C!UC z*Z79!hJP6UFu}Ql{{wBz(Qn3d(vM`H>dwEKQD~Un#nhJa%mvG22Fgze>~tM$U_HkT zLah5_{rRKE|K`s33fKRzz}C*bmftw)QT;Q`Zl3bwQ-l+oHa zZnplT`L>O=(B%WP*^&y-Awge|7K_T9&s%OBG<&E0=5eRrde`hiYiJaRp$G1d3Rn*MHs~RIczn`6Y5!;c_z42?^II_35m2lwmn7wC&tqVa%Q_rY`Tk9pt= za9=Ntgglek<_1P%3Ty*pYt)}oaAAXjOj~T9z3l6LRAu%OD})$!nb!xjlNu`2LUju0 zs-^2l^sn#!5?yXeq>*c~dm8$nw+R9XMhis$W{ps?!eR9x0 zZKJ#$99%6DZv%YWIjvw`1qYWM3uvjmsR*}~nI8OLD`xI9ny2E6-j4vH(O90-&5ebr zn}fNUqo7>-3>sGklv;bh@1abEQm^ckC}wva)`of|_Fubgj}ZUA%m1&}>&yFpbtqoj z{}p_S#iGFnpv<`)HCXJQ`SQXycpQyo&;UU#rq2ek>p6Wbp&^#tU>F;$WZ2Rlx}!J{ z52@_Tz$C#+AyyRo$sB$$zzEt^NO%e8}GC5)F_8moTTrBUeyGqzbU$U)q?b74Y{5 zRcld2l)}MZpdoVl=Z6fSX&^vv zgbO{A-pW3~hlzGsdX7amObOv$%FXLt>91Gm*i$wC=#YZg$J~+6fHPO0s(Z6~6MzgE zb?BJ@99|Mv~%KgncT<@{G_ z)w%t*l>J9HU~T_b5&!$!b{q!V1J@^W$BGw*@v8l{(^V?f9d2e~3$3G*_7%$p3G6YL zFP4w;7=$P~_-${w&@{K_L9R^k%TBk&_OU#l2?@-%-}dNxCd#GKkM>_MtF%WI`|@lv ziLhY+%Sb{{UD;^-q*S)5nQq{1ypa;BVrWVS*w`hjmN8V3G*%E7o9mpD`Q~$h^NYM(OS2DQnKJ!hGvaxUS+ zw2rl0$D%sGsem$~tC8L_Xv8l8QZj`-U}BgR+9?lQSX6}t_A6)`wIR$xJ``%Jcj!ru z6Ih%|7tj_#AcIi#w}=9CjuYMfy8T}*O6~F_ZR-aDGr>+o z(>s`TWkgIAB8Ry?dry-2epCI`83tiv8^-*5yTm{rr7q|c8lAAEQv`2luVeo2w{F76 z(9utfZ11w?`)uPwGA$o3Gn|mWvFkjH$8*nwnzwXhKt z!Po_ra-|w+WK*>uC-SZEWgPBh#U(#~p5N0g3H7Agf|_!oOSUotMo(sw@+}oxyAcMB zx33BYd+-OTf|2HV;wI7pbh9GIjT)?9%F1Xd2|C}X!zwx`{t!LZFKKmggEq^+EU;2x zuFv=POAMA|p$N`}LxOl^7=JqdZ#l*Nk>ful%Uat1-6`#?<3HcZ|I4_4e^CFgtcsvl z0EnIEm%Y4^jQXHLL}Cd+BmtCGgp0eCGlXzmFXXc)OY*vW1D%ydBkBG7@6it+ON&Mu zAZ)xO)67x?Qr|CkifNCazt5QCDi1D*RjM5fO8AbMQ>H?9rnK$S@s@d0wVlR6_r^({ z99SyQwk+3tKu%r2UCg}XzH&DJ^m;37z5jRP39d(9|66rX_KW%-{+8GJf35#-(f`kG z(*KKUy)||{XYZO)r-Om{j7zytU#}vQECi~&cc;ThRT_MF!bYEZ z%uz#1)foH=bh!l6GVm~E1|I;dqwd^2Lpr1>3KE_C$(lqq@1r6x{t z)ZpG>RBjuFo}}M9gk-L<@B!#2CnWTGC`k^-lMs2}7vrnz|Llp^RmFd;a<#Uk|7)e4 zb^Ld&{}=VY`rV>!$D0hm)WfvSGk4m@h!W;j;$a&GV43tmp!hj=JxW}qbkCYur)*Em zd<}AxME8L`r}HiKy}LSdKtT-f5T5I+L^UK_E{R2LCWfcK`UW^?tCeVWq~c@(630Th7rZ%Npy}WlVra-Yn2ouW02G0HU}V zs{(egXvrzPr&lcbJk;#UbWM@5W=hpw!usS6WNuTfYd3wx@t>P6N_f2e-<|rB|6hiG z>-f(fVgK(Bx&Wx$5&&A>5L6p!I*iZR0M+-VFa4q;W6(%NTYA#p(#P&qJRSq^Av8qO zkOuxocm@Jb<>TqaP#;Kb7)yb5gk|k5EgwE>>3|V?)Tb}CE=>-JlG^2t3{qc~UC7`p zB=w71FdIP1%Up7)O71ERJLP{)&(bEP3kvm)_5WA%0PmCk8hl^!|Ekvd{NFc|{|8Fo z^0ANEG4aw~diFybaCVujgx)oK4E4wlIVI{3S+Xz4OadeSWozZM`QqyFOBQwWp*(Ey z{3o^lUnK;1-}(=JEbsr|k>IubukHUW+Nb(J`;Queu9`q7+X#ClESKT{5`%xdC^&5VB~3Vx3~;?2-zDnZt@wZi|fc_T!`G#6@y81}+UoJ1l|EfFd{r{E9|1FdL zxvIcgtAanh{Hwc|zp4LMCHY_bf8TKa=XY^GzW-;Hm;FCrfVKW#rT$;cPx%71zt;PI zDf#~@3%>`-f2DeD|EE-0@Bgk|{wX}#jPO1MZPgpZ+b&Ldlo-$cdNtux0+8bS&{3mhXRmgw&y8TC&a4r9#Ny9U1Q{NHi@vsNq5@Bb^8EnNR&O5j@m zuTcL_b?(mc?t7Yrtlhe;y#)`C_$Kl2+zC2?Y<_fI?Lh0(=sMRJpX=iclxmD`q!Gbp zX-k*8L$=9Y_GzpqeLXCE@xTm@|NLb({!@D0t4H-_7Fz8JlFJAss%!5mU%T}ju`UTiwX>1FEz_hpKk7; zw*-0aIlX8~=a%5>wxW>93*R(4bYC~ficibPF+ayOB&Z101&X#yFA}4|;I)cZ^;QlP7>0kyEoGeWj-V?(@U?F?lKsu)T9g0YIrYYu> z{G?v46k%6Jm|z2~H9>F7*nt|DWeBxM#-0Kf!zd_m2yvHZ$s5$5A|C99Z%~)s_;IRV z*oA$ab5AHDlDJD`N_DG@BOYZuiZ!kkkt$doR*EV2LWvitPlvIWzVXdQp1Ht-D=_y7 zOk|pnB--^24!R6@T)iZRu90_i7L}1rD}BeqaYE`-S2P;g2RG54D)k}<>t)gWEP~GA zCL*)|JNsg{Wq3>MuQ+wi{@IKy%0g>BPdW7huXi%^i+wN>8_*ej&mG}gfLLn9HmRWt zs>jXVPlJNx8v@7+4O`EFon9bk(Kq|W*8J6NcMiNK0Jw8Z>;EhP^5(V*3WVD>xJ`00 zPh5MNUdzK&yGEl$RqmLk#ftfi9_}>Xc8_|eofc^FeY%gn3SZnvO!PaDh!5{HxuC#R z9LrT^X`xE;9zd4dPKx<^`j#7WQQM}3zM6F%hs{y&es<$>+;VlReK{Z>Hr6R`sT z8V3b-$njNtZfK8%>lawl2gjl3ijnZ3%(cf{c&ulSFGS#{5D%N3?kW7&J~51i_P~Ek zxz8_?yHyz=+LF^*;Eu)-+qAd-zr8y~K^TU@0K9vOTtKLM$e<^YDCkg!+TPzJjTCzT zr|+A(B#@Vu2chI|Nl3@j5cVTuh`X^Vq;xo!#nxur>Q}y#Yi&T6*khAYYsvZ1>i>Mr zQ`wE&WAoMkgYQlITWNc8+wcCBr+zi)tp^TnefvI*@A~U!n{R#V>TG$Lon-(300000 R0001g@Bwu%uX+HW002PhrpEvP literal 0 HcmV?d00001 diff --git a/perlmods/version-0.9903.tar.gz b/perlmods/version-0.9903.tar.gz new file mode 100644 index 0000000000000000000000000000000000000000..ce5d91a22910bbec4920b57dc568fa4d5b7fafae GIT binary patch literal 108336 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�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 #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 962fd44c2030eb61d2c390e52f0ddc92b83b430a..f35d589d84ea87ebee30aef3c769e8ff6b53d8f0 100644 GIT binary patch delta 1175 zcmXZbOGs2v9LMqh6=$r*(MD5K8=QPpPEO8TiI9n)%*Yso2#X$0i`LSr7Zn$DQJR5p zEm~B%X(3D@%%V0yMb=6vB^SL`8EtIQBHHx${_=wOIj?)p|NQ@F-eecDv*nH#H?w%e zY%^vtiG$dJ*Kr#ba4WvUUi^&>*i&v+i+QZZb6A6;*oITM5$A&W&!~NWU=(Yk=2;ny zR(gzCM_@PB(LWHF55~`*9p#mtN0)2*C@Efkh$_lgfSdUGZ#7aC=;h9y@ zI1x+?VKe=k*p9Qf58vZ_Y{91UKPHQ~(!)@p0The-b-z2Gh8NDJ&xz1-jFt zv4h4SYNK&fie`}DZ61}%52%bdF|!*EH$mOx0nz7h4zpNA6tW++&loCWk5K2l#x?j8 zRch}q4ZVRR;cCG_RO&9EHn@*k_yS#A!9AFu&|P>Mbt50O{y8e6%cym~kXUUO4@KjB zs0*D!_VsL-Mk@mkF@p=JfJ(WpO3;idNe&g*S?t8yLH`vh#Ve>l8@O%{_M*NUMW(C} z_!1S+$N%%x|2qvG7^`2cStsh%??;tj2vzILs7E>yIDz^V+(Ui;1hsw%`Li$lE5Sd= z55^o8E08GaEwy2i^X)K=b$A6Svt2`F`wUt2ge#z4Y^##%a`n zZ&87N!UQg(E)eFSX}lT-bU-5wr9OkZ@eHcg)2P%gqULo?rPM`@51?*5j4I6p5}Q5t zkB3^ECjV;459R2)eofeOtavLtS?cr`+apKA5jUO6xT$n^!gY&dvH1|=$LcPH{{i_+ Bbn5^B delta 1171 zcmXZbPe{{Y9LMqR%B^fVTeX~}Ok4jpTW%{PTLeucBO@pZRx{{a-TH$;{4xlOg@D{9|g*ocuv^K2Q7 zI6cO!)42GwGY-S`F6hSzWjj=S*+Du78;pf7MU{=j++h0IoB6l0jcCOi=G%vRAT zxQVm4f&MK_;A70=XY9mQzS4&MsKAe)GI#_C2kLPiLVKaKp^H~#67&Lck< z`-=)B$VYlhaZGZ)9j37YFC%5P>!^&}MY3nlQK_rB@mbX4sb9Z%;|%VjU&J(4PzSz8 z1^xxw@jL1Qbv!hUhw+#WXrZChci|p9jjDA8mD(C=egT!zG}qPmQPhpEqDnK0#AZ*+ z1%KQ(P`=_X`{`P&90_>7Z1qlHtgf029uEXF-Kk6_mF;Oy_f$*acm8Ujc_{D?EhcrE 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 4629e13867fe6764b1072c548f8117ce1e4f53de..fd6e3d06349376467181486ab63d0063e856a25b 100644 GIT binary patch delta 16878 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 b3a&5nY`N6HRXJcw|Bn1a)=a<7t{49YI-2_8 delta 17803 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 hVyDY\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@

    ?mdXsAB5x>YBuhjzggo8&Lo1)V73N!pP=66}f zS3SceoDUdnJJ(vGLL7$a_WVWZMs`l(vDp&UdFRzd%^Qy8xMfaDHriJe#EAt;{_jf9kMr@aTaKzhtIUSL`Uo&E@6 zMGYX+0as7~bX$R4K~W!EkzD$&-NHw)J33K&aj2B-vbVhrU*LAfKi49(rP;Xo=OSqH z2gQMhSr_3rEj%(uT|+4nsNT#h1~y=h6qDL5hd&yLebbt`xERU0{ARHHRrmxT9dY?B zOq|K!qoxLjX-S^OIe!<2&8y+y#^5?kT5ykaPPr+=k!wYHJ)PS*_yLOQ&U>dc+Mp)^ z;tWADtx4o=*K#0tr#zk4JMn?)jq0K(#;6rLU*G?iy+2)y>PYr};r@!QV!0@~N`OW@ zbPFLP3*qKzrUwbT`$f2pkV>FNlT{K!%jzpU7xn)B5s|raRTYz`z4zIs+aRr#D~HI) zm?N^f>k(8}tM5E0pqihao#@_Od~tGev@kQ{olYMf%gkc&Sc92}{+gntrFl6@dduEi zZ|+m4kRUobm$~V=kDLoF%elZF2y5Q@_?g59^%Ow=U|TScka2G>E=N1`3i%!4070P+ zwl|Ln>Ch1>VV|j>yjYr1Z~oKg1f0{n3TVIt4?J$QxjShjE^xQ~(l$*Wy*OIZ?YO>G zl*IYyS$wm0Ys}zyx2NAV0eVkk+qlXE^l>S&^U>pq^4RgzdH(kPWAw=bNYmcL!&Cf_ zTWL;JjjHdP6C=N4POAL#^Cxu|j|nU`=2kW5R&3V$=B63EV{-eugen=~EIgI(IM4U) ztS6up1HWsN==oh^dIhA9A2%u{`PwIfop4$qi*z^B!kg@BVsi6H^w$gBPo8FAFjFfrK@_qYC;kdwi zan>>LR5ZDS@xvpdg1?&s2$7LR2&c{ zDj5TjIGqTH6NUhcXqZY0B~PH27VvJUw;`!3Xh&_zH$fK`c&ykbvce8!?}_3chLzhV^5jm8r7~4%A%)PXbq8g>fk_8qr<-n>7Z=G{GT>MFv76%Py}(+3$($7xoAQ z!E%OK0NJ-5uAyRl=ACpxB;DNS0CE4A12!B8JRpn#+rmOhoczdwrx~G9ot`k*rY(fgXo41yx5~VB+u=S~$unl0-{z)@ou9^&#^ZOJF&Jj&dH1-Er~*tfeoom&JG(ItYt>SbGxHk8z^HuBc8_ zZJKwTshMR}+iF%-_Q2i3HiE^Tpa5E5F)7<&``LggcY&oAS%`Fo@o=wE`M`SpWf)=p zEOXH|P{L|-3DnHCZelRR9-=sKiUJyrVWluMPI|1(Nm42c)#gWZsc(lpz~rZxAP*W- zTn_Foa8`tk0ZG1A*eW!h-*6>TQAoB-5etjZNx}duvXSn~tPRco;kLu>Mw;2c@F$qH?b zmkY{hOvF_?d4Ivct=%$a)*|e(f4+ez*Sv<35T)6w>^`h%B61NTQU|uQyMLj?dqG8$1vgn={nyiZKuz6)36x~n_0rjqOGBqQmc%&2{`7+x-FW} zSX)@6njpEe=)&pd9(ZU)utE&|$J&glkWESAZ3Ozt#x%SI!LaHrm2fS@2aCwS5D48p zmRZEZyFD|FH8wdS143SwoS8yk!XRMRr9c?y*|@rSeci+cge6ThrV4b~O~y71msERt zpdcob;=Oc;Y}yKXWuoCJhCtYcN>I`$LXpN0LqL@cU2V(&RkT+pZ{!Mek+mg2I3taqHs1Gsh%rh;q5s?Ax5utZTlE>lk-u7qVBdsdFotTIvxcno3 ze(l3R=ME-mv`5}Gg?}0yMPg&?_i0UZj-c;C%k4#tFUkNpK*qn4Y%}{~c!0T4mW!;I zu{^-ePv!!um0~z6J}U*g!3CIL`0|XhdgzhFLAFmJoPOVfIRtc!)wOlj$psz7g#Tmi&z$|YR*yPl+nP9R3f!&fM zF(TEbR2hsrF#`gm(E9ZsQcF1<6W=$(@|FDGh5TzOl*)pHm}&!K>a(3_2=C@LM}gJBZG2Im$YKJWLaa(wCuh>g zX~Ut{hBzi~3?Ysn@F|EBtj;VcNjLfgem9Z%o%S4C)<^R@w+$XqfzGh5Ar%@$_&=ve zVv|F1j| zje%{X7Qd5Rhahdy5FjvE?1+=9TzTdm{UrMdBts$aa%NZ2OsBT^D67X`9_0#ZjxigI-+z=7l- zK#K#!YKhastZG>kEXAwBVP>LR#lLATf{sstuC&6;I}&-4%}(j^4kmGE?+;RC#`(d^ z-J>Ihrn9^;{F;(2w`9zU#T_B613s3p?A54f=Y~*688mtn;51RUwAu{89Yuq|QHvq6 zkv@9QGk3Wb?JZV(sM7CZdC@{$!uFKdJ)v+S#CXdVd(q!JBKd&nC7W8))+yv2a>M_2 zmDyP6DTa|(eXdu>Y%+S@%uILR0uz+SG#vPfofg0g7os*!QD4dIi-M+-+oVWoWg5mH z0isQN2BsOoQ;?Az2Jj=|KBLz>P112i#lW_qfkJZ59^lSN$Hs#B@Ud#h7YExaMMolN z<8WI(?mEb7W}kc5^{O?*g&d49FB`04CWewpwYBD1NU4`f^GQsI8mgS6lEx&Ifu$o( zQy_7hW1vVTj1ORLR;tVtEsGFPsrk30Ycoa~+to2A@Cx&+^NEEjC!$Vt1Z^PSkt?Wk zst6usr~-+{2dE0l=u2i7Baq=JV$DhCll4F?dapIAdsG-R#= zCh~yI<#2K5akPTOk3E8o#Hl-JN=u?avfvri3|$%ov!G?{fpHY9U&M(s%qa$YD;;b4 zDOG}0D1vHX=3R*;b4-nXhw3Ajh$3^~f{ArDTmzD{bo-tyJ;*7=CJy&b&8D5W3G4nC z!i~(%%1VM;vn%6%6QF`rk>-+({S1(A2l(CKTw%*YFoHa7anrM=F2gZ6=LJCGR0xc$ z7PcsE<_v{J5Z!0=+zhw5D5?ofi6cO=EOyR5EN7#YRye>^$IArc5}6nu>BewIR$<+b zyLSZHBXI$t_Nae|j!8Bi4m&*MhsO2I{rcW2LgfH*ZLvy9%}V>hnC$|AR+k5chSJE6 z{c+z?8lf`8LP3NbBN`&Oyr%yRn3@|%#xS!v$!;H1C$mY>xS?Zf@c2euT?|)V+ty+t z8)ifkA_T}R^dzZ3=Gc2K($oQ+{mLtT5JG=Fx*{C zh9}t|ZnFY;`w^eXswyjUHRBEinwk+4I%yYQ50>nNM_gfg>iD+=$#`h;hM1w(0XKf` z^@gDatOVEb_Eo5(-@_83PZr66ilCZdQ?T(gyAK%C z6Idm=0V9YOk#c_7YMcdJC6ZZ;oFP`T>zE(6r%W92CYq$^vU!&8F5brKwXm?J`><|N zG|kxsJULGj2T3ZV9VQ53Xs~QIb}-5XLY6}uj|bLEwoM3|+}?(Is5!8P#z>B0QUzgm zfVISK$9NDqD!g;j^nC&eu`pIECL|i2lLQi3W@?atreH~fEH);aI|S`21VI3!-7+(R z{nmj*)ixLj-RKa*%W!hQ9C_@2^buW5%38F9;}E z)n>s0{D=t`GWDz1IXZh!LXntjHqxpSnZE;BS(Rbf%MYqBpaylsf|4>=%xu4&+#S|Y z$L2Hh;$(kMJ^62{S5+Hq?W+~fVa1jyi;Op8w+Ma-AAn-FG1S7qhoK2Z82dh`n&|3` zujz4Pv(4!y@mJ)a@Rp>*|Rii3sP64Uwe33YSDKL_| zcH|?JtYv2@Bn{i4+*W3REnEv2P4V9vKshG#44)+buojYQsMW}eaP79h>|*gPJJ~$y zaUe+@8;s^E&;MoiFFgxU_@D%lSwzzLWd|`UM76&BaADzZK8D#EsE!gP$)y=jSNBdi zKpu>}qfC}9&`~Io?1%^42>Y2iHs{1*TL}}u?0l#A=BED?)AXw zMr@H*p-2y%T_)0E!cJ$i>THK!6(R+p-LXBzjE@WX5Vw)~rYZJL6gH)?ClM)KbmVEg%Xp z*Dq5QBGIoc5cAzKsv~Ni$5WzNr(|3wWi(dE(h%erRkob$c)ks8SuWTiaDbTzyl zr$6Qe*AWegS9^(zMP6J<0!(003fwbk@Cd7^4v8_{fSA^#2s|VeZ%I62KI92hjni$S z$v?To2WUcNyteOw)J1~~AgcGng?rO2R7c6ww-P^Cmfi0-m7;VM)*3($65ExHOv@jI zX1Y8#u1bVy0`IyQiAY~L;-LjdW|Ikoh6>>rtLa(s2{{=WMSWca!s=kE5M|KK@&lWr z8UCdN!JHg(JqX%pEwi~-)>Fw?#H=DZ1zMNbP>Gg#XW+b4ibDsMkB;PkI*8h%Arsdm z2bi#0v%Mw|}WHQ4YvE*pJ${~1e1E7 zD{1ZVH!F9S*Vag_uYV6(A7TRwmPI(Kg+GxY3S(N>DQTbA!_v$hwpjhoH*7r!WOx_anR zRyc*(Wl>rLO^fVxdnWFJs=-fkHei;|=@2xRY6Fm`@^4 zq7rs7o>L}pcAaT@k<7%aG$Cq~lvoC@HR&=bhYb#3awH{Gdvzh+ z>7;@BN5XHv3D3Jr>l#{Ax(Fl5jOY}j9f|1V&agodAtGV|88W9b<aX2e+B;1PbNjpu28iL~UepQ%Qvj;gLhIdf4_^gGu zeg_njY15rXB9;~gl{kU2?y#y4+w(YuE&@ZYUK4+7%Su}i1D_!n)icCVyZLXM?_1V% zZp`rxsO;jIfNV|!lhce6Xh<*vf%)C%+&l?!PA5pGwTv(jN(fd=e3}exd*%W{lddIC zff;88DRUiIfcy8~=cwUL-?lS_F+UX*bX$B#dr zJxtb?mcg-Q^qKtvn5}c$W|39@6Xc^5JA$631MKu*R0_;mxeEQvD=+eI4{ohNA(Q}B zeV)j&n6MqVUewR&ww01Pq_3N!&IKKj&y=*v4jfb9%|Y+SnQ2MtK=NHi{5T@gfrEzP zf^9!cZ@$@KG6+Gnv!@^iscdRpkLzRcX^icp(}}QF*JG>P)`9|wgro2RO&D``gKFwh zqr;cnq5E>Cg`6n;P2iI?#b#@gnNYa_yOz3iV~Tc1mr$y#;OSBKrrBYddy_P5qehx2 zlGS3>mMg;r`SSa)Ym)BbMMkam?T8xZ{1}6viutrVXFkie%q)-X*CmFFinvC`n+ZSzU4MQLNnJ7sU2uoDk&L_=jlTSO#i4ZMs9d z2%wjW88k<+zS7+=or?8nY7uY%uyhfPRWbLda&HC>-qBsxDc1=>)9WZ3ZjTm2D}~gh-lm)FD9`;Jrm6*bHNfdS)1>Ay|>l`mrpEaE!TH})i3LjGkIPE3$ z(Zf_UtkbrsZzQ)R`}0=lIg0f#sncmC6BFU*7s`&vn2ROYO;VKT%<~GNEJ#3-Wj6~a zl5d?0Cn|a=LLeF!$eVk*ZUZu=g)GH@5*|WrakyFfpVvkK(QLW_nZ%^>+)VIDGt%O1 zKj2{sQPN;~#_*9RC`2@}8HH5X*)&1`#O-mf%hj8*F|5t9#UglC3pQ3?4`bn~HZ%hy zOMqL9u+bmmq)ia1(VB2`tE+AdtJ{{T9rQXmY_bu*FPHl*UWWba?xNxy*O0jIEx8pS z3GR>#_2L;#kY2PFBhc7qJ%KDv9E4iARSH!oT}WseD$GGIJO@ht0}`_8?FOY2bjcp} z)T|WsQQMkj#ZrLEkfCx;Wf32lo@#Q3I|YReaI%f9QEFO0onadvv?IMFnHV}%`j*D^!GjbYcb<|$nzsA+3cq}PYB z8DJH&;4as@q~CtrED2&`@?98%k!@VSOq$x=*Cc6v*m>$QN-mH_m-P*6*7cfbw|Lj@_J1r;~Vc5Jt12K zB({J&Q9?EA{Z?J|px!YlcD?*jWHWTzPCvxe`d0CxiDY&oQ_1EM-5plqnU0z0wO-^U z04KYD^ocE=yi*FpP$N-TUu}g18^nvX=Ll;%m_~y9w@ z9=?CLCmGMxu*!sw>2hMGqXdM%|siJUS*ZKSgj#S z8m*$*IWoud+*`dj%q-c&)J?8OMW&Eh%zE)wqn(>=2wYC^L1bWO(tZQcI`}vvY%=L- zL9zf+ragzX3233hO2cYV;_INl)IyU2n;!7?So9>QbMo00Ty^ zUy#0sk>9RU6f;U~Ja3AwtXv3)qRZuqSvB(M@Nx)$4KwL9sI;Qx7&YXhWWEQ}F>bpL z-5XAHO`|nhI<;h$ni{d*O=8%X$s7b;x+J{6d!@hi6T5vUy$e`>h~UkB0r|hHk`i~_ zDn7cN$)9FgAH7tl57lC@A1fM8H}A+&&oNg-XJUD9Gm%FfEU06mo_-ueveLmwC)=q+ zed@Knu{_x)!tUyJGv$BaW597FK zQnX?7+h%P7{epZM(NgV#x|dqb8irunpAI$G6}L-a*e^P!f?+Z0)?G|S>~Gj{SI9m> zE9Ra-Su$8=T1WkbBuEuexHJ+_b@rioK9}U5H2e!?~ z9L9jJ2{OiXWPoOOZd#BEr>CHc6Ae#-?_05vnywfUq-@Ht#YkSIFgiqpx7EM<$A@mP zP^+}+q1`K1T+UDZLCEfCOBp5`fNNais&BttYnWDTQ28qiaJB21v;@kx}Xgk?H}7 zLAU*C4pHjxNb=NtQW{VYX6$?Y{_a1ji(hn`oOBP9I_gaD9)=gik&zgJ zxCwem{}qu^X>${Ft*BX62Q2X4%|2tEX*(rxu%n?qc>Brf31pZ+OJ(H1ILdm3^Zfq3 zkMCCYEG%hvF%kfV%nsNAKi?P_4!0B~6q6TRv9YQ4hV2vgUfR%_y~&SQL#)oH5Ji;0 zgWQ9(pMuU7l*s`()@3BMKL@bd>|!n%>$J>TI99*`myz4hK0#?=k;-S{0Wl0FzM;yK zI^hr$7qZTq7NxY>5#6CM1F%!37HQ29k!Q6n!OeBiDo=yrhZ^oe2xUTL!zRQDQ?zVV z1Kev{IM5CS8yVRS;S*R<&_p(m2otp9Uz}zwp{J^b-L}l9L)%@vF&R9eM7is7$Bf_g zal0M1GKbwM2OJ)juLc#GXciJ;txM62WJD@A#+9OXbOOrje0v+4v4Jw-TS$7s9FdM> z7ZloIYzJ$&+;I2brj))GGOsL_ik7B!8-y?>S=KG|8|`x47NZU_zlcy1gY$On|K1hl zc}T_M=f{2hrbyK(q@ZBEM&LcZ4ozD765!#Sq}zK!JS7t5?cm2fMYSG~x^Dzj4k7P* zke|C6D3096#UNV1gxo60KE&6G-#AKz=}6!vXf0HZNZHxVc75|-|Che>f$DZ ze8}S^IBNfr*$|Kn0M%kO^xoEL$Jvg7uXi0Zy1TeTF*y{{uB71fvmX|;Zf9Mvfvg>6Rwavdqu|6H?naxieIcPe@C!l zwesNp?K|H-ezd%P=fVBz&i&gD9^JE_3x}S@B!24T7uwl!H%e42Ol+74J|pTINZ#{7r&&vhmKOO+=uYY-n&*%qBn; zRv;Uc-zNI-!7apv;!?Qj;=)!JEoF78D{87s>rAXjkzUj*Fzct8fJI;?IyYFa6o4D@ zj`IWP&@raV&(fsS2XWF{ipjw~gjycGgp3OG%Ubn61PYvI#47}NKgVe?+q0P&{o<9glQ|TlK4Ty6EU&k5D(?;W6 zHvndcId3OY5SEW=0=ErdB%)8DN>+#P*%p`IEfYA!_R7PpT7hCS3by_x*I{$0 zdbmkFw`_ir%(t@Wt52a>F{GKdNk#G5Ul&bH;dRg*t_M|lZp_Vzrn;o33h!(c5X+yM zuqGjG`%tpX;IKqV_8b?q5pC^1QOhU0a?(Pr1s#KHvVRByXi17dFqt1wig9GlFd)(G zGTbh$QZb*#o;(!K8=4c+d`XAL+gLLB9{C%}WTAdAq$4BG2^7tY&xi_Vob@qNm0l+% zL6yQqx=b782yH3`_o!C^o+bXn^@S4f3NL7&zK!IlzimI z0J$p#zmr`pj81?H8l~{?lxxKpt`06>qcy&^#blVfd%6ddI6W|h#892+)eVcqD!Krkw3GJ9!gDsg?#YlCT zIwZM(mC8P?NL>AkJ0(PL18vBSD~o+(Nd~*+_AX>!kix@X{Qev~- zma3(b$eE&QwFE>4DH+s*R0;X%xBDdSb(0IOh-`>kd(Gr+M@$8^ibA&pV0;68+1ZpI zVw+5tJ!#b(e;NN@U?p3S@+*v@(k2+En>o~U>lEMezH&?y@(xrvT7mQ90guAlS5`5{ z)!-N*7UL6LTVuH`ZobxmqtNQ<{xjwUyw`U3@dzC&S0iR-uYpWIf903@w^9>e9XQv*buTm)_qcCX$r4C zgNNFinx33mHKODUZ1Pewc|1xcPjEugWSVZa@lU0UW_RwPae9b5VUm*PTC!KPB>1)x z26{uGzBUV?U(vY7yO0S(JPT^#M-d<34-(>Em4yjDC@(q%>AWQ*NhNx2!!;xG3T@g2 zAH4#i-dw%<3?dizYVuIzbw}+)eA#gwe3%0B#M6Ds(L?kXre7urW$}5pgkPA*D2@~$ zDh5%JywtO`lO0GQYg%k!5e78R2$ALDhBu^@VohL~4Na8!J)13ZwA3!ng-$6;uL;{-1dF*f_6f=Xc4VtN8- zfnh~8v_y@FY6%h^3?v^)&9^GZfUSJMlNWCD60873p zY6zK_qqJlT03infTLa8u$;xt<=Z)|17aMoyBcMp z>$n9%NzK8a>d{sD<$X*;ezG9R9z~U<%Ty&<2IEkbZBE{AoxyKFWb*vqLMFw=B6Jjl zPm&~??`CIe3qw#TK|~$LrR)Zgu*N`eQ@gncIAR}H`BW_*VGHY2FiL4KU75F679XOq zV0BT-6=6syWLQ~rQrv|6u5E8vku8L{Bx}YJ6Sy%DI;9Y%Jg^&dHBE?1CU>rjaSbeT z1v^IJAhQ9==~Jex?H&|hQdkhJIM-U7oi(ngV$*Hw~Bbhs}}O6X5hfc@GN@8 zg{YVh-_wanYGUD*YLKEup|=+A4e>eh;7E0eXq0Z#-a#r6v9gh58+TgYQZQbtkqwby zY!T(=9L!17KuIxz_(RSJ6YcrLEJ?y3M4rT$5KqxO9Pz-?6vd>|fEUehU?))?vldXp zVr!AXus_R|a5Y>Um{5IOrh;9AYEOC5Z`*Mcp`v60U69FTj&qQzNm&X4fQ7E02RDQB z{eOk7P`d?MFr>V`SK_QmhhbmR%@Vb)jjfzrk=vy>XF-Ndwt}rL*7Y4i z@pY%;pPp+<0fs;&C`y4ahb(B;z7Ef$y}P{ zI%=C+y^h14M=x~STl@GKZtDCG@g6~cU4AD1ue)b<(Y>NZT=n``CQxh@eudM+l<^Rq z!f$m{Pe}DgyR%4c5a(M^Mc_}g(rorTuwZCpASXL0ZG~e;VnY%`4M{!Lp(MHN^vdGe z`mG0#*MUh8cSQl3v@gZe91jztlVnbJREb;iJYs|RE7-83&`YQG7RHAhs=yIyPXJlP zH;BKfKo=9nu|h>!ZLzAqQ5((T6NPVzl!eU6N}D7^(nWwkQ$B>BE4)Gmf1o=O->qq| z%XzmZS)poTBa6+1*?|M4$#Do>nTW6yTnQK|_VyeiQs5&7fy)P@S}#JHWV&rTDR9FS zq#z;hxm51ZY+`aryR#qu74Q zgTh1<9qp&TO#+G!4qxI@hVc_?y!#o`^6x)sQcagrnrh?eFZ0b70;l^-qi<0Jj7rn) z-F?3+HhtpsIDD_Op^Og5}p=L-p<*Vm6k8;BD24FIw(dw2g+7C998)4r`aXOXYujFlK(Bi*h+|e5`o& z-P+v$`g)h^H@Fjf)2_JJZ!>GLnV07OqD0M0^M6$gg|j(@{qEVES!nPiy< zHE2FkN(>u)*zneIxLe%P5xq*wwHT-(qD)d@7GyX1X(#Lgj1nPcah|k4@TZB?nQa|M z3HeW1t9as(QNu72^OwsDEVmkLaVGK^cRh0N?e$DYl9-qeD;5pixC@-{7=uX|RiEb( z+%Y^H6liU;T+TT+GX#c@;ebF~!o)?&I)nX3ne{qIA~vJ5us&J2(o-Z06!15sGkB-o z)D>{1QyUppfysu20L;8u`YK|Y>g$@UD=1KRnccN(qA@@xWn2FBK_ALwF^#fZU=PEa z7}gLN7I(~24`XS1(n+R+AXYCm%&tKr2o1(=!@F4o(IC&1^)FjurXAc2x*QN7gn)zv z)XdJ80ybD)_+~RTN~m7=*2h*}(1A*VwCHkLvBh*mfHUL-6$+OUu+7^QDdLubNqPX~ zmX5bxm}<)%cl_&z%QO-XPj`^i+778mX_B^S=w6{OV!M`l!>XbIAJujZW)P1N4$PFt zt|=ITLn$Jb;@wi`0=La8JrL-5AT>v2Z}76ep(luiT&M?(NkTXUXvC4+7@kOM+L&^4 zM*yzjMEjd0&Yq5^e)X$QA$s}>FD6h9$zUr1tE6LSN$YM1kf%z7%&hw+Q3olL&rlIe z5kZqbtTN=t^<_pp=BHnf<700SVlTGl(?tEJs>H!JL-su>Wd<$2!kNO zfU`-0p~)VCWYmw2iE^|bA<+J#M&Y>rZT;R|j7dcZq;z*Sjj~#14V1x>?{ynNQpo7T zeueg0Zlciy5-dEU*%vQ6mzAxt_`QNsnr}0^$w#*!XqM5M1S)~;{myus0`t+=#Gez% z9Oe!udg{Okm%B9vsRV_x?kyNCJxEFLcE!txQ$!ib#Od4I?#jXr_J7a^8jOv}VYZYL z&6OS(s4xZK2$>4chH;`~YC~|U(~c#Ch)pS2=~RLU5MB4mizQC!=UP4Rp2WG_Affc- zr0UE>v%C{*uB8Mg?gi!T7c#y7YE?y=E%fM}1}g>it}`bL`rch6zNU=hB+{w!h2%Rp z%j*Mab8#^o+NdNz*V^oe8SL%gITr_02be~s4WlDAnk)JYDNeT(O4j5*Ou4`@8#_b2 zw%*ttxwi$tRKwU`bCLp7wL?O{Z?38i5Rg@uk&szs8K#)}vFX(of`-f@t1n{(w<@i& z1&mzC5UF7{9@A>#Jap6Gm^x6(RMM^`h83H%gj5(7ayogZBp#+c_AvE{VQ}26w9Pq* zh*Q$csTm{V*FDQPmL**iy~?R6q}QewK;7G=*qsWqO6aVCjQ`o<7hUdYMdhuQr4wu8 z5yxqrVBncWA_2)aX0nglBRF}y)24tsl(j=G9_CLf6XRm7WFZ>&=*1)|7NX6C_5OwU0v z5^hPGOj|`EKjcwF@IsP;A{2_Hx*jPJ!hnEP(PtckK4)m_gt!w9qo0uoT1?~;{Sf7$ zJE%rR9>braVrT9k2 z6wb9_ce6HwaXB#TVe;d(e|S)q7B&0b%3_92GM#$PPAD=NArzVf8peD~R?w8}2b-1s z#Kia)m)dL4!%D4#_!wI750lh%VoAAXE*V-TV&Un5Kmm2n@Cu(;P$~vLtxE(zvqP#> zw*NE55TT?D_o1={;>h_7P(I?-KFp(3!v?+A4&>p-r>rlYt&EAN2~jTts^R|t&CSnf znCrXCTmVK|9&?r%Pj>2Lpn)S8lx=tO#)DS^G)Lq%aNRs6M&7E75wSBMAv~@kNZsPS zw|WWk+JRCSfCN($2a}J5`{_8kp8qP$c`K(+V%o0rQbuRkXgB<#9g;7{S3YJ}Y2Vif z?x0inDQ!PR>D7^ISaD)|hAe%eq@mVxD3PV#VdG1>vBbjK$Opk|82JcQ{qJeyQ#er) zxI-}ydISqBcFs7p$SW9NG6(0K-;@m%R{2jdLQWvoWHruMx#M7s|eC|G6xxh&O} zp%97sn^dhwKNA7>5J{_nm2S7zchpNdK323T1lukASac2h$j95;HmgRF-~m0aR;guf z#i!%WgnVTJ0mGCL681`@7`-!rm&hwBWSQX+B|cP*M41s0{X<#En?0`$tT!ejQ=-Ik zC)OT6Tz#~#Q1(LbxnhR=3u{h&VP6e3{8+|0JzA`xHworvE%oGlV&Xfy4>z4P$%k8e zr`sy zMGISy*BczW9Eo4bvGufY4}}8)+`Qz zgs&_(M_88_<)JR#!LNG4Y+?NOpvcFIdX+tsy zhPxz@{GH_^?7%h>dY8?SFgtziOQc%Mt;&0>2~c^rK=(SYH>nOt&|Iu!2ei+ISpcKS zL=Vl}ugkD(B22xg^vo0(((rqC zHq1XV$TAP*z!BxJJyb8UE7s*GiP7 zb#=ls%`&Ya`-&{ACCfl=MqJa${m~bH^+!d`zs`5EJED{818rHz(dnLe@?xxm`Y1#vFh!O>GOic# z`>2s07C40(sDzkCkvr>zVT|_M2Jx36uGM?3F)p6Q9?Ad+_PK%pJKh>!LNfc%K-;D?_z{<*-Pa(3_UW1jcM0i#U8(lIgD2vGxwB+K}$+%Bl67 zvIe4f%-N8FH{^ePaf-oj3cYOGT(4c#4D3(I&N`V)*a+(w_B=4E+NS;3RG^6}oJUN=v(x7w&Jpo=!#n9uNB5G2j@?UWy+Z^TO2IROQv?B&_xUGVUsMADKv047_KH=mRP>$ZQjxAy#PDJKUpWNBu&6MXM{zvl6 zo%@pP;C>ntUH@+H-o4)AwbkCO)!WOD@2=xKe6@Rgcwn)1sqC1#u^2|YG{mC%VM&{x zv>omAHowTcZuPo6sFbCw>)Hh?<2c?T+L80 zW9HzLQo&$28-n_qS541ZwNjuRtHpfap0c#N29a>=fzfvkP@oUUmCAc1nK!^m2#h6o zGJ|pqb#1q=u^726!04lN!~794vKAcbhE8k@LW6*YI#xE=$N$*iv@fI=qwXojwwq|f-B3X5DSdM1{-wU1*|Bwf{S*u zs33Wn`k_`M$Q;y)oSLZG`%_EDdA~Y5L||i$8?f75LCQQl+sX z^k(RJ#Nd=QI~B;g?#FPbkL2@(m>shHwshC^iO#dr2qzIdWE&8tQ7EU?Uw2aDI+}&e zK(oZHkglW^mFg)i1N6IGiT||lz0^j5wnGp zE7K;&YFHt7#)@z&7Qu<7V&#mrP$zECYgv0g?x|TP1-GiTpfp*Mr*5QmTqd|u#efh7>rjCq9lQh4rU0w z6i2>5QTA{obD)kY3ZRUJ3pJPW(Q!k=pP8NmTz{1SB4@~-6hmazC-zRkvOhb9$fBFd z7$O;gl*C!860AHkUzeZK{ez9@%(*gMU_>AoVyzD9mb{CQfNOe|4-Z zSdfH-az-$7(MF_a)2={G*3*|2NjitcouRf>-x zMF}+kwhMh0y&EX-1`kG7V*!?UDS?xR%JQ=CIT9I&BcVP{qngd>k?wp%_w0Auo(g6Y zGVRZbLfEgcN>|v6<{LMQ_Rx%to7-MS!dEmT4|(7xYYM@%R;Nw=GnhhA5ZGN#_r7a1 zNiT?ijan7TR0L*75~AxI3K6EpXEKd|48je}kwvp+CyjuI9hD8B+huOh6rf-MFcC+~ zG)PRra^@6%Bkv=`9vj@)t}GqQbdhe<`foAEmNb{v!C@ z2E#?h(nlPWS{N|3EtJoQ%G1|^1pOT7LY6co-=C0j=w#CaQk#)#*2kPapVa~4bV&E4 zh@N@Kj3&Ai<#uE5TQedZ6~=C#8+fTlF1vuG5`nr5Qnn zhhGDTXl?tfrR5u63fTrP#L#`l5AP=Go#>-UjJ^G5J%SlbHn%FoYW+bVb5k zLWp?UL?f_h6t_mex4-#(cdO@ai+cJTg^)^$XTn zqq@*j@$l`KZ}YR_Yk4Mhn}U~;sXHhG=Y6}HNA_rc_}o+Bee}`Z9(79VUO{=XOB=t- zDdX-K3s^5UEtE|wVO4w*)Pt&_dvEKo*dR6`ct@W&s<*u zZZU_^qwa^iXrjAg>+ViAk9y?Z96+UqP&Ieo1D}iU8y>g1BbZ9>c&oYldR7cjHwM2{ z0qN}Qn>KbfoUJ-GGw?y3b+-CAB>HnT5moot6w!ke72p$K!6yQi53a}zqr zJtM`qkt(n>5#?W`rNZ%K9~Z-+oxTy0yWAAN8;bKJbYE#TRGFA@jYa9XFewX!iXziY z2^Nc_7sEJTv$-V8x841UnVf!B9xmTsSh&Z)QS8y`R*98E8vSbVtv(4dHAAd+hz1JL z+3H)xg5jWYx(~5C+^(dB5ZGw?5EM+YF)}`C#bpIIgaSQ|_Lfc4I-yKcYf|KyzW0k9wadm zAmE{)u9Pc;^0J|6$*`NQCvdq@juL4(r_cN>DZIow)TD;zf^;7@ukFW{djW=?kCVLP4KDio|xm>kca<#bm!Z@t?ROvqqigo zy`Z?~)?_t5J3BYUUtd;bZ&HMih^?6=E?AfyGg%k5!xt4sm zW8FNy3-$RU05ug`owz}%>WM%7@#lXI1ROK`-uWp4zh-B@ngP*g{JEQOXC6MhXGnn` z;pePuc6Rpj&p-dupEz@0eKA}A>(MuJvtNGs#h>Qp=f0Yspa1;Y{1<=XbY8pm`JXD9 z{`P-Pu`V4mwY~n~!TU!0(0dliA1zLQ-q+KAt9KIdMc{`hMA~tjGq4VG1#g{rzR8N| zDgHA)^+EOH>u&qI)kkaG%p_+{`dNYWj!>QJP)r*sp zqlKB7*RNkszu9~>jW9eTVRuH+tcLjixOW$Pzh%BGpB$kDsS8Md?t8K5>h(3NlePY6 z=Kh2A)u{(-w_rl@ks<0>G^WDc5~yzw3BS7oG%FZ}+$u-cAXpCH~* zT}W)`9UX0_elT2G{=+3{M~Z3l1PF~_`Ylhk(Pk;|*;b1)dw33@E$Hs1;H))hcE(F}rOVCf6?uNRS@m^w^UR0IpPp9>MC#el`I#kLG_GpZbj2(sxzcwIUPRZh zst40mXPSdK{rulxPZ6Z|*hH;lH%bFko!nU`$LN)F@8y6A}oJgY4Sc zl}-6xQ@Nd{fJs?Y>ml8FtJz16OV92l?)ToH1|y+vk_O!FP3HCZ@M-d(7u%&dp82xQ z9WOY74{kkJKyH>^Abnu*?wys@`)jM!-yW^rzCoZUzWhyuR_^)ib6Esftpr$;gdab; zE1x5hD?nso7cs|qNMh*BiX0V`gu^$g#l;rK3Fs`YJ-EI8@bBMN_m}Uj-q>jQyae;} zjaC%|B|i_XnpaD7S5=G4->j`aT3%US8d~DwOnx(Q^Xv&1o+5*{fZSD1(oxm&k4=&}YCo&_lBd7vIjF>uwV_&!D9H{aGm2RydIN>z(gMj)ys9_nf zA+B2=ZrDl+Y~zzWw6qq;I%2+;9R=_Fim|!}A){1OzR`h5O_`b`WAv26XXJsO4xrDV z!RR!yNh)mmNY2fpWnuj~T4}0{V{~M3Gvz5!`>vhXW*qST;kFP3YALgE5!mZpq_bH; zf8XGc)SnnIAR=mnpcmc;oAzmiX_+jh{ZdLH#s;`eftv^wTT; zYkTHRo~m%pR1x^lCPB0VqO@MX!1ErXVkoGZm=N<1X$uY4xGDJXDAwy_pLrQ9mTnNl zdzN28SEz_pz#`pC?$pd7ros*N?|w)u9NJ%B6q`J(^|<)Y$I@shs9s;I znpxU7_{`T5A>DDVt%gC;h&eh6U_zyLzyegCIw!;mM-QrhtSK+WR9f|b>z;^VixD-q zj_lyB<;9vka7bk*^qE|G57wpugjll0dtW+Bs7BR;?OrnSWX^096+|xg%F`YtETpFy zUxoAOVH~IgzJbNR?{pUzJF5?F6Wo(n3v_(zh0a;-MF)JB?3U<3P+werwDPw*>#Hm4 zk2BaW;kTMunxHpUgcvh)ib4XZx|u^K6ig$JVQPuhe{k|c4Q-Aq4{oh~vz*vjYjl1I z76Ajth{c&<%D*@hOv@L?!h*4x1&-5QaII+S3%MDY2%pgvjWIxhLF|b7YAu|e?EIzWoruak)t%s9OwZ2#rTX)qtG0{k zXGrkc{@p{kead#=d+T0Lw)T{W#1k7KWYRo#7DP+D8Wu(qnMm>|yCzyttXX{ zl!O+>#LT10Y{oz#LujlF0qm31+)gN5%FT5jqR)ooBz+|8H>eRgXXR9@*3=i%e`%R{ zjMIVE;8(brtSIXC5J!gn8*`MPXIZNr$QapN|8!g6@y?A1$S4ZLa4a51K z|HPg<$%}~?8cOvU6>fu7wR=zIo{EnSX1a7WIn$0$&)Re6GtUnNm~$ymbJr(&z191- zdcE4LCVA7UPQ!bmj?uzGQh2c!+YUZVdNDPV@nl)-LC&+z_Qkb--hc3L?arD`=7Z7T zJ%zF0gcP$DF|bY+Xd0n$70>Ev-CA8+d35KYE;tT@V^SEwNGmFB;r6)bg+rf;Chqh1(yF&BnfL0rqPrpeXu9^Xq%QY9&hE!oDtvLLOyV z(q;Jz&3AKfbTBP{j=~4%#wTJg-Zc&s){?5USkD{r`iUd>0uuJCLTPpVa=x}fF z@@=(U;bhL`#lVWiN-WAO&$UT{XvL_t$%QkVT)g~(=+k+dKDH(u{0Q z;+WiohLPh8s~*;>?CST+U(`Rgq4TD#cWTMRE#gBkGg^7Ru9+t%tMjXx;ll@a?>xA-DnxhckkZ1^JuM@Y`3usOmEEYoSkmD!L&Px^5ebTz4OiJ z(luNCk$8a%gI&#b*7RJvj{=i7+@2$zIW8c5z0!vUD1NZ@N0Zb>`~IOe;$W#wOH-Li zl6Vr+&XKE9$NU@Pt8cZ?`0x5IeHLmEABSvb`;Koj7N{P2H$s>_YxmA^MxTe6Ly4(b+qMQN3=8@djQ<+oFhc{l4z2V-W`Hj8S zj@@J#+Ln6$dt2#pl_0glMl~;ozfEJ~$&2l-AKO>Jm^>~mDf-(eiw1jGy9|gK|LM${NbZJ-wl7BF}m?NPe;CnBKX{j z!H1vu_VIM&YnL(Up!j@E-e1DEp+~{EVnRgIR$MtY+Ob?A`xd%N>J(!+5 znJ{*Z*n~(V$37!N7;+>ct}L*WaAApdB-%YL^9Gef_}ELNZ1P4QRS&Ui-}y&^LeGo? zkM9d83{VNlf^=^k9~N}Gx->$}uj5r}u~9d;2Z149_FE~RRTfu^g2&+7f&=a4i|r|K zTE!f?KpF)RVo$48Z+<~Ze8xXX?dGVd#ZN!osLo7nwYT|q z7AEUF*)>S(vc(azDeIf`R#D9(m651>RY?cIF~5JAY*X!{^r|qizI=yq^;M75OU|}A z{?3}*XJH}u_0*E0g4##u-R+m6^XWXwAXa^bN!zPyx4pM|c+JloD9ca*gHHtbXnFXB zqDMD9cG@pHX?N-vBkF?;$rvvFFtEfG!dG@xmxG&EUAAx|hOES2bY#2fyqcT-e0rW= zCc{IcNtxYCKU`E{HNV@&tRECt$H>DhQ@R3rnpIb;TC>x0)AKFdt*1LwI3s))GdmS? zkEHqSoBE}i9qQC=3TXZU?$i=>KYx6c_e-yBKdr)u%zl7BH6>(`Xp{tA?CM0YRjpfx zq;+mn#C&U4PKN;Hd%!0((n=FdapH`3$h?CA8j8zjdF0w3r&*=#(0uAPX);cB^|$`J zNSHDqlKiB#*w1`+R$Ve2Hv~zD3t|RubA(Ump$}ipX)ycTk&EL{&H9k`eqQf&iu|>| zX?!5y%~gmeujcW1>SqjcujbWK6AdnM$-gnviXGdCqRkZJXsSyXmZc!w z9L{y^1Dvtiz5hYgE`fFwe3*a<@a5IPJZ? zpN=q4M>Y4KkQ7t$$7FlPM%AJ7kIY|EH_pz2WSrhReBKiVVLfjBZS~P=OOz9{>4Qh> z%lFqSxx*JM&@bi%ZokFj%WTWZV^FV?exytI^Kp zD-NVnfQfPSOj3ZmGB;H4eC)yJ*68v=0AU%9S(!obXla$U@%$zHk=ZmXeCG7td68}O zGO~g@>9OI9UkGz%+Y@h44bF{5cM6z<14`j^d)aM#=4VFvsOM)E1}mpBMlL&Bh7?mv z&QHv|Okqb%#Xi1938~Qx(o8O_(XFBdVxm^NOCcloNV_q*Xc4yPAaE{uozdC31h4y) zxnF=1(0 z&j>1{zT4#}$|(iSYaXx%bxC%4zX?Ab=m5b~mslS|iNY2(?jRYRQyssUki2V!Dn64?xjFc0Bvc6%nJ3 z3v5V_VvIQA>5T0j%lB($Sr!&wL&itOxX^e+|K&uP+dP>e&8dkQM29SJfsg zngsK1_7KP1h(exF>`6-^jkMEFV`81_<}A=B&V_{;Ih7Ao=$m-$As=OZ5Z{4DY!7Tc zk2<`IAD(ml?MKeoO^5XvV8fC*3y{KUUK;4F@5v#pb<5Du z1SE)=hf&e|U*o>&ytO(O-g|;UTSF++$iWdQ=mc;WwIcCTSO|H63f?*B!f7&k__oIKl3lu<9g-(jcVG zQXob3oP3?4)?2Sd=b6C50zb;Y8!tUMV@=n6pq)4ryPd`Y)9DfDyvN2z6l_5d>;|hq zWN0#t^mPjcdU|wnD3x~NLY7@59~31dn;Uplskc&BPLCY0F}|{3WQ9Ynv)!lT8wjHhAb+IkEL+LaJ zTv>rK$71WiN55KCpWH#%4Oq>ku%_nl8z+kvAd3tB>#8ePwppufi>8)}29vZP5ck%d zwe{gv7Nn}aC)0V=V9B_F5!QDcO+wME@w_L3C&zz<3fztG%--!s5AKx{82Lie;1gyN zpE!(QQsV~k*0E=46F}##fr3qq$)tJ5Cewm4-`EPmL{=9=O&laC*i%c6%;|ZuCf6Nh zqapSQnUiEYKgSe<)7*m;{Ba_5$#@ryO(pPC-40Yd!_-JrTJPaK>1rD>Qhc8qg*g_} zG{W=h zsZoaLxO_F-GYR3j<1~?!BrYq9Y>;*|P5Ouq$0cFbrw`dN!A%rKusAa>*_zPI0!Ds3 z!wXa>2A<5xO=Hgp!n8rM`7q8>DAA=iaA9E`>ZQ>0(4Iv^T_UTR?c96V-AL#d*cpxg zQxT4H)}6jQxp7V`%G~4(f}5?`q;|;bwVM)f-K4mj=m&~*PDlVPiIpU(Umz_E?s_hw0Oz(B z25pEGhXW(O=5Ds1F#K)2zA|~EJAGwxMg+V)N2~eCYQgEV`rVe%=icU?bb35z^nPlE zGdse^jv4mUOe_#4xwqY)G7-&6>NzVcikDF2Oig4+CJUVI1R0wp#90|YnqFh;iK)iO zrjK^s<~HZQamVs8POxAvK(!Ma3bbwGxG48PpU8!dN7+1q%+<-ulN@-dtO5oAdrT zv^MT)$}QvgT4RjLr=lWpMjV9`)e7(>q)#O4=Fz4u)?!a``cgvuDBqo0IB*=dh1vQ> z2X3ohd6TQv?A0pN?_vYHt*NQ@ONCLsvU$F1h9f9}T8$%)d@Pn!oJf9*@BxW|R?n4s zDyQ7pE@ztDoOtXg z1a$nIkAHU)EYkV?#3Sf^Cwx*L3AVwSUN#ZRZwGRG3fy*LQ?=c>>1Pl>Up}(w{i~p| zPky*T<_2{3GQN~XJ0u(bTrsMwr5z}%U8;F-Uj?Qd<@F-D=T?$FYiTD^x)jFJX}@Z^ z*HS;}-=W^h)4_@)g!|dhK>m&X)_-Nwn(}PK381jSPCgB^9(VFfTUR8|*+Oe56^jNMm5{dg|&tBz23#&Xy$f=p@)d4)FHZia>FV!nT} z9N7j5E6WgH(n=)Q_k5P!;cd0{aK(zwIivk9+;(AezG zWK&A#O5=HEr(69p6LD|u9crwTB{b2w zO=8UGcP5vpNphY9Pc^yDAZq2Kk3b)b&l9=A5>ef|w>ER{-rvpRpqZNCb>)$M6huYo z9?BhrtNOW_qtXDKd$j7n7yW^xhscTXi!poq`!1eqQU`}5B1uMySSMeEiCsk%|fT9@&TaKd1731>EN_M8;W^|*u;QTI^hYGnL2a9 zn4(ErHs~j_Pr(vl^b_CA)cg5UJ3zTV(|X!78|{tu3|6%8G7m2*Z@;=ZAtceD9Tum< z!F-2Rx7Pl)diO3b1}`=aIDWQ%1_QTDShLSCS!Epx?=@}UMO!#*4tvyyyx^Pdz@m)m z=AM=Kd|xXFR8 z>Edv?FxNN^i8EeQNdI0%u^PLeb=oBm^5XL0_Vm#ghorf3qRD4Kfx-_-GJ%T|jqN9a zcltKAk#&&dWFr8aZQ_8yeYFxaQjF4gp=t;St?4_rxhz1q#;59>-|pOBjR)06Yokqp zNxhup=Ywfteec}P13S+go++BXQ^$h+4!21FS-|-{ZFUXZ4IDni>w$vI7%*#%lM?jp zba=<~9t=14npI9?DiBmGS6PBJ%EJ*WRn}w(=(s2X3rtbIhJ6DP5@uoKs=+a5-7Un!3FQIKddc883O=rgiBJWGU=-pWQ@rg(LY|BRY zH1B%sO;E*R_;^8>g#Ki+pyaT#8V%&>AQ|09vaPSUcgRopUQhIHZhP|EhAsP}l6?$4CuBUumBtGG*3dkuf3em3$YD8A(pl$P30e?}aqz1`(lf zRoz?u`zjDc)Ga%;x~gXI2v?kewAm)(v&)U@2z)cKvpi**@H<+hHFPEKs-2^|dddg3 zT+$g$0!fBMP?t9(m!L&;Q#iT$N0s2YteP2y zm>l|*bFs#z#6=L~6tUq&1!&hg$5=6QXJt|xK`M&eGVw)GY74Az#EmYrvJIzHgmU%Ue zw7hSkjKj*}7yzi!y+UrlI!UOcmmF-XfHuK1l3c~Rt?F7|1;Lc}ZgI7W29-R{%?FCn zArTyfntZ#ioS{VD*xgBXw~t@0#66q}A5t|E>aB6nAiZOUgL7&SN!GwydF7Jwsoxbx z0^sXPQK)hM_-&&CoF@Ag0__=lwOhtm<*XIp|%2p#FN3M3@tUxFmY{p5rxHz=F+*5gg)_UDlCX19D!e?a#HGbdl>E% zN`Ce)p#!&~*d&(NNsFr3wVTvp4^Zk)juFx5fQUR11yc(_TtJ2-wjGh0ptQh5-F#a} zR#=H(87fCVv>Qugl@3*>zizj_4#C07W-|n3kgObJfhRsBrBqIjV{*(x=Lk`8sdAB& zZCYp20Y;Fkj_Y=?Rk&&wMz*dv^(v(}Zca=mO(6EFReYr=ZQJSHX$q)gP}Mrj!}AW} zAPeDZ3*;r@iwf=sqZtHm;9no;0R1OOh#c*kOm}+zTm1~{BL~)aseZ|P?H+h^!VJV91 zJx`?D%B^xCrznWHmi~%D!+U!pXVdqI?{lqv1vy4#YYQwB(%26}yW-Z=0(HFn2gge^ zfbH5jJup>@ER2)4oCmHocuv(HzwY7oVgWqM-%i$A%Oi0Oi7K0RqT@O`S)#d^S8{kH z!3-Zn`mkI_&a`NY-N4L%X)g_)QdM+1-wLIuv<$s+E;U7<688=gWLnwXT^S6896^}D zDk!wFyuNx1k{86r?_2aLvxa2`FUZr8>A-C9D+ncJNQFkDa~^O>i_U{DtX@KpKVcFS z#+jm9zui3NJ8&pw0a)Wi1~WBYlvy2zR);dW)){{0MsCqYj5(q?3e7UAWe3TK4RN)x zgv{@o!RyA8K>_SXEYW~I9K5buO&VejJIe1|tmPGA6?MzhH0_6XAFuhEP>&CvAME~H zN6;v;S%FWvYHinGVPQdRDwA6%p+Ky&JR;-e&EJd9)-w_L^ ztHB8gK9OxqnC$lAa$aIFVSEIHX1n`>0)EqT0N*NSiB*h#1_kkY1(HRa>v;|Uv=4?M zrZffwsm1}b-u4py1JY@{rmiYiNhUzMQoN_bvA|@}EU3D}yWT<}eNYYL2Dbr6G2_N!wO)9oC<)( z%BhB0&7!bkr(69aSz(fxm8T;(Av?s1T(;^TBdSq<*GM;P@nC=(Os1`8eTp!K2z>Gy z*ASCvfJ;|v*ia6a`sx9>_T?vz8*au_WR}(2+5O6*elECGP6Y5?>t2{UY}G4XpAP)C z(@jdba3x$&k^mbh?gFRy!h675O-*3M4Jis9B!c-bXt3=jWD_5i#8ljqY}Lx51@|rq zfedq;M%6S@gUNVeu@s)S5|=pYa{xy{63`7-h>C0;fS11b@2v^aLo-bxbf zaGmY`+fKo{AdChkm|?7g9|AB)jZH2^5E6B!k5u{$vN1xrT`qI^e0V}XfA6L13Q)fP zCAjodaB&rWssSs3H_GcU&*-8ATeHOU8buG6AKiI?sJ}-3gCVz|0HzGkELGPK_>Ge% z=h)%@BP>Ybm}H8)PiafLDbjaX;+Sx}z>TZ3X&1u;Tk=yCwoz`D6${tbk5-p&-CKp5 z9`j2?k1gfIC8>nE%upMotGEGAVsiq?zA2ziRXHl?Wx69#*Pr_ph=vSm=tRiZWirI* zb_dUl?lmBX!irv_;{p|>1UYtv%(g9ANB8JSfD?h!*6Ps#KHmQ3U>C+6dLR*6dn7_4 zBXIGx$t`*jd6QQ8^^kaxoS13%f{JGfDw%isG2czM6PE&@>R!3J?JB91Q>*-jxI=iD zGO|9hWL{dlM#w3Wn z(KD^qfH6)<<0>Qe`LWf1H?ej?CIDwD1y+olVm6DFzYQsIRQb@JSOb@pB{I_8iMDcc z8?joVzo0SPF)|yTpko9g^kQTLM0-T6{xR^m%{rbR>Ka$DfL92n-2DbJ4fqiq8u^TS z3N)>Pa+zVH-lrO_ftS>PI67iO@=jd)$eoZ>Fcp-qH8da<@OSrg8IX2*XocDC0oaZD znu5!cB*4Im0(-YM4<Y=}<{!>+b@x@5}r}?k`sQ>hPlz;luQL1xSW>V*>3?8y90V-90 z|6u*6zkH=MiHjF25^&MZ54M~>1Z5CKj~|s;`ixt#UVD+L)L?e{FJE1s5b3#jXKfj8 z07X0Eox%d}Y^2LQ#yTy&b5uoYu1ym8i-s+KM2$5acfb`JF&wh0gyr!{X11ffwae(J z=PWZmj5R2?zTD!<5m7o_it*p|R*a82{}0jar0)GpjO6@(^~D$Uy$|Ug2y@feU$f2n zZ*yOL_2t~3Dn9w`{~+7`Z@&NGllFgxpq-z=1U^9j=f0euZ|?v6+}xM5f7Ji`?UDaa z@1p33%=4H8TZ)*v$r3#u&;qb7zUZU6(Q znZkQN7OPOw3M$eOib#(N$k>%|m=bBxneGs~Xs=~j>p|IG9_>;(<*b_33zZM6iwGBD z*uCC^wfThwWbbFH{BFiJPt9pOvUm)6v?JEtf@A7%SHc_2Vu9O!aP`T|#>UetS7)w1 zm*Y8m|Gfn&*wmY7jobe-CE!G1wG>KX4X3$z9hJdadz6kpdG9w{`%*K?Z|up~Z$@GY z-phjPZ3K5<#HNzL87<(%H2Vi@GxIs9eLQzI&1v7$z?+U-93~j&@utA0@%DNBk1bO^ zQ4H1f#8Ds;%=aOM3xvCrdXe5ZENk0z^dj_sl=m%JuHyc%PtZ!@i!pb0H4xQ=`vRxX zmt~eZ{!NOzegpyW$$dcnPdhsEy~oFXA`f^!{hy!Z2B;zWKR>5ypk_Z}{=c}%|8oBS z4*5Ur_`*VL`ESAl+&O119A^l(G3C|;W6Nh=E!IA0oF{MniM-+)NP;-TyI4d?is2SH zR%(TBoN{2i;9>3+SiG0ip0lV4Mjeix`lO3dC?(ULSp{qE88GM;Tm zGDS|2VWnjKl?~`Kzs)mOy)g*C-GJJ16AL*Sw09@bHHwi@!O~oyn`G zwYOME--NeKQDg2k`|F$P&((c0wZxO)VzABR+eM)y8DS6i1KFTofBm)J`XG$(npYgu zYdNJz>sD)JFS6vWy`<*BfFJI!cd33v_+*Q+{+@22)j6;b0;F^Q*p*szQgkvy)EQC8 zBmnJ;=Wbl$ijOUPEqe+KF2R@+MY-3adGUpAzGyYJDz2{3;D}}^9+P{p+|u3L*BpcM$Ks@uq zX1xQvs5(4y+J-(;Mz5U~eg{6am^D+--?A&B|7Ptc$WCi99l%M>`kkDY9@ks z70A7X)V^|3Y|X4}IbmhELJpo=KOVz?v%>tTlnXpQfpGD*CbgOa%H=NinN>S`svBu; zi;#Ed1t1csw+pCIGgQb(F{36j_{1cX{L5qFPi4g%Vo-hahW%nS?ZTU{J z!{|7OM2EY6$cx5Sf{Ejhp^^KwEMgO<+B3W2iOn}ZOsPPt&K-Y=$LpGF=C!!E`e5CM z*|BUoc^tRdl~hdXLxkEAc$UmyN12(~?j)NvTNoUqpM3MSMA{n-MgfP{B?Hrua&LypBB8zEs7^DqX`yR=Pf#+ zdbqs)H%~L8kGhL$&KK|GvZuTB`besWaQod8vO`Z^^bQUWdjIZ|ou#yf1|u=t2(qaBOxqq zHrhB?$Y8NFq3Bc{6203OlQfYxeLeC}Eh$0@QWPx*FL#MJ^EvT(bn0RuCt=0Zwln)( zyKhH==yyqt%8~#a>F1V+`fNNX^4+V^$m5Kdo z_gRD1I-k!3L}$&jvh&12$eIgS!btFOc!5}Vp-p_2a}CvxYkxjL=e~MsD4|VFbN94F zTY=EumS&qSAH4nM)e7=X6mo~Y`p|OPC2l0ZVd=v;r}^lQj{>1WgBcV;d!4-3th3%dYyUAxKr<9)a*{*sY5G#Q>bg%AwOXLh8x{Vqr_mUv;4L>aL-WY^b9 znr=}8CM7xvr2GNG0eil#L4ReAC^JDnpUnikp^@!;JgH$aJ>9;jQ}%SIol~Tg1TONV zolv7VgDlMtVKQE1AejNfP3R{2)b)|bAGW)(IVUNA&(sgXX3#v4<@(hVMXtflo|>!G ztnnVhDLT#Q7b6Bb35JC8d6>)zk{?zZger?>!8WX*Q3Nv!vR9?iA-9(w0Vd+M2b((*_w?t;$`biVq!xt_AfFm<fFk1UcVqsSyhK~I4l7M{gg z%~MbZHd`e_;fLHz!|jRMy5))UHW6-mRpeIvvBgpibkr_Frng=a_l$BtsJW%~9Q1`! zXcg!T_F>#h=%HI6;NbxStm$G0>j8Ae+9B`SI$Ad_Fx@KrJt-Q4g$2_&EN9cI>{MJ) zu=%pUb;-x5JDLb(H0V;FSs(vXZk2p@270Zdb>^ptTLOax+H*U85FKp~GRuFfu z#4_9~By&m_aT96eg;U>bxPINucF(^ft+7vaStY-6NsB5;F5g{P*d1(oA-m;AkCy*g zSK81Kd?or5$YsALYUkw;qO(-QD2q3I$t=8XISxD$f;n%72&zNZ=d_}TsNU49Qbide ziVM-OT8#2W%v0x|moD6)tlA$eL#Mh$o?fZG#|PC_9>uIj@|T{KGidUj^t)|SGmy|}>gh6BZc~W&YJJr)ztmry&sL&OJ(7FN}V&4)bs$0zp zDaD~+q`$Fo%}xIR5Jx{}`ttl1;4Zd&%rtc@HQ~mll+(R(g$euN7y+B3bAYW_P+j;c zVJ&DL@BKI>)HVJ09n(q&JOHY7#Xc4wE-8ZxAr~W+j7zC8pE{$H@N5CBa8PkVH_}WQ zbS)4c4n%Z$aGq&wMn>69;4pu)XK^WugO(OeCYFS$E|}D`aX8A@xW1b#N?G2psbs1s zlF1Y3L)aO6zR&E#z^5%>8DTvkwpz-h_e;4M)})uh8R=qrYZCBhrU@*kT8}3D$i}8< zHZNN)SHY=cCy}*YRhHDC=$j5f;|pm5s+rN6j?FN)7Iibw1g;~+y2|2u zQl~MUjxn!JniM_+W)fSHK=9DwGgyh^S! zb!}N4nHN_7vEDgPP8tF6Yb#rL(w(_J!)aG#yl6%%D93^#9aWgSlHsqC_o13j`xaZ! z1U$lK-vMpcK4a(VZLI#3V2Q2g2+;WX0lVSG?7peVmR z7mf}7w>S4gItS0q_c=$z#n>>=5&!krIFuwZ9!0ze$z{=LBT{r-`obZn_UQEZNGT&| z2PS7D5|HC!(zNnxkf=H4CS8u?1jyw~Kq+!G68P~kIfzJ9JN?&4i6<`(O>TRbLsht9 zx#8qq%3&%$Gd$&Lh%aybLxBVt)-tLWBW z9EI^m2meJ7a6J3i_@6B+Jo<^@KYx0E{7*GM_r-Ah&)ipk#DD%i2=T%AAK!B5?*E5E zK*ijM>roZ(_lN{5hU`P}p5)Zp#al{HP)TcyQO^nacX#FO#Tmf0%{9XP8D-Rx22H(O z0ZuG7aU1BrSgd;(DS6#L#xa?0lTc#UGx3HbAy)M*Ol4=LdeenpLsO=C-|NY&p&VBP zZ>p%3(W)k3nkh};8bN0Z>-lv0{=qhnr8ig zF&|J*urcYb&oPM>CYdDp!y`AsVf~KJ*k$B~EH)$-{{gwd@qVn>;E3@X1+ed&e57l-`=IeQkl7g9fN-t6xje6l=nb=>_1 z|5dTAzYhidpFPT_@qdc*ek$_^Jn!fK*9iX|;s0}=fAvTF@9%+GALRdR`R~R2r6YOF zuRE7x+>gxw(dRPCX8q*@6ke64$7Ltz`3E&ZybAlF{kh&p5D^z7jV6QFir?lQtX}>s z)V>K=z9Js|R#_>Ogo`$7Lt)9UHNvrp3s#qCT;jrf^}vR{9u(x z$cZ^2Zh2?(bdQTbCsw!`f{gvJEJck_kApau8Q)7#`^8}x{BK%ThZP#MdxZq8JS}EaiW5Ce-DN>$5P;T}}rq{&8V|KFB>v7Q?)f5ycrEOhU z=qSG@icpSaE1G9xDSTZqV%JxUdTLbUN~wS;VwN9hH>XSCNa|zNQ5Tb zI}c2_WRy(8A!l@B_07p+;vjMRas3tF>Ke)zNo9QOWKpx(A7)I+Qv9*M05EZ)8zQ}s z=lIp(9B+@HNV*CkC{(WL6U1)*UdRLjP8iQ!BSLd zj3)e~(*J2!G_Gvw0d0_RUtmXF=FeE4;y(A3Lr@nv$l?7X)+?` zX=vg=#4|Oa0x7F@mjsc!)bzW3=O4P_1+Jy!5>t7jJbOKNLs!91i2(}>+-T6mB^~uN zo`W#Y?kpFjpH$XN2m~>_JU>J99=#-gqiC9vl16~fU8wJR-x$nE^8lKHubca z@xy`&8WnMcSZ2#3xN0Ghc@DDr`ufySJ|TAU6I2wKpTPU!Az3LUn`4#Z`mX(aIt98D zhPX;6Pxj;cNt9#1Jf#~TnvUynx}Ex6%Hz-)ZE0ytc_E8FraKFzvs=xx z2r_iUimw*rT~Uelbd>x%zRc^fjIXmFHlCcHZ9JJiPtgd?23T8&4VsSV;zlR+;(D14 zWNHm{$pZ!D*2lh?`e}&d>CwB;g@}}piJY><2AXTTX?1ZFBI#^TgLC(y%X3ixBS^VX zJwNms)u&|c+jmbv*DKqC3W%nmHI(t=5MpZ&C?ae`{wSUe$6zX^$nDrChVwGQg;`DF zHl@WVpRL#wmjhX%Bty;(aXY2dP$m7SM#VO^a=~L&oP!ph#pa3)GEAM`>Y`-7eSc5?*6lk2)VBDTg46ti21Yk#m6~^ zBSf5_KE~o3aJb98l2n>YQF74ExlF)>AN3#H_QRn*EMZ{MUnc^7O7Cj^^6T+kE+_`t z)^-c}gw$_4&fgT`-N6T@h&Z5Q=3KYtc4m+iS;eMgWgy!9jJWNYnUVm4!#z9MGX%c1 z6#Hh=0Di2KiUKQ(Ts(lW%>oCcIpkT|hvY7`Ca2rIY5m(gBz{o3?FRh5)(xEjh5B&U zed0q_Fo`>Foff5YGt^J&rI=9BjhxYn$nz^ntV??1)cT=oq`_J}M$QXpCBpBiYA8xC zyM&OTC=L{=2|*_C>2wQ(^1?Y1mr=unT71iPOl-a)a8zkcjdRu*ifx#Mf+YP_(Rb87 zdx?4%>aN9`#rd_}F^hcVMK&Jr{HQy+sco!T$^KHxx~)mE0ZW|7<3W&Fv0_o=ZgLZDL;1bcK;b_L`bml z(U#pLh`kv_Z3of+#GdP@H7+J^NLR`2U~=QFmAiCYpBw>=2Lf90ergGMq;8asL}mrt zFS z2v7@eQ^245%FLWWcC${EWfItZ?AViF1;t)Vl*Cwb$0|E=R5_R`a)_);T8tul6^q(` zgEp_|RkK|*kwqO`olwrF0!VHzPOrWpsG+M-$U!C{hSO!*f^Y25@OE392g35{%HjT! z*lpdE%|vJPnY=qq}aeI+u zqBj4LP_*E|6Qc_eW(r_BxCRSpFJcATS1E^x%*?X%ui|CZCYC!@FO_&s>PpvI{d@dv zp{O^!Z6de{7X?}In0M8CK}^1x#NuuzNwa!N$d2jrJiVHdayo1}DN84v^Q#>N6Lt6p zw2TPZ(#7`~33Q)5nORucc>46SlCx>=EJk;ivow1>9bAuFY60~P1N-&%ZtMIy!HHL{ zlwWIUI*UwM^h>c$!{69ZS3CW&hKf=}`c8=i_AS%9M6~?E)AptM0P712{xgtV)yG5J zQ!N^8It4-`=&1?I%(>SZFhTjOF+C?M1KT9UvC-0YGBQHck^YpO0eyvM+2%AmQ_C^i z-hy!12yH%USu|!*??)f$PtEm{B(103T|xJAMB%T_8gtLTJ!c%Jp@=&sZB@JS%Q@#~ zfE_YHa)SCY4k}qJiy0U)rB58c7n0khNGW0wOrRlEq@HS?YAfV`M8yDYr52SNX0uQ* zn)ISHkEdrYhW@}Mb!%4;Mm@PMp$7MQb1`Q7hkw+agS&Z+z1;)!fZm%yPc%@4ianG~ zDX2-59vQ#Uj`NLwu4GC~(-dX@$Z;S7+BokaJEz4p61Y3mbU$E@^)94EJ7 zJIM%)SwWq3quJ*1)(hy|Ikp8owpp0;lW3P#Q{d1sGSoqjFFpc&{9+754rFn3E~E*W z<^{Jbov?Bqvr)t-93zo{JvfM@Wx(|Nr1x);@)O6d?9K!$O<27RoRM3aj|>NJvAx}W zykEynpH-fF!oF-*XFYCQ;hTJAF&LnI#WsNJYyeY0tiJ^Ha%Tv!jn5-vM4UCFMfYZO zlMu#{>$6^eXW;oRj=MVD`xj>}Qn;n$Cb9iWDc+bS*F5n^F$evZ_R6PP?3OAmeDr4F z4BhHi{rzYCZS9C{o1L0dtCFsaF_l%=+9c9xVpH$6PdZYppN-S+TD@c))i)GH*)Se-%4vr1eT*<4jF*g?L3*rr}(rp88aRbcu%gW z`6f%9tug8MgK_^z3mZY(Mh{(QNuG{kL>7l(274?K2l9~@RW!h-el5S99XxV$Opx~1 z1)RBS0M61=AlpY{qFJ!x0vt1JLq8nT!tn5X@9-JtCX^YjLjVn-FgkOm%`-nVe1chd z@(UFg7~I6r$(9rfd2r>Sp8VJk9d-$se2hpKy`*zY$KCcTWZ0{1tdUKMT)X9nNyt&9#qBVm<6uBvkm7u%#KSCxy`{73YDp?0Zr)WaAsEh#zVWS z0W;x0w8LnuE{236#|o?#y*3|{a)aX3vkZD_`yejNIx)KxTQ8Ae`3Ou$xkWGb9H8ny z$#7M;j3gS=q=jBgP*8UwMl(PB=Rd0AV2v7G{)gF1kB7EmD4l2xz))f~SykDidKM@Fl_1My7A~o0@z(cFjU|R8gm*c<0aD&l_<_F*i0ZSC_{u-ZD^9maCxWtn@rVB)jSk_A zs(^)Pv&pqX97wte0dR9iGQ1rtQTe#|kDIx4-h8sGJ~Y<=m{xs+WVJ3l z{k3PLu2E6Va1|ixx;@dfkTxeMfAWmmcQCi=@))B~W<#Y|LWWv8xZX z3xExge4PG9@qhRS8g)pxdMDU5 zm`8JzkdGp>TVyvLyh|i>5gK8>dImx$)pzr`SD8?_q+RxCm!jdfrs#&GB2<{G7@0EX zhB|Cks>?Oy(K*t_Je9Q}_mz`rF0KLot1Qwlj&> zGfYvo;?tu){+|c9F;jI(FTz5@GzOb z5V=gyV*OeamI$#P3=!Dy_7S)wlK~D;#7_FDt{wBt`<~>(-Z9r+o*B2Wb;cu~g9#wT z($j8=akTT-N$&K;Ei42T?6yQ!gsU--$%x6-KUBZRjY`V0FS_+~@>{DbEA88N?s7Td zz15!9-g~tA@WCSz%&AO~bMc4g)NXbr739h4`rK2MG*(-8A;fXci!m}Y9_p*N*M{tI z0`2=?57=EI9s_$!Tm{(q?IR$rZ{7)PUQ#|q6?9HM2xIT4055Cnt^95I(c0=bs77yHHJl!uKWiAqMseUk*{uP;=?zg zt)QPgua>8|?)4ZG8#lD`JIws}?alqoE$=0b{Smp`AIRM*ljwer%#=UI_&p$S&yrX^ zHvfAQZ}-tBUjz02{I7~!uaW$(`Op8j|Ka!8{y%*%|BEfhC<6!lA9w#x)TH)nXLc>P zC6#AW;j_2<$ayXg5hmt^*jzY6Dan__!ocLpOt*IK?>>Kl9R+*Vo<}xGqTudJ9KJ^g zV8-Pz^WMC3e}#w@?EQWRFTHHZFvLJ!C+;;Dq)OQG=p3fuI<3Op^jIa@F?k~B;xRov zB0|d~7}J%Jddwe#pd7ACchYX{?R~0nHY(Cl&yIBPpY=;WvFvzn^p5v$0N7Qfle1; zzzp%l^k1gurXH<4nVY)y6b6i6P|W$+@!?A{oiAa~BkzZJ601^YmPcFq=>ayKlT&=e zvL-#kZu~da^j8h+_m@POKiNgtncFbJ4n_2_y_mbv;nX&7nWj9olmd06vC0_QrF0v~ zy?qRub5;Cs4HGM+@o`J?EdO{dM{u-BygX|~woLo1caHh3C4C;>!SE|$EEx$v*6u}3 zBvkbW#N(3Fd&qnT!cQTi`S`QvqLOdQPKEZ--sQL&YT06HC#cInspHNidY0HNYpsbG z%jEaI>fg#%#n-w*oY6c8gwdwd<$!+diIm!t`3MA1kx)x%%q`by8TxN0$cQ3 zMUwT8H}~iSG3vFv_M8^7Y5Uyx64n~h<>ford7CgOd+XnQ%hnTa+0yk8S0=yawyl|; z+LKQ)eOz>3v(J}u)Eq9XUI}o3xvHMD=c=e}-0foRK6=d>s`lLEldqo2>eBj8dyXRC z3)UD{tAbq3+oYHN!Ram$g-iOtGgY4UA*J;e+N5m{e}=SX8#S(cfxSrb8o3d_X+=A> zv?x-bjsCSu*X0HLatp@q!B79Ejqz#n-**pw{rWG}-0Z0QH#dLn5Bcx+z@-n$e{A{x z0P*kV=)0_JtiG$~f6&i+|J66s{vO!>#~7bR|L<*X{R|H90sa5WufFqmW^gY!~k zf!DWC?)g%VHt=Uzq2#KSlpdcl>Rfk4xmIzEwr(E{o$_LJ8zt8CKSCb{7#i~YPq<@8 zs`t6{G?Yi~Lvy8xK#bD^s#_7Qj^FV}Yw$Zgia_xgs*`O5ghzN>{`BQlZd9u_&ep6J z{l@vmzyn^IE6gAILXVg-<0OxDR)MvbL${jdeT^+N8-pufeqAnj{g8F(QHDJ?vf6i5 z6>o{D>z~|4Wxj(2q1(B)_3*CtWnH!1iStMx3=0Rz1cblvu^Gv#yWH#AfjnO;+y`kXI1>U;`BA8FHo4> z#uSzY+jT?vOWs-zb*pi3#iCf|CeIT}4V3`Xe8NEz0}al~5u9exwyQoTVt@8jas%sEnwF#a+_~0c)-ok+#1BfXz&5u1ES6Po zWif%YsYGn_>@JjwTQUjkXxD?CaT9@1Ar3^41iNb?qryXK4Rl-IYd;*U>5`t`mEKkEx56bN2QM58fZygg7IhE8A%(`#QS7?@B zGon##Zf~1jz;^<-FmFEBRRqIDmStIIZr@<$V~`{MNuywG#ta_oU}DFo16?-FL8|O( z*IE_AU@Sr#U<`8dj?Du2C6&&sv-z>mz;Kwu=n-Tin=!Sd+n%`GzS|LeLDg!Glgd{S zYxcwUAU+A|WK_I5#NM`95r*n#N;iktO?kOBTql*;3lU*qK@p~Op{1SKWH?Z&;-DC1 zkMrei+~Zs2*lDi{13gh(IyszQ7qP!nOT>SHFH}*X!MT4EG%lbbo}#j62irb@=74s3 zMp)f@fH-1A{J6U@pcn7Zf&EQFyWiT1X#6mhwU7tq7u}2TQPoc+!%;vZC}v6+Q#h%L zM`iIR$#k5C@|lZtIwKOACR}K8A53Z%=VPo?SiH-^p=SkhM%Q$k8XTW^0@+j3In!0u zvf#U$h!=i3bqZv?#!M>z!>|~nH9mkE*hbSWt|#kNZh%U)xeWA{3C&`l1qmR;BS0ZM z;NbMY^JtaYdCC-~w)P-tkOLnw6LrS=#9m4r=7vSeYCZZZ$E8S}u!C+0-D%i;5ixH+5d#1Yrt;G5Xwj#BwA z#I9WyFdD4D3i;=hsWikKS1BwrrMN8s^d}Y4YVICs*rg&ZW`JpI1d*cfvwM4ab zpsx~3Ty`>Xf8xe3hztC64dS1s{|9_NF$CZP`aku*hyDNav!BoXVgLO-3;;*?>NcPE zhvkKbaU;^gLTowQNK%dNoZLF`BHc+vZwH4)=u1DsF*~!Zqwi{Lf@k@eF9zYy#9;(&kn z(S8qP|6`012z(m--`+gN_y39H|4$#H|6k0F#Q%Qv`5*qjk-hpY9(<7g`52>btwMoQ_kY9#{}!kG-F=Ru|0D^& z`-7kH2KxWi7hmWept-NUn63Ynxz+#7HvNBd*S?w~{+CaF`#-1hF)+0~stCMqv=6;! zk^HgCj_lv}_4VKA-8=Sw<{5#k2>Up8j`n`(bb-g`pMPHOd%}a*{P}BN&JXSXm!Hpn z`G@}ZOX2=8-xK;->@*BB{~8G$R&Wi9Fk>cR>421Hm1V`9d#A@{elnjRU-v1PitEOd zx#@>@RYO&QBr-Sgt0fZOsy#c@Y^)i@~%TX%T)S39E- z3Q28>=~^&!o4k7=s?ShAea1`t5M9h^R)Zp(0saY7Fzc=2qw6GTWfAk8slP43P_D;? zg$HZvGQrJNU7598c^bNl_oQlFzI?g*=D~yYwe?5K4a_a~C7|&48KLduaeF0e5!#FJFB$n9@fdf>5**aMb^J z;6$Te2Qc@(`OaNOzYHo)wYe*Z`@^<3Pd4#AiTljXe>8|jdiW5mhCfIcrBTNN&cB#R zbNrP6Xjx|U%0B^)oX9yy&c{&2|2=JdlbZRzqV^e4KULWu13FOTJ^cU6FTa4<&&|($ zH9tT9`L%fhzvjNYHaGtV{~rU&U;WX=>YK#>b-jIm>PUGuLGvcEb>N$Yg+#a-cHl;? zRx<214Z%>>FFAHK?~Bf>)Ewe3{@A`roCa=O&%`yqmKf}7(s>R~pT9_RvV5ljp;T~D zUBXO4mvI+M_44#w1O#)SQwT&QNz<2LGF&_taZ9&0;F;lR^nn|n`U!{BE5iY1S-5cd zl&nj?mXk}LRNW$H%e+f?xn5XFe1xKUCYyV7kV;gk63lURNu0FKO;T!BziO$5>Q2jq zD?+L)ktuo!IBD7r6UO%_1ibw6mcAx$jUqRd3Mn0X88QVR)^*-q_d>A{E>-y~ ze4J#aFrTwd<9!_|lLVesK?7g=W?3|fDT!-m=|cj5%SVr`&RyaaVblN4S)KyMsPed- z_QR8aB+5}8L)Q$sB%#h4(n&eP_cxh&b%ef>1sDjvI!loODJ*~hHV+FxwB5lGX!+aq zAi{>aB98TtrW1`878EX&!^S+6DZc~PeN+$E0)KQ5kM`QGUXFGlU0YK{@Wf+ZpNXqg zck$Np`tp+YNN97A5~v38oB=Em9;>If@^JaSInDVP`iO2OSGwP`!>8)< zA8T@+iP+*Z*X2072d~JU;f#1*dj9>YBWpT04iyHfs5WaQ2T3U)7 z1`BYjt28X%2K{G%qqh^8Sw$b5L(S(4B;zl7v!A=SG5IeWe9JtGX)xkE?k=ybRc$ns zJ1gr|`|k2Ts>|DbmItS}{NpRxm2+dx9g2gV_*Y;=4A0(AT%7vV{wPrFyP%`T{pXY& z6IhR^e95N$x&txNZIxU{0jDA!k(;0dVHRADvQLg=EU(IS1J{*=%>Rj1W1s79=;j$Q zD&aCVMA+MWGu#iMMIwK4cdf%}IJC zm)Q5Wr_vMO=i$lH&tuN(^8*l5#T1`IIP44%P6CTI7N;6=SQ@(hH_ALUzN|+?!zh|} z63nNUO$#-X1%zlhmTa9IZV_`%q=?qz$kV%Xe|`1a)knR0RkJ^lyZqOuwzSJXYiR=F z&?byomj@#eLUV}2?s;Q%Djv7IXPN8*f>)HZ5JKI~WxGs^zfq5vVI&BVVU16m1a%NW zhuy2mt6MLRXr=k8!)^89?~Jo@`Z)i5MJ(Kb?ud|80E&A=8;hQ#fIk`Zkdha$ACo&z zpvpq$%3!I9u1*ske-VZnOSZe5x-D|hWiHYEakHbZm7-qx>%WYDJ3Vh7|7Bj{LF+F{ zT5rv_eD65$V>Yft#x*L;Squ^R=cmsGn4d)65^@sxX;BixI61m$cbhmT0s|Phpa4|% zx|v3)?4?Km)IL*^Ba4<(G zE*47d4j<8nS52jEH1&9B_!00o=m+?Odmn;bP{ifEqZgo>T|t#`ZstLj+UETg+kk?!&(=7u(h=(EnHCX;WfqYkpSJmIiM_C)zzQ8}P5s++xJUD$>Zo z&>HkR;crAZRX0pjggK3;@J%-Mbv2{PDS3%Q5FZ+soD&(htpb$s&2+q4uUa~q^g|>g z4{3B_M_pTnBAk!<5Iaii%U6#Vd}#>9Mwj>M9SaP;HuSyN+u8ip^R(aZYNppRjsTuy1vKK#lD0tj z>UWvy^EB1R=i?ZA>WEuIPii(gycNY}jd0oS*9+Cgbj5Bpg+U46y_z0yg2JqAx1zcuDXzQ zg3oPGP0vlwi#+U8dAWKut6x>?1;dmH13o-+L;AH(g&k>?dEQYQrP$LZYfpzLZ|%ed zh{xF7wWni9#}#isZjXoi`P!R~>BQ*IFs_tHkcrYed1Upe6p7gdIT9yZkHZDhbj+$p zlGy;YNQL|Jl?>Vr#h@$56k5*3!yp=FF;I;z5Evps#AFUq{*Dj#i@er*_o%6)0=K<5 z;)}YzTXmRVo{q<`7(LXUG zm?;>KsM~_|^7eyAE34JR$B+1H_0e6R#Gi5fVp1ylm4u`FOs(#GwS$S&zcdFV9!DKO zF2uQ+uE7bn=GyXA4udP&W-SV6C$TPNIwZuI|J+! z7wT2$&B1f(=8suSey1<8!FXYz+iGD_9$iqQeTIuH`J-)l+L(tS_n3C}+}EqB;C`Py zs+%l4*q-*yE64^5VeUWBBhaRLOo5N7>igB|*6Q6=^pWb$y8QANtA|{Xgh?Ahzu%|+ z+x9?NbE3vxXi9eS?7qzZQk~c-9J1tR zK&okTr-m0U<@iYPHy)LeNGC2t@|(UlOE_A%(%gEsz;pXM?-1Z)^QitsPjo~w4y993 zv9xnC1X}A0HW&7N;zD=gg5axTwN%Yr_1`+hRq$~xI_W+3IDJsBtF6qTqnBK|gy~V>1ZnO;^Q3@eT-{nY?4Ge z_44^cZ3dXTyL`+nWbirrsu8RspT`&hOty6qu$ zNj^p{w(M-#CvmtY5lhZjqgI;C078Zp4UZ3oO`K3G?qraa$8L!28jb0|881M-HvX(U zZB6j1KcBra{`r;koX`tsFV@8PU}`EpfW|al@PUtTw0BAcM^V5IZT%UsYx&{j{E*8^ zcaQeoMq?^5MA!Tj&lYbi#WTBq4tkc}5EZyLe(E<;|66;glvgJpCWa~E_s&3#RmymN zm4tkgGc2&K=eQ}WgtNjMu$>*R=s2kwik7`kZ(5sL9X|UPhv5uosC80_0X(t#1KpXK ztEua!u#AKPS%TOQDorEXLTMU z*|JWL?fP@AT{T1bm7R?SqIzvTlH}$hoBg&(r|R5@Q(`pHLkuys^u)e=nohSM zLVVIezSCp7L&Z*R!mRhLEUhI?^~#kDn2dm*^8M6Q{$6-G{3*~s+}R-~c^JBAI93@p z=3}Vk>uKAo0-Dto0Oq}Tiv%-kn1{C`@tcf4^>O3J=_{wO*WaPgeEV26<@tB;T45yH z!>|zf0PovsJ++kZGs!e*wbtr#be310kMXAsn`Bfwk2XE=N@PQMcAJUMY0~Cb z@)hILM0}MYNRcgY76BUPD9pu7Iwq_(7nZiji`^J#&~cCoe-@Z@6gl@rXI5T9&oYQa zol6+$^t=m=oRp+FHjWJRNVtY!&`QFD%wUJF?ES-Nn-@AntZ$wL7H48PM6J{7M1S5x zyyMguifTq+TAFY`tUwwqS|@A-D5AfdEeA@*NQa6@_=m{6a3=&QIM<|!QG)`DQNn9# zo_i}>_*hI`CqzR!k!M!_!j{_AbDc-?lJH;Qq%N(9h3v zOoTogBN=I-{4x2+=Zf7SBoG87f9tRD$<*&8vG_~-^i@-C8UM!Q7JKF2==T`v0Kc|$ ze^Vqe;2aztBJD_gsf|l1Pz)oG@oR-B+D2KE&cuZT;M9MZREb|VPD zoNqR)nf=yY2Pk{@WW%dw-+Xo3|1gP*x^of#t9h1(BvNEgP9->DMKvUst|b4smuSfk-G!4?f#+;pKMP3dwJ^r_q5UN+QVgRgT5ue)5rg`c@ByWzgfPOkh|y; zA6vU`MA&~gG)Sl-kPyr8!e5)n){eF!D?C1gN~@V$MG`vr?O?)`VP#`zTtBAe1O`98 z;@81o^K}oAOd&b?_4V%d$qW5pK8Rs5hcPApxlt>Abd?`dz^L7BJXjz*1H|y@8)2%4 zWN}%2ET`hV6mz2l5?G~C)Pv13hAew1pW8gj2Mg7;x(9c$co$_4<#X$ye2`a?C!&H+ zZ8o9aK|p~DygM+=@3yzyIPm-s-O>HF3ED|5^f?9HHYC_~W1h@-h)Tq{P$h>@xmQz8 zAI-874QBLa(qI`t9hyWOc)R=9yoJVB6-7R2QJX5g~^Bcj80G2C`n; z#8}L9XL91gS+po{-!@w-vd^jubQvcW3N1IOWI}Cn{@T#UkG#7=8Qct*sa`VmZ{^@>oErm!u>z};t6B8AC5}y`ZVEFp4 zYN@*BoAEP2|Dk~gj*1CvLW&Z*dhQmm*Tv+1(Udq0@)I5pwurD89$( z_pNa(EkYX@^Zl$zRbt9gDmV$Yu*NyyOFtmRMjICHqDK(1s5NJjz_lqs^M58{{(OQj z7}yE7AE0dfQD_2DwS>ks0xgWg8j(}mvuK*=V9=1k1fM52dEypZRDv=$dEx~svxwKc zGmG3^0LZ|i&h1$fL4F=5oE^e|M1;2;6*LyB9~$yqEbV7*&Uk(mLyNRp$o_z`uI^Ct z$lNB&8cSAv;sqxovPBn7D<&z-mkd_CJNF~6UNj|rLhx^Upg;jT6+RmbRLXha$d=ZoM>kcFYyYf;DsyW5IafQjt(ewIIm1Z;N|TCB2!7*ps;Oe6pkWRJ;dV|if2GOQ;?eM-{F!?&jyq{O zapnSsHDyi0U1l*t=$oeHG6iY)TF$oteG~L?#MMj|LwOh}?@H)^+p9mA{ zwr1B#&E3ew7xqK4CyjnoNK)z3;*lMyS{-?JH#MnYs?PKn+kPlN3KG=b&eq#TFvOW{ z7z(^>N_g#Lj1&aCM7ky~<=zgs_o`npNY}r(_LEw=<+Og=T-k{2@W!Yy@W!y6lCW*v zD%!MO-rOW4)8>xMc*E)n$fm7{iYWQ3VSF73#h_P71K~YYh_LxvzR!cdv+D!te_9Mj zLH{HlPqK={@i1uFjILH2$rQ&=GUjfS>Lk$%8;%fq;d@rvDGN*U#rK36ds4SKYt0Dl z8WSru@17XOPAyQ&8?dr@d=z9=KQ1hA@xbQGZcNp!eC0Bogd0J(bvwnaEuc-%7-YZ# zL)KzBX7dcBK7NJYjEFb289hS{O4|nSXl&52_9IxV=~SQ5kEzdo(iXA(lw;Xb`+Vd8 z+LAIhgiVg7})P?n!^2ny*@(WDnHXaocv!HiLbiT+Fsg@5I zH4DN<{WCHU$s>eB`}dw|MaB1NE~QXR!H=ihfuWpSi#{baRi90;mgYVVFvdA;v2AV8 z3dNurblr$#0JyC5P|*-K6~%_?6f8Q}{DTW^fk!YjDA5{MJr5LFGN=fuP-oW51^cm@ zQNIGM&yP!0HlGc;*2^SQv|s1|Bv2b|H&U**(POQm^!z!p#2hJ2(ZxpZ$;tAbTJ|Q8 z2})93+HOH4^oM@SesoB^6K2iSg%?wf0uB?ciRZ=8^%p@j4PnIG>B(suKiDSFr>?r_ zbpp!XrJVzs*cV!;1OP#5~Deex@0}2l`sV82H=1{ujaDJRSk&IC+C# z0_Ff3FslSQ|26$Y=@LSM00LV_2|UVKSOd>h*c9*O1%S|3zDu@`4p_&6WNeIoy?^^4 z8zZ0`wzt^ViZ8ERagq{K8vhCCP&#r%80V18Y-4TwkLu;>FX<&q#Ui`q&||0XO1y){ zDCPyLjuJ2|G>V!vC7rL9zl)IsPYvW|;P^iN$uXv7i48IP$B^jsWHHHOK3 zhYMm!qziq?FWgy2J}?mv)73xwNS+#rz7P7(VJxp;Bli#CCnuI%#ba_^s82#Vhq_Sa zmkj|GB~_n1KgQV|EZEEETU(j5UYovF&CkwW|lOr%FI;2|2`=aPv`!MknpV|sMf zp2ORanFW!ImpTd~EZ-g?#GlwPcoh_^xqNE$Q1n0|i%<^JqfLG(m7@>*efp5GCJg8&NFcU5%il=~lHB!T zbMV62M(=SF1>ucao53Ev`=)xdesS)vU(9_4#w0h2xld9aBFD+MId5*T^V3=r;0XfH z7maBqWe~{{{YLRBVC%%09d?3k;3-l9EmtwAfJO%tuEsn)&boVceia6Wi0oguS>Ha^ z{)%o`n%I`8u2~6@Tsm;v^EJpH&?|eniHWy4jlt&1NaNI08fnkO9~@|McBUjZydo_-AN!F zo%BpII5)N=}SrTG{es$N^%7Hi>jzRh~tP;;~cJ;un7E5ie8H3%zMk8 zwPr;{g}kxDP(DTQmP>747$5^>Plb?IzFQ-_h~g}PqYeaEaPP@{M%-px5%fB> z>YbA1;)J2=4+C8YUb4zkN?QiVR^mBP;`rEN{H{!Yy|I0{|77aQQ+~Koz&VdGuwuqL z-PWb)zwWfI=3)Fy<<2N@H+yALmtC?tq=S9_3bUTY0BP5u48nIQH>FJ~rf!B5kMs2+ zU50L^WfTA#Sk$LfQ3VZKc&dX=5uDxDcTr+1m}2MBpd)T^f`M8>2-78UNcwM|KeeRV&3`EvK#lsD7aO${VT z^B#XGZZ4H)nrYiNWgBw4v}T|F6q{@xq53vjn%4`|rE+4u@Y&Y1k2&4i?#Va+J7q-v zp;L{)!AXLOrZm2jYxbdy@875?NU48(`N*D~ypWI{hnXy864xZPt4pp%rfd7SO@4x(5 zy>f*5ZI0Ert)4Ch%p3gcU|}s&1oe{3l^Ez4(M*5S-0A^}$v9G^DP_69 zTKp<ya$REx0$RWwZqoFl&@M?tT-TpJerC*|nN&fLQn7&5QT;;qoUpLw5Gw1DT z0-Dmq1+i<^q;;p?hNrdv)ZZ(0wSfMU_Wo1*o&ddouPmAYNXPypPQ`l$`>bvN%hs$A zT>`FCSd&76iK+U6>@)A8rj_}tEB=+b%5cF{I@rY`fr;>B>qSxftkyJUJ6@w@6etc7 zNHid^@j@nY?8-A3+VA7>`yKM+FzVW7iwpP&qkxb_4^eV6R^To=3`iJw5u8$Fye~Rn zX69}^8JgMNduKKd3*R|0VEu^`^BLNCVaHC757K^Luc~Bcdi9~4*7#C%-8CL60GNWJ z#oq(b0@AjLQ$f`Q1qSoP*HALuY{IX$OqB4!KzHr zcFUXn$f+9Fb)1&`YOIAo1LYPNO2cB6cwl;kg`oSxtDmq7Y)r>rlbCPxwK!>lBxkDR zf<94imarq58mx0EZt2O26Nr?>UJ13220hY*!`*rbPFX{Lv>!Y7W||bXVcCZ=STg9@ zu%MDCH55pV@;3#!oHTRS@}oz~|0Je8II|rH=$GJ>ZRmE6102Cya%G1es7J_>bFUQt zR3ng?OJ3~m$b-!vGoNrqERj8jzvxYJGPqwh4JMSzA=#KOIO{lZbOQzD+mjh%F6}*u zZ4m@PFOdH1obz8bIB4-?ddl)R8{spWLK-xmssjJ&T}cR5o(U!RSo8w+xRh|G9&Nu+ z3ZI|6NG2{7+_+}+&v32!%x2VkI^)c495~abwnakTlXQrze~PU=_e%4B>2bN8({GI) z?Kr+YZ2jB4{mtjQTcakohAk|AMAts?^kj$==0U$?&|n(PL9+t=>e4H;8;2YCZsYmP zeId3hKfL0UcI~WAs+wXln_|ID=EefJ@EZpo=Ql$`!-MWgDbcU_49iMd@9QWy-oL*! z&;e#DZjwaJZydGNW}pxUZmSu*;=uLh-KfRg86{a!JKG7G`mrP?L%|Jv_wc)W-*zM} z4u~+ixBTs$6~sof3i}wDk9r4%EMO0&me&9IaMe2duC!t&Fvq}COApr{#Xe*l`A;>N z`Qg>q-D%lDU$y6C>J|jUa}Qh_W}LJFUka0b@MzU0Y-pkneH+pSq)iHbmFi{HU?+gZ z3gQ6O_i8<~az?@rVQ7=T^+W{)s#IH0;~R!0txuQDw4Bm&u|(^fNFUuha#CGNk2e+; z;&ENh@GmY}$;*Z0rfWbLDw6I+eF{!KaiQemRg4w>0eOl&ry^zSqcm0#3Da^oPq(I~ z5>wiG(cdB`1`Bk5d&pQM>`BdTL?OzJwy%sOq&^*83Z7Q@oI6tfg(6`jtylB8)X|Oa!>wEQ6R=cv49Hi(TZ$=oQGf2zR(}p*3~` zE)8TiH9^aw$9zn;obV$01H;Ugf?RXqV}SHq&MjN5%IW2YLo-Yq$Ie1fypdxERnP0p z9o6KWEtV={;Ik`ggvVA1ROK^7t}IMarRB_->P1I^ze#MHsFBe$*anYFj z|E!|wuXEiT(#a>@|NO<==W~DD|NQGf|NXtZfB(zNJKx{W``)tu@45f+i`g$`hwp#> z>e^R--2ePOkp61#E>=^Qr&K?=zff&q_}IH%ooqgvGH=~N^_T0oEoC*F;^AP*n;q=Z z=oz)kx2C-A-hv|EE>BUi=+*B2!pY#qUls2I*(x2wrRhfH ztz38u#++ifkw)xVXHM8W@n*$ivq_}i5lz(TZKT&V_!VZ&+p7J>ySs;**kpR6Bs+p6CET;SNi61ddIwFmh1kR z-u&iBD?U55L@t6E`DNUwr+iyE(LcWKN@I9WeD>;VT~agM zdwS&@Ln3H!d`jvB(RH=fsyLnqIPzW|{{7q3hj+p(WlE5Rcrz&)`h?=`9tBfXKRn^~ z#k1>AFKbEp4>48;C)^WeSw#wDRV`X8Z=E!b+|+)+P!FQK=5nm66D>NxYh!Sw*)AHR zcShsrnUtC%iAlJK7XP$(iwl>c=E%I|2);w2o5!6p2(OR#6YtPH~!=6@UW-; z>z=p)W-}4}J0GNpvQ8Zx(g(zTw@QBp(dHTD=P%q&=1eIdbohL<%i)%s}6z39!T_OA}4 zdZ-#qzA6Wmz!J0f;LCi&iJ7nA6>4G2!xlTolquGTI;U&=av&Tp_${k=as=@xov_&J zVgEdxWgm*IJ&n^A3stdr`fOo9oYR=tDPGMJsT6ZTiykP`PCMfqH+|$yGQT^kT9${I zLQ9b!Vx9wn1oKcGE+lEeGi4FFsV;1wgmyld9>XK~TYK&L`tH9oyqJkt>zRE?3qas( zzJ!#U9TG7&ll+avrO&Qn0~beD$S#Izoy!v^UD4D!)$!E@Lzbj5F!G?|4l+S}w-T33 z=0}VxHX4T3tbUt)G`ch^DLtmixW(4}u;6)mjFmZlOqP;Tn|CP4!Jivt1>bifds0T1 z{=<_WUOj#C!}Qb3Tu#V8xT_KvFg7O2PYi#~(x)mxnxI^=iaucnOlXr}czQ&%bA}67 zD`EDUQ+d8tHMK^FgO{T3y5J}b&QD!EhZ|9u4@{7s1+?+8Bd6?g{ zp93+jG(DFzkzg{eo$T%_w%$UDwc+YR|1>)??xX%VCwUe^0-9&Y$GaHIdy(1pk>2iA_TE*9Ehb z8=@!{-8r${f7`8)88{DDxw{Ci8U(#Dfq;GS`z8P$S5Ay}8Z$z!HWH?}_L9mF1-&coa#Bri>yL;znC~FA!h$0L z*!KOtDbhOAA#rADQVWd9IvC=!5*BG-+8udMx;$>{<>vGLfR63n`Wi-Tx~_%i^d_Qf zTw3=)bxfVsPj(lIr*Y~sT#B=vVm%q6P>wBQd%N|G`ZB5)m*Q>r$@^5IP(qi2)HOSL zP6|>r^Ft4~r%hN`&?cmHS^=vnRMl((`0+{z7!Qly0z%Gt61^3POR$M&0+&On0oin7 z(>r`Th|T2&m#~c1anV$?JWCzRGu3P@klaJp!!Bk*I+>N+(x|Eob~~VQ12JGFhMkup z2-$^pj{!Fj6&Xm4I9W)RFnb^7o31%Ai|DD+!BbQx9X$yjC|-;O=>M>luSvxwB4H+h%yb2i7B+ysBTQctrO$P z&&&Q>lyE261>TFqWe%^O4);c7O_RnNTiZC5CTzU_lyR~Wdr4>4LBKV`0cY){i!DAM z#5hC+_a7rdU928sJr%Ulhr>NyHERYfu<`1yyaack%oub)cZa(EZvPOt=aX16yS$lJ z^Ce|&KQoa}HD8Y`2+^SLs8{Qj8bZ%nw{@V)!87BvZB5Isse(yg`EyCIqGzky0~k=M+`RJ*F$ZiH89 z4=$}1h1HJ&U+$-Z6=A62OaD{MD$NN{-mkTc)cb3Csp*H@O**O1V2CBa={I-%ZYGfi ze+Q!fLNu>;OnfO%2cS1)i2UYab&EoENDWlninNDB9>n=$7qKgpSO+N)-!D3mwFt?R zFVO1DU#Z-FfNe#V)0#&x=l!_mpN)K!Fl#KjF(*(I@Yf_bBXRyP3serFj0f8MWTQ(f z=YsZ?P1Rf0wub;QX;%P)09%`Sij_L!oq#r%P!{lO_r^Zx5!ZxQ_zh) zgMOcDb9cG$Z|{|&he+w$-h6(zhirCLC1(CQHT%WX++PgT5~aGP-NfQh&YJuvN}lTp8A|D8df=}EVfE6!b$62?PS7zqhV0c7 zZd22b3CH!bhNJ$9w+B-BPxE>2g680eY;a8SysMP>%d>pb(@!yVY zZnwcZk8_w>GE;$UE&2Nd-gNCT1rXa5t5H1*Gl&%j%pS`+GkrysDQxj>4XRC3jOUh# z_D&mXM15CV+MRSGC>$1MqY4UXadBL_H|yTqhH*;hh?eGbEW%UuKqSyf#f;1`?-;LM z!MHIyZqkXx_z*b;)(08)S(fF#YP zLFk8|=J=9)VtQ%LR^mNWjwmj4_jI1^!$`aEz@IawR?@K{a+OYLJl5i5Tj`ARole3l zEtuDIl8{zJ>xjbfK`BAuuD#Zc0|KAYOEdS)xU4NDuGoKkUY zPtgynZ%!Vc?CuQ~7T#c?K00C{9~!ikM^&~!H8OJZy+9+}ajbY3K8)GO%-dW*O(&AV zM7<{RSXLdYN+YDPAURUHxsq4)NkIHDcvz0hW+eywuQ>LckImrEF`TE^BS|n8yk>!M zlm>4;yoY(!I=NtIDH*ga>^eVVLnRxu84$$d0!scqdimTrJu~N( zfAAlla*BLOXJOo@jM$zhzlV2*Nx5Gt&oke*yQv)g#YPO&^1g~4QTr$=dSdder4omxtlW6QZhDfu6yY9T;O$5E< z$7#yWd^O^W!YO8(yL%uBj#r4x2fhA*ew6jgWLS0vP$PKQ|9xBZ)lFcGoOns-#Xr`; zO$mZV&_n~ZX}Fd%ud`=|+r0rIqh4e>%~!n;*7OiSM2c6|H1ug8<{}GN^1|~1SbEdL z7b3)(w(l$H@nj{(S3zU5KO~{-%n!swT|}xd*tZ=HT5d+_nICR+zy56N^ki~I7&a#? zEno7+Ud#&X{QKzbV)gyu>E5<#9Uc%Jt79%j&z^1WanZf!H|ZmflhEGR%HGMLED)Y~ zrf)w>v$HgKq8dG4u-7Ae?AG%7@=vSxZ%y`kawgh$el}x8DgaQg`GzKKMqq21&REev zlIX@Zaga)cQ&d`16$?YZBMUi}bd-zAvS^vX@`fME_#ElGqA#(5~*!E zz=A^ELBbn76~noZKi2NgvHDn4ZQ)F3u`xRlDF4aC6^pJT&o6 zRqn)nqnhaLdnU2wDADMpKr7puv>`(Ga!bIjCX}qTZ&!rD1*r0iVR&6=tZY_TQ;%T2 zPjR`43(;LS8DJcmyk*^b*DIWlUbuDYQa9+2jlV6 z=!r-~K0hESR8jhUOj))*%ski=2mC9+Mo(J#P~5PHKFy?-h|u}Bcd7Q))n!r7U+9bQ z_+Tq|#+}c&9?VW=&8T>(kIhgE`5o{LH2Jj!mn#+v!w+G-WU?uQgNZFJwpJh9Yo!U+ zRPzR8P(XmbJ`7!hN~i&@4#rAdkNK7@Km|HZxTW`!x4dNm-p}iuiIdP)F5Me1#Z+S#%|FNf2U3cnp zsRA9v0p{Y%51q(3n)Z+V^)bRxmK$o(NRQql6j|3vsEHX4#7Z|z7#EvPZ{zU$TVuqH zw};#Q8RHE-&&Eh=Ai3T&i!;mnIkNhW*ImgR%NY=^Tr?lmFku>@y@opJe1hpmT>Zsr zEeFVg-BO&1jUYhNQqzR&wJoE1u}e_K@z#sCByAaYk%(=j<~^#d{Yvq8$(_)VPaz=I zA@N7Nz#I+sZG5O$s+nW#fBXw$8c?m?B?YS%(3PGhr9&MX(2fo$^be2e)A8G9hcE#O z^xLV#IAk_#=NIvv;KgEp{P8TZy{aFnVgENmMtp%NZjJab8<3@4&$KBCCinU$n-X3Z z77|xpSU74QQLJ8+y;!P0z#W)U+N?noKd{ZvR(LCl0Pyn-GjaP95=R`07zJ`vyGAh1 zl-j73zO=64D|#-oEC1vw3wnl2me2v@VBKP%%}g|lcLo{@#P^m1;engp@Dfs6Cbb2A z?K&|hIGX!1(_?lH*OCoLoZSh*kbTrz)Gnle6xs2DO_pzIdS-9;nT2O?;XzV|ZkmGS zYPeQ#(w`CY!@ky`wHFo<6nu5c{a{w4-tq3LehUe;xhB~i+`+M`XcSv<;S6++@3{ya z%`BbcWB@ov%e!Ntp`T)zr70*O88^XK#_{`{q1ODO(f5~xBYr|KOL47 zUSR2td|@m3E=z2_?v5YI(N&n&Un`DKOlECtRP57OMsil_+Y`0|b!Jh$a5?$MFX06`Y(PvOe%3P5&Jrb zGb_keO)aF2EQ$^AtgHOgr;|@Mr~Wc$vZtZz*L=+W4Q`vDGlf; zNQk}OuL(<^!ByN1$_FN)ra5u@dVUZ?6Buu1EdRdV6ePW!d)5g@as2NOwkOP{j;qt1IkL ziIuMZXtNun&crd>xti$Z17fRAYYuA9UKmgDUt_17G%^YM0))wVZP<$~x-xj4&{6oL zLWm_4f@KzAP~y#bFjz}zF}4r5>A6OKZ%6|WNTD5o-CqL7giL~Aukef;ZNm1 zPORJINRvy0M}W_ca7KBuufcjS(?>R6t51tUy-*t?!{i;)8o)?sm9h#_QN}d*P%9tS zY%gV1$wKHhG75m0)zP}Od+1ygdQycdCfWswQFQ&pwBMxc0fT^vSzgnLJD6CbKjA9))NveEC8XG z(DK*;jUrXC1~Usr-=BD7^~~I|XAb4a7EXXcM29njQof;P2rPzV2-uvGAol%EGv=;Y z#OJtckyrK|PtjW7gU>N?aB)3i{EVA+dPXhfG1VY$W$m3 zoATh)ggGcnz0L0;HOmIN;p0tcpmcj(H3ovQkKmh5R4U+eL~1`|MfX#h=jrwCpg&;- zAt8VfhW<7S!Iq?c2v@}xrB0$8s`@gs1r{3!QW--xcKJp8QcZ}*f&dDEn!=1%7L6P) zRb7VQ7l_W1wCEs2am#hu=?S4*z-VPLpu99)Ie3IwCG{H*o{9H@$H<tjD6{yVl1SR>LJ5ZYH+3ndv-&d#coaRf}5yW1>c z2C1GHeq^a8;b47+XN#_|{$b9|$Blrv{Ue!PI9sx79UtiAJOe`f<5K7H`hv>%+_UU_EPs6_@-EhUdI)UbgUVz|0*DjYyWee zeR}=Z&%d0b{^u7zXRuHG20Q8I@tYl`j;&Rki4hZhr2o`T6Qh#xzvT8DNU(ec{x?5QAWnZ7DOQN>R z7db2sQ=gSzRqfStrnvmg+WMpAmGuP}?~zX}E)&9H5VMh%XIlI7{(iYAeltFQ@OM7Gi3zmmjthzQ&aK8A6)@q?eoML4d>dDzSKD4P_6j#F z#bOn$aS2FrABHB#5;R3FD^GtOAMC#2(X+w!p{KA_B+UDxetwc3Z9hNFUq-9#V=^kK zVD^>{)1$X^aCBlVlOg-Duy(`FgA=FSH`2x^ zNmf9RZan;|lj$H8xA8m5STLwM!v0Pkzu}v3nNJp8Sq+a5(enD$11^$RO)g4!Vkp9e zysLsWXkC!46tkqXXz9peyfIPb6{#|I&ETwfHZzb>9ot;V=I9R7Otbx9nli@(BfZ%~ zi3S@8VuCsofTSLbgJFX3)r^caVNQrcwe7^I@1W9|Jc9s1ghpDPO@}ZE>9Rbm10#nSu z!bt>lGw2PenLgIt#X8P##njLKF-EYeyZ+)7OU=FAt>Z%pV7 zulC0il1J)}WEf_}&-#0Zuan+AUn96q2FG?7y94n@o_B&WtIB+KS!`m8Ie0ECN>~?= zH>=lXfMpm1ZPS76_t-$N)Mu9&t_r6{Iw?9J4$N=>d_dgyV$|MlfAy zs-P`Z*?4|H!B~t)>NtVOVHX5YFO;q6K}r~WVw2_zfldZ-fCgoK?FQQLsl8*z>S5`O6zs=p}RW_ ze1K;;LRwcAW4p0>B~OQFqn7?o>cZLFtX){b?W;NLKY!T&J{i=X{J}f+ ze+GBl&hB%|jQ-?4hd+3~{crAzuej`M$o@C~CHH^L4tMlh{Qke){`c9;>EL*VBR_*+ zzBhXNkRwR=K&sj4`7iwPpl|ypcv%+~?o!bb5lqG&e(xb3N?Yu5fnZ4BrqN=SIx|sJ z{=XXoe1hCmctKGz<|tf;NlCB>c_I0KF<3Yr5;<9sXkZqy?a2;N&=)T3^fxWO(gd2a z`-PG2AL26egpVw&ZC2@f`Mo8mdUpfw+=sQPn{zYI{UbY%@7)jWT@Lyuy)@mT?kOg*(q9akO(=r&S&otE!^x5$~8xvE{k`G*6FxdE9E#1Ob-(3FC zL_2CoxOVhvJ)rw|=rNO%Ug$mAt%)Dgqwm!wrP#P;5j)91mR!l61PY#5U(t&M|G+xT z5TN4&i;1Ap?1nHA=^b^8eBK_{b~s)VFQsHy9eDCVf-ByQ;#&st5$~+vqa$#?~y}*RIhA$WN}P9EG?D~?y;D$ z5P;R}_{I%OXt&utu&GeiE)F?jYC4`D8p*-r-vyxBTdD*j$9iBh1{}dM8fmA2Z?`eM zfSlb&=J4-&$ZSl%d@qdgU1TIK!||gYgXD%XvE;B=eIo4IJUuzo3#Fr=ym3ojGKLIJ zkE9h>a*q?&V*K(JDMX5B@HqRM`uNO-)K6)%?e-nZisa-7Z!{-7+TGS@E8RV8qx!&h+5xJP`qMx!Q zKGH|+$cN`{yHw0s5%2nsl8$i=PvZy`1jshPF&;$a1#rD|=BKc1W+CiRAcy18ZNCIl zxIO)bM;Kl5j}vMcsR)c!dK$KZM3`npZ|6iSlBw5{q-K72GCTJ)-AZ8_Qw(pz&0b+Z z89G;#L;(leR4&XjMZj4~TwKFr3&%R5!}a=@AZ(rD*teLHC}L;OdDFE5~!SwHh#k$w!e_xs>>n<&v&bVQ5}ngG*E)AMXEJ1-J(b?)rFy^PqB&{mvjZ}X@M$H^gPo@*SF3AZ1QO=48Z(rTuX3r5adeQHEiSG;xNZB1 ztRv(9U_spj&@5KugzBlO;9VHj|NU;p=S6Qie3AEuotqb~+JHIjafe*$E zapQB`J*=q2E8vq6D?yEXBhQ@Dtx+BR_l7O)J(+uo`zexsEE#E%1UoityZ=V7XP-Jt zrR*uYP#fdI%<0Z7pOu$0o2vfrDK!B^X1S8|03q7nCT4|Y_8|&is9JRvOX;b)SRq!& zcQa`NT*wDLjnR@I`2HRH&?o-BxpRy}Rfb$IQq!T9bNciovE!)k#+w z0gM!aY>saD;iUB{ha_8CmSAUxT%6=CIr*$83$f4noYHZFpb!_bv$>@T@#bOhPv5bl zSlYjNTeTW(kn6}2-B-4c>KmL`8Sl-P2rTs2!uU@9OHMo)w1hk@m%V_6l(|8RZq1yH z#J{QNW4rs#ndGN&jw?i3?=(Am+doHL-ex27j$PG0UOE?l>(?JYDhzk8KOK+CFHy}b zIq07cPIGo7o#sdECa1un%kPM^_dsaytkq$^uDcF!&5DrGG5)h_Ur7u&JCIEP8-{1)Gw;Dv z=aztB5{o#t6&M<$(wCpB?3fCVCl8GSJX?>P+VSwC{LYSiGd8R!h0`KsmN|TA2bfRxh--uDV zHf{{YpQq-oER$@oXr0dR^y&|+W`+r9H7Tlf*K*j-Ig+D$J+1gR4lH!IBbR(Q1EgKx zVccGED>8AqPSl>jIB^xW=ueo(F z7`)v+=lHT{jitENpgi}AECQ3)B`wU;Yb2LWVj8!6J9lN0wKbZeg9Jm}t|N?sMn?mV zu%r6@%q+xW@HvfMs>quLd>IKc^`Dy&{bc0%ZYGL&9d@7MDs(0&0_ZFa5D!Xx@#PzO zBp}Dc&>v$w{-dY_X#j|AHyioj4eM4F$LbUUVR2UxjV0CS+!?if&`UPNK2OV6w_?2k zV#7Ek$$YANq&+;_tK}9*EV0%t>M+U?o@-wMN}LdkmWej^zZ0y%p1< zn#2l!wdNy4r@d7l>~f!rVf$*IgUU8~g;|Y6ReO%q#w#)eEQGNNchhrO2z#IKJYtul zRJdF^cGI2#YKc%c=>QBEQ3BOmWcHobDjcph=}pC2bkIx^^s{89)66nG0IBWwqp*oh zRq*q$f;txR-n?;PZ%hsnmApicvx#CAi~L7IShbXvM$^=nbrXN;MyNC`m~y$YZnCzR zT2&HeYB7aBSFP%Wq|LNGHSE9*mLe^8rBcbffUPvzjCx>84__Hmrr2I3=(1b8)78YX z-A7lBJ@sUJuS>_#U48S-FiH1~v2CKIY0DS>!n*13tS-wAavk?JTBMm*vIQ7O^j>$3 zvNJLl{o-#0WyRPz=;y15rOmCat<{QCGYs2inEqq5l7?7@nIaIBDGP|K7I{h z<;anJ5*qF~?LBP&PaBQbudDWda6pa5!v6mp9>4Tm($1DONctUP?(2b#dEuN0x~1c4 z0l1|FL3?+JRvo3id`OnVwE3rf{r1ehu7OBsQ>4}%)cA9Ca`t9A8?~lG8S-?srlS@j zHEq>|3h{ro>(|mpcJ7Y^E8N+aH2*xr%3q6}c$@yS zWF%Kg%;~Qbnm;DZZzy*;VvCVxSCP?L$3x$(Ui;4pvAXQL#=)<92(ve6)xLCgdwWL* zyC1&a|II#j^!fJ~tBgA^e_QAJqlb!Qn|BL&SF4SbUn?k*9fZKGa{^LXqRGPWR-3LE zYS?8+Qfm4Np8=OJyHoZbi{5p2_K!eYx0Y&raz4j5c+jdXAKq;499|rb9GV_~(_cVd zS7T7o(~0ik>W4QCPL+02RR1}7>1u;5mUdf;a^h!+;+U1~+m$cx{EuCFZf+ c%}cf7qTGT53l1ze@c-w)zlEdATL3Z+07D}6LjV8( literal 0 HcmV?d00001 diff --git a/perlmods/Module-Implementation-0.07.tar.gz b/perlmods/Module-Implementation-0.07.tar.gz new file mode 100644 index 0000000000000000000000000000000000000000..eb156dddced91b9d68147d2167de3e8ef12803d9 GIT binary patch literal 11388 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 z zYdiSOzW?LPL*1Ajh`h6=&vAYuNRPet(7q>0HMESuS4#)S87yUR`N$#+`K1=4z(_rc z*LRMz8<_iaDob811P)0s5iB%KFeH?#dE8x##TZbVkg@+oj@HHfuJh)q`ybgB+56vh z3wQGWb#Q#swjX&)b0z~kXE*GeG1B$rij5q%If*FCsYGx#{6!8pdM{^7$g%l5HAp($ znu9s&MI>_|>so+GF^QDCv25P8hCA{nB><-lrCCk_7A0kKa={JJGadH?7@fu(BDAl4 zy2(^R$zoalFK?xseve4lXsr`(0@?a{pTC#Ifc$b};8;76VxfD5y z#wR3cwnxLD-9`vNMQo-(g6*aaSQBTI>7N87cH73sjJtek0RS`my95T3Cq{$#>F%n( zDVJZ|Z|?ms!Xj)qi@ROx%@y~*>r}G(Ke9#d;{UIO5JUZl<*Wt>@$38-CEI?F$MaZFh)F!E`p}H&G;Hh@=7#< z&}EK~af#u%;;9_O+)j9?08X?r>xmwL!L2B@V(FQZm*j0sKQr;1r4Y=tpk!7~DW%Dn zNFpc|SJPy%13u2FUC8l9S!p8>IiXWQag-(ubB3F2I6XN9PhVlM4xhX07BpzxN8w57 zk=StePT#ueN&9Q|o6G+pLEI*^;Q!0le^dFN$O*fv|8|>uuxPAB`>$O#i@IIw`Stg| zQbb9(yZV3E!t%`;U$Os*DquGopS>=Z|B97rIV1lSPy^vE{_Exlzedl;r-<@*?Q4gD z>3)Ylzk2=VaR1P?vq5oGMp&xX3>SbN7+5+Hc^W$ zhkh%o=Ux8<@wlq%g7E0viy@Lt8jYW%E&VPSg*aINHECfo9GSglx(w-IHJr9G&(Jd7 zA4#i8?F65o3Bv&q7H0ZV<4911bkn3TJ8PC4R+G(V0m?Q{LzmATPT-nCs&S+7W{etK zAAndHaRDiDvP(J%T^Sl;^wQ(`tG#>(eMavhHc{ai&Pw>J8DOU(Q5AAks_I?DCL;C! z77?4fk2JsB{#%4>$^k5BC%#Iu)A6$sS*$~96QpR;eGpzNr2(OAraPi0HETpRH;lzF$r3MgRc99T-_jK93M?rY}k^Sd`5k&k;rYs_14FCX9GZ zhM6Gh*9Uh)iYwy0ElC_kLE&B(sjnPefj$w?_2Mg_)NIDQN(4vV91@6;mP|cBjX1jFZ!7ZeW-pAFx@4 zh(g6QK(L284}ceK9a-NL!o7M zR_Qj_K_q8s43l~#gnDeLjGW*^5|A;xN*EKY?>=fYwjZiOo}p^7U=#>ws8)%@KJ0v_ zi(N_(Y+jMF*Bc>V9qGU*Kpi51k?ELC$VLL9Dn}Z1vUEs&5^@vX4g1_lcOnOrL+n1< zf8A&>8fTjkEW3}4c@lqGkRkY}GaNP=ZlTy{d}un`IRu0Q#fZ9*ELkmEs;i3$6F93l zOM2k#oEgNGQIKVz2LL<(V)xPgZG*HS!ZkQFA%*?1-^CHv)Y}b#XMP!gHB^Q2u`$em z<{`tems|k+CdV>5*-}Eqq!D8%(41_EIa%sNAeLP-#$9ZJik?qJzU#aasrag@B&5RP z$=p=Gbg>tcJR(s`q18j=3Zzq=k`7o&KRg0FD69q}hXQfqDpADbXT(>GzqR`a3~t-E zg#GG0#K|X2_y<&rBs^5XN%2r&%?dA|e}uwwPk~OzgusYF8D6=Y4i9>wbA7XlkRPQ)NOcbKb)0v#ufUJ0!l0`5VmbP3 zstm?(ii$9d@Zvg$y`EIz)l zfKvQ(8#||pp+o55Jt=vtF|s6iLspKB)=5CfH63CfXQ@#Uo8s^&7=X(YNHVpOfCq(D zK{mq6$m%4oM;IsP?y7`)TPk%*DiGJN_eOP=RQpzd=t|H%3uj>1-ADh}f3>^Kd?6}yF@OWmbBVbQm-BIq0lpU6&2)*asejnKsXbWzRHK^J{dMIIBKz)Yjk#LV= zB*!0BR5p?Lq3E0iLQ-^I7c%G0#28MJqlZ%d88mQ#o}tGDWO^=%wk;&oqfiJY^g;_| zq*SS;D+tn1j?Rh4GC&Xhw5^lw!Lk%?akhE=>y@Dhwoc0D^9z;lBcc*(FRS=SB(s9C zfbZehX#UCV!D}E8tb`m9vu_w#ifaQ^Xc|MW@g*cix{!J_yc1b9mxBQTA@jhziQMkV zk~A3_0vs`GBRt)~8Ke)PCJzLsYBqp0z#_T>99|ZbHZuu}^XyY3UW1;b?#)8FAlKJ) z0UlRaNEmooltC6y2KG~v=OPkd>29w_9z!GuL%|8bF%hvr3JYrw<$TU$2qDQrtjFys zlGwGuBZ|M(1}*62_w1)adJ@X4+>TNm5Q44B6gP(gVtGZ81>v`Ki7S?i>2@#*w^MUI zWdY-!fcY9t)w|fVRKf0#fKvr9%XAOnrcD811c;o517x8JKP1zNf$68XNVJuL1rq=O z#?hVSmV|f$(be3Wru4x>$bLv?n@mymoD711OU0tl>)^;R-g?6IfEcBq01hu!!dBE5 zP!fi@fm{Hj7hacWn8TeGK^-r1_2aKU?Hs(?fAy^S-Tu+xCm5e{xtZk}|1Ra8L=}?M zVl9i+$5wybJ2*t1D#uYVB#Hf_>Jn97xO6NI^+nK=r z$OkNBGkSl5r~EA#BMe!;!EK3XU{Z&*0@`Hd{``}sgw)d*jGLc@5mqCJKCU)DskbZl z?4QVRSmtXGD30taid2M!Z{P%-@V+`su)3iGSm!y_VJg!UG*IYAilBh&DuGflL^j6c zusk2H<~JX#!DJZfNmm|xG^^RnH5$3iRhQI#yt)d9I=X$b1J;1}$lqt%qR0r^ezV$C zZP6&%epQfxDDK>GZnb%gN-4^ApcW5cl{zZ;Rn#WA5g5ec|7bgx5x{wJIR&o-%&&gr z<4;ITV4^Rs98`ve8q%Rep{tjm0dZ6$B$^UKH>` z#n}S{lu5Z~zZjl$+i^h&@JkVlVW~)#J0us=#Ss~-kBgNjSFyVgqaZI77b8Bh!y0uI zNJdC*0pv>Dno|PtWbBPjH-#9RI08z4%dZL=`WN|C#MiF@`A>*?UF`w1Ogn>q_susr zsh#|>YKhSK+~Mxdi=6{dCf21bum^k3-r|`JCUSsJE`TM$VRCc|^#Pqvq%0$LiyAb- z=6MTjY%9o6l;tmEX2h)P;2Q~}&4y(o@DgJ>jfftk}LJQjTbn-bO>id#8 zD>}6g7(cfU9rb@Tg!{68CwM)JwGYY(=-!8K&Fj4lbC28nD8 z3cfB##jI@deW^w8;?dR|X12Xfv;vj5qOc<@cZc(&ii1*uixxu$g}m*aVep(u7G$mb zHogbgxBh4}))uZTYLHkl)^`u<E%5j`T!jW|=%hFtTCa~lH5`u6h-LI7ny(_h{r!D2DE5@E%I z3j;M!D0Y?74~9S1G^tYS;u%ZbBUD;wp2k0%W(i(f_a=m{ACD(wt(2`5SaqFocAy% zi?IPUR*+94rY~c8frO(?^YE%@?61TAbpr2{WD~>225Ts8Uol*u@|^)i@vRj7FC;g0 z48EB;9}x8@`f+KI>?ePbU4>sa8eeaHeG=8=#QB5+jxp z8Ii;U4%R1blSsqH>2wp)eE+XazxpQAau)~|+DGE7DN_!dU~)Kg6(Mml>aU)yqX?6n zk3Q0DA=@gG^JNGUvZP%b#UE*Rz^|UAQnc`wL^lJSPsCgb)Q^HOv1q=e2BY4^B-l_k zNPufL0J~x=c=CxjL*D@0J44BLWpI`wtMvk~3g|~XZ|Wk7x6nY?h5W8;f!uS|-ke)Y zYiSyPDvO&3gFZOnR!1v=MIwiOIE@wZYe;VH*!Ug|zUY=|}7MFD$ z)q?mm(F#$4?iv-xe}ccX@@pU6Pq!)vD>@`se=?L>C z#&hcSf`K4P7(*JA-P9`P42la-RY3pkBSPYFf4&soMx&ukfQ?48`Rwh^!P925(LiX; z(ZTDVMRE60W)FocS3zhnH$b}C*v5}f+`}j80T%_08!G>&hmw@O`h;)sQ*>`wx+wN= z&J6cZoQg^^lxy1V@C5_f(P&Wzua&PLq`rH=tBgtv$%2M^We~Ao%b-$B^R$u&l?bRD zO9}hD5UlD+DiLD}-2CXyiN)z79yHOx`4I*AbfN~@+)?m#D8~`xOTfY2ijLvJH#SD) zKSDkT7bb%PAE_Nm(izaV+y;WGs6?5&G%5iOg84?lFl%tb;L_=2ic1C!Vdn|M{4euH zd52^P8ax(LhJ?_`a8T-}J%-U~?BHI>$~`n{t&D~v`^luU#Tlg z1$~&B79>h#Kmz?(+AePAbs4%$R0!^W&6`#AanSDIgyPi^Mu{&L6r{tKs=>ei&7c8^ zAOQ>!3)YK(zpMqt3SSezb-{)r<0*;|`AT`<31C**(mn|Ac2KD1)tB7bV7dGB80|mO z2op&&x)qfOxEsGjM$akg<>}i_Po@EbFG*}_x>hftiv~(gkQTiJML6e?(tuc$GuVV6 zk- zh$7{Hz^I?ShEl40cM3BiR%&EKSilit#a76;y7D6cg%X2kAq#4$hR*DCBx{OG#T0)e zyxLSol#+*{YfRk>m9md zRj?dDm(K)YbsQ%#v!?3&Vur$)qKJWQYmJg9)m=fUn4T=GBLVEIV; z7qd>04MlNcyjn^~T3K-#!S`je`usK zBjhNhAA&g8C7obt0UZhqIqVbrYsoKBo-v7>2<**od1)U17aU#9=J)$hQJU{Q9q)-OQB zz1<}&$dP|({}FqL1f%R>-N6X8$;e8vpK5v|CrXkJuJl6$WV8at3A5QbwQ@Q3xP75L zlR^I!vHSf;3Nj@l@mnkWY`XfsiIOp7T1plmFAYspZy3rA6d0{eEAmTt45s)v8Qs!Q zbn&5j)__hP?g;^imte~2PZZ_-6ktCJGy`Hsq3)mSdxY~%$ zUY8ir)iU6pPNQeO5q%y6S!??BiS0m@@{dGa94Wa7uWuh0`1Hok8p!!}v4Px$XG0sv z-FHhG$T?!+xxMPWAifC-PJM|BUf z5Q2gPh6}`7&A5SZYPIPR2lg%6hX{j!5&lF93XD|*g^bq1$IcMsNhX9yJQx`;9V4({ z9ESk`mV2IFZ~#^|AHwU7h(o%w*)lsTP205LL6w+5n4S*KyFt&t00ap}q&bRMoe`0y z&}f47Qit4%0+N9o#eR_(2!2d+Gph@;DessfmgHg5@KAU+xc*0|l{Y1>)eqa7TDJIR~wnZX$C* zlhny2;$BgrlD3TQ=ph+;A@<&w$pRWmuCNs_Fld`IisYJA$*l#uL!y!Mt@%79T?IEu zdczO{0(^jYWiA(5r*4PP#xCSkS*2#X(c&S6V&Uo=mS(%fO_D$t3YjX^K=6ulBp8DK zE1}}eJGNI|7IOp`1s}e}m5>nBGYAN2zXjKfhYaT7ui~k=cf4af-S_S(wsp^b{X@!@ zq+8qi3ev$zGQ`|jVZKaEuywD|xR-Q=C@|=|O-L)QeYm%0@4PsCZ9!3A9G1O~w<7=Z z7m#a@Y|ZHPh|5Sk#CC3D66I9CZb^IH?aNiR*AxCn3fyb5gw1(=Qn(T%P2D;D{g=u7 zwl{rx{rV53a`mqM!%fkBt$y?Of2%*}Y~C6bTweddw#$`l{m*ixg8g@{wUQe)h8fr! zf8{v82mIvi;z6!@k454?DRv?ME*|MG^#+_Y3dNpN@GGu+r9XXzaNaURd*e_;cLw}s zT_MP9Ly)vGRL#0tkVA(n0#d-D2Ki)BN_^2${zOHZF~7D7FZ+^RO<{sCml|VBl`9CB z80&i`;yK@WV|?Jv`(1{?qb)w!!h_{TFx^z^zgP*a1?T@e2>9;-@U74)&O@nG;?Z!c zWjP}1U#hbF&vlF0`o9IRguC;9E7-q$5M$Fr30T>4obBaH0!o~?N@B*TynLd&w|_|t zEI9vru(;jU@yEHp^!&R;XXg7q?%ntQz6`k}&Oi4Y$A4*w0Bsqog8Ls=e3Mpod=BBG zO5K6ebi$W9M~BfEEJNf#M}t>yAYriQ3T*P; ziJfD5tao04TEfjsi5leHXeftUx;Imn!0WoGuql+|~9qaC~Y zv33CD@w%d{h$0#b|=nIa(y zhv^5YT(LC0i6psDx&1On=x;sC0{%Z5`px#)$?fQXSMYzk0A=5Gt8TSWaf?#_vr;bH z)qnmXbaf4GkK_>;%HMZKO@_`u5!71Rn<1*6?J{8nA14>fZsdy3A#YWE|A{;bA5ws} zsZ`2TCw}+op*814qk*ZKLX3KRa0dCN(A}B89r9Rk{&$u4=5|EDtImHB#-7aiuT)ES z`rqyB@a3Z<re3KzE^0$g?eD`hux z{;LJ|&i<3$s6Xkid+HabP=p?(anL@U4z5iMk{lbugoqzv$OB7Se63O`BxXlV zu4+qsVnSOO&8Xo2H-bd-IUCmS9=+BZs@8ULI6@`4|K8V(w6!;mSUr!) z(W+h_&Xv}VCAM1CJ+y@?7`25w@uj)M+`uta&vLHf03YFuZq8fs9S%{o0^yo!7l#2bw@9}S;BcG@t4F9xMcV8ADi zg_HGS*{s3&zmF|`k+b(#m}CL}pZ0Hy`D2k+@P7n*&&2S)XdIw3Pzlh=7+hd=DU zY1mL`Rv2I*1=97CaN=|IpeUR$<^FaFOgNF`rdmMjA6z!p|{&(4MmaDXeCN7w8r?egjQ8kT9qDA zYDg!mRmq}=QihB$e2+2{6G6GiIm0igAI5Y2S-KrmQ>EK2sYz1kS*YhiQH=Cdege_R zjU>3|Bqg4?Tc5}bzOk*;;#-`8y0frX)Bh6qWO}TMEU7c#4~nJ_EES_E|s|5=gr2o#%0;eF?%AuI*7PXEbf`_ zb!oPQ`Odmww}m1n`a@o*V1vR}hEt+w$n4!jT980{B}AvS2c&E2k^b1x6=aaus(haI z+FU*2^TxxPSmK4ARCSLs2P(KWLnvfSDivgU0G-geWK;>HwHX|o(Btxid=F7!M1&$U zX~*a;L3aEpo2W*MGW^Z#D8b+_^!%=NnY ze?`RNFX#Uy=bmq)SW+LD-}%P+!J^@AOFXAIHqlRoW zbi85ilj7N?nCP9fekZMqTq*u03Lsh{%-S!NQ)xz8zl50Yr1#H~-WOr^?<>tOS`oO^ ztw{HO%J`6PuNJBo&76^CQ$qG4{+{i#jEKGb{ISTb=Z6R8*UXf$$SrfDB+@_`$NI{A z1uI7Ml{jOflMmKG0i}gEA!hT#3kCL z@4@&*G(9ds+>}ywJU7|Wz#()a2dn4Rjv0lo8Tr3^c8dX^SIGZv#mUO`If&5=uI{p*ZId#sYD&)<-lBl!=P`MNtgw3EUu3gxlWnlX;KaUreAEY=B+D9oj zsi7vN;PJ@LGaC&eCCaxyI6Qj#`t1>ZJI;NNXjA<13(LBH{DdE{Tku~=h()^D*XfaU zVNuxT`PqA&rwd7=h5EjEQ;Ba)Onut?GpDo{L8KQI)p}vwHGWjsJ!XN1AH`Y$jQrA} ziUhS*%qPV4GxMo%Yo%$aJYImk2{P49=M!QyNF<}ifkaWpt6#Wj31Dtv$Kv&?ny?vqM?uc? z`en-W^8d4TpauLNpP9L}@=sU#e+%Vo{$IIVytDsY#kz0h{SEkkp#tV=oB=fPEcE}T z<4BgU`J_7}zQd{brLLkB5KzjwaXnl^1n z@oC@nJeO~F0?3U?gUq7wV=D{14*b{xuQ5y*`81aG{@!qYy*@3R--h3J4j@`Yru*p5 z_j~92y~<8>18dS8qPw#o-PnSZ#pd7BYLs0CIPzy(if(mGu=y|R3!Vf0Vt?>|R!Y7V zQR^=`$O8GFC09`8{C1RpE9^gZp;*br|KG)bej#dETK<1%T~hxiQ}xG0sfqm~UG&Fx z5t=bm@5fa6p~M&7mH7EWd(UYWoPVV(+)@JIRp;L=&DeiS)jR$Fi%@~~RM?S%2z_t) z0c=QE^d9{VxCG3((Wj_kWzm z=a!ZZ0D}Q;_A6CV3RK5Nn-5$uRwMZc-ic<)&m*5CNjXyZ#Ja>YBt0^oA@zNdl#@l8 zeZFUi!{m`sC|^fmx%nG8hti|W_=o6iNH{j6wRE=PeIvibWISWI=;lnM=tRlj_xQgbFaJ64iRuK)Qw(+u6z{#0B zaOxv-%dTQEQDFC!*N!gAlxt4yEH;=9JZnXEmrXzpd=U99vjm`OmFZv+@7cO6gAj z`vTJ6S6|&g{wqR76wA(UAMYVqCa_%>wdPsqg->%*+F@R~MR0j|6A_h$FX-Yj4Y!V^ zQoj9*vr&Kd?eUtbJW){5xiWzseQR!dQ95;sfjpStICl)u@tF3gW8^jQ%ddfdjPFYy zGimiW3)ZntV?7>NE8@#Nmb}sKV2ZY0XA+DtoE!y=#;E1`0MY#@2@{ zY6^v=P?I)=Z_*8VZ9EkU%i<|J+gzjpp?^Nw3WfP-D;AeR8#WxS>EEW^vB|YW6xR4A z$SW3?Mc(HT*>Mg4&c*i^z;>}1VSDNO;fpY#yGiaaaEF2a2nPN?5FNr800sd78n?Wg literal 0 HcmV?d00001 diff --git a/perlmods/Monitoring-Plugin-0.39.tar.gz b/perlmods/Monitoring-Plugin-0.39.tar.gz new file mode 100644 index 0000000000000000000000000000000000000000..7a35d9e7a1e2909d4d7b30a3868f865bddea7df1 GIT binary patch literal 62733 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