From 1efb03f4331db33e15626e9a7c1ea7c7d4640eb1 Mon Sep 17 00:00:00 2001 From: Mario Fetka Date: Fri, 24 Jun 2016 12:21:25 +0200 Subject: [PATCH] Imported Upstream version 2.15 --- Changelog | 349 ++ LEGAL | 10 + Makefile.in | 86 + README | 234 + README.SSL | 34 + README.Solaris | 18 + SECURITY | 131 + config.guess | 1479 ++++++ config.sub | 1606 ++++++ configure | 8076 +++++++++++++++++++++++++++++ configure.in | 481 ++ contrib/README.nrpe_check_control | 64 + contrib/nrpe_check_control.c | 121 + docs/NRPE.odt | Bin 0 -> 104985 bytes docs/NRPE.pdf | Bin 0 -> 212023 bytes include/acl.h | 70 + include/common.h | 92 + include/config.h.in | 263 + include/dh.h | 25 + include/nrpe.h | 65 + include/utils.h | 63 + init-script.debian.in | 34 + init-script.in | 62 + init-script.suse.in | 84 + install-sh | 250 + nrpe.spec | 252 + nrpe.spec.in | 252 + package/solaris/Makefile.in | 81 + package/solaris/pkg/i.config | 58 + package/solaris/pkg/nrpe | 32 + package/solaris/pkg/nrpe.xml | 131 + package/solaris/pkg/postinstall | 5 + package/solaris/pkg/preinstall | 35 + package/solaris/pkg/r.config | 33 + sample-config/nrpe.cfg.in | 235 + sample-config/nrpe.xinetd.in | 16 + src/Makefile.in | 64 + src/acl.c | 613 +++ src/check_nrpe.c | 490 ++ src/nrpe.c | 2162 ++++++++ src/snprintf.c | 1452 ++++++ src/utils.c | 390 ++ subst.in | 61 + update-version | 81 + 44 files changed, 20140 insertions(+) create mode 100644 Changelog create mode 100644 LEGAL create mode 100644 Makefile.in create mode 100644 README create mode 100644 README.SSL create mode 100644 README.Solaris create mode 100644 SECURITY create mode 100755 config.guess create mode 100755 config.sub create mode 100755 configure create mode 100644 configure.in create mode 100644 contrib/README.nrpe_check_control create mode 100644 contrib/nrpe_check_control.c create mode 100644 docs/NRPE.odt create mode 100644 docs/NRPE.pdf create mode 100644 include/acl.h create mode 100644 include/common.h create mode 100644 include/config.h.in create mode 100644 include/dh.h create mode 100644 include/nrpe.h create mode 100644 include/utils.h create mode 100644 init-script.debian.in create mode 100644 init-script.in create mode 100644 init-script.suse.in create mode 100755 install-sh create mode 100644 nrpe.spec create mode 100644 nrpe.spec.in create mode 100644 package/solaris/Makefile.in create mode 100644 package/solaris/pkg/i.config create mode 100644 package/solaris/pkg/nrpe create mode 100644 package/solaris/pkg/nrpe.xml create mode 100644 package/solaris/pkg/postinstall create mode 100644 package/solaris/pkg/preinstall create mode 100644 package/solaris/pkg/r.config create mode 100644 sample-config/nrpe.cfg.in create mode 100644 sample-config/nrpe.xinetd.in create mode 100644 src/Makefile.in create mode 100644 src/acl.c create mode 100644 src/check_nrpe.c create mode 100644 src/nrpe.c create mode 100644 src/snprintf.c create mode 100644 src/utils.c create mode 100755 subst.in create mode 100755 update-version diff --git a/Changelog b/Changelog new file mode 100644 index 0000000..e001957 --- /dev/null +++ b/Changelog @@ -0,0 +1,349 @@ +************** +NRPE Changelog +************** + +2.15 - 09/06/2013 +----------------- +- Now compiles on HP-UX (Grant Byers) +- Added support for IPv6 (Leo Baltus, Eric Stanley) + +2.14 - 12/21/2012 +----------------- +- Added configure option to allow bash command substitutions, disabled by default [bug #400] (Eric Stanley) +- Patched to shutdown SSL connection completely (Jari Takkala) +- Added SRC support on AIX (Thierry Bertaud) +- Updated RPM SPEC file to support creating RPMs on AIX (Eric Stanley) +- Updated logging to support compiling on AIX (Eric Stanley) + +2.13 - 11/11/2011 +----------------- +- Applied Kaspersky Labs supplied patch for extending allowed_hosts (Konstantin Malov) +- Fixed bug in allowed_hosts parsing (Eric Stanley) +- Updated to support compiling on Solaris 10 (thanks to Kevin Pendleton) + + +2.12 - 03/10/2008 +----------------- +- Fix for unterminated multiline plugin (garbage) output (Krzysztof Oledzki) + + + +2.11 - 12/26/2007 +----------------- +- Added lib64 library paths to configure script for 64-bit systems (John Maag) +- Added --with-ssl-lib configure script option +- Added --with-log-facility option to control syslog logging (Ryan Ordway and Brian Seklecki) + + +2.10 - 10/19/2007 +----------------- +- Moved PDF docs to docs/ subdirectory, added OpenOffice source document +- A critical result is now returned for child processed that die due to a signal (Klas Lindfors) + + + +2.9 - 08/13/2007 +---------------- +- Fixed bug with --with-nrpe-group configure script option (Graham Collinson) +- Fixed bug with check_disk thresholds in sample config file (Patric Wust) +- Added NRPE_PROGRAMVERSION and NRPE_MULTILINESUPPORT environment variables + for scripts that need to detect NRPE version and capabilities (Gerhard Lausser) +- Added asprintf() support for systems that are missing it (Samba team) + + + +2.8.1 - 05/10/2007 +----------------- +- Fixed configure script error with user-specified NRPE group + + + +2.8 - 05/08/2007 +--------------- +- Added support for multiline plugin output (limited to 1KB at the moment) (Matthias Flacke) + + + +2.8b1 - 03/14/2007 +----------------- +- Changes to sample config files +- Added ';' as an additional prohibited metachar for command arguments +- Updated documentation and added easier installation commands + + + +2.7.1 - 03/08/2007 +------------------ +- Changed C++ style comment to C style to fix compilation errors on AIX (Ryan McGarry) + + + +2.7 - 02/18/2007 +---------------- +- Patches for detection SSL header and library locations (Andrew Boyce-Lewis) +- NRPE daemon will now partially ignore non-fatal configuration file errors and attempt to startup (Andrew Boyce-Lewis) + + + +2.6 - 12/11/2006 +---------------- +- Added -u option to check_nrpe to return UNKNOWN states on socket timeouts (Bjoern Beutel) +- Added connection_timeout variable to NRPE daemon to catch dead client connections (Ton Voon) +- Added graceful timeout to check_nrpe to ensure connection to NRPE daemon is properly closed (Mark Plaksin) + + + +2.5.2 - 06/30/2006 +------------------ +- Fixed incorrect service name in sample xinetd config file +- Added note on how to restart inetd for OpenBSD users (Robert Peaslee) +- Fix for nonblocking accept()s on systems that define EAGAIN differently than EWOULDBLOCK (Gerhard Lausser) +- Fix to (re)allow week random seed (Gerhard Lausser) + + + +2.5.1 - 04/09/2006 +------------------ +- Patch to fix segfault if --no-ssl option is used (Sean Finney/Peter Palfrader) + + + +2.5 - 04/06/2006 +---------------- +- (Re)added allowed_hosts option for systems that don't support TCP wrappers +- Fix for SSL errors under Solaris 8 (Niels Endres) +- Fix for config file directory inclusion on ReiserFS (Gerhard Lausser) + + + +2.4 - 02/22/2006 +---------------- +- Added option to allow week random seed (Gerhard Lausser) +- Added optional command line prefix (Sean Finney) +- Added ability to reload config file with SIGHUP +- Fixed bug with location of dh.h include file +- Fixed bug with disconnect message in debug mode + + + +2.3 - 01/23/2006 +---------------- +- Spec file fixes +- Removed errant PID file debugging code +- Fixed problem with trimming command definitions + + + +2.2 - 01/22/2006 +---------------- +- Spec file fix +- Patch to add Tru64 and IRIX support (Ton Voon) +- Updated config.sub and config.guess +- Fixed bug with config file lines with only whitespace +- Fixed bug with missing getopt() command line option for -V +- Removed sample FreeBSD init script (now maintained by FreeBSD port) +- Added config file option for writing a PID file + + + +2.1 - 01/19/2004 +---------------- +- Replaced host access list with TCP wrapper support +- Removed length restrictions for command names and command lines +- Configure script patch for getopt_long on Solaris +- Bug fixes for accept() on HP-UX 11.0 +- Init script for SUSE Linux (Subhendu Ghosh) +- SSL protocol used is now limited to TLSv1 +- Any output from plugins after first line is now ignored before + plugin process is closed + + + +2.0 - 09/08/2003 +---------------- +- Added support for passing arguments to command +- NRPE daemon can no longer be run as root user/group +- Added getopt support +- Added 'include' variable to config file to allow inclusion + of external config files +- Added 'include_dir' variable to allow inclusion of external + config files in directories (with recursion) +- Added native SSL support (Derrick Bennett) +- Added my_strsep(), as Solaris doesn't have strsep() +- Added license exemption for use with OpenSSL + + + +1.8 - 01/16/2003 +---------------- +- Daemon now closes stdio/out/err properly (James Peterson) +- Makefile changes (James Peterson) +- Mode command line option bug fix in daemon +- Fixed incorrect command line options in check_nrpe plugin + + + +1.7 - 01/08/2003 +---------------- +- Spec file updates and minor bug fixes (James Peterson) +- Bug fix with default nrpe port definition +- Added sample xinetd config file (nrpe.xinetd) +- Bug fix for command_timeout variable (James Peterson) + + + +1.6 - 12/30/2002 +---------------- +- Updated sample commands to match new plugin argument format +- Added sample init scripts for FreeBSD and Debian (Andrew Ryder) +- Syntax changes (-H option specifies host name in check_nrpe, + -c option specifies config file in nrpe) +- Added command_timeout directive to config file to allow user + to specify timeout for executing plugins +- Added spec file and misc patches for building RPMs (James Peterson) +- Added --with-nrpe-port config directive (James Peterson) + + + +1.5 - 06/03/2002 +---------------- +- Added setuid/setgid option to config file (suggested by Marek Cervenka) + + + +1.4 - 06/01/2002 +---------------- +- Changed STATE_UNKNOWN to value of 3 instead of -1 (old style) +- Minor doc and sample config file changes + + + +1.3 - 02/21/2002 +---------------- +- Name and version change +- Ignore SIGHUP, minor cleanup (Jon Andrews) + + + +1.2.5 - 12/22/2001 +------------------ +- Implemented Beej's sendall() to handle partial send()s +- Added instructions on running under xinetd to README +- Removed some old crud + + + +1.2.4 - 02/22/2001 +------------------ +- I forgot what changes I made. Go figure... + + + +1.2.3 - 12/21/2000 +------------------ +- A bit more documentation on configuring command definitions for the plugin + + + +1.2.2 - 06/05/2000 +------------------ +- Fixed error in docs for running under inetd using TCP wrappers +- Replaced old email address in src/netutils.h with new one + + + +1.2.1 - 05/07/2000 +------------------ +- Removed trapping of SIGCHLD +- Changed wait4() to waitpid() to allow compilation on HP-UX and AIX + + + +1.2.0 - 04/18/2000 +------------------ +- Server forks twice after accepting a client connection, so as to prevent the + creation of zombies + + + +1.1.5 - 04/07/2000 +------------------ +- Fixed a small bug where one debug message was not getting logged properly + + + +1.1.4 - 03/30/2000 +------------------ +- Added option to disable/enable debug messages using the debug option in the + config file + + + +1.1.3 - 03/11/2000 +------------------ +- Changed config file to use an absolute path +- Changed all debug output to use syslog (Rene Klootwijk) +- No convert all data to network order before sending it and convert it back to + host order when receiving it. This makes it possible to mix Solaris and Linux, + e.g. running check_nrpe on Linux and nrpe on Solaris. (Rene Klootwijk) + + + +1.1.2 - 03/07/2000 +------------------ +- Removed unnecessary code in signal handler routine +- Unused signals are no longer trapper + + + +1.1.1 - 02/28/2000 - RKL +--------------------------- +- Modified syslog code to include string describing the error code. +- Changed hardcoded number in signal handler to its name. This prevented nrpe + to run on Solaris. +- Fixed race condition in accept loop. The result of accept should also be + checked for EINTR. +- Modified recv and send function calls to compile without warnings on Solaris. +- Modified configure.in,configure and Makefile.in to include nsl and socket libs + for Solaris. +- Modified the signal handler to reestablish itself after being called. + + + +1.1 - 02/24/2000 - Rene Klootwijk +----------------- +- Added ability to bind nrpe to a specific interface by specifying the address + of this interface in the nrpe.cfg file (e.g. server_address=192.168.2.3) + + + +1.0 - 02/16/2000 +------------------ +- Added ability to run as a service under inetd + + + +1.0b6 - 02/01/2000 +------------------ +- Added configure script +- Netutils functions from the NetSaint plugins is now used +- Reset SIGCHLD to default behavior before calling popen() to + prevent race condition with pclose() (Reported by Rene Klootwijk) +- Cleaned up code + + + +1.0b5 - 01/10/2000 +------------------ +- Added init script contributed by Jacob L +- Incorporated syslog code and other patches contributed by Jacob L + + + +1.0b4 - 11/04/1999 +------------------ +- Changed 'allowed_ip' option in configuration file to + 'allowed_hosts' and added support for multiple hosts +- Minor buffer overflow protection fixes +- main() returned STATE_UNKNOWN on successful launch, changed to STATE_OK (jaclu@grm.se) +- Added syslog support (jaclu@grm.se) diff --git a/LEGAL b/LEGAL new file mode 100644 index 0000000..ed59a7d --- /dev/null +++ b/LEGAL @@ -0,0 +1,10 @@ + +All source code, binaries, documentation, and information contained +in this distribution are provided AS IS with NO WARRANTY OF ANY KIND, +INCLUDING THE WARRANTY OF DESIGN, MERCHANTABILITY, AND FITNESS FOR +A PARTICULAR PURPOSE. + +Nagios and the Nagios logo are registered trademarks of Nagios Enterprises. +All other trademarks, servicemarks, registered trademarks, and +registered servicemarks are the property of their respective owner(s). + diff --git a/Makefile.in b/Makefile.in new file mode 100644 index 0000000..0b896e3 --- /dev/null +++ b/Makefile.in @@ -0,0 +1,86 @@ +############################### +# Makefile for NRPE +# +# Last Modified: 03-14-2007 +############################### + + +# Source code directories +SRC_BASE=./src/ +SRC_INCLUDE=./include/ + +CC=@CC@ +CFLAGS=@CFLAGS@ @DEFS@ +LDFLAGS=@LDFLAGS@ @LIBS@ + +prefix=@prefix@ +exec_prefix=@exec_prefix@ +CFGDIR=@sysconfdir@ +BINDIR=@bindir@ +SBINDIR=@sbindir@ +LIBEXECDIR=@libexecdir@ +INSTALL=@INSTALL@ +NAGIOS_INSTALL_OPTS=@NAGIOS_INSTALL_OPTS@ +NRPE_INSTALL_OPTS=@NRPE_INSTALL_OPTS@ + +INIT_DIR=@init_dir@ +INIT_OPTS=-o root -g root + + +all: + cd $(SRC_BASE); $(MAKE) ; cd .. + + @echo "" + @echo "*** Compile finished ***" + @echo "" + @echo "If the NRPE daemon and client compiled without any errors, you" + @echo "can continue with the installation or upgrade process." + @echo "" + @echo "Read the PDF documentation (NRPE.pdf) for information on the next" + @echo "steps you should take to complete the installation or upgrade." + @echo "" +nrpe: + cd $(SRC_BASE); $(MAKE) ; cd .. + +check_nrpe: + cd $(SRC_BASE); $(MAKE) ; cd .. + + +install-plugin: + cd $(SRC_BASE) && $(MAKE) $@ + +install-daemon: + cd $(SRC_BASE) && $(MAKE) $@ + +install: + cd $(SRC_BASE) && $(MAKE) $@ + +install-xinetd: + $(INSTALL) -m 644 sample-config/nrpe.xinetd /etc/xinetd.d/nrpe + +install-daemon-config: + $(INSTALL) -m 775 $(NAGIOS_INSTALL_OPTS) -d $(DESTDIR)$(CFGDIR) + $(INSTALL) -m 644 $(NRPE_INSTALL_OPTS) sample-config/nrpe.cfg $(DESTDIR)$(CFGDIR) + +solaris-package: + @if [ `uname -s` != "SunOS" ] ; then \ + echo "It is recommended you be running on Solaris to build a Solaris package"; \ + else \ + cd package/solaris; $(MAKE) build ; $(MAKE) pkg ; cd ../..; \ + fi + +clean: + cd $(SRC_BASE); $(MAKE) $@ ; cd .. + cd package/solaris; $(MAKE) $@ ; cd ../.. + rm -f core + rm -f *~ */*~ + +distclean: clean + cd $(SRC_BASE); $(MAKE) $@ ; cd .. + cd package/solaris; $(MAKE) $@ ; cd ../.. + rm -f config.log config.status config.cache nrpe.cfg nrpe.xinetd subst $(SRC_INCLUDE)/config.h init-script init-script.debian init-script.freebsd init-script.suse + rm -f sample-config/*.cfg sample-config/*.xinetd + rm -f Makefile + +devclean: distclean + diff --git a/README b/README new file mode 100644 index 0000000..65635a6 --- /dev/null +++ b/README @@ -0,0 +1,234 @@ +----------- +NRPE README +----------- + + +** UPDATED DOCUMENTATION! + +For installation instructions and information on the design overview +of the NRPE addon, please read the PDF documentation that is found in +this directory: NRPE.pdf + + + + +Purpose +------- +The purpose of this addon is to allow you to execute Nagios +plugins on a remote host in as transparent a manner as possible. + + +Contents +-------- + +There are two pieces to this addon: + + 1) NRPE - This program runs as a background process on the + remote host and processes command execution requests + from the check_nrpe plugin on the Nagios host. + Upon receiving a plugin request from an authorized + host, it will execute the command line associated + with the command name it received and send the + program output and return code back to the + check_nrpe plugin + + 2) check_nrpe - This is a plugin that is run on the Nagios host + and is used to contact the NRPE process on remote + hosts. The plugin requests that a plugin be + executed on the remote host and wait for the NRPE + process to execute the plugin and return the result. + The plugin then uses the output and return code + from the plugin execution on the remote host for + its own output and return code. + + +Compiling +--------- + +The code is very basic and may not work on your particular +system without some tweaking. I just haven't put a lot of effort +into this addond. Most Linux users should be able to compile +NRPE and the check_nrpe plugin with the following commands... + +./configure +make all + +The binaries will be located in the src/ directory after you +run 'make all' and will have to be installed manually somewhere +on your system. + + +NOTE: Since the check_nrpe plugin and nrpe daemon run on different + machines (the plugin runs on the Nagios host and the daemon + runs on the remote host), you will have to compile the nrpe + daemon on the target machine. + + + +Installing +---------- + +The check_nrpe plugin should be placed on the Nagios host along +with your other plugins. In most cases, this will be in the +/usr/local/nagios/libexec directory. + +The nrpe program and the configuration file (nrpe.cfg) should +be placed somewhere on the remote host. Note that you will also +have to install some plugins on the remote host if you want to +make much use of this addon. + + + +Configuring +----------- + +Sample config files for the NRPE daemon are located in the +sample-config/ subdirectory. + + + +Running Under INETD or XINETD +----------------------------- + +If you plan on running nrpe under inetd or xinetd and making use +of TCP wrappers, you need to do the following things: + + + +1) Add a line to your /etc/services file as follows (modify the port + number as you see fit) + + nrpe 5666/tcp # NRPE + + + +2) Add entries for the NRPE daemon to either your inetd or xinetd + configuration files. Which one your use will depend on which + superserver is installed on your system. Both methods are described + below. NOTE: If you run nrpe under inetd or xinetd, the server_port + and allowed_hosts variables in the nrpe configuration file are + ignored. + + + ***** INETD ***** + If your system uses the inetd superserver WITH tcpwrappers, add an + entry to /etc/inetd.conf as follows: + + nrpe stream tcp nowait /usr/sbin/tcpd -c --inetd + + If your system uses the inetd superserver WITHOUT tcpwrappers, add an + entry to /etc/inetd.conf as follows: + + nrpe stream tcp nowait -c --inetd + + + - Replace with the name of the user that the nrpe server should run as. + Example: nagios + - Replace with the path to the nrpe binary on your system. + Example: /usr/local/nagios/nrpe + - Replace with the path to the nrpe config file on your system. + Example: /usr/local/nagios/nrpe.cfg + + + ***** XINETD ***** + If your system uses xinetd instead of inetd, you'll probably + want to create a file called 'nrpe' in your /etc/xinetd.d + directory that contains the following entries: + + + # default: on + # description: NRPE + service nrpe + { + flags = REUSE + socket_type = stream + wait = no + user = + server = + server_args = -c --inetd + log_on_failure += USERID + disable = no + only_from = ... + } + + + - Replace with the name of the user that the nrpe server should run as. + - Replace with the path to the nrpe binary on your system. + - Replace with the path to the nrpe config file on your system. + - Replace the fields with the IP addresses of hosts which + are allowed to connect to the NRPE daemon. This only works if xinetd was + compiled with support for tcpwrappers. + + + +3) Restart inetd or xinetd will the following command (pick the + on that is appropriate for your system: + + /etc/rc.d/init.d/inet restart + + /etc/rc.d/init.d/xinetd restart + + OpenBSD users can use the following command to restart inetd: + + kill -HUP `cat /var/run/inet.pid` + + + +4) Add entries to your /etc/hosts.allow and /etc/hosts.deny + file to enable TCP wrapper protection for the nrpe service. + This is optional, although highly recommended. + + + + +Configuring Things On The Nagios Host +--------------------------------------- + +Examples for configuring the nrpe daemon are found in the sample +nrpe.cfg file included in this distribution. That config file +resides on the remote host(s) along with the nrpe daemon. The +check_nrpe plugin gets installed on the Nagios host. In order +to use the check_nrpe plugin from within Nagios, you'll have +to define a few things in the host config file. An example +command definition for the check_nrpe plugin would look like this: + +define command{ + command_name check_nrpe + command_line /usr/local/nagios/libexec/check_nrpe -H $HOSTADDRESS$ -c $ARG1$ + } + +In any service definitions that use the nrpe plugin/daemon to +get their results, you would set the service check command portion +of the definition to something like this (sample service definition +is simplified for this example): + +define service{ + host_name someremotehost + service_description someremoteservice + check_command check_nrpe!yourcommand + ... etc ... + } + +where "yourcommand" is a name of a command that you define in +your nrpe.cfg file on the remote host (see the docs in the +sample nrpe.cfg file for more information). + + + + +Questions? +---------- + +If you have questions about this addon, or problems getting things +working, first try searching the nagios-users mailing list archives. +Details on searching the list archives can be found at +http://www.nagios.org + +If all else fails, you can email me and I'll try and respond as +soon as I get a chance. + + -- Ethan Galstad (nagios@nagios.org) + + + + diff --git a/README.SSL b/README.SSL new file mode 100644 index 0000000..dadbda4 --- /dev/null +++ b/README.SSL @@ -0,0 +1,34 @@ +NRPE With SSL/TLS + +NRPE now has the option for Encrypting Network traffic using +SSL/TLS from openssl. + +The Encryption is done using a set encryption routine of +AES-256 Bit Encryption using SHA and Anon-DH. This encrypts +all traffic using the NRPE sockets from the client to the server. + +Since we are using Anon-DH this allows for an encrypted +SSL/TLS Connection without using pre-generated keys or +certificates. The key generation information used by the +program to dynaically create keys on daemon startup can be found +in the dh.h file in the nrpe src directory. This file was created +using the command: + +openssl dhparam -C 512 + +which outputs the C code in dh.h. For your own security you can replace +that file with your own dhparam generated code. + +As of this time you will need to have the latest greatest version of +OpenSSL (tested against version 0.9.7a) since not all versions have +the AES algorythm in them. + +I am not aware that at this time this code is restricted under export +restrictions but I leave that verification process up to you. + +Thoughts and suggestions are welcome and I can be reached on the +Nagios and NagiosPlug Mailing Lists. + + - Derrick + + diff --git a/README.Solaris b/README.Solaris new file mode 100644 index 0000000..7d7e386 --- /dev/null +++ b/README.Solaris @@ -0,0 +1,18 @@ +Compiling on Solaris + +Several changes may be necessary in order to compile NRPE on Solaris. +This information is known to apply to Solaris 10 and may apply to other +verisions of Solaris. This has been tested on Solaris 10 x86. + +There are three things that you may need to compile NRPE on Solaris: + + 1. Add /usr/sfw/bin to your path + $ PATH="$PATH:/usr/sfw/bin" + 2. Specify the binary to be used for make-ing + $ MAKE=gmake ./configure + 3. Use gmake to build the code + $ gmake all + +Thanks to Kevin Pendleton at UtahSysAdmin.com +(http://www.utahsysadmin.com/2008/03/14/configuring-nagios-plugins-nrpe-on-solaris-10/) +for the instructions on finding the SSL libraries. diff --git a/SECURITY b/SECURITY new file mode 100644 index 0000000..6138155 --- /dev/null +++ b/SECURITY @@ -0,0 +1,131 @@ +******************** +NRPE SECURITY README +******************** + + +TCP WRAPPER SUPPORT +=================== + +NRPE 2.x includes native support for TCP wrappers. The older +host access list directive was removed from the config file. +Make sure your system supports TCP wrappers before running NRPE. +Once you compile NRPE you can check to see if it has wrapper +support built in by running the daemon from the command line +without any arguments like this: + + ./nrpe --help + + + + +COMMAND ARGUMENTS +================= + +NRPE 2.0 includes the ability for clients to supply arguments to +commands which should be run. Please note that this feature +should be considered a security risk, and you should only use +it if you know what you're doing! + + +BASH COMMAND SUBSTITUTION +------------------------- + +Even with the metacharacter restrictions below, if command arguments +are enabled, it is still possible to send bash command substitions +in the form $(...) as an agrument. This is explicity disabled by +default, but can be enabled by a configure-time option and a +configuration file option. Enabling this option is VERY RISKY and +its use is HIGHLY DISCOURAGED. + + +ENABLING ARGUMENTS +------------------ + +To enable support for command argument in the daemon, you must +do two things: + + 1. Run the configure script with the --enable-command-args + option + + 2. Set the 'dont_blame_nrpe' directive in the NRPE config + file to 1. + + +ENABLING BASH COMMAND SUBSTITUTION +---------------------------------- + +To enable support for arguments containing bash command substitions, +you must do two things: + + 1. Enable arguments as described above + + 2. Include the --enable-bash-command-substitution configure + option when running the configure script + + 3. Set the 'allow_bash_command_substitutions' directive in the + NRPE config file to 1. + + +ILLEGAL METACHARS +----------------- + +To help prevent some nasty things from being done by evil +clients, the following metacharacters are not allowed +in client command arguments: + + | ` & > < ' " \ [ ] { } ; ! + +Any client request which contains the abovementioned metachars +is discarded. + + +USER/GROUP RESTRICTIONS +----------------------- + +The NRPE daemon cannot be run with (effective) root user/group +privileges. You must run the daemon with an account that does +not have superuser rights. Use the nrpe_user and nrpe_group +directives in the config file to specify which user/group the +daemon should run as. + + +ENCRYPTION +---------- + +If you do enable support for command arguments in the NRPE daemon, +make sure that you encrypt communications either by using: + + 1. Stunnel (see http://www.stunnel.org for more info) + 2. Native SSL support + +Do NOT assume that just because the daemon is behind a firewall +that you are safe! Always encrypt NRPE traffic! + + +USING ARGUMENTS +--------------- + +How do you use command arguments? Well, lets say you define a +command in the NRPE config file that looks like this: + + command[check_users]=/usr/local/nagios/libexec/check_users -w $ARG1$ -c $ARG2$ + +You could then call the check_nrpe plugin like this: + + ./check_nrpe -H -c check_users -a 5 10 + +The arguments '5' and '10' get substituted into the appropriate +$ARGx$ macros in the command ($ARG1$ and $ARG2$, respectively). +The command that would be executed by the NRPE daemon would look +like this: + + /usr/local/nagios/libexec/check_users -w 5 -c 10 + +You can supply up to 16 arguments to be passed to the command +for substitution in $ARG$ macros ($ARG1$ - $ARG16$). + + + + + -- Ethan Galstad (nagios@nagios.org) + diff --git a/config.guess b/config.guess new file mode 100755 index 0000000..17690ae --- /dev/null +++ b/config.guess @@ -0,0 +1,1479 @@ +#! /bin/sh +# Attempt to guess a canonical system name. +# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, +# 2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc. + +timestamp='2006-01-02' + +# This file 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, Inc., 51 Franklin Street - Fifth Floor, Boston, MA +# 02110-1301, USA. +# +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + + +# Originally written by Per Bothner . +# Please send patches to . Submit a context +# diff and a properly formatted ChangeLog entry. +# +# This script attempts to guess a canonical system name similar to +# config.sub. If it succeeds, it prints the system name on stdout, and +# exits with 0. Otherwise, it exits with 1. +# +# The plan is that this can be called by configure scripts if you +# don't specify an explicit build system type. + +me=`echo "$0" | sed -e 's,.*/,,'` + +usage="\ +Usage: $0 [OPTION] + +Output the configuration name of the system \`$me' is run on. + +Operation modes: + -h, --help print this help, then exit + -t, --time-stamp print date of last modification, then exit + -v, --version print version number, then exit + +Report bugs and patches to ." + +version="\ +GNU config.guess ($timestamp) + +Originally written by Per Bothner. +Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005 +Free Software Foundation, Inc. + +This is free software; see the source for copying conditions. There is NO +warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." + +help=" +Try \`$me --help' for more information." + +# Parse command line +while test $# -gt 0 ; do + case $1 in + --time-stamp | --time* | -t ) + echo "$timestamp" ; exit ;; + --version | -v ) + echo "$version" ; exit ;; + --help | --h* | -h ) + echo "$usage"; exit ;; + -- ) # Stop option processing + shift; break ;; + - ) # Use stdin as input. + break ;; + -* ) + echo "$me: invalid option $1$help" >&2 + exit 1 ;; + * ) + break ;; + esac +done + +if test $# != 0; then + echo "$me: too many arguments$help" >&2 + exit 1 +fi + +trap 'exit 1' 1 2 15 + +# CC_FOR_BUILD -- compiler used by this script. Note that the use of a +# compiler to aid in system detection is discouraged as it requires +# temporary files to be created and, as you can see below, it is a +# headache to deal with in a portable fashion. + +# Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still +# use `HOST_CC' if defined, but it is deprecated. + +# Portable tmp directory creation inspired by the Autoconf team. + +set_cc_for_build=' +trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ; +trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ; +: ${TMPDIR=/tmp} ; + { tmp=`(umask 077 && mktemp -d -q "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } || + { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } || + { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } || + { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ; +dummy=$tmp/dummy ; +tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ; +case $CC_FOR_BUILD,$HOST_CC,$CC in + ,,) echo "int x;" > $dummy.c ; + for c in cc gcc c89 c99 ; do + if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then + CC_FOR_BUILD="$c"; break ; + fi ; + done ; + if test x"$CC_FOR_BUILD" = x ; then + CC_FOR_BUILD=no_compiler_found ; + fi + ;; + ,,*) CC_FOR_BUILD=$CC ;; + ,*,*) CC_FOR_BUILD=$HOST_CC ;; +esac ; set_cc_for_build= ;' + +# This is needed to find uname on a Pyramid OSx when run in the BSD universe. +# (ghazi@noc.rutgers.edu 1994-08-24) +if (test -f /.attbin/uname) >/dev/null 2>&1 ; then + PATH=$PATH:/.attbin ; export PATH +fi + +UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown +UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown +UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown +UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown + +# Note: order is significant - the case branches are not exclusive. + +case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in + *:NetBSD:*:*) + # NetBSD (nbsd) targets should (where applicable) match one or + # more of the tupples: *-*-netbsdelf*, *-*-netbsdaout*, + # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently + # switched to ELF, *-*-netbsd* would select the old + # object file format. This provides both forward + # compatibility and a consistent mechanism for selecting the + # object file format. + # + # Note: NetBSD doesn't particularly care about the vendor + # portion of the name. We always set it to "unknown". + sysctl="sysctl -n hw.machine_arch" + UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \ + /usr/sbin/$sysctl 2>/dev/null || echo unknown)` + case "${UNAME_MACHINE_ARCH}" in + armeb) machine=armeb-unknown ;; + arm*) machine=arm-unknown ;; + sh3el) machine=shl-unknown ;; + sh3eb) machine=sh-unknown ;; + *) machine=${UNAME_MACHINE_ARCH}-unknown ;; + esac + # The Operating System including object format, if it has switched + # to ELF recently, or will in the future. + case "${UNAME_MACHINE_ARCH}" in + arm*|i386|m68k|ns32k|sh3*|sparc|vax) + eval $set_cc_for_build + if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ + | grep __ELF__ >/dev/null + then + # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout). + # Return netbsd for either. FIX? + os=netbsd + else + os=netbsdelf + fi + ;; + *) + os=netbsd + ;; + esac + # The OS release + # Debian GNU/NetBSD machines have a different userland, and + # thus, need a distinct triplet. However, they do not need + # kernel version information, so it can be replaced with a + # suitable tag, in the style of linux-gnu. + case "${UNAME_VERSION}" in + Debian*) + release='-gnu' + ;; + *) + release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'` + ;; + esac + # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM: + # contains redundant information, the shorter form: + # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. + echo "${machine}-${os}${release}" + exit ;; + *:OpenBSD:*:*) + UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'` + echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE} + exit ;; + *:ekkoBSD:*:*) + echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE} + exit ;; + *:SolidBSD:*:*) + echo ${UNAME_MACHINE}-unknown-solidbsd${UNAME_RELEASE} + exit ;; + macppc:MirBSD:*:*) + echo powerppc-unknown-mirbsd${UNAME_RELEASE} + exit ;; + *:MirBSD:*:*) + echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE} + exit ;; + alpha:OSF1:*:*) + case $UNAME_RELEASE in + *4.0) + UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'` + ;; + *5.*) + UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'` + ;; + esac + # According to Compaq, /usr/sbin/psrinfo has been available on + # OSF/1 and Tru64 systems produced since 1995. I hope that + # covers most systems running today. This code pipes the CPU + # types through head -n 1, so we only detect the type of CPU 0. + ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1` + case "$ALPHA_CPU_TYPE" in + "EV4 (21064)") + UNAME_MACHINE="alpha" ;; + "EV4.5 (21064)") + UNAME_MACHINE="alpha" ;; + "LCA4 (21066/21068)") + UNAME_MACHINE="alpha" ;; + "EV5 (21164)") + UNAME_MACHINE="alphaev5" ;; + "EV5.6 (21164A)") + UNAME_MACHINE="alphaev56" ;; + "EV5.6 (21164PC)") + UNAME_MACHINE="alphapca56" ;; + "EV5.7 (21164PC)") + UNAME_MACHINE="alphapca57" ;; + "EV6 (21264)") + UNAME_MACHINE="alphaev6" ;; + "EV6.7 (21264A)") + UNAME_MACHINE="alphaev67" ;; + "EV6.8CB (21264C)") + UNAME_MACHINE="alphaev68" ;; + "EV6.8AL (21264B)") + UNAME_MACHINE="alphaev68" ;; + "EV6.8CX (21264D)") + UNAME_MACHINE="alphaev68" ;; + "EV6.9A (21264/EV69A)") + UNAME_MACHINE="alphaev69" ;; + "EV7 (21364)") + UNAME_MACHINE="alphaev7" ;; + "EV7.9 (21364A)") + UNAME_MACHINE="alphaev79" ;; + esac + # A Pn.n version is a patched version. + # A Vn.n version is a released version. + # A Tn.n version is a released field test version. + # A Xn.n version is an unreleased experimental baselevel. + # 1.2 uses "1.2" for uname -r. + echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + exit ;; + Alpha\ *:Windows_NT*:*) + # How do we know it's Interix rather than the generic POSIX subsystem? + # Should we change UNAME_MACHINE based on the output of uname instead + # of the specific Alpha model? + echo alpha-pc-interix + exit ;; + 21064:Windows_NT:50:3) + echo alpha-dec-winnt3.5 + exit ;; + Amiga*:UNIX_System_V:4.0:*) + echo m68k-unknown-sysv4 + exit ;; + *:[Aa]miga[Oo][Ss]:*:*) + echo ${UNAME_MACHINE}-unknown-amigaos + exit ;; + *:[Mm]orph[Oo][Ss]:*:*) + echo ${UNAME_MACHINE}-unknown-morphos + exit ;; + *:OS/390:*:*) + echo i370-ibm-openedition + exit ;; + *:z/VM:*:*) + echo s390-ibm-zvmoe + exit ;; + *:OS400:*:*) + echo powerpc-ibm-os400 + exit ;; + arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) + echo arm-acorn-riscix${UNAME_RELEASE} + exit ;; + arm:riscos:*:*|arm:RISCOS:*:*) + echo arm-unknown-riscos + exit ;; + SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*) + echo hppa1.1-hitachi-hiuxmpp + exit ;; + Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*) + # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE. + if test "`(/bin/universe) 2>/dev/null`" = att ; then + echo pyramid-pyramid-sysv3 + else + echo pyramid-pyramid-bsd + fi + exit ;; + NILE*:*:*:dcosx) + echo pyramid-pyramid-svr4 + exit ;; + DRS?6000:unix:4.0:6*) + echo sparc-icl-nx6 + exit ;; + DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*) + case `/usr/bin/uname -p` in + sparc) echo sparc-icl-nx7; exit ;; + esac ;; + sun4H:SunOS:5.*:*) + echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) + echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + i86pc:SunOS:5.*:*) + echo i386-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + sun4*:SunOS:6*:*) + # According to config.sub, this is the proper way to canonicalize + # SunOS6. Hard to guess exactly what SunOS6 will be like, but + # it's likely to be more like Solaris than SunOS4. + echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + sun4*:SunOS:*:*) + case "`/usr/bin/arch -k`" in + Series*|S4*) + UNAME_RELEASE=`uname -v` + ;; + esac + # Japanese Language versions have a version number like `4.1.3-JL'. + echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'` + exit ;; + sun3*:SunOS:*:*) + echo m68k-sun-sunos${UNAME_RELEASE} + exit ;; + sun*:*:4.2BSD:*) + UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null` + test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3 + case "`/bin/arch`" in + sun3) + echo m68k-sun-sunos${UNAME_RELEASE} + ;; + sun4) + echo sparc-sun-sunos${UNAME_RELEASE} + ;; + esac + exit ;; + aushp:SunOS:*:*) + echo sparc-auspex-sunos${UNAME_RELEASE} + exit ;; + # The situation for MiNT is a little confusing. The machine name + # can be virtually everything (everything which is not + # "atarist" or "atariste" at least should have a processor + # > m68000). The system name ranges from "MiNT" over "FreeMiNT" + # to the lowercase version "mint" (or "freemint"). Finally + # the system name "TOS" denotes a system which is actually not + # MiNT. But MiNT is downward compatible to TOS, so this should + # be no problem. + atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*) + echo m68k-atari-mint${UNAME_RELEASE} + exit ;; + atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*) + echo m68k-atari-mint${UNAME_RELEASE} + exit ;; + *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*) + echo m68k-atari-mint${UNAME_RELEASE} + exit ;; + milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*) + echo m68k-milan-mint${UNAME_RELEASE} + exit ;; + hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*) + echo m68k-hades-mint${UNAME_RELEASE} + exit ;; + *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) + echo m68k-unknown-mint${UNAME_RELEASE} + exit ;; + m68k:machten:*:*) + echo m68k-apple-machten${UNAME_RELEASE} + exit ;; + powerpc:machten:*:*) + echo powerpc-apple-machten${UNAME_RELEASE} + exit ;; + RISC*:Mach:*:*) + echo mips-dec-mach_bsd4.3 + exit ;; + RISC*:ULTRIX:*:*) + echo mips-dec-ultrix${UNAME_RELEASE} + exit ;; + VAX*:ULTRIX*:*:*) + echo vax-dec-ultrix${UNAME_RELEASE} + exit ;; + 2020:CLIX:*:* | 2430:CLIX:*:*) + echo clipper-intergraph-clix${UNAME_RELEASE} + exit ;; + mips:*:*:UMIPS | mips:*:*:RISCos) + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c +#ifdef __cplusplus +#include /* for printf() prototype */ + int main (int argc, char *argv[]) { +#else + int main (argc, argv) int argc; char *argv[]; { +#endif + #if defined (host_mips) && defined (MIPSEB) + #if defined (SYSTYPE_SYSV) + printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0); + #endif + #if defined (SYSTYPE_SVR4) + printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0); + #endif + #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD) + printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0); + #endif + #endif + exit (-1); + } +EOF + $CC_FOR_BUILD -o $dummy $dummy.c && + dummyarg=`echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` && + SYSTEM_NAME=`$dummy $dummyarg` && + { echo "$SYSTEM_NAME"; exit; } + echo mips-mips-riscos${UNAME_RELEASE} + exit ;; + Motorola:PowerMAX_OS:*:*) + echo powerpc-motorola-powermax + exit ;; + Motorola:*:4.3:PL8-*) + echo powerpc-harris-powermax + exit ;; + Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*) + echo powerpc-harris-powermax + exit ;; + Night_Hawk:Power_UNIX:*:*) + echo powerpc-harris-powerunix + exit ;; + m88k:CX/UX:7*:*) + echo m88k-harris-cxux7 + exit ;; + m88k:*:4*:R4*) + echo m88k-motorola-sysv4 + exit ;; + m88k:*:3*:R3*) + echo m88k-motorola-sysv3 + exit ;; + AViiON:dgux:*:*) + # DG/UX returns AViiON for all architectures + UNAME_PROCESSOR=`/usr/bin/uname -p` + if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ] + then + if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \ + [ ${TARGET_BINARY_INTERFACE}x = x ] + then + echo m88k-dg-dgux${UNAME_RELEASE} + else + echo m88k-dg-dguxbcs${UNAME_RELEASE} + fi + else + echo i586-dg-dgux${UNAME_RELEASE} + fi + exit ;; + M88*:DolphinOS:*:*) # DolphinOS (SVR3) + echo m88k-dolphin-sysv3 + exit ;; + M88*:*:R3*:*) + # Delta 88k system running SVR3 + echo m88k-motorola-sysv3 + exit ;; + XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3) + echo m88k-tektronix-sysv3 + exit ;; + Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD) + echo m68k-tektronix-bsd + exit ;; + *:IRIX*:*:*) + echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'` + exit ;; + ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX. + echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id + exit ;; # Note that: echo "'`uname -s`'" gives 'AIX ' + i*86:AIX:*:*) + echo i386-ibm-aix + exit ;; + ia64:AIX:*:*) + if [ -x /usr/bin/oslevel ] ; then + IBM_REV=`/usr/bin/oslevel` + else + IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} + fi + echo ${UNAME_MACHINE}-ibm-aix${IBM_REV} + exit ;; + *:AIX:2:3) + if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #include + + main() + { + if (!__power_pc()) + exit(1); + puts("powerpc-ibm-aix3.2.5"); + exit(0); + } +EOF + if $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` + then + echo "$SYSTEM_NAME" + else + echo rs6000-ibm-aix3.2.5 + fi + elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then + echo rs6000-ibm-aix3.2.4 + else + echo rs6000-ibm-aix3.2 + fi + exit ;; + *:AIX:*:[45]) + IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'` + if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then + IBM_ARCH=rs6000 + else + IBM_ARCH=powerpc + fi + if [ -x /usr/bin/oslevel ] ; then + IBM_REV=`/usr/bin/oslevel` + else + IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} + fi + echo ${IBM_ARCH}-ibm-aix${IBM_REV} + exit ;; + *:AIX:*:*) + echo rs6000-ibm-aix + exit ;; + ibmrt:4.4BSD:*|romp-ibm:BSD:*) + echo romp-ibm-bsd4.4 + exit ;; + ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and + echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to + exit ;; # report: romp-ibm BSD 4.3 + *:BOSX:*:*) + echo rs6000-bull-bosx + exit ;; + DPX/2?00:B.O.S.:*:*) + echo m68k-bull-sysv3 + exit ;; + 9000/[34]??:4.3bsd:1.*:*) + echo m68k-hp-bsd + exit ;; + hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*) + echo m68k-hp-bsd4.4 + exit ;; + 9000/[34678]??:HP-UX:*:*) + HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` + case "${UNAME_MACHINE}" in + 9000/31? ) HP_ARCH=m68000 ;; + 9000/[34]?? ) HP_ARCH=m68k ;; + 9000/[678][0-9][0-9]) + if [ -x /usr/bin/getconf ]; then + sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null` + sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null` + case "${sc_cpu_version}" in + 523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0 + 528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1 + 532) # CPU_PA_RISC2_0 + case "${sc_kernel_bits}" in + 32) HP_ARCH="hppa2.0n" ;; + 64) HP_ARCH="hppa2.0w" ;; + '') HP_ARCH="hppa2.0" ;; # HP-UX 10.20 + esac ;; + esac + fi + if [ "${HP_ARCH}" = "" ]; then + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + + #define _HPUX_SOURCE + #include + #include + + int main () + { + #if defined(_SC_KERNEL_BITS) + long bits = sysconf(_SC_KERNEL_BITS); + #endif + long cpu = sysconf (_SC_CPU_VERSION); + + switch (cpu) + { + case CPU_PA_RISC1_0: puts ("hppa1.0"); break; + case CPU_PA_RISC1_1: puts ("hppa1.1"); break; + case CPU_PA_RISC2_0: + #if defined(_SC_KERNEL_BITS) + switch (bits) + { + case 64: puts ("hppa2.0w"); break; + case 32: puts ("hppa2.0n"); break; + default: puts ("hppa2.0"); break; + } break; + #else /* !defined(_SC_KERNEL_BITS) */ + puts ("hppa2.0"); break; + #endif + default: puts ("hppa1.0"); break; + } + exit (0); + } +EOF + (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy` + test -z "$HP_ARCH" && HP_ARCH=hppa + fi ;; + esac + if [ ${HP_ARCH} = "hppa2.0w" ] + then + eval $set_cc_for_build + + # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating + # 32-bit code. hppa64-hp-hpux* has the same kernel and a compiler + # generating 64-bit code. GNU and HP use different nomenclature: + # + # $ CC_FOR_BUILD=cc ./config.guess + # => hppa2.0w-hp-hpux11.23 + # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess + # => hppa64-hp-hpux11.23 + + if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | + grep __LP64__ >/dev/null + then + HP_ARCH="hppa2.0w" + else + HP_ARCH="hppa64" + fi + fi + echo ${HP_ARCH}-hp-hpux${HPUX_REV} + exit ;; + ia64:HP-UX:*:*) + HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` + echo ia64-hp-hpux${HPUX_REV} + exit ;; + 3050*:HI-UX:*:*) + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #include + int + main () + { + long cpu = sysconf (_SC_CPU_VERSION); + /* The order matters, because CPU_IS_HP_MC68K erroneously returns + true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct + results, however. */ + if (CPU_IS_PA_RISC (cpu)) + { + switch (cpu) + { + case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break; + case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break; + case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break; + default: puts ("hppa-hitachi-hiuxwe2"); break; + } + } + else if (CPU_IS_HP_MC68K (cpu)) + puts ("m68k-hitachi-hiuxwe2"); + else puts ("unknown-hitachi-hiuxwe2"); + exit (0); + } +EOF + $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` && + { echo "$SYSTEM_NAME"; exit; } + echo unknown-hitachi-hiuxwe2 + exit ;; + 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* ) + echo hppa1.1-hp-bsd + exit ;; + 9000/8??:4.3bsd:*:*) + echo hppa1.0-hp-bsd + exit ;; + *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*) + echo hppa1.0-hp-mpeix + exit ;; + hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* ) + echo hppa1.1-hp-osf + exit ;; + hp8??:OSF1:*:*) + echo hppa1.0-hp-osf + exit ;; + i*86:OSF1:*:*) + if [ -x /usr/sbin/sysversion ] ; then + echo ${UNAME_MACHINE}-unknown-osf1mk + else + echo ${UNAME_MACHINE}-unknown-osf1 + fi + exit ;; + parisc*:Lites*:*:*) + echo hppa1.1-hp-lites + exit ;; + C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*) + echo c1-convex-bsd + exit ;; + C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*) + if getsysinfo -f scalar_acc + then echo c32-convex-bsd + else echo c2-convex-bsd + fi + exit ;; + C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*) + echo c34-convex-bsd + exit ;; + C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*) + echo c38-convex-bsd + exit ;; + C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*) + echo c4-convex-bsd + exit ;; + CRAY*Y-MP:*:*:*) + echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit ;; + CRAY*[A-Z]90:*:*:*) + echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \ + | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \ + -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \ + -e 's/\.[^.]*$/.X/' + exit ;; + CRAY*TS:*:*:*) + echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit ;; + CRAY*T3E:*:*:*) + echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit ;; + CRAY*SV1:*:*:*) + echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit ;; + *:UNICOS/mp:*:*) + echo craynv-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit ;; + F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*) + FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` + FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'` + echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" + exit ;; + 5000:UNIX_System_V:4.*:*) + FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` + FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'` + echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" + exit ;; + i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) + echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE} + exit ;; + sparc*:BSD/OS:*:*) + echo sparc-unknown-bsdi${UNAME_RELEASE} + exit ;; + *:BSD/OS:*:*) + echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE} + exit ;; + *:FreeBSD:*:*) + case ${UNAME_MACHINE} in + pc98) + echo i386-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; + *) + echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; + esac + exit ;; + i*:CYGWIN*:*) + echo ${UNAME_MACHINE}-pc-cygwin + exit ;; + i*:MINGW*:*) + echo ${UNAME_MACHINE}-pc-mingw32 + exit ;; + i*:windows32*:*) + # uname -m includes "-pc" on this system. + echo ${UNAME_MACHINE}-mingw32 + exit ;; + i*:PW*:*) + echo ${UNAME_MACHINE}-pc-pw32 + exit ;; + x86:Interix*:[345]*) + echo i586-pc-interix${UNAME_RELEASE}|sed -e 's/\..*//' + exit ;; + [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*) + echo i${UNAME_MACHINE}-pc-mks + exit ;; + i*:Windows_NT*:* | Pentium*:Windows_NT*:*) + # How do we know it's Interix rather than the generic POSIX subsystem? + # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we + # UNAME_MACHINE based on the output of uname instead of i386? + echo i586-pc-interix + exit ;; + i*:UWIN*:*) + echo ${UNAME_MACHINE}-pc-uwin + exit ;; + amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*) + echo x86_64-unknown-cygwin + exit ;; + p*:CYGWIN*:*) + echo powerpcle-unknown-cygwin + exit ;; + prep*:SunOS:5.*:*) + echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + *:GNU:*:*) + # the GNU system + echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'` + exit ;; + *:GNU/*:*:*) + # other systems with GNU libc and userland + echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-gnu + exit ;; + i*86:Minix:*:*) + echo ${UNAME_MACHINE}-pc-minix + exit ;; + arm*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + cris:Linux:*:*) + echo cris-axis-linux-gnu + exit ;; + crisv32:Linux:*:*) + echo crisv32-axis-linux-gnu + exit ;; + frv:Linux:*:*) + echo frv-unknown-linux-gnu + exit ;; + ia64:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + m32r*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + m68*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + mips:Linux:*:*) + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #undef CPU + #undef mips + #undef mipsel + #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) + CPU=mipsel + #else + #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) + CPU=mips + #else + CPU= + #endif + #endif +EOF + eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n '/^CPU/{s: ::g;p;}'`" + test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; } + ;; + mips64:Linux:*:*) + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #undef CPU + #undef mips64 + #undef mips64el + #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) + CPU=mips64el + #else + #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) + CPU=mips64 + #else + CPU= + #endif + #endif +EOF + eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n '/^CPU/{s: ::g;p;}'`" + test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; } + ;; + or32:Linux:*:*) + echo or32-unknown-linux-gnu + exit ;; + ppc:Linux:*:*) + echo powerpc-unknown-linux-gnu + exit ;; + ppc64:Linux:*:*) + echo powerpc64-unknown-linux-gnu + exit ;; + alpha:Linux:*:*) + case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in + EV5) UNAME_MACHINE=alphaev5 ;; + EV56) UNAME_MACHINE=alphaev56 ;; + PCA56) UNAME_MACHINE=alphapca56 ;; + PCA57) UNAME_MACHINE=alphapca56 ;; + EV6) UNAME_MACHINE=alphaev6 ;; + EV67) UNAME_MACHINE=alphaev67 ;; + EV68*) UNAME_MACHINE=alphaev68 ;; + esac + objdump --private-headers /bin/sh | grep ld.so.1 >/dev/null + if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi + echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC} + exit ;; + parisc:Linux:*:* | hppa:Linux:*:*) + # Look for CPU level + case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in + PA7*) echo hppa1.1-unknown-linux-gnu ;; + PA8*) echo hppa2.0-unknown-linux-gnu ;; + *) echo hppa-unknown-linux-gnu ;; + esac + exit ;; + parisc64:Linux:*:* | hppa64:Linux:*:*) + echo hppa64-unknown-linux-gnu + exit ;; + s390:Linux:*:* | s390x:Linux:*:*) + echo ${UNAME_MACHINE}-ibm-linux + exit ;; + sh64*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + sh*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + sparc:Linux:*:* | sparc64:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + vax:Linux:*:*) + echo ${UNAME_MACHINE}-dec-linux-gnu + exit ;; + x86_64:Linux:*:*) + echo x86_64-unknown-linux-gnu + exit ;; + i*86:Linux:*:*) + # The BFD linker knows what the default object file format is, so + # first see if it will tell us. cd to the root directory to prevent + # problems with other programs or directories called `ld' in the path. + # Set LC_ALL=C to ensure ld outputs messages in English. + ld_supported_targets=`cd /; LC_ALL=C ld --help 2>&1 \ + | sed -ne '/supported targets:/!d + s/[ ][ ]*/ /g + s/.*supported targets: *// + s/ .*// + p'` + case "$ld_supported_targets" in + elf32-i386) + TENTATIVE="${UNAME_MACHINE}-pc-linux-gnu" + ;; + a.out-i386-linux) + echo "${UNAME_MACHINE}-pc-linux-gnuaout" + exit ;; + coff-i386) + echo "${UNAME_MACHINE}-pc-linux-gnucoff" + exit ;; + "") + # Either a pre-BFD a.out linker (linux-gnuoldld) or + # one that does not give us useful --help. + echo "${UNAME_MACHINE}-pc-linux-gnuoldld" + exit ;; + esac + # Determine whether the default compiler is a.out or elf + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #include + #ifdef __ELF__ + # ifdef __GLIBC__ + # if __GLIBC__ >= 2 + LIBC=gnu + # else + LIBC=gnulibc1 + # endif + # else + LIBC=gnulibc1 + # endif + #else + #if defined(__INTEL_COMPILER) || defined(__PGI) + LIBC=gnu + #else + LIBC=gnuaout + #endif + #endif + #ifdef __dietlibc__ + LIBC=dietlibc + #endif +EOF + eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n '/^LIBC/{s: ::g;p;}'`" + test x"${LIBC}" != x && { + echo "${UNAME_MACHINE}-pc-linux-${LIBC}" + exit + } + test x"${TENTATIVE}" != x && { echo "${TENTATIVE}"; exit; } + ;; + i*86:DYNIX/ptx:4*:*) + # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. + # earlier versions are messed up and put the nodename in both + # sysname and nodename. + echo i386-sequent-sysv4 + exit ;; + i*86:UNIX_SV:4.2MP:2.*) + # Unixware is an offshoot of SVR4, but it has its own version + # number series starting with 2... + # I am not positive that other SVR4 systems won't match this, + # I just have to hope. -- rms. + # Use sysv4.2uw... so that sysv4* matches it. + echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION} + exit ;; + i*86:OS/2:*:*) + # If we were able to find `uname', then EMX Unix compatibility + # is probably installed. + echo ${UNAME_MACHINE}-pc-os2-emx + exit ;; + i*86:XTS-300:*:STOP) + echo ${UNAME_MACHINE}-unknown-stop + exit ;; + i*86:atheos:*:*) + echo ${UNAME_MACHINE}-unknown-atheos + exit ;; + i*86:syllable:*:*) + echo ${UNAME_MACHINE}-pc-syllable + exit ;; + i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.0*:*) + echo i386-unknown-lynxos${UNAME_RELEASE} + exit ;; + i*86:*DOS:*:*) + echo ${UNAME_MACHINE}-pc-msdosdjgpp + exit ;; + i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*) + UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'` + if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then + echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL} + else + echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL} + fi + exit ;; + i*86:*:5:[678]*) + # UnixWare 7.x, OpenUNIX and OpenServer 6. + case `/bin/uname -X | grep "^Machine"` in + *486*) UNAME_MACHINE=i486 ;; + *Pentium) UNAME_MACHINE=i586 ;; + *Pent*|*Celeron) UNAME_MACHINE=i686 ;; + esac + echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION} + exit ;; + i*86:*:3.2:*) + if test -f /usr/options/cb.name; then + UNAME_REL=`sed -n 's/.*Version //p' /dev/null >/dev/null ; then + UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')` + (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486 + (/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \ + && UNAME_MACHINE=i586 + (/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \ + && UNAME_MACHINE=i686 + (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \ + && UNAME_MACHINE=i686 + echo ${UNAME_MACHINE}-pc-sco$UNAME_REL + else + echo ${UNAME_MACHINE}-pc-sysv32 + fi + exit ;; + pc:*:*:*) + # Left here for compatibility: + # uname -m prints for DJGPP always 'pc', but it prints nothing about + # the processor, so we play safe by assuming i386. + echo i386-pc-msdosdjgpp + exit ;; + Intel:Mach:3*:*) + echo i386-pc-mach3 + exit ;; + paragon:*:*:*) + echo i860-intel-osf1 + exit ;; + i860:*:4.*:*) # i860-SVR4 + if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then + echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4 + else # Add other i860-SVR4 vendors below as they are discovered. + echo i860-unknown-sysv${UNAME_RELEASE} # Unknown i860-SVR4 + fi + exit ;; + mini*:CTIX:SYS*5:*) + # "miniframe" + echo m68010-convergent-sysv + exit ;; + mc68k:UNIX:SYSTEM5:3.51m) + echo m68k-convergent-sysv + exit ;; + M680?0:D-NIX:5.3:*) + echo m68k-diab-dnix + exit ;; + M68*:*:R3V[5678]*:*) + test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;; + 3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0) + OS_REL='' + test -r /etc/.relid \ + && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` + /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ + && { echo i486-ncr-sysv4.3${OS_REL}; exit; } + /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ + && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; + 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*) + /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ + && { echo i486-ncr-sysv4; exit; } ;; + m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*) + echo m68k-unknown-lynxos${UNAME_RELEASE} + exit ;; + mc68030:UNIX_System_V:4.*:*) + echo m68k-atari-sysv4 + exit ;; + TSUNAMI:LynxOS:2.*:*) + echo sparc-unknown-lynxos${UNAME_RELEASE} + exit ;; + rs6000:LynxOS:2.*:*) + echo rs6000-unknown-lynxos${UNAME_RELEASE} + exit ;; + PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.0*:*) + echo powerpc-unknown-lynxos${UNAME_RELEASE} + exit ;; + SM[BE]S:UNIX_SV:*:*) + echo mips-dde-sysv${UNAME_RELEASE} + exit ;; + RM*:ReliantUNIX-*:*:*) + echo mips-sni-sysv4 + exit ;; + RM*:SINIX-*:*:*) + echo mips-sni-sysv4 + exit ;; + *:SINIX-*:*:*) + if uname -p 2>/dev/null >/dev/null ; then + UNAME_MACHINE=`(uname -p) 2>/dev/null` + echo ${UNAME_MACHINE}-sni-sysv4 + else + echo ns32k-sni-sysv + fi + exit ;; + PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort + # says + echo i586-unisys-sysv4 + exit ;; + *:UNIX_System_V:4*:FTX*) + # From Gerald Hewes . + # How about differentiating between stratus architectures? -djm + echo hppa1.1-stratus-sysv4 + exit ;; + *:*:*:FTX*) + # From seanf@swdc.stratus.com. + echo i860-stratus-sysv4 + exit ;; + i*86:VOS:*:*) + # From Paul.Green@stratus.com. + echo ${UNAME_MACHINE}-stratus-vos + exit ;; + *:VOS:*:*) + # From Paul.Green@stratus.com. + echo hppa1.1-stratus-vos + exit ;; + mc68*:A/UX:*:*) + echo m68k-apple-aux${UNAME_RELEASE} + exit ;; + news*:NEWS-OS:6*:*) + echo mips-sony-newsos6 + exit ;; + R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*) + if [ -d /usr/nec ]; then + echo mips-nec-sysv${UNAME_RELEASE} + else + echo mips-unknown-sysv${UNAME_RELEASE} + fi + exit ;; + BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only. + echo powerpc-be-beos + exit ;; + BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only. + echo powerpc-apple-beos + exit ;; + BePC:BeOS:*:*) # BeOS running on Intel PC compatible. + echo i586-pc-beos + exit ;; + SX-4:SUPER-UX:*:*) + echo sx4-nec-superux${UNAME_RELEASE} + exit ;; + SX-5:SUPER-UX:*:*) + echo sx5-nec-superux${UNAME_RELEASE} + exit ;; + SX-6:SUPER-UX:*:*) + echo sx6-nec-superux${UNAME_RELEASE} + exit ;; + Power*:Rhapsody:*:*) + echo powerpc-apple-rhapsody${UNAME_RELEASE} + exit ;; + *:Rhapsody:*:*) + echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE} + exit ;; + *:Darwin:*:*) + UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown + case $UNAME_PROCESSOR in + unknown) UNAME_PROCESSOR=powerpc ;; + esac + echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE} + exit ;; + *:procnto*:*:* | *:QNX:[0123456789]*:*) + UNAME_PROCESSOR=`uname -p` + if test "$UNAME_PROCESSOR" = "x86"; then + UNAME_PROCESSOR=i386 + UNAME_MACHINE=pc + fi + echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE} + exit ;; + *:QNX:*:4*) + echo i386-pc-qnx + exit ;; + NSE-?:NONSTOP_KERNEL:*:*) + echo nse-tandem-nsk${UNAME_RELEASE} + exit ;; + NSR-?:NONSTOP_KERNEL:*:*) + echo nsr-tandem-nsk${UNAME_RELEASE} + exit ;; + *:NonStop-UX:*:*) + echo mips-compaq-nonstopux + exit ;; + BS2000:POSIX*:*:*) + echo bs2000-siemens-sysv + exit ;; + DS/*:UNIX_System_V:*:*) + echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE} + exit ;; + *:Plan9:*:*) + # "uname -m" is not consistent, so use $cputype instead. 386 + # is converted to i386 for consistency with other x86 + # operating systems. + if test "$cputype" = "386"; then + UNAME_MACHINE=i386 + else + UNAME_MACHINE="$cputype" + fi + echo ${UNAME_MACHINE}-unknown-plan9 + exit ;; + *:TOPS-10:*:*) + echo pdp10-unknown-tops10 + exit ;; + *:TENEX:*:*) + echo pdp10-unknown-tenex + exit ;; + KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*) + echo pdp10-dec-tops20 + exit ;; + XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*) + echo pdp10-xkl-tops20 + exit ;; + *:TOPS-20:*:*) + echo pdp10-unknown-tops20 + exit ;; + *:ITS:*:*) + echo pdp10-unknown-its + exit ;; + SEI:*:*:SEIUX) + echo mips-sei-seiux${UNAME_RELEASE} + exit ;; + *:DragonFly:*:*) + echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` + exit ;; + *:*VMS:*:*) + UNAME_MACHINE=`(uname -p) 2>/dev/null` + case "${UNAME_MACHINE}" in + A*) echo alpha-dec-vms ; exit ;; + I*) echo ia64-dec-vms ; exit ;; + V*) echo vax-dec-vms ; exit ;; + esac ;; + *:XENIX:*:SysV) + echo i386-pc-xenix + exit ;; + i*86:skyos:*:*) + echo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE}` | sed -e 's/ .*$//' + exit ;; + i*86:rdos:*:*) + echo ${UNAME_MACHINE}-pc-rdos + exit ;; +esac + +#echo '(No uname command or uname output not recognized.)' 1>&2 +#echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2 + +eval $set_cc_for_build +cat >$dummy.c < +# include +#endif +main () +{ +#if defined (sony) +#if defined (MIPSEB) + /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed, + I don't know.... */ + printf ("mips-sony-bsd\n"); exit (0); +#else +#include + printf ("m68k-sony-newsos%s\n", +#ifdef NEWSOS4 + "4" +#else + "" +#endif + ); exit (0); +#endif +#endif + +#if defined (__arm) && defined (__acorn) && defined (__unix) + printf ("arm-acorn-riscix\n"); exit (0); +#endif + +#if defined (hp300) && !defined (hpux) + printf ("m68k-hp-bsd\n"); exit (0); +#endif + +#if defined (NeXT) +#if !defined (__ARCHITECTURE__) +#define __ARCHITECTURE__ "m68k" +#endif + int version; + version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`; + if (version < 4) + printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version); + else + printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version); + exit (0); +#endif + +#if defined (MULTIMAX) || defined (n16) +#if defined (UMAXV) + printf ("ns32k-encore-sysv\n"); exit (0); +#else +#if defined (CMU) + printf ("ns32k-encore-mach\n"); exit (0); +#else + printf ("ns32k-encore-bsd\n"); exit (0); +#endif +#endif +#endif + +#if defined (__386BSD__) + printf ("i386-pc-bsd\n"); exit (0); +#endif + +#if defined (sequent) +#if defined (i386) + printf ("i386-sequent-dynix\n"); exit (0); +#endif +#if defined (ns32000) + printf ("ns32k-sequent-dynix\n"); exit (0); +#endif +#endif + +#if defined (_SEQUENT_) + struct utsname un; + + uname(&un); + + if (strncmp(un.version, "V2", 2) == 0) { + printf ("i386-sequent-ptx2\n"); exit (0); + } + if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */ + printf ("i386-sequent-ptx1\n"); exit (0); + } + printf ("i386-sequent-ptx\n"); exit (0); + +#endif + +#if defined (vax) +# if !defined (ultrix) +# include +# if defined (BSD) +# if BSD == 43 + printf ("vax-dec-bsd4.3\n"); exit (0); +# else +# if BSD == 199006 + printf ("vax-dec-bsd4.3reno\n"); exit (0); +# else + printf ("vax-dec-bsd\n"); exit (0); +# endif +# endif +# else + printf ("vax-dec-bsd\n"); exit (0); +# endif +# else + printf ("vax-dec-ultrix\n"); exit (0); +# endif +#endif + +#if defined (alliant) && defined (i860) + printf ("i860-alliant-bsd\n"); exit (0); +#endif + + exit (1); +} +EOF + +$CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null && SYSTEM_NAME=`$dummy` && + { echo "$SYSTEM_NAME"; exit; } + +# Apollos put the system type in the environment. + +test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit; } + +# Convex versions that predate uname can use getsysinfo(1) + +if [ -x /usr/convex/getsysinfo ] +then + case `getsysinfo -f cpu_type` in + c1*) + echo c1-convex-bsd + exit ;; + c2*) + if getsysinfo -f scalar_acc + then echo c32-convex-bsd + else echo c2-convex-bsd + fi + exit ;; + c34*) + echo c34-convex-bsd + exit ;; + c38*) + echo c38-convex-bsd + exit ;; + c4*) + echo c4-convex-bsd + exit ;; + esac +fi + +cat >&2 < in order to provide the needed +information to handle your system. + +config.guess timestamp = $timestamp + +uname -m = `(uname -m) 2>/dev/null || echo unknown` +uname -r = `(uname -r) 2>/dev/null || echo unknown` +uname -s = `(uname -s) 2>/dev/null || echo unknown` +uname -v = `(uname -v) 2>/dev/null || echo unknown` + +/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null` +/bin/uname -X = `(/bin/uname -X) 2>/dev/null` + +hostinfo = `(hostinfo) 2>/dev/null` +/bin/universe = `(/bin/universe) 2>/dev/null` +/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null` +/bin/arch = `(/bin/arch) 2>/dev/null` +/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null` +/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null` + +UNAME_MACHINE = ${UNAME_MACHINE} +UNAME_RELEASE = ${UNAME_RELEASE} +UNAME_SYSTEM = ${UNAME_SYSTEM} +UNAME_VERSION = ${UNAME_VERSION} +EOF + +exit 1 + +# Local variables: +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "timestamp='" +# time-stamp-format: "%:y-%02m-%02d" +# time-stamp-end: "'" +# End: diff --git a/config.sub b/config.sub new file mode 100755 index 0000000..a4e8a94 --- /dev/null +++ b/config.sub @@ -0,0 +1,1606 @@ +#! /bin/sh +# Configuration validation subroutine script. +# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, +# 2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc. + +timestamp='2006-01-02' + +# This file is (in principle) common to ALL GNU software. +# The presence of a machine in this file suggests that SOME GNU software +# can handle that machine. It does not imply ALL GNU software can. +# +# This file 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, Inc., 51 Franklin Street - Fifth Floor, Boston, MA +# 02110-1301, USA. +# +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + + +# Please send patches to . Submit a context +# diff and a properly formatted ChangeLog entry. +# +# Configuration subroutine to validate and canonicalize a configuration type. +# Supply the specified configuration type as an argument. +# If it is invalid, we print an error message on stderr and exit with code 1. +# Otherwise, we print the canonical config type on stdout and succeed. + +# This file is supposed to be the same for all GNU packages +# and recognize all the CPU types, system types and aliases +# that are meaningful with *any* GNU software. +# Each package is responsible for reporting which valid configurations +# it does not support. The user should be able to distinguish +# a failure to support a valid configuration from a meaningless +# configuration. + +# The goal of this file is to map all the various variations of a given +# machine specification into a single specification in the form: +# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM +# or in some cases, the newer four-part form: +# CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM +# It is wrong to echo any other type of specification. + +me=`echo "$0" | sed -e 's,.*/,,'` + +usage="\ +Usage: $0 [OPTION] CPU-MFR-OPSYS + $0 [OPTION] ALIAS + +Canonicalize a configuration name. + +Operation modes: + -h, --help print this help, then exit + -t, --time-stamp print date of last modification, then exit + -v, --version print version number, then exit + +Report bugs and patches to ." + +version="\ +GNU config.sub ($timestamp) + +Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005 +Free Software Foundation, Inc. + +This is free software; see the source for copying conditions. There is NO +warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." + +help=" +Try \`$me --help' for more information." + +# Parse command line +while test $# -gt 0 ; do + case $1 in + --time-stamp | --time* | -t ) + echo "$timestamp" ; exit ;; + --version | -v ) + echo "$version" ; exit ;; + --help | --h* | -h ) + echo "$usage"; exit ;; + -- ) # Stop option processing + shift; break ;; + - ) # Use stdin as input. + break ;; + -* ) + echo "$me: invalid option $1$help" + exit 1 ;; + + *local*) + # First pass through any local machine types. + echo $1 + exit ;; + + * ) + break ;; + esac +done + +case $# in + 0) echo "$me: missing argument$help" >&2 + exit 1;; + 1) ;; + *) echo "$me: too many arguments$help" >&2 + exit 1;; +esac + +# Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any). +# Here we must recognize all the valid KERNEL-OS combinations. +maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'` +case $maybe_os in + nto-qnx* | linux-gnu* | linux-dietlibc | linux-newlib* | linux-uclibc* | \ + uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* | \ + storm-chaos* | os2-emx* | rtmk-nova*) + os=-$maybe_os + basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'` + ;; + *) + basic_machine=`echo $1 | sed 's/-[^-]*$//'` + if [ $basic_machine != $1 ] + then os=`echo $1 | sed 's/.*-/-/'` + else os=; fi + ;; +esac + +### Let's recognize common machines as not being operating systems so +### that things like config.sub decstation-3100 work. We also +### recognize some manufacturers as not being operating systems, so we +### can provide default operating systems below. +case $os in + -sun*os*) + # Prevent following clause from handling this invalid input. + ;; + -dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \ + -att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \ + -unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \ + -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\ + -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \ + -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \ + -apple | -axis | -knuth | -cray) + os= + basic_machine=$1 + ;; + -sim | -cisco | -oki | -wec | -winbond) + os= + basic_machine=$1 + ;; + -scout) + ;; + -wrs) + os=-vxworks + basic_machine=$1 + ;; + -chorusos*) + os=-chorusos + basic_machine=$1 + ;; + -chorusrdb) + os=-chorusrdb + basic_machine=$1 + ;; + -hiux*) + os=-hiuxwe2 + ;; + -sco6) + os=-sco5v6 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco5) + os=-sco3.2v5 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco4) + os=-sco3.2v4 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco3.2.[4-9]*) + os=`echo $os | sed -e 's/sco3.2./sco3.2v/'` + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco3.2v[4-9]*) + # Don't forget version if it is 3.2v4 or newer. + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco5v6*) + # Don't forget version if it is 3.2v4 or newer. + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco*) + os=-sco3.2v2 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -udk*) + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -isc) + os=-isc2.2 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -clix*) + basic_machine=clipper-intergraph + ;; + -isc*) + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -lynx*) + os=-lynxos + ;; + -ptx*) + basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'` + ;; + -windowsnt*) + os=`echo $os | sed -e 's/windowsnt/winnt/'` + ;; + -psos*) + os=-psos + ;; + -mint | -mint[0-9]*) + basic_machine=m68k-atari + os=-mint + ;; +esac + +# Decode aliases for certain CPU-COMPANY combinations. +case $basic_machine in + # Recognize the basic CPU types without company name. + # Some are omitted here because they have special meanings below. + 1750a | 580 \ + | a29k \ + | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \ + | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \ + | am33_2.0 \ + | arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr \ + | bfin \ + | c4x | clipper \ + | d10v | d30v | dlx | dsp16xx \ + | fr30 | frv \ + | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ + | i370 | i860 | i960 | ia64 \ + | ip2k | iq2000 \ + | m32r | m32rle | m68000 | m68k | m88k | maxq | mb | microblaze | mcore \ + | mips | mipsbe | mipseb | mipsel | mipsle \ + | mips16 \ + | mips64 | mips64el \ + | mips64vr | mips64vrel \ + | mips64orion | mips64orionel \ + | mips64vr4100 | mips64vr4100el \ + | mips64vr4300 | mips64vr4300el \ + | mips64vr5000 | mips64vr5000el \ + | mips64vr5900 | mips64vr5900el \ + | mipsisa32 | mipsisa32el \ + | mipsisa32r2 | mipsisa32r2el \ + | mipsisa64 | mipsisa64el \ + | mipsisa64r2 | mipsisa64r2el \ + | mipsisa64sb1 | mipsisa64sb1el \ + | mipsisa64sr71k | mipsisa64sr71kel \ + | mipstx39 | mipstx39el \ + | mn10200 | mn10300 \ + | mt \ + | msp430 \ + | ns16k | ns32k \ + | or32 \ + | pdp10 | pdp11 | pj | pjl \ + | powerpc | powerpc64 | powerpc64le | powerpcle | ppcbe \ + | pyramid \ + | sh | sh[1234] | sh[24]a | sh[23]e | sh[34]eb | shbe | shle | sh[1234]le | sh3ele \ + | sh64 | sh64le \ + | sparc | sparc64 | sparc64b | sparc86x | sparclet | sparclite \ + | sparcv8 | sparcv9 | sparcv9b \ + | strongarm \ + | tahoe | thumb | tic4x | tic80 | tron \ + | v850 | v850e \ + | we32k \ + | x86 | xscale | xscalee[bl] | xstormy16 | xtensa \ + | z8k) + basic_machine=$basic_machine-unknown + ;; + m32c) + basic_machine=$basic_machine-unknown + ;; + m6811 | m68hc11 | m6812 | m68hc12) + # Motorola 68HC11/12. + basic_machine=$basic_machine-unknown + os=-none + ;; + m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k) + ;; + ms1) + basic_machine=mt-unknown + ;; + + # We use `pc' rather than `unknown' + # because (1) that's what they normally are, and + # (2) the word "unknown" tends to confuse beginning users. + i*86 | x86_64) + basic_machine=$basic_machine-pc + ;; + # Object if more than one company name word. + *-*-*) + echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 + exit 1 + ;; + # Recognize the basic CPU types with company name. + 580-* \ + | a29k-* \ + | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \ + | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \ + | alphapca5[67]-* | alpha64pca5[67]-* | arc-* \ + | arm-* | armbe-* | armle-* | armeb-* | armv*-* \ + | avr-* \ + | bfin-* | bs2000-* \ + | c[123]* | c30-* | [cjt]90-* | c4x-* | c54x-* | c55x-* | c6x-* \ + | clipper-* | craynv-* | cydra-* \ + | d10v-* | d30v-* | dlx-* \ + | elxsi-* \ + | f30[01]-* | f700-* | fr30-* | frv-* | fx80-* \ + | h8300-* | h8500-* \ + | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \ + | i*86-* | i860-* | i960-* | ia64-* \ + | ip2k-* | iq2000-* \ + | m32r-* | m32rle-* \ + | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \ + | m88110-* | m88k-* | maxq-* | mcore-* \ + | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \ + | mips16-* \ + | mips64-* | mips64el-* \ + | mips64vr-* | mips64vrel-* \ + | mips64orion-* | mips64orionel-* \ + | mips64vr4100-* | mips64vr4100el-* \ + | mips64vr4300-* | mips64vr4300el-* \ + | mips64vr5000-* | mips64vr5000el-* \ + | mips64vr5900-* | mips64vr5900el-* \ + | mipsisa32-* | mipsisa32el-* \ + | mipsisa32r2-* | mipsisa32r2el-* \ + | mipsisa64-* | mipsisa64el-* \ + | mipsisa64r2-* | mipsisa64r2el-* \ + | mipsisa64sb1-* | mipsisa64sb1el-* \ + | mipsisa64sr71k-* | mipsisa64sr71kel-* \ + | mipstx39-* | mipstx39el-* \ + | mmix-* \ + | mt-* \ + | msp430-* \ + | none-* | np1-* | ns16k-* | ns32k-* \ + | orion-* \ + | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \ + | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | ppcbe-* \ + | pyramid-* \ + | romp-* | rs6000-* \ + | sh-* | sh[1234]-* | sh[24]a-* | sh[23]e-* | sh[34]eb-* | shbe-* \ + | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \ + | sparc-* | sparc64-* | sparc64b-* | sparc86x-* | sparclet-* \ + | sparclite-* \ + | sparcv8-* | sparcv9-* | sparcv9b-* | strongarm-* | sv1-* | sx?-* \ + | tahoe-* | thumb-* \ + | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \ + | tron-* \ + | v850-* | v850e-* | vax-* \ + | we32k-* \ + | x86-* | x86_64-* | xps100-* | xscale-* | xscalee[bl]-* \ + | xstormy16-* | xtensa-* \ + | ymp-* \ + | z8k-*) + ;; + m32c-*) + ;; + # Recognize the various machine names and aliases which stand + # for a CPU type and a company and sometimes even an OS. + 386bsd) + basic_machine=i386-unknown + os=-bsd + ;; + 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc) + basic_machine=m68000-att + ;; + 3b*) + basic_machine=we32k-att + ;; + a29khif) + basic_machine=a29k-amd + os=-udi + ;; + abacus) + basic_machine=abacus-unknown + ;; + adobe68k) + basic_machine=m68010-adobe + os=-scout + ;; + alliant | fx80) + basic_machine=fx80-alliant + ;; + altos | altos3068) + basic_machine=m68k-altos + ;; + am29k) + basic_machine=a29k-none + os=-bsd + ;; + amd64) + basic_machine=x86_64-pc + ;; + amd64-*) + basic_machine=x86_64-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + amdahl) + basic_machine=580-amdahl + os=-sysv + ;; + amiga | amiga-*) + basic_machine=m68k-unknown + ;; + amigaos | amigados) + basic_machine=m68k-unknown + os=-amigaos + ;; + amigaunix | amix) + basic_machine=m68k-unknown + os=-sysv4 + ;; + apollo68) + basic_machine=m68k-apollo + os=-sysv + ;; + apollo68bsd) + basic_machine=m68k-apollo + os=-bsd + ;; + aux) + basic_machine=m68k-apple + os=-aux + ;; + balance) + basic_machine=ns32k-sequent + os=-dynix + ;; + c90) + basic_machine=c90-cray + os=-unicos + ;; + convex-c1) + basic_machine=c1-convex + os=-bsd + ;; + convex-c2) + basic_machine=c2-convex + os=-bsd + ;; + convex-c32) + basic_machine=c32-convex + os=-bsd + ;; + convex-c34) + basic_machine=c34-convex + os=-bsd + ;; + convex-c38) + basic_machine=c38-convex + os=-bsd + ;; + cray | j90) + basic_machine=j90-cray + os=-unicos + ;; + craynv) + basic_machine=craynv-cray + os=-unicosmp + ;; + cr16c) + basic_machine=cr16c-unknown + os=-elf + ;; + crds | unos) + basic_machine=m68k-crds + ;; + crisv32 | crisv32-* | etraxfs*) + basic_machine=crisv32-axis + ;; + cris | cris-* | etrax*) + basic_machine=cris-axis + ;; + crx) + basic_machine=crx-unknown + os=-elf + ;; + da30 | da30-*) + basic_machine=m68k-da30 + ;; + decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn) + basic_machine=mips-dec + ;; + decsystem10* | dec10*) + basic_machine=pdp10-dec + os=-tops10 + ;; + decsystem20* | dec20*) + basic_machine=pdp10-dec + os=-tops20 + ;; + delta | 3300 | motorola-3300 | motorola-delta \ + | 3300-motorola | delta-motorola) + basic_machine=m68k-motorola + ;; + delta88) + basic_machine=m88k-motorola + os=-sysv3 + ;; + djgpp) + basic_machine=i586-pc + os=-msdosdjgpp + ;; + dpx20 | dpx20-*) + basic_machine=rs6000-bull + os=-bosx + ;; + dpx2* | dpx2*-bull) + basic_machine=m68k-bull + os=-sysv3 + ;; + ebmon29k) + basic_machine=a29k-amd + os=-ebmon + ;; + elxsi) + basic_machine=elxsi-elxsi + os=-bsd + ;; + encore | umax | mmax) + basic_machine=ns32k-encore + ;; + es1800 | OSE68k | ose68k | ose | OSE) + basic_machine=m68k-ericsson + os=-ose + ;; + fx2800) + basic_machine=i860-alliant + ;; + genix) + basic_machine=ns32k-ns + ;; + gmicro) + basic_machine=tron-gmicro + os=-sysv + ;; + go32) + basic_machine=i386-pc + os=-go32 + ;; + h3050r* | hiux*) + basic_machine=hppa1.1-hitachi + os=-hiuxwe2 + ;; + h8300hms) + basic_machine=h8300-hitachi + os=-hms + ;; + h8300xray) + basic_machine=h8300-hitachi + os=-xray + ;; + h8500hms) + basic_machine=h8500-hitachi + os=-hms + ;; + harris) + basic_machine=m88k-harris + os=-sysv3 + ;; + hp300-*) + basic_machine=m68k-hp + ;; + hp300bsd) + basic_machine=m68k-hp + os=-bsd + ;; + hp300hpux) + basic_machine=m68k-hp + os=-hpux + ;; + hp3k9[0-9][0-9] | hp9[0-9][0-9]) + basic_machine=hppa1.0-hp + ;; + hp9k2[0-9][0-9] | hp9k31[0-9]) + basic_machine=m68000-hp + ;; + hp9k3[2-9][0-9]) + basic_machine=m68k-hp + ;; + hp9k6[0-9][0-9] | hp6[0-9][0-9]) + basic_machine=hppa1.0-hp + ;; + hp9k7[0-79][0-9] | hp7[0-79][0-9]) + basic_machine=hppa1.1-hp + ;; + hp9k78[0-9] | hp78[0-9]) + # FIXME: really hppa2.0-hp + basic_machine=hppa1.1-hp + ;; + hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893) + # FIXME: really hppa2.0-hp + basic_machine=hppa1.1-hp + ;; + hp9k8[0-9][13679] | hp8[0-9][13679]) + basic_machine=hppa1.1-hp + ;; + hp9k8[0-9][0-9] | hp8[0-9][0-9]) + basic_machine=hppa1.0-hp + ;; + hppa-next) + os=-nextstep3 + ;; + hppaosf) + basic_machine=hppa1.1-hp + os=-osf + ;; + hppro) + basic_machine=hppa1.1-hp + os=-proelf + ;; + i370-ibm* | ibm*) + basic_machine=i370-ibm + ;; +# I'm not sure what "Sysv32" means. Should this be sysv3.2? + i*86v32) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-sysv32 + ;; + i*86v4*) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-sysv4 + ;; + i*86v) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-sysv + ;; + i*86sol2) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-solaris2 + ;; + i386mach) + basic_machine=i386-mach + os=-mach + ;; + i386-vsta | vsta) + basic_machine=i386-unknown + os=-vsta + ;; + iris | iris4d) + basic_machine=mips-sgi + case $os in + -irix*) + ;; + *) + os=-irix4 + ;; + esac + ;; + isi68 | isi) + basic_machine=m68k-isi + os=-sysv + ;; + m88k-omron*) + basic_machine=m88k-omron + ;; + magnum | m3230) + basic_machine=mips-mips + os=-sysv + ;; + merlin) + basic_machine=ns32k-utek + os=-sysv + ;; + mingw32) + basic_machine=i386-pc + os=-mingw32 + ;; + miniframe) + basic_machine=m68000-convergent + ;; + *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*) + basic_machine=m68k-atari + os=-mint + ;; + mips3*-*) + basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'` + ;; + mips3*) + basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown + ;; + monitor) + basic_machine=m68k-rom68k + os=-coff + ;; + morphos) + basic_machine=powerpc-unknown + os=-morphos + ;; + msdos) + basic_machine=i386-pc + os=-msdos + ;; + ms1-*) + basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'` + ;; + mvs) + basic_machine=i370-ibm + os=-mvs + ;; + ncr3000) + basic_machine=i486-ncr + os=-sysv4 + ;; + netbsd386) + basic_machine=i386-unknown + os=-netbsd + ;; + netwinder) + basic_machine=armv4l-rebel + os=-linux + ;; + news | news700 | news800 | news900) + basic_machine=m68k-sony + os=-newsos + ;; + news1000) + basic_machine=m68030-sony + os=-newsos + ;; + news-3600 | risc-news) + basic_machine=mips-sony + os=-newsos + ;; + necv70) + basic_machine=v70-nec + os=-sysv + ;; + next | m*-next ) + basic_machine=m68k-next + case $os in + -nextstep* ) + ;; + -ns2*) + os=-nextstep2 + ;; + *) + os=-nextstep3 + ;; + esac + ;; + nh3000) + basic_machine=m68k-harris + os=-cxux + ;; + nh[45]000) + basic_machine=m88k-harris + os=-cxux + ;; + nindy960) + basic_machine=i960-intel + os=-nindy + ;; + mon960) + basic_machine=i960-intel + os=-mon960 + ;; + nonstopux) + basic_machine=mips-compaq + os=-nonstopux + ;; + np1) + basic_machine=np1-gould + ;; + nsr-tandem) + basic_machine=nsr-tandem + ;; + op50n-* | op60c-*) + basic_machine=hppa1.1-oki + os=-proelf + ;; + openrisc | openrisc-*) + basic_machine=or32-unknown + ;; + os400) + basic_machine=powerpc-ibm + os=-os400 + ;; + OSE68000 | ose68000) + basic_machine=m68000-ericsson + os=-ose + ;; + os68k) + basic_machine=m68k-none + os=-os68k + ;; + pa-hitachi) + basic_machine=hppa1.1-hitachi + os=-hiuxwe2 + ;; + paragon) + basic_machine=i860-intel + os=-osf + ;; + pbd) + basic_machine=sparc-tti + ;; + pbb) + basic_machine=m68k-tti + ;; + pc532 | pc532-*) + basic_machine=ns32k-pc532 + ;; + pc98) + basic_machine=i386-pc + ;; + pc98-*) + basic_machine=i386-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pentium | p5 | k5 | k6 | nexgen | viac3) + basic_machine=i586-pc + ;; + pentiumpro | p6 | 6x86 | athlon | athlon_*) + basic_machine=i686-pc + ;; + pentiumii | pentium2 | pentiumiii | pentium3) + basic_machine=i686-pc + ;; + pentium4) + basic_machine=i786-pc + ;; + pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*) + basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pentiumpro-* | p6-* | 6x86-* | athlon-*) + basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*) + basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pentium4-*) + basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pn) + basic_machine=pn-gould + ;; + power) basic_machine=power-ibm + ;; + ppc) basic_machine=powerpc-unknown + ;; + ppc-*) basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + ppcle | powerpclittle | ppc-le | powerpc-little) + basic_machine=powerpcle-unknown + ;; + ppcle-* | powerpclittle-*) + basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + ppc64) basic_machine=powerpc64-unknown + ;; + ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + ppc64le | powerpc64little | ppc64-le | powerpc64-little) + basic_machine=powerpc64le-unknown + ;; + ppc64le-* | powerpc64little-*) + basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + ps2) + basic_machine=i386-ibm + ;; + pw32) + basic_machine=i586-unknown + os=-pw32 + ;; + rdos) + basic_machine=i386-pc + os=-rdos + ;; + rom68k) + basic_machine=m68k-rom68k + os=-coff + ;; + rm[46]00) + basic_machine=mips-siemens + ;; + rtpc | rtpc-*) + basic_machine=romp-ibm + ;; + s390 | s390-*) + basic_machine=s390-ibm + ;; + s390x | s390x-*) + basic_machine=s390x-ibm + ;; + sa29200) + basic_machine=a29k-amd + os=-udi + ;; + sb1) + basic_machine=mipsisa64sb1-unknown + ;; + sb1el) + basic_machine=mipsisa64sb1el-unknown + ;; + sei) + basic_machine=mips-sei + os=-seiux + ;; + sequent) + basic_machine=i386-sequent + ;; + sh) + basic_machine=sh-hitachi + os=-hms + ;; + sh64) + basic_machine=sh64-unknown + ;; + sparclite-wrs | simso-wrs) + basic_machine=sparclite-wrs + os=-vxworks + ;; + sps7) + basic_machine=m68k-bull + os=-sysv2 + ;; + spur) + basic_machine=spur-unknown + ;; + st2000) + basic_machine=m68k-tandem + ;; + stratus) + basic_machine=i860-stratus + os=-sysv4 + ;; + sun2) + basic_machine=m68000-sun + ;; + sun2os3) + basic_machine=m68000-sun + os=-sunos3 + ;; + sun2os4) + basic_machine=m68000-sun + os=-sunos4 + ;; + sun3os3) + basic_machine=m68k-sun + os=-sunos3 + ;; + sun3os4) + basic_machine=m68k-sun + os=-sunos4 + ;; + sun4os3) + basic_machine=sparc-sun + os=-sunos3 + ;; + sun4os4) + basic_machine=sparc-sun + os=-sunos4 + ;; + sun4sol2) + basic_machine=sparc-sun + os=-solaris2 + ;; + sun3 | sun3-*) + basic_machine=m68k-sun + ;; + sun4) + basic_machine=sparc-sun + ;; + sun386 | sun386i | roadrunner) + basic_machine=i386-sun + ;; + sv1) + basic_machine=sv1-cray + os=-unicos + ;; + symmetry) + basic_machine=i386-sequent + os=-dynix + ;; + t3e) + basic_machine=alphaev5-cray + os=-unicos + ;; + t90) + basic_machine=t90-cray + os=-unicos + ;; + tic54x | c54x*) + basic_machine=tic54x-unknown + os=-coff + ;; + tic55x | c55x*) + basic_machine=tic55x-unknown + os=-coff + ;; + tic6x | c6x*) + basic_machine=tic6x-unknown + os=-coff + ;; + tx39) + basic_machine=mipstx39-unknown + ;; + tx39el) + basic_machine=mipstx39el-unknown + ;; + toad1) + basic_machine=pdp10-xkl + os=-tops20 + ;; + tower | tower-32) + basic_machine=m68k-ncr + ;; + tpf) + basic_machine=s390x-ibm + os=-tpf + ;; + udi29k) + basic_machine=a29k-amd + os=-udi + ;; + ultra3) + basic_machine=a29k-nyu + os=-sym1 + ;; + v810 | necv810) + basic_machine=v810-nec + os=-none + ;; + vaxv) + basic_machine=vax-dec + os=-sysv + ;; + vms) + basic_machine=vax-dec + os=-vms + ;; + vpp*|vx|vx-*) + basic_machine=f301-fujitsu + ;; + vxworks960) + basic_machine=i960-wrs + os=-vxworks + ;; + vxworks68) + basic_machine=m68k-wrs + os=-vxworks + ;; + vxworks29k) + basic_machine=a29k-wrs + os=-vxworks + ;; + w65*) + basic_machine=w65-wdc + os=-none + ;; + w89k-*) + basic_machine=hppa1.1-winbond + os=-proelf + ;; + xbox) + basic_machine=i686-pc + os=-mingw32 + ;; + xps | xps100) + basic_machine=xps100-honeywell + ;; + ymp) + basic_machine=ymp-cray + os=-unicos + ;; + z8k-*-coff) + basic_machine=z8k-unknown + os=-sim + ;; + none) + basic_machine=none-none + os=-none + ;; + +# Here we handle the default manufacturer of certain CPU types. It is in +# some cases the only manufacturer, in others, it is the most popular. + w89k) + basic_machine=hppa1.1-winbond + ;; + op50n) + basic_machine=hppa1.1-oki + ;; + op60c) + basic_machine=hppa1.1-oki + ;; + romp) + basic_machine=romp-ibm + ;; + mmix) + basic_machine=mmix-knuth + ;; + rs6000) + basic_machine=rs6000-ibm + ;; + vax) + basic_machine=vax-dec + ;; + pdp10) + # there are many clones, so DEC is not a safe bet + basic_machine=pdp10-unknown + ;; + pdp11) + basic_machine=pdp11-dec + ;; + we32k) + basic_machine=we32k-att + ;; + sh[1234] | sh[24]a | sh[34]eb | sh[1234]le | sh[23]ele) + basic_machine=sh-unknown + ;; + sparc | sparcv8 | sparcv9 | sparcv9b) + basic_machine=sparc-sun + ;; + cydra) + basic_machine=cydra-cydrome + ;; + orion) + basic_machine=orion-highlevel + ;; + orion105) + basic_machine=clipper-highlevel + ;; + mac | mpw | mac-mpw) + basic_machine=m68k-apple + ;; + pmac | pmac-mpw) + basic_machine=powerpc-apple + ;; + *-unknown) + # Make sure to match an already-canonicalized machine name. + ;; + *) + echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 + exit 1 + ;; +esac + +# Here we canonicalize certain aliases for manufacturers. +case $basic_machine in + *-digital*) + basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'` + ;; + *-commodore*) + basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'` + ;; + *) + ;; +esac + +# Decode manufacturer-specific aliases for certain operating systems. + +if [ x"$os" != x"" ] +then +case $os in + # First match some system type aliases + # that might get confused with valid system types. + # -solaris* is a basic system type, with this one exception. + -solaris1 | -solaris1.*) + os=`echo $os | sed -e 's|solaris1|sunos4|'` + ;; + -solaris) + os=-solaris2 + ;; + -svr4*) + os=-sysv4 + ;; + -unixware*) + os=-sysv4.2uw + ;; + -gnu/linux*) + os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'` + ;; + # First accept the basic system types. + # The portable systems comes first. + # Each alternative MUST END IN A *, to match a version number. + # -sysv* is not here because it comes later, after sysvr4. + -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \ + | -*vms* | -sco* | -esix* | -isc* | -aix* | -sunos | -sunos[34]*\ + | -hpux* | -unos* | -osf* | -luna* | -dgux* | -solaris* | -sym* \ + | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \ + | -aos* \ + | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \ + | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \ + | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \ + | -openbsd* | -solidbsd* \ + | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \ + | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \ + | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \ + | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \ + | -chorusos* | -chorusrdb* \ + | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ + | -mingw32* | -linux-gnu* | -linux-newlib* | -linux-uclibc* \ + | -uxpv* | -beos* | -mpeix* | -udk* \ + | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \ + | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \ + | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \ + | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \ + | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \ + | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \ + | -skyos* | -haiku* | -rdos*) + # Remember, each alternative MUST END IN *, to match a version number. + ;; + -qnx*) + case $basic_machine in + x86-* | i*86-*) + ;; + *) + os=-nto$os + ;; + esac + ;; + -nto-qnx*) + ;; + -nto*) + os=`echo $os | sed -e 's|nto|nto-qnx|'` + ;; + -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \ + | -windows* | -osx | -abug | -netware* | -os9* | -beos* | -haiku* \ + | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*) + ;; + -mac*) + os=`echo $os | sed -e 's|mac|macos|'` + ;; + -linux-dietlibc) + os=-linux-dietlibc + ;; + -linux*) + os=`echo $os | sed -e 's|linux|linux-gnu|'` + ;; + -sunos5*) + os=`echo $os | sed -e 's|sunos5|solaris2|'` + ;; + -sunos6*) + os=`echo $os | sed -e 's|sunos6|solaris3|'` + ;; + -opened*) + os=-openedition + ;; + -os400*) + os=-os400 + ;; + -wince*) + os=-wince + ;; + -osfrose*) + os=-osfrose + ;; + -osf*) + os=-osf + ;; + -utek*) + os=-bsd + ;; + -dynix*) + os=-bsd + ;; + -acis*) + os=-aos + ;; + -atheos*) + os=-atheos + ;; + -syllable*) + os=-syllable + ;; + -386bsd) + os=-bsd + ;; + -ctix* | -uts*) + os=-sysv + ;; + -nova*) + os=-rtmk-nova + ;; + -ns2 ) + os=-nextstep2 + ;; + -nsk*) + os=-nsk + ;; + # Preserve the version number of sinix5. + -sinix5.*) + os=`echo $os | sed -e 's|sinix|sysv|'` + ;; + -sinix*) + os=-sysv4 + ;; + -tpf*) + os=-tpf + ;; + -triton*) + os=-sysv3 + ;; + -oss*) + os=-sysv3 + ;; + -svr4) + os=-sysv4 + ;; + -svr3) + os=-sysv3 + ;; + -sysvr4) + os=-sysv4 + ;; + # This must come after -sysvr4. + -sysv*) + ;; + -ose*) + os=-ose + ;; + -es1800*) + os=-ose + ;; + -xenix) + os=-xenix + ;; + -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) + os=-mint + ;; + -aros*) + os=-aros + ;; + -kaos*) + os=-kaos + ;; + -zvmoe) + os=-zvmoe + ;; + -none) + ;; + *) + # Get rid of the `-' at the beginning of $os. + os=`echo $os | sed 's/[^-]*-//'` + echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2 + exit 1 + ;; +esac +else + +# Here we handle the default operating systems that come with various machines. +# The value should be what the vendor currently ships out the door with their +# machine or put another way, the most popular os provided with the machine. + +# Note that if you're going to try to match "-MANUFACTURER" here (say, +# "-sun"), then you have to tell the case statement up towards the top +# that MANUFACTURER isn't an operating system. Otherwise, code above +# will signal an error saying that MANUFACTURER isn't an operating +# system, and we'll never get to this point. + +case $basic_machine in + *-acorn) + os=-riscix1.2 + ;; + arm*-rebel) + os=-linux + ;; + arm*-semi) + os=-aout + ;; + c4x-* | tic4x-*) + os=-coff + ;; + # This must come before the *-dec entry. + pdp10-*) + os=-tops20 + ;; + pdp11-*) + os=-none + ;; + *-dec | vax-*) + os=-ultrix4.2 + ;; + m68*-apollo) + os=-domain + ;; + i386-sun) + os=-sunos4.0.2 + ;; + m68000-sun) + os=-sunos3 + # This also exists in the configure program, but was not the + # default. + # os=-sunos4 + ;; + m68*-cisco) + os=-aout + ;; + mips*-cisco) + os=-elf + ;; + mips*-*) + os=-elf + ;; + or32-*) + os=-coff + ;; + *-tti) # must be before sparc entry or we get the wrong os. + os=-sysv3 + ;; + sparc-* | *-sun) + os=-sunos4.1.1 + ;; + *-be) + os=-beos + ;; + *-haiku) + os=-haiku + ;; + *-ibm) + os=-aix + ;; + *-knuth) + os=-mmixware + ;; + *-wec) + os=-proelf + ;; + *-winbond) + os=-proelf + ;; + *-oki) + os=-proelf + ;; + *-hp) + os=-hpux + ;; + *-hitachi) + os=-hiux + ;; + i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent) + os=-sysv + ;; + *-cbm) + os=-amigaos + ;; + *-dg) + os=-dgux + ;; + *-dolphin) + os=-sysv3 + ;; + m68k-ccur) + os=-rtu + ;; + m88k-omron*) + os=-luna + ;; + *-next ) + os=-nextstep + ;; + *-sequent) + os=-ptx + ;; + *-crds) + os=-unos + ;; + *-ns) + os=-genix + ;; + i370-*) + os=-mvs + ;; + *-next) + os=-nextstep3 + ;; + *-gould) + os=-sysv + ;; + *-highlevel) + os=-bsd + ;; + *-encore) + os=-bsd + ;; + *-sgi) + os=-irix + ;; + *-siemens) + os=-sysv4 + ;; + *-masscomp) + os=-rtu + ;; + f30[01]-fujitsu | f700-fujitsu) + os=-uxpv + ;; + *-rom68k) + os=-coff + ;; + *-*bug) + os=-coff + ;; + *-apple) + os=-macos + ;; + *-atari*) + os=-mint + ;; + *) + os=-none + ;; +esac +fi + +# Here we handle the case where we know the os, and the CPU type, but not the +# manufacturer. We pick the logical manufacturer. +vendor=unknown +case $basic_machine in + *-unknown) + case $os in + -riscix*) + vendor=acorn + ;; + -sunos*) + vendor=sun + ;; + -aix*) + vendor=ibm + ;; + -beos*) + vendor=be + ;; + -hpux*) + vendor=hp + ;; + -mpeix*) + vendor=hp + ;; + -hiux*) + vendor=hitachi + ;; + -unos*) + vendor=crds + ;; + -dgux*) + vendor=dg + ;; + -luna*) + vendor=omron + ;; + -genix*) + vendor=ns + ;; + -mvs* | -opened*) + vendor=ibm + ;; + -os400*) + vendor=ibm + ;; + -ptx*) + vendor=sequent + ;; + -tpf*) + vendor=ibm + ;; + -vxsim* | -vxworks* | -windiss*) + vendor=wrs + ;; + -aux*) + vendor=apple + ;; + -hms*) + vendor=hitachi + ;; + -mpw* | -macos*) + vendor=apple + ;; + -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) + vendor=atari + ;; + -vos*) + vendor=stratus + ;; + esac + basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"` + ;; +esac + +echo $basic_machine$os +exit + +# Local variables: +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "timestamp='" +# time-stamp-format: "%:y-%02m-%02d" +# time-stamp-end: "'" +# End: diff --git a/configure b/configure new file mode 100755 index 0000000..6b9795c --- /dev/null +++ b/configure @@ -0,0 +1,8076 @@ +#! /bin/sh +# Guess values for system-dependent variables and create Makefiles. +# Generated by GNU Autoconf 2.59 for nrpe 2.15. +# +# Report bugs to . +# +# Copyright (C) 2003 Free Software Foundation, Inc. +# This configure script is free software; the Free Software Foundation +# gives unlimited permission to copy, distribute and modify it. +## --------------------- ## +## M4sh Initialization. ## +## --------------------- ## + +# Be Bourne compatible +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then + emulate sh + NULLCMD=: + # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which + # is contrary to our usage. Disable this feature. + alias -g '${1+"$@"}'='"$@"' +elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then + set -o posix +fi +DUALCASE=1; export DUALCASE # for MKS sh + +# Support unset when possible. +if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then + as_unset=unset +else + as_unset=false +fi + + +# Work around bugs in pre-3.0 UWIN ksh. +$as_unset ENV MAIL MAILPATH +PS1='$ ' +PS2='> ' +PS4='+ ' + +# NLS nuisances. +for as_var in \ + LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \ + LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \ + LC_TELEPHONE LC_TIME +do + if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then + eval $as_var=C; export $as_var + else + $as_unset $as_var + fi +done + +# Required to use basename. +if expr a : '\(a\)' >/dev/null 2>&1; then + as_expr=expr +else + as_expr=false +fi + +if (basename /) >/dev/null 2>&1 && test "X`basename / 2>&1`" = "X/"; then + as_basename=basename +else + as_basename=false +fi + + +# Name of the executable. +as_me=`$as_basename "$0" || +$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ + X"$0" : 'X\(//\)$' \| \ + X"$0" : 'X\(/\)$' \| \ + . : '\(.\)' 2>/dev/null || +echo X/"$0" | + sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/; q; } + /^X\/\(\/\/\)$/{ s//\1/; q; } + /^X\/\(\/\).*/{ s//\1/; q; } + s/.*/./; q'` + + +# PATH needs CR, and LINENO needs CR and PATH. +# Avoid depending upon Character Ranges. +as_cr_letters='abcdefghijklmnopqrstuvwxyz' +as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' +as_cr_Letters=$as_cr_letters$as_cr_LETTERS +as_cr_digits='0123456789' +as_cr_alnum=$as_cr_Letters$as_cr_digits + +# The user is always right. +if test "${PATH_SEPARATOR+set}" != set; then + echo "#! /bin/sh" >conf$$.sh + echo "exit 0" >>conf$$.sh + chmod +x conf$$.sh + if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then + PATH_SEPARATOR=';' + else + PATH_SEPARATOR=: + fi + rm -f conf$$.sh +fi + + + as_lineno_1=$LINENO + as_lineno_2=$LINENO + as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` + test "x$as_lineno_1" != "x$as_lineno_2" && + test "x$as_lineno_3" = "x$as_lineno_2" || { + # Find who we are. Look in the path if we contain no path at all + # relative or not. + case $0 in + *[\\/]* ) as_myself=$0 ;; + *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break +done + + ;; + esac + # We did not find ourselves, most probably we were run as `sh COMMAND' + # in which case we are not to be found in the path. + if test "x$as_myself" = x; then + as_myself=$0 + fi + if test ! -f "$as_myself"; then + { echo "$as_me: error: cannot find myself; rerun with an absolute path" >&2 + { (exit 1); exit 1; }; } + fi + case $CONFIG_SHELL in + '') + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for as_base in sh bash ksh sh5; do + case $as_dir in + /*) + if ("$as_dir/$as_base" -c ' + as_lineno_1=$LINENO + as_lineno_2=$LINENO + as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` + test "x$as_lineno_1" != "x$as_lineno_2" && + test "x$as_lineno_3" = "x$as_lineno_2" ') 2>/dev/null; then + $as_unset BASH_ENV || test "${BASH_ENV+set}" != set || { BASH_ENV=; export BASH_ENV; } + $as_unset ENV || test "${ENV+set}" != set || { ENV=; export ENV; } + CONFIG_SHELL=$as_dir/$as_base + export CONFIG_SHELL + exec "$CONFIG_SHELL" "$0" ${1+"$@"} + fi;; + esac + done +done +;; + esac + + # Create $as_me.lineno as a copy of $as_myself, but with $LINENO + # uniformly replaced by the line number. The first 'sed' inserts a + # line-number line before each line; the second 'sed' does the real + # work. The second script uses 'N' to pair each line-number line + # with the numbered line, and appends trailing '-' during + # substitution so that $LINENO is not a special case at line end. + # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the + # second 'sed' script. Blame Lee E. McMahon for sed's syntax. :-) + sed '=' <$as_myself | + sed ' + N + s,$,-, + : loop + s,^\(['$as_cr_digits']*\)\(.*\)[$]LINENO\([^'$as_cr_alnum'_]\),\1\2\1\3, + t loop + s,-$,, + s,^['$as_cr_digits']*\n,, + ' >$as_me.lineno && + chmod +x $as_me.lineno || + { echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2 + { (exit 1); exit 1; }; } + + # Don't try to exec as it changes $[0], causing all sort of problems + # (the dirname of $[0] is not the place where we might find the + # original and so on. Autoconf is especially sensible to this). + . ./$as_me.lineno + # Exit status is that of the last command. + exit +} + + +case `echo "testing\c"; echo 1,2,3`,`echo -n testing; echo 1,2,3` in + *c*,-n*) ECHO_N= ECHO_C=' +' ECHO_T=' ' ;; + *c*,* ) ECHO_N=-n ECHO_C= ECHO_T= ;; + *) ECHO_N= ECHO_C='\c' ECHO_T= ;; +esac + +if expr a : '\(a\)' >/dev/null 2>&1; then + as_expr=expr +else + as_expr=false +fi + +rm -f conf$$ conf$$.exe conf$$.file +echo >conf$$.file +if ln -s conf$$.file conf$$ 2>/dev/null; then + # We could just check for DJGPP; but this test a) works b) is more generic + # and c) will remain valid once DJGPP supports symlinks (DJGPP 2.04). + if test -f conf$$.exe; then + # Don't use ln at all; we don't have any links + as_ln_s='cp -p' + else + as_ln_s='ln -s' + fi +elif ln conf$$.file conf$$ 2>/dev/null; then + as_ln_s=ln +else + as_ln_s='cp -p' +fi +rm -f conf$$ conf$$.exe conf$$.file + +if mkdir -p . 2>/dev/null; then + as_mkdir_p=: +else + test -d ./-p && rmdir ./-p + as_mkdir_p=false +fi + +as_executable_p="test -f" + +# Sed expression to map a string onto a valid CPP name. +as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" + +# Sed expression to map a string onto a valid variable name. +as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" + + +# IFS +# We need space, tab and new line, in precisely that order. +as_nl=' +' +IFS=" $as_nl" + +# CDPATH. +$as_unset CDPATH + + +# Name of the host. +# hostname on some systems (SVR3.2, Linux) returns a bogus exit status, +# so uname gets run too. +ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` + +exec 6>&1 + +# +# Initializations. +# +ac_default_prefix=/usr/local +ac_config_libobj_dir=. +cross_compiling=no +subdirs= +MFLAGS= +MAKEFLAGS= +SHELL=${CONFIG_SHELL-/bin/sh} + +# Maximum number of lines to put in a shell here document. +# This variable seems obsolete. It should probably be removed, and +# only ac_max_sed_lines should be used. +: ${ac_max_here_lines=38} + +# Identity of this package. +PACKAGE_NAME='nrpe' +PACKAGE_TARNAME='nrpe' +PACKAGE_VERSION='2.15' +PACKAGE_STRING='nrpe 2.15' +PACKAGE_BUGREPORT='nagios-users@lists.sourceforge.net' + +ac_unique_file="src/nrpe.c" +ac_default_prefix=/usr/local/nagios +# Factoring default headers for most tests. +ac_includes_default="\ +#include +#if HAVE_SYS_TYPES_H +# include +#endif +#if HAVE_SYS_STAT_H +# include +#endif +#if STDC_HEADERS +# include +# include +#else +# if HAVE_STDLIB_H +# include +# endif +#endif +#if HAVE_STRING_H +# if !STDC_HEADERS && HAVE_MEMORY_H +# include +# endif +# include +#endif +#if HAVE_STRINGS_H +# include +#endif +#if HAVE_INTTYPES_H +# include +#else +# if HAVE_STDINT_H +# include +# endif +#endif +#if HAVE_UNISTD_H +# include +#endif" + +ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS PKG_NAME PKG_VERSION PKG_HOME_URL PKG_REL_DATE RPM_RELEASE INSTALL_PROGRAM INSTALL_SCRIPT INSTALL_DATA INSTALL build build_cpu build_vendor build_os host host_cpu host_vendor host_os CC CFLAGS LDFLAGS CPPFLAGS ac_ct_CC EXEEXT OBJEXT SET_MAKE CPP EGREP SNPRINTF_O OTHERLIBS SOCKETLIBS LIBWRAPLIBS HAVE_SSL log_facility nrpe_user nrpe_group NRPE_INSTALL_OPTS nrpe_port nagios_user nagios_group NAGIOS_INSTALL_OPTS TARGET_VER TARGET_OS TARGET_ARCH TARGET_PLATFORM PERL LIBOBJS LTLIBOBJS' +ac_subst_files='' + +# Initialize some variables set by options. +ac_init_help= +ac_init_version=false +# The variables have the same names as the options, with +# dashes changed to underlines. +cache_file=/dev/null +exec_prefix=NONE +no_create= +no_recursion= +prefix=NONE +program_prefix=NONE +program_suffix=NONE +program_transform_name=s,x,x, +silent= +site= +srcdir= +verbose= +x_includes=NONE +x_libraries=NONE + +# Installation directory options. +# These are left unexpanded so users can "make install exec_prefix=/foo" +# and all the variables that are supposed to be based on exec_prefix +# by default will actually change. +# Use braces instead of parens because sh, perl, etc. also accept them. +bindir='${exec_prefix}/bin' +sbindir='${exec_prefix}/sbin' +libexecdir='${exec_prefix}/libexec' +datadir='${prefix}/share' +sysconfdir='${prefix}/etc' +sharedstatedir='${prefix}/com' +localstatedir='${prefix}/var' +libdir='${exec_prefix}/lib' +includedir='${prefix}/include' +oldincludedir='/usr/include' +infodir='${prefix}/info' +mandir='${prefix}/man' + +ac_prev= +for ac_option +do + # If the previous option needs an argument, assign it. + if test -n "$ac_prev"; then + eval "$ac_prev=\$ac_option" + ac_prev= + continue + fi + + ac_optarg=`expr "x$ac_option" : 'x[^=]*=\(.*\)'` + + # Accept the important Cygnus configure options, so we can diagnose typos. + + case $ac_option in + + -bindir | --bindir | --bindi | --bind | --bin | --bi) + ac_prev=bindir ;; + -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) + bindir=$ac_optarg ;; + + -build | --build | --buil | --bui | --bu) + ac_prev=build_alias ;; + -build=* | --build=* | --buil=* | --bui=* | --bu=*) + build_alias=$ac_optarg ;; + + -cache-file | --cache-file | --cache-fil | --cache-fi \ + | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) + ac_prev=cache_file ;; + -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ + | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) + cache_file=$ac_optarg ;; + + --config-cache | -C) + cache_file=config.cache ;; + + -datadir | --datadir | --datadi | --datad | --data | --dat | --da) + ac_prev=datadir ;; + -datadir=* | --datadir=* | --datadi=* | --datad=* | --data=* | --dat=* \ + | --da=*) + datadir=$ac_optarg ;; + + -disable-* | --disable-*) + ac_feature=`expr "x$ac_option" : 'x-*disable-\(.*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_feature" : ".*[^-_$as_cr_alnum]" >/dev/null && + { echo "$as_me: error: invalid feature name: $ac_feature" >&2 + { (exit 1); exit 1; }; } + ac_feature=`echo $ac_feature | sed 's/-/_/g'` + eval "enable_$ac_feature=no" ;; + + -enable-* | --enable-*) + ac_feature=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_feature" : ".*[^-_$as_cr_alnum]" >/dev/null && + { echo "$as_me: error: invalid feature name: $ac_feature" >&2 + { (exit 1); exit 1; }; } + ac_feature=`echo $ac_feature | sed 's/-/_/g'` + case $ac_option in + *=*) ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`;; + *) ac_optarg=yes ;; + esac + eval "enable_$ac_feature='$ac_optarg'" ;; + + -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ + | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ + | --exec | --exe | --ex) + ac_prev=exec_prefix ;; + -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ + | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ + | --exec=* | --exe=* | --ex=*) + exec_prefix=$ac_optarg ;; + + -gas | --gas | --ga | --g) + # Obsolete; use --with-gas. + with_gas=yes ;; + + -help | --help | --hel | --he | -h) + ac_init_help=long ;; + -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) + ac_init_help=recursive ;; + -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) + ac_init_help=short ;; + + -host | --host | --hos | --ho) + ac_prev=host_alias ;; + -host=* | --host=* | --hos=* | --ho=*) + host_alias=$ac_optarg ;; + + -includedir | --includedir | --includedi | --included | --include \ + | --includ | --inclu | --incl | --inc) + ac_prev=includedir ;; + -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ + | --includ=* | --inclu=* | --incl=* | --inc=*) + includedir=$ac_optarg ;; + + -infodir | --infodir | --infodi | --infod | --info | --inf) + ac_prev=infodir ;; + -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) + infodir=$ac_optarg ;; + + -libdir | --libdir | --libdi | --libd) + ac_prev=libdir ;; + -libdir=* | --libdir=* | --libdi=* | --libd=*) + libdir=$ac_optarg ;; + + -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ + | --libexe | --libex | --libe) + ac_prev=libexecdir ;; + -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ + | --libexe=* | --libex=* | --libe=*) + libexecdir=$ac_optarg ;; + + -localstatedir | --localstatedir | --localstatedi | --localstated \ + | --localstate | --localstat | --localsta | --localst \ + | --locals | --local | --loca | --loc | --lo) + ac_prev=localstatedir ;; + -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ + | --localstate=* | --localstat=* | --localsta=* | --localst=* \ + | --locals=* | --local=* | --loca=* | --loc=* | --lo=*) + localstatedir=$ac_optarg ;; + + -mandir | --mandir | --mandi | --mand | --man | --ma | --m) + ac_prev=mandir ;; + -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) + mandir=$ac_optarg ;; + + -nfp | --nfp | --nf) + # Obsolete; use --without-fp. + with_fp=no ;; + + -no-create | --no-create | --no-creat | --no-crea | --no-cre \ + | --no-cr | --no-c | -n) + no_create=yes ;; + + -no-recursion | --no-recursion | --no-recursio | --no-recursi \ + | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) + no_recursion=yes ;; + + -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ + | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ + | --oldin | --oldi | --old | --ol | --o) + ac_prev=oldincludedir ;; + -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ + | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ + | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) + oldincludedir=$ac_optarg ;; + + -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) + ac_prev=prefix ;; + -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) + prefix=$ac_optarg ;; + + -program-prefix | --program-prefix | --program-prefi | --program-pref \ + | --program-pre | --program-pr | --program-p) + ac_prev=program_prefix ;; + -program-prefix=* | --program-prefix=* | --program-prefi=* \ + | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) + program_prefix=$ac_optarg ;; + + -program-suffix | --program-suffix | --program-suffi | --program-suff \ + | --program-suf | --program-su | --program-s) + ac_prev=program_suffix ;; + -program-suffix=* | --program-suffix=* | --program-suffi=* \ + | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) + program_suffix=$ac_optarg ;; + + -program-transform-name | --program-transform-name \ + | --program-transform-nam | --program-transform-na \ + | --program-transform-n | --program-transform- \ + | --program-transform | --program-transfor \ + | --program-transfo | --program-transf \ + | --program-trans | --program-tran \ + | --progr-tra | --program-tr | --program-t) + ac_prev=program_transform_name ;; + -program-transform-name=* | --program-transform-name=* \ + | --program-transform-nam=* | --program-transform-na=* \ + | --program-transform-n=* | --program-transform-=* \ + | --program-transform=* | --program-transfor=* \ + | --program-transfo=* | --program-transf=* \ + | --program-trans=* | --program-tran=* \ + | --progr-tra=* | --program-tr=* | --program-t=*) + program_transform_name=$ac_optarg ;; + + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil) + silent=yes ;; + + -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) + ac_prev=sbindir ;; + -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ + | --sbi=* | --sb=*) + sbindir=$ac_optarg ;; + + -sharedstatedir | --sharedstatedir | --sharedstatedi \ + | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ + | --sharedst | --shareds | --shared | --share | --shar \ + | --sha | --sh) + ac_prev=sharedstatedir ;; + -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ + | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ + | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ + | --sha=* | --sh=*) + sharedstatedir=$ac_optarg ;; + + -site | --site | --sit) + ac_prev=site ;; + -site=* | --site=* | --sit=*) + site=$ac_optarg ;; + + -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) + ac_prev=srcdir ;; + -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) + srcdir=$ac_optarg ;; + + -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ + | --syscon | --sysco | --sysc | --sys | --sy) + ac_prev=sysconfdir ;; + -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ + | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) + sysconfdir=$ac_optarg ;; + + -target | --target | --targe | --targ | --tar | --ta | --t) + ac_prev=target_alias ;; + -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) + target_alias=$ac_optarg ;; + + -v | -verbose | --verbose | --verbos | --verbo | --verb) + verbose=yes ;; + + -version | --version | --versio | --versi | --vers | -V) + ac_init_version=: ;; + + -with-* | --with-*) + ac_package=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_package" : ".*[^-_$as_cr_alnum]" >/dev/null && + { echo "$as_me: error: invalid package name: $ac_package" >&2 + { (exit 1); exit 1; }; } + ac_package=`echo $ac_package| sed 's/-/_/g'` + case $ac_option in + *=*) ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`;; + *) ac_optarg=yes ;; + esac + eval "with_$ac_package='$ac_optarg'" ;; + + -without-* | --without-*) + ac_package=`expr "x$ac_option" : 'x-*without-\(.*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_package" : ".*[^-_$as_cr_alnum]" >/dev/null && + { echo "$as_me: error: invalid package name: $ac_package" >&2 + { (exit 1); exit 1; }; } + ac_package=`echo $ac_package | sed 's/-/_/g'` + eval "with_$ac_package=no" ;; + + --x) + # Obsolete; use --with-x. + with_x=yes ;; + + -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ + | --x-incl | --x-inc | --x-in | --x-i) + ac_prev=x_includes ;; + -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ + | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) + x_includes=$ac_optarg ;; + + -x-libraries | --x-libraries | --x-librarie | --x-librari \ + | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) + ac_prev=x_libraries ;; + -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ + | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) + x_libraries=$ac_optarg ;; + + -*) { echo "$as_me: error: unrecognized option: $ac_option +Try \`$0 --help' for more information." >&2 + { (exit 1); exit 1; }; } + ;; + + *=*) + ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` + # Reject names that are not valid shell variable names. + expr "x$ac_envvar" : ".*[^_$as_cr_alnum]" >/dev/null && + { echo "$as_me: error: invalid variable name: $ac_envvar" >&2 + { (exit 1); exit 1; }; } + ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` + eval "$ac_envvar='$ac_optarg'" + export $ac_envvar ;; + + *) + # FIXME: should be removed in autoconf 3.0. + echo "$as_me: WARNING: you should use --build, --host, --target" >&2 + expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && + echo "$as_me: WARNING: invalid host type: $ac_option" >&2 + : ${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option} + ;; + + esac +done + +if test -n "$ac_prev"; then + ac_option=--`echo $ac_prev | sed 's/_/-/g'` + { echo "$as_me: error: missing argument to $ac_option" >&2 + { (exit 1); exit 1; }; } +fi + +# Be sure to have absolute paths. +for ac_var in exec_prefix prefix +do + eval ac_val=$`echo $ac_var` + case $ac_val in + [\\/$]* | ?:[\\/]* | NONE | '' ) ;; + *) { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2 + { (exit 1); exit 1; }; };; + esac +done + +# Be sure to have absolute paths. +for ac_var in bindir sbindir libexecdir datadir sysconfdir sharedstatedir \ + localstatedir libdir includedir oldincludedir infodir mandir +do + eval ac_val=$`echo $ac_var` + case $ac_val in + [\\/$]* | ?:[\\/]* ) ;; + *) { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2 + { (exit 1); exit 1; }; };; + esac +done + +# There might be people who depend on the old broken behavior: `$host' +# used to hold the argument of --host etc. +# FIXME: To remove some day. +build=$build_alias +host=$host_alias +target=$target_alias + +# FIXME: To remove some day. +if test "x$host_alias" != x; then + if test "x$build_alias" = x; then + cross_compiling=maybe + echo "$as_me: WARNING: If you wanted to set the --build type, don't use --host. + If a cross compiler is detected then cross compile mode will be used." >&2 + elif test "x$build_alias" != "x$host_alias"; then + cross_compiling=yes + fi +fi + +ac_tool_prefix= +test -n "$host_alias" && ac_tool_prefix=$host_alias- + +test "$silent" = yes && exec 6>/dev/null + + +# Find the source files, if location was not specified. +if test -z "$srcdir"; then + ac_srcdir_defaulted=yes + # Try the directory containing this script, then its parent. + ac_confdir=`(dirname "$0") 2>/dev/null || +$as_expr X"$0" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$0" : 'X\(//\)[^/]' \| \ + X"$0" : 'X\(//\)$' \| \ + X"$0" : 'X\(/\)' \| \ + . : '\(.\)' 2>/dev/null || +echo X"$0" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } + /^X\(\/\/\)[^/].*/{ s//\1/; q; } + /^X\(\/\/\)$/{ s//\1/; q; } + /^X\(\/\).*/{ s//\1/; q; } + s/.*/./; q'` + srcdir=$ac_confdir + if test ! -r $srcdir/$ac_unique_file; then + srcdir=.. + fi +else + ac_srcdir_defaulted=no +fi +if test ! -r $srcdir/$ac_unique_file; then + if test "$ac_srcdir_defaulted" = yes; then + { echo "$as_me: error: cannot find sources ($ac_unique_file) in $ac_confdir or .." >&2 + { (exit 1); exit 1; }; } + else + { echo "$as_me: error: cannot find sources ($ac_unique_file) in $srcdir" >&2 + { (exit 1); exit 1; }; } + fi +fi +(cd $srcdir && test -r ./$ac_unique_file) 2>/dev/null || + { echo "$as_me: error: sources are in $srcdir, but \`cd $srcdir' does not work" >&2 + { (exit 1); exit 1; }; } +srcdir=`echo "$srcdir" | sed 's%\([^\\/]\)[\\/]*$%\1%'` +ac_env_build_alias_set=${build_alias+set} +ac_env_build_alias_value=$build_alias +ac_cv_env_build_alias_set=${build_alias+set} +ac_cv_env_build_alias_value=$build_alias +ac_env_host_alias_set=${host_alias+set} +ac_env_host_alias_value=$host_alias +ac_cv_env_host_alias_set=${host_alias+set} +ac_cv_env_host_alias_value=$host_alias +ac_env_target_alias_set=${target_alias+set} +ac_env_target_alias_value=$target_alias +ac_cv_env_target_alias_set=${target_alias+set} +ac_cv_env_target_alias_value=$target_alias +ac_env_CC_set=${CC+set} +ac_env_CC_value=$CC +ac_cv_env_CC_set=${CC+set} +ac_cv_env_CC_value=$CC +ac_env_CFLAGS_set=${CFLAGS+set} +ac_env_CFLAGS_value=$CFLAGS +ac_cv_env_CFLAGS_set=${CFLAGS+set} +ac_cv_env_CFLAGS_value=$CFLAGS +ac_env_LDFLAGS_set=${LDFLAGS+set} +ac_env_LDFLAGS_value=$LDFLAGS +ac_cv_env_LDFLAGS_set=${LDFLAGS+set} +ac_cv_env_LDFLAGS_value=$LDFLAGS +ac_env_CPPFLAGS_set=${CPPFLAGS+set} +ac_env_CPPFLAGS_value=$CPPFLAGS +ac_cv_env_CPPFLAGS_set=${CPPFLAGS+set} +ac_cv_env_CPPFLAGS_value=$CPPFLAGS +ac_env_CPP_set=${CPP+set} +ac_env_CPP_value=$CPP +ac_cv_env_CPP_set=${CPP+set} +ac_cv_env_CPP_value=$CPP + +# +# Report the --help message. +# +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 nrpe 2.15 to adapt to many kinds of systems. + +Usage: $0 [OPTION]... [VAR=VALUE]... + +To assign environment variables (e.g., CC, CFLAGS...), specify them as +VAR=VALUE. See below for descriptions of some of the useful variables. + +Defaults for the options are specified in brackets. + +Configuration: + -h, --help display this help and exit + --help=short display options specific to this package + --help=recursive display the short help of all the included packages + -V, --version display version information and exit + -q, --quiet, --silent do not print \`checking...' messages + --cache-file=FILE cache test results in FILE [disabled] + -C, --config-cache alias for \`--cache-file=config.cache' + -n, --no-create do not create output files + --srcdir=DIR find the sources in DIR [configure dir or \`..'] + +_ACEOF + + cat <<_ACEOF +Installation directories: + --prefix=PREFIX install architecture-independent files in PREFIX + [$ac_default_prefix] + --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX + [PREFIX] + +By default, \`make install' will install all the files in +\`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify +an installation prefix other than \`$ac_default_prefix' using \`--prefix', +for instance \`--prefix=\$HOME'. + +For better control, use the options below. + +Fine tuning of the installation directories: + --bindir=DIR user executables [EPREFIX/bin] + --sbindir=DIR system admin executables [EPREFIX/sbin] + --libexecdir=DIR program executables [EPREFIX/libexec] + --datadir=DIR read-only architecture-independent data [PREFIX/share] + --sysconfdir=DIR read-only single-machine data [PREFIX/etc] + --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] + --localstatedir=DIR modifiable single-machine data [PREFIX/var] + --libdir=DIR object code libraries [EPREFIX/lib] + --includedir=DIR C header files [PREFIX/include] + --oldincludedir=DIR C header files for non-gcc [/usr/include] + --infodir=DIR info documentation [PREFIX/info] + --mandir=DIR man documentation [PREFIX/man] +_ACEOF + + cat <<\_ACEOF + +System types: + --build=BUILD configure for building on BUILD [guessed] + --host=HOST cross-compile to build programs to run on HOST [BUILD] +_ACEOF +fi + +if test -n "$ac_init_help"; then + case $ac_init_help in + short | recursive ) echo "Configuration of nrpe 2.15:";; + esac + cat <<\_ACEOF + +Optional Features: + --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) + --enable-FEATURE[=ARG] include FEATURE [ARG=yes] + --enable-ssl enables native SSL support + --enable-command-args allows clients to specify command arguments. *** + THIS IS A SECURITY RISK! *** Read the SECURITY file + before using this option! + --enable-bash-command-substitution + allows clients to pass bash command substitutions of + the form $(command). *** THIS IS A HIGH SECURITY + RISK! *** Read the SECURITY file before using this + option! + +Optional Packages: + --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] + --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) + --with-ssl=DIR sets location of the SSL installation + --with-ssl-inc=DIR sets location of the SSL include files + --with-ssl-lib=DIR sets location of the SSL libraries + --with-kerberos-inc=DIR sets location of the Kerberos include files + --with-log-facility= + sets NRPE syslog facility + --with-nrpe-user= sets user name to run NRPE + --with-nrpe-group= + sets group name to run NRPE + --with-nrpe-port= sets port number for NRPE to listen on + --with-nagios-user= + sets user name for file permissions + --with-nagios-group= + sets group name file permissions + +Some influential environment variables: + CC C compiler command + CFLAGS C compiler flags + LDFLAGS linker flags, e.g. -L if you have libraries in a + nonstandard directory + CPPFLAGS C/C++ preprocessor flags, e.g. -I if you have + headers in a nonstandard directory + CPP C preprocessor + +Use these variables to override the choices made by `configure' or to help +it to find libraries and programs with nonstandard names/locations. + +Report bugs to . +_ACEOF +fi + +if test "$ac_init_help" = "recursive"; then + # If there are subdirs, report their specific --help. + ac_popdir=`pwd` + for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue + test -d $ac_dir || continue + ac_builddir=. + +if test "$ac_dir" != .; then + ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'` + # A "../" for each directory in $ac_dir_suffix. + ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'` +else + ac_dir_suffix= ac_top_builddir= +fi + +case $srcdir in + .) # No --srcdir option. We are building in place. + ac_srcdir=. + if test -z "$ac_top_builddir"; then + ac_top_srcdir=. + else + ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'` + fi ;; + [\\/]* | ?:[\\/]* ) # Absolute path. + ac_srcdir=$srcdir$ac_dir_suffix; + ac_top_srcdir=$srcdir ;; + *) # Relative path. + ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix + ac_top_srcdir=$ac_top_builddir$srcdir ;; +esac + +# Do not use `cd foo && pwd` to compute absolute paths, because +# the directories may not exist. +case `pwd` in +.) ac_abs_builddir="$ac_dir";; +*) + case "$ac_dir" in + .) ac_abs_builddir=`pwd`;; + [\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dir";; + *) ac_abs_builddir=`pwd`/"$ac_dir";; + esac;; +esac +case $ac_abs_builddir in +.) ac_abs_top_builddir=${ac_top_builddir}.;; +*) + case ${ac_top_builddir}. in + .) ac_abs_top_builddir=$ac_abs_builddir;; + [\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;; + *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;; + esac;; +esac +case $ac_abs_builddir in +.) ac_abs_srcdir=$ac_srcdir;; +*) + case $ac_srcdir in + .) ac_abs_srcdir=$ac_abs_builddir;; + [\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;; + *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;; + esac;; +esac +case $ac_abs_builddir in +.) ac_abs_top_srcdir=$ac_top_srcdir;; +*) + case $ac_top_srcdir in + .) ac_abs_top_srcdir=$ac_abs_builddir;; + [\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;; + *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;; + esac;; +esac + + cd $ac_dir + # Check for guested configure; otherwise get Cygnus style configure. + if test -f $ac_srcdir/configure.gnu; then + echo + $SHELL $ac_srcdir/configure.gnu --help=recursive + elif test -f $ac_srcdir/configure; then + echo + $SHELL $ac_srcdir/configure --help=recursive + elif test -f $ac_srcdir/configure.ac || + test -f $ac_srcdir/configure.in; then + echo + $ac_configure --help + else + echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 + fi + cd $ac_popdir + done +fi + +test -n "$ac_init_help" && exit 0 +if $ac_init_version; then + cat <<\_ACEOF +nrpe configure 2.15 +generated by GNU Autoconf 2.59 + +Copyright (C) 2003 Free Software Foundation, Inc. +This configure script is free software; the Free Software Foundation +gives unlimited permission to copy, distribute and modify it. +_ACEOF + exit 0 +fi +exec 5>config.log +cat >&5 <<_ACEOF +This file contains any messages produced by compilers while +running configure, to aid debugging if configure makes a mistake. + +It was created by nrpe $as_me 2.15, which was +generated by GNU Autoconf 2.59. Invocation command line was + + $ $0 $@ + +_ACEOF +{ +cat <<_ASUNAME +## --------- ## +## Platform. ## +## --------- ## + +hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` +uname -m = `(uname -m) 2>/dev/null || echo unknown` +uname -r = `(uname -r) 2>/dev/null || echo unknown` +uname -s = `(uname -s) 2>/dev/null || echo unknown` +uname -v = `(uname -v) 2>/dev/null || echo unknown` + +/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` +/bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` + +/bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` +/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` +/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` +hostinfo = `(hostinfo) 2>/dev/null || echo unknown` +/bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` +/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` +/bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` + +_ASUNAME + +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + echo "PATH: $as_dir" +done + +} >&5 + +cat >&5 <<_ACEOF + + +## ----------- ## +## Core tests. ## +## ----------- ## + +_ACEOF + + +# Keep a trace of the command line. +# Strip out --no-create and --no-recursion so they do not pile up. +# Strip out --silent because we don't want to record it for future runs. +# Also quote any args containing shell meta-characters. +# Make two passes to allow for proper duplicate-argument suppression. +ac_configure_args= +ac_configure_args0= +ac_configure_args1= +ac_sep= +ac_must_keep_next=false +for ac_pass in 1 2 +do + for ac_arg + do + case $ac_arg in + -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil) + continue ;; + *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?\"\']*) + ac_arg=`echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; + esac + case $ac_pass in + 1) ac_configure_args0="$ac_configure_args0 '$ac_arg'" ;; + 2) + ac_configure_args1="$ac_configure_args1 '$ac_arg'" + if test $ac_must_keep_next = true; then + ac_must_keep_next=false # Got value, back to normal. + else + case $ac_arg in + *=* | --config-cache | -C | -disable-* | --disable-* \ + | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ + | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ + | -with-* | --with-* | -without-* | --without-* | --x) + case "$ac_configure_args0 " in + "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; + esac + ;; + -* ) ac_must_keep_next=true ;; + esac + fi + ac_configure_args="$ac_configure_args$ac_sep'$ac_arg'" + # Get rid of the leading space. + ac_sep=" " + ;; + esac + done +done +$as_unset ac_configure_args0 || test "${ac_configure_args0+set}" != set || { ac_configure_args0=; export ac_configure_args0; } +$as_unset ac_configure_args1 || test "${ac_configure_args1+set}" != set || { ac_configure_args1=; export ac_configure_args1; } + +# When interrupted or exit'd, cleanup temporary files, and complete +# config.log. We remove comments because anyway the quotes in there +# would cause problems or look ugly. +# WARNING: Be sure not to use single quotes in there, as some shells, +# such as our DU 5.0 friend, will then `close' the trap. +trap 'exit_status=$? + # Save into config.log some information that might help in debugging. + { + echo + + cat <<\_ASBOX +## ---------------- ## +## Cache variables. ## +## ---------------- ## +_ASBOX + echo + # The following way of writing the cache mishandles newlines in values, +{ + (set) 2>&1 | + case `(ac_space='"'"' '"'"'; set | grep ac_space) 2>&1` in + *ac_space=\ *) + sed -n \ + "s/'"'"'/'"'"'\\\\'"'"''"'"'/g; + s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='"'"'\\2'"'"'/p" + ;; + *) + sed -n \ + "s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p" + ;; + esac; +} + echo + + cat <<\_ASBOX +## ----------------- ## +## Output variables. ## +## ----------------- ## +_ASBOX + echo + for ac_var in $ac_subst_vars + do + eval ac_val=$`echo $ac_var` + echo "$ac_var='"'"'$ac_val'"'"'" + done | sort + echo + + if test -n "$ac_subst_files"; then + cat <<\_ASBOX +## ------------- ## +## Output files. ## +## ------------- ## +_ASBOX + echo + for ac_var in $ac_subst_files + do + eval ac_val=$`echo $ac_var` + echo "$ac_var='"'"'$ac_val'"'"'" + done | sort + echo + fi + + if test -s confdefs.h; then + cat <<\_ASBOX +## ----------- ## +## confdefs.h. ## +## ----------- ## +_ASBOX + echo + sed "/^$/d" confdefs.h | sort + echo + fi + test "$ac_signal" != 0 && + echo "$as_me: caught signal $ac_signal" + echo "$as_me: exit $exit_status" + } >&5 + rm -f core *.core && + rm -rf conftest* confdefs* conf$$* $ac_clean_files && + exit $exit_status + ' 0 +for ac_signal in 1 2 13 15; do + trap 'ac_signal='$ac_signal'; { (exit 1); exit 1; }' $ac_signal +done +ac_signal=0 + +# confdefs.h avoids OS command line length limits that DEFS can exceed. +rm -rf conftest* confdefs.h +# AIX cpp loses on an empty file, so make sure it contains at least a newline. +echo >confdefs.h + +# Predefined preprocessor variables. + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_NAME "$PACKAGE_NAME" +_ACEOF + + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_TARNAME "$PACKAGE_TARNAME" +_ACEOF + + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_VERSION "$PACKAGE_VERSION" +_ACEOF + + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_STRING "$PACKAGE_STRING" +_ACEOF + + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" +_ACEOF + + +# Let the site file select an alternate cache file if it wants to. +# Prefer explicitly selected file to automatically selected ones. +if test -z "$CONFIG_SITE"; then + if test "x$prefix" != xNONE; then + CONFIG_SITE="$prefix/share/config.site $prefix/etc/config.site" + else + CONFIG_SITE="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site" + fi +fi +for ac_site_file in $CONFIG_SITE; do + if test -r "$ac_site_file"; then + { echo "$as_me:$LINENO: loading site script $ac_site_file" >&5 +echo "$as_me: loading site script $ac_site_file" >&6;} + sed 's/^/| /' "$ac_site_file" >&5 + . "$ac_site_file" + fi +done + + +# Check that the precious variables saved in the cache have kept the same +# value. +ac_cache_corrupted=false +for ac_var in `(set) 2>&1 | + sed -n 's/^ac_env_\([a-zA-Z_0-9]*\)_set=.*/\1/p'`; do + eval ac_old_set=\$ac_cv_env_${ac_var}_set + eval ac_new_set=\$ac_env_${ac_var}_set + eval ac_old_val="\$ac_cv_env_${ac_var}_value" + eval ac_new_val="\$ac_env_${ac_var}_value" + case $ac_old_set,$ac_new_set in + set,) + { echo "$as_me:$LINENO: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 +echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} + ac_cache_corrupted=: ;; + ,set) + { echo "$as_me:$LINENO: error: \`$ac_var' was not set in the previous run" >&5 +echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} + ac_cache_corrupted=: ;; + ,);; + *) + if test "x$ac_old_val" != "x$ac_new_val"; then + { echo "$as_me:$LINENO: error: \`$ac_var' has changed since the previous run:" >&5 +echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} + { echo "$as_me:$LINENO: former value: $ac_old_val" >&5 +echo "$as_me: former value: $ac_old_val" >&2;} + { echo "$as_me:$LINENO: current value: $ac_new_val" >&5 +echo "$as_me: current value: $ac_new_val" >&2;} + ac_cache_corrupted=: + fi;; + esac + # Pass precious variables to config.status. + if test "$ac_new_set" = set; then + case $ac_new_val in + *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?\"\']*) + ac_arg=$ac_var=`echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; + *) ac_arg=$ac_var=$ac_new_val ;; + esac + case " $ac_configure_args " in + *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. + *) ac_configure_args="$ac_configure_args '$ac_arg'" ;; + esac + fi +done +if $ac_cache_corrupted; then + { echo "$as_me:$LINENO: error: changes in the environment can compromise the build" >&5 +echo "$as_me: error: changes in the environment can compromise the build" >&2;} + { { echo "$as_me:$LINENO: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&5 +echo "$as_me: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&2;} + { (exit 1); exit 1; }; } +fi + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ac_config_headers="$ac_config_headers include/config.h" + + ac_config_files="$ac_config_files Makefile subst src/Makefile package/solaris/Makefile init-script init-script.debian init-script.suse nrpe.spec sample-config/nrpe.cfg sample-config/nrpe.xinetd" + + + +PKG_NAME=nrpe +PKG_VERSION="2.15" +PKG_HOME_URL="http://www.nagios.org/" +PKG_REL_DATE="09-06-2013" +RPM_RELEASE=1 + + + + + + +ac_aux_dir= +for ac_dir in $srcdir $srcdir/.. $srcdir/../..; do + if test -f $ac_dir/install-sh; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/install-sh -c" + break + elif test -f $ac_dir/install.sh; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/install.sh -c" + break + elif test -f $ac_dir/shtool; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/shtool install -c" + break + fi +done +if test -z "$ac_aux_dir"; then + { { echo "$as_me:$LINENO: error: cannot find install-sh or install.sh in $srcdir $srcdir/.. $srcdir/../.." >&5 +echo "$as_me: error: cannot find install-sh or install.sh in $srcdir $srcdir/.. $srcdir/../.." >&2;} + { (exit 1); exit 1; }; } +fi +ac_config_guess="$SHELL $ac_aux_dir/config.guess" +ac_config_sub="$SHELL $ac_aux_dir/config.sub" +ac_configure="$SHELL $ac_aux_dir/configure" # This should be Cygnus configure. + +# Find a good install program. We prefer a C program (faster), +# so one script is as good as another. But avoid the broken or +# incompatible versions: +# SysV /etc/install, /usr/sbin/install +# SunOS /usr/etc/install +# IRIX /sbin/install +# AIX /bin/install +# AmigaOS /C/install, which installs bootblocks on floppy discs +# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag +# AFS /usr/afsws/bin/install, which mishandles nonexistent args +# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" +# OS/2's system install, which has a completely different semantic +# ./install, which can be erroneously created by make from ./install.sh. +echo "$as_me:$LINENO: checking for a BSD-compatible install" >&5 +echo $ECHO_N "checking for a BSD-compatible install... $ECHO_C" >&6 +if test -z "$INSTALL"; then +if test "${ac_cv_path_install+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + # Account for people who put trailing slashes in PATH elements. +case $as_dir/ in + ./ | .// | /cC/* | \ + /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ + ?:\\/os2\\/install\\/* | ?:\\/OS2\\/INSTALL\\/* | \ + /usr/ucb/* ) ;; + *) + # OSF1 and SCO ODT 3.0 have their own names for install. + # Don't use installbsd from OSF since it installs stuff as root + # by default. + for ac_prog in ginstall scoinst install; do + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then + if test $ac_prog = install && + grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then + # AIX install. It has an incompatible calling convention. + : + elif test $ac_prog = install && + grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then + # program-specific install script used by HP pwplus--don't use. + : + else + ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" + break 3 + fi + fi + done + done + ;; +esac +done + + +fi + if test "${ac_cv_path_install+set}" = set; then + INSTALL=$ac_cv_path_install + else + # As a last resort, use the slow shell script. We don't cache a + # path for INSTALL within a source directory, because that will + # break other packages using the cache if that directory is + # removed, or if the path is relative. + INSTALL=$ac_install_sh + fi +fi +echo "$as_me:$LINENO: result: $INSTALL" >&5 +echo "${ECHO_T}$INSTALL" >&6 + +# Use test -z because SunOS4 sh mishandles braces in ${var-val}. +# It thinks the first close brace ends the variable substitution. +test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' + +test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' + +test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' + + + +# Make sure we can run config.sub. +$ac_config_sub sun4 >/dev/null 2>&1 || + { { echo "$as_me:$LINENO: error: cannot run $ac_config_sub" >&5 +echo "$as_me: error: cannot run $ac_config_sub" >&2;} + { (exit 1); exit 1; }; } + +echo "$as_me:$LINENO: checking build system type" >&5 +echo $ECHO_N "checking build system type... $ECHO_C" >&6 +if test "${ac_cv_build+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_cv_build_alias=$build_alias +test -z "$ac_cv_build_alias" && + ac_cv_build_alias=`$ac_config_guess` +test -z "$ac_cv_build_alias" && + { { echo "$as_me:$LINENO: error: cannot guess build type; you must specify one" >&5 +echo "$as_me: error: cannot guess build type; you must specify one" >&2;} + { (exit 1); exit 1; }; } +ac_cv_build=`$ac_config_sub $ac_cv_build_alias` || + { { echo "$as_me:$LINENO: error: $ac_config_sub $ac_cv_build_alias failed" >&5 +echo "$as_me: error: $ac_config_sub $ac_cv_build_alias failed" >&2;} + { (exit 1); exit 1; }; } + +fi +echo "$as_me:$LINENO: result: $ac_cv_build" >&5 +echo "${ECHO_T}$ac_cv_build" >&6 +build=$ac_cv_build +build_cpu=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'` +build_vendor=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'` +build_os=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` + + +echo "$as_me:$LINENO: checking host system type" >&5 +echo $ECHO_N "checking host system type... $ECHO_C" >&6 +if test "${ac_cv_host+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_cv_host_alias=$host_alias +test -z "$ac_cv_host_alias" && + ac_cv_host_alias=$ac_cv_build_alias +ac_cv_host=`$ac_config_sub $ac_cv_host_alias` || + { { echo "$as_me:$LINENO: error: $ac_config_sub $ac_cv_host_alias failed" >&5 +echo "$as_me: error: $ac_config_sub $ac_cv_host_alias failed" >&2;} + { (exit 1); exit 1; }; } + +fi +echo "$as_me:$LINENO: result: $ac_cv_host" >&5 +echo "${ECHO_T}$ac_cv_host" >&6 +host=$ac_cv_host +host_cpu=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'` +host_vendor=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'` +host_os=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` + + + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. +set dummy ${ac_tool_prefix}gcc; ac_word=$2 +echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_prog_CC+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # 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_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_CC="${ac_tool_prefix}gcc" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + echo "$as_me:$LINENO: result: $CC" >&5 +echo "${ECHO_T}$CC" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + +fi +if test -z "$ac_cv_prog_CC"; then + ac_ct_CC=$CC + # Extract the first word of "gcc", so it can be a program name with args. +set dummy gcc; ac_word=$2 +echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_prog_ac_ct_CC+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$ac_ct_CC"; then + ac_cv_prog_ac_ct_CC="$ac_ct_CC" # 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_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_CC="gcc" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done + +fi +fi +ac_ct_CC=$ac_cv_prog_ac_ct_CC +if test -n "$ac_ct_CC"; then + echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 +echo "${ECHO_T}$ac_ct_CC" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + + CC=$ac_ct_CC +else + CC="$ac_cv_prog_CC" +fi + +if test -z "$CC"; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. +set dummy ${ac_tool_prefix}cc; ac_word=$2 +echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_prog_CC+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # 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_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_CC="${ac_tool_prefix}cc" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + echo "$as_me:$LINENO: result: $CC" >&5 +echo "${ECHO_T}$CC" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + +fi +if test -z "$ac_cv_prog_CC"; then + ac_ct_CC=$CC + # Extract the first word of "cc", so it can be a program name with args. +set dummy cc; ac_word=$2 +echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_prog_ac_ct_CC+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$ac_ct_CC"; then + ac_cv_prog_ac_ct_CC="$ac_ct_CC" # 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_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_CC="cc" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done + +fi +fi +ac_ct_CC=$ac_cv_prog_ac_ct_CC +if test -n "$ac_ct_CC"; then + echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 +echo "${ECHO_T}$ac_ct_CC" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + + CC=$ac_ct_CC +else + CC="$ac_cv_prog_CC" +fi + +fi +if test -z "$CC"; then + # Extract the first word of "cc", so it can be a program name with args. +set dummy cc; ac_word=$2 +echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_prog_CC+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else + ac_prog_rejected=no +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_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then + ac_prog_rejected=yes + continue + fi + ac_cv_prog_CC="cc" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done + +if test $ac_prog_rejected = yes; then + # We found a bogon in the path, so make sure we never use it. + set dummy $ac_cv_prog_CC + shift + if test $# != 0; then + # We chose a different compiler from the bogus one. + # However, it has the same basename, so the bogon will be chosen + # first if we set CC to just the basename; use the full file name. + shift + ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" + fi +fi +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + echo "$as_me:$LINENO: result: $CC" >&5 +echo "${ECHO_T}$CC" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + +fi +if test -z "$CC"; then + if test -n "$ac_tool_prefix"; then + for ac_prog in cl + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. +set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_prog_CC+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # 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_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_CC="$ac_tool_prefix$ac_prog" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + echo "$as_me:$LINENO: result: $CC" >&5 +echo "${ECHO_T}$CC" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + + test -n "$CC" && break + done +fi +if test -z "$CC"; then + ac_ct_CC=$CC + for ac_prog in cl +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_prog_ac_ct_CC+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$ac_ct_CC"; then + ac_cv_prog_ac_ct_CC="$ac_ct_CC" # 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_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_CC="$ac_prog" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done + +fi +fi +ac_ct_CC=$ac_cv_prog_ac_ct_CC +if test -n "$ac_ct_CC"; then + echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 +echo "${ECHO_T}$ac_ct_CC" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + + test -n "$ac_ct_CC" && break +done + + CC=$ac_ct_CC +fi + +fi + + +test -z "$CC" && { { echo "$as_me:$LINENO: error: no acceptable C compiler found in \$PATH +See \`config.log' for more details." >&5 +echo "$as_me: error: no acceptable C compiler found in \$PATH +See \`config.log' for more details." >&2;} + { (exit 1); exit 1; }; } + +# Provide some information about the compiler. +echo "$as_me:$LINENO:" \ + "checking for C compiler version" >&5 +ac_compiler=`set X $ac_compile; echo $2` +{ (eval echo "$as_me:$LINENO: \"$ac_compiler --version &5\"") >&5 + (eval $ac_compiler --version &5) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } +{ (eval echo "$as_me:$LINENO: \"$ac_compiler -v &5\"") >&5 + (eval $ac_compiler -v &5) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } +{ (eval echo "$as_me:$LINENO: \"$ac_compiler -V &5\"") >&5 + (eval $ac_compiler -V &5) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } + +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +ac_clean_files_save=$ac_clean_files +ac_clean_files="$ac_clean_files a.out a.exe b.out" +# Try to create an executable without -o first, disregard a.out. +# It will help us diagnose broken compilers, and finding out an intuition +# of exeext. +echo "$as_me:$LINENO: checking for C compiler default output file name" >&5 +echo $ECHO_N "checking for C compiler default output file name... $ECHO_C" >&6 +ac_link_default=`echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` +if { (eval echo "$as_me:$LINENO: \"$ac_link_default\"") >&5 + (eval $ac_link_default) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; then + # Find the output, starting from the most likely. This scheme is +# not robust to junk in `.', hence go to wildcards (a.*) only as a last +# resort. + +# Be careful to initialize this variable, since it used to be cached. +# Otherwise an old cache value of `no' led to `EXEEXT = no' in a Makefile. +ac_cv_exeext= +# b.out is created by i960 compilers. +for ac_file in a_out.exe a.exe conftest.exe a.out conftest a.* conftest.* b.out +do + test -f "$ac_file" || continue + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.o | *.obj ) + ;; + conftest.$ac_ext ) + # This is the source file. + ;; + [ab].out ) + # We found the default executable, but exeext='' is most + # certainly right. + break;; + *.* ) + ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` + # FIXME: I believe we export ac_cv_exeext for Libtool, + # but it would be cool to find out if it's true. Does anybody + # maintain Libtool? --akim. + export ac_cv_exeext + break;; + * ) + break;; + esac +done +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +{ { echo "$as_me:$LINENO: error: C compiler cannot create executables +See \`config.log' for more details." >&5 +echo "$as_me: error: C compiler cannot create executables +See \`config.log' for more details." >&2;} + { (exit 77); exit 77; }; } +fi + +ac_exeext=$ac_cv_exeext +echo "$as_me:$LINENO: result: $ac_file" >&5 +echo "${ECHO_T}$ac_file" >&6 + +# Check the compiler produces executables we can run. If not, either +# the compiler is broken, or we cross compile. +echo "$as_me:$LINENO: checking whether the C compiler works" >&5 +echo $ECHO_N "checking whether the C compiler works... $ECHO_C" >&6 +# FIXME: These cross compiler hacks should be removed for Autoconf 3.0 +# If not cross compiling, check that we can run a simple program. +if test "$cross_compiling" != yes; then + if { ac_try='./$ac_file' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + cross_compiling=no + else + if test "$cross_compiling" = maybe; then + cross_compiling=yes + else + { { echo "$as_me:$LINENO: error: cannot run C compiled programs. +If you meant to cross compile, use \`--host'. +See \`config.log' for more details." >&5 +echo "$as_me: error: cannot run C compiled programs. +If you meant to cross compile, use \`--host'. +See \`config.log' for more details." >&2;} + { (exit 1); exit 1; }; } + fi + fi +fi +echo "$as_me:$LINENO: result: yes" >&5 +echo "${ECHO_T}yes" >&6 + +rm -f a.out a.exe conftest$ac_cv_exeext b.out +ac_clean_files=$ac_clean_files_save +# Check the compiler produces executables we can run. If not, either +# the compiler is broken, or we cross compile. +echo "$as_me:$LINENO: checking whether we are cross compiling" >&5 +echo $ECHO_N "checking whether we are cross compiling... $ECHO_C" >&6 +echo "$as_me:$LINENO: result: $cross_compiling" >&5 +echo "${ECHO_T}$cross_compiling" >&6 + +echo "$as_me:$LINENO: checking for suffix of executables" >&5 +echo $ECHO_N "checking for suffix of executables... $ECHO_C" >&6 +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; then + # If both `conftest.exe' and `conftest' are `present' (well, observable) +# catch `conftest.exe'. For instance with Cygwin, `ls conftest' will +# work properly (i.e., refer to `conftest.exe'), while it won't with +# `rm'. +for ac_file in conftest.exe conftest conftest.*; do + test -f "$ac_file" || continue + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.o | *.obj ) ;; + *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` + export ac_cv_exeext + break;; + * ) break;; + esac +done +else + { { echo "$as_me:$LINENO: error: cannot compute suffix of executables: cannot compile and link +See \`config.log' for more details." >&5 +echo "$as_me: error: cannot compute suffix of executables: cannot compile and link +See \`config.log' for more details." >&2;} + { (exit 1); exit 1; }; } +fi + +rm -f conftest$ac_cv_exeext +echo "$as_me:$LINENO: result: $ac_cv_exeext" >&5 +echo "${ECHO_T}$ac_cv_exeext" >&6 + +rm -f conftest.$ac_ext +EXEEXT=$ac_cv_exeext +ac_exeext=$EXEEXT +echo "$as_me:$LINENO: checking for suffix of object files" >&5 +echo $ECHO_N "checking for suffix of object files... $ECHO_C" >&6 +if test "${ac_cv_objext+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.o conftest.obj +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; then + for ac_file in `(ls conftest.o conftest.obj; ls conftest.*) 2>/dev/null`; do + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg ) ;; + *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` + break;; + esac +done +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +{ { echo "$as_me:$LINENO: error: cannot compute suffix of object files: cannot compile +See \`config.log' for more details." >&5 +echo "$as_me: error: cannot compute suffix of object files: cannot compile +See \`config.log' for more details." >&2;} + { (exit 1); exit 1; }; } +fi + +rm -f conftest.$ac_cv_objext conftest.$ac_ext +fi +echo "$as_me:$LINENO: result: $ac_cv_objext" >&5 +echo "${ECHO_T}$ac_cv_objext" >&6 +OBJEXT=$ac_cv_objext +ac_objext=$OBJEXT +echo "$as_me:$LINENO: checking whether we are using the GNU C compiler" >&5 +echo $ECHO_N "checking whether we are using the GNU C compiler... $ECHO_C" >&6 +if test "${ac_cv_c_compiler_gnu+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ +#ifndef __GNUC__ + choke me +#endif + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_compiler_gnu=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_compiler_gnu=no +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +ac_cv_c_compiler_gnu=$ac_compiler_gnu + +fi +echo "$as_me:$LINENO: result: $ac_cv_c_compiler_gnu" >&5 +echo "${ECHO_T}$ac_cv_c_compiler_gnu" >&6 +GCC=`test $ac_compiler_gnu = yes && echo yes` +ac_test_CFLAGS=${CFLAGS+set} +ac_save_CFLAGS=$CFLAGS +CFLAGS="-g" +echo "$as_me:$LINENO: checking whether $CC accepts -g" >&5 +echo $ECHO_N "checking whether $CC accepts -g... $ECHO_C" >&6 +if test "${ac_cv_prog_cc_g+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_prog_cc_g=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_prog_cc_g=no +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +fi +echo "$as_me:$LINENO: result: $ac_cv_prog_cc_g" >&5 +echo "${ECHO_T}$ac_cv_prog_cc_g" >&6 +if test "$ac_test_CFLAGS" = set; then + CFLAGS=$ac_save_CFLAGS +elif test $ac_cv_prog_cc_g = yes; then + if test "$GCC" = yes; then + CFLAGS="-g -O2" + else + CFLAGS="-g" + fi +else + if test "$GCC" = yes; then + CFLAGS="-O2" + else + CFLAGS= + fi +fi +echo "$as_me:$LINENO: checking for $CC option to accept ANSI C" >&5 +echo $ECHO_N "checking for $CC option to accept ANSI C... $ECHO_C" >&6 +if test "${ac_cv_prog_cc_stdc+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_cv_prog_cc_stdc=no +ac_save_CC=$CC +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +#include +#include +#include +/* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ +struct buf { int x; }; +FILE * (*rcsopen) (struct buf *, struct stat *, int); +static char *e (p, i) + char **p; + int i; +{ + return p[i]; +} +static char *f (char * (*g) (char **, int), char **p, ...) +{ + char *s; + va_list v; + va_start (v,p); + s = g (p, va_arg (v,int)); + va_end (v); + return s; +} + +/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has + function prototypes and stuff, but not '\xHH' hex character constants. + These don't provoke an error unfortunately, instead are silently treated + as 'x'. The following induces an error, until -std1 is added to get + proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an + array size at least. It's necessary to write '\x00'==0 to get something + that's true only with -std1. */ +int osf4_cc_array ['\x00' == 0 ? 1 : -1]; + +int test (int i, double x); +struct s1 {int (*f) (int a);}; +struct s2 {int (*f) (double a);}; +int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); +int argc; +char **argv; +int +main () +{ +return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; + ; + return 0; +} +_ACEOF +# Don't try gcc -ansi; that turns off useful extensions and +# breaks some systems' header files. +# AIX -qlanglvl=ansi +# Ultrix and OSF/1 -std1 +# HP-UX 10.20 and later -Ae +# HP-UX older versions -Aa -D_HPUX_SOURCE +# SVR4 -Xc -D__EXTENSIONS__ +for ac_arg in "" -qlanglvl=ansi -std1 -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" +do + CC="$ac_save_CC $ac_arg" + rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_prog_cc_stdc=$ac_arg +break +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +fi +rm -f conftest.err conftest.$ac_objext +done +rm -f conftest.$ac_ext conftest.$ac_objext +CC=$ac_save_CC + +fi + +case "x$ac_cv_prog_cc_stdc" in + x|xno) + echo "$as_me:$LINENO: result: none needed" >&5 +echo "${ECHO_T}none needed" >&6 ;; + *) + echo "$as_me:$LINENO: result: $ac_cv_prog_cc_stdc" >&5 +echo "${ECHO_T}$ac_cv_prog_cc_stdc" >&6 + CC="$CC $ac_cv_prog_cc_stdc" ;; +esac + +# Some people use a C++ compiler to compile C. Since we use `exit', +# in C++ we need to declare it. In case someone uses the same compiler +# for both compiling C and C++ we need to have the C++ compiler decide +# the declaration of exit, since it's the most demanding environment. +cat >conftest.$ac_ext <<_ACEOF +#ifndef __cplusplus + choke me +#endif +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + for ac_declaration in \ + '' \ + 'extern "C" void std::exit (int) throw (); using std::exit;' \ + 'extern "C" void std::exit (int); using std::exit;' \ + 'extern "C" void exit (int) throw ();' \ + 'extern "C" void exit (int);' \ + 'void exit (int);' +do + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_declaration +#include +int +main () +{ +exit (42); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + : +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +continue +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_declaration +int +main () +{ +exit (42); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + break +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +done +rm -f conftest* +if test -n "$ac_declaration"; then + echo '#ifdef __cplusplus' >>confdefs.h + echo $ac_declaration >>confdefs.h + echo '#endif' >>confdefs.h +fi + +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + +echo "$as_me:$LINENO: checking whether ${MAKE-make} sets \$(MAKE)" >&5 +echo $ECHO_N "checking whether ${MAKE-make} sets \$(MAKE)... $ECHO_C" >&6 +set dummy ${MAKE-make}; ac_make=`echo "$2" | sed 'y,:./+-,___p_,'` +if eval "test \"\${ac_cv_prog_make_${ac_make}_set+set}\" = set"; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.make <<\_ACEOF +all: + @echo 'ac_maketemp="$(MAKE)"' +_ACEOF +# GNU make sometimes prints "make[1]: Entering...", which would confuse us. +eval `${MAKE-make} -f conftest.make 2>/dev/null | grep temp=` +if test -n "$ac_maketemp"; then + eval ac_cv_prog_make_${ac_make}_set=yes +else + eval ac_cv_prog_make_${ac_make}_set=no +fi +rm -f conftest.make +fi +if eval "test \"`echo '$ac_cv_prog_make_'${ac_make}_set`\" = yes"; then + echo "$as_me:$LINENO: result: yes" >&5 +echo "${ECHO_T}yes" >&6 + SET_MAKE= +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 + SET_MAKE="MAKE=${MAKE-make}" +fi + + + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu +echo "$as_me:$LINENO: checking how to run the C preprocessor" >&5 +echo $ECHO_N "checking how to run the C preprocessor... $ECHO_C" >&6 +# On Suns, sometimes $CPP names a directory. +if test -n "$CPP" && test -d "$CPP"; then + CPP= +fi +if test -z "$CPP"; then + if test "${ac_cv_prog_CPP+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + # Double quotes because CPP needs to be expanded + for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" + do + ac_preproc_ok=false +for ac_c_preproc_warn_flag in '' yes +do + # Use a header file that comes with gcc, so configuring glibc + # with a fresh cross-compiler works. + # Prefer to if __STDC__ is defined, since + # exists even on freestanding compilers. + # On the NeXT, cc -E runs the code through the compiler's parser, + # not just through cpp. "Syntax error" is here to catch this case. + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#ifdef __STDC__ +# include +#else +# include +#endif + Syntax error +_ACEOF +if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 + (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null; then + if test -s conftest.err; then + ac_cpp_err=$ac_c_preproc_warn_flag + ac_cpp_err=$ac_cpp_err$ac_c_werror_flag + else + ac_cpp_err= + fi +else + ac_cpp_err=yes +fi +if test -z "$ac_cpp_err"; then + : +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + # Broken: fails on valid input. +continue +fi +rm -f conftest.err conftest.$ac_ext + + # OK, works on sane cases. Now check whether non-existent headers + # can be detected and how. + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +_ACEOF +if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 + (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null; then + if test -s conftest.err; then + ac_cpp_err=$ac_c_preproc_warn_flag + ac_cpp_err=$ac_cpp_err$ac_c_werror_flag + else + ac_cpp_err= + fi +else + ac_cpp_err=yes +fi +if test -z "$ac_cpp_err"; then + # Broken: success on invalid input. +continue +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + # Passes both tests. +ac_preproc_ok=: +break +fi +rm -f conftest.err conftest.$ac_ext + +done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.err conftest.$ac_ext +if $ac_preproc_ok; then + break +fi + + done + ac_cv_prog_CPP=$CPP + +fi + CPP=$ac_cv_prog_CPP +else + ac_cv_prog_CPP=$CPP +fi +echo "$as_me:$LINENO: result: $CPP" >&5 +echo "${ECHO_T}$CPP" >&6 +ac_preproc_ok=false +for ac_c_preproc_warn_flag in '' yes +do + # Use a header file that comes with gcc, so configuring glibc + # with a fresh cross-compiler works. + # Prefer to if __STDC__ is defined, since + # exists even on freestanding compilers. + # On the NeXT, cc -E runs the code through the compiler's parser, + # not just through cpp. "Syntax error" is here to catch this case. + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#ifdef __STDC__ +# include +#else +# include +#endif + Syntax error +_ACEOF +if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 + (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null; then + if test -s conftest.err; then + ac_cpp_err=$ac_c_preproc_warn_flag + ac_cpp_err=$ac_cpp_err$ac_c_werror_flag + else + ac_cpp_err= + fi +else + ac_cpp_err=yes +fi +if test -z "$ac_cpp_err"; then + : +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + # Broken: fails on valid input. +continue +fi +rm -f conftest.err conftest.$ac_ext + + # OK, works on sane cases. Now check whether non-existent headers + # can be detected and how. + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +_ACEOF +if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 + (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null; then + if test -s conftest.err; then + ac_cpp_err=$ac_c_preproc_warn_flag + ac_cpp_err=$ac_cpp_err$ac_c_werror_flag + else + ac_cpp_err= + fi +else + ac_cpp_err=yes +fi +if test -z "$ac_cpp_err"; then + # Broken: success on invalid input. +continue +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + # Passes both tests. +ac_preproc_ok=: +break +fi +rm -f conftest.err conftest.$ac_ext + +done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.err conftest.$ac_ext +if $ac_preproc_ok; then + : +else + { { echo "$as_me:$LINENO: error: C preprocessor \"$CPP\" fails sanity check +See \`config.log' for more details." >&5 +echo "$as_me: error: C preprocessor \"$CPP\" fails sanity check +See \`config.log' for more details." >&2;} + { (exit 1); exit 1; }; } +fi + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + +echo "$as_me:$LINENO: checking for egrep" >&5 +echo $ECHO_N "checking for egrep... $ECHO_C" >&6 +if test "${ac_cv_prog_egrep+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if echo a | (grep -E '(a|b)') >/dev/null 2>&1 + then ac_cv_prog_egrep='grep -E' + else ac_cv_prog_egrep='egrep' + fi +fi +echo "$as_me:$LINENO: result: $ac_cv_prog_egrep" >&5 +echo "${ECHO_T}$ac_cv_prog_egrep" >&6 + EGREP=$ac_cv_prog_egrep + + +echo "$as_me:$LINENO: checking for ANSI C header files" >&5 +echo $ECHO_N "checking for ANSI C header files... $ECHO_C" >&6 +if test "${ac_cv_header_stdc+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +#include +#include +#include + +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_header_stdc=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_header_stdc=no +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext + +if test $ac_cv_header_stdc = yes; then + # SunOS 4.x string.h does not declare mem*, contrary to ANSI. + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "memchr" >/dev/null 2>&1; then + : +else + ac_cv_header_stdc=no +fi +rm -f conftest* + +fi + +if test $ac_cv_header_stdc = yes; then + # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "free" >/dev/null 2>&1; then + : +else + ac_cv_header_stdc=no +fi +rm -f conftest* + +fi + +if test $ac_cv_header_stdc = yes; then + # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. + if test "$cross_compiling" = yes; then + : +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +#if ((' ' & 0x0FF) == 0x020) +# define ISLOWER(c) ('a' <= (c) && (c) <= 'z') +# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) +#else +# define ISLOWER(c) \ + (('a' <= (c) && (c) <= 'i') \ + || ('j' <= (c) && (c) <= 'r') \ + || ('s' <= (c) && (c) <= 'z')) +# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) +#endif + +#define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) +int +main () +{ + int i; + for (i = 0; i < 256; i++) + if (XOR (islower (i), ISLOWER (i)) + || toupper (i) != TOUPPER (i)) + exit(2); + exit (0); +} +_ACEOF +rm -f conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { ac_try='./conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + : +else + echo "$as_me: program exited with status $ac_status" >&5 +echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +( exit $ac_status ) +ac_cv_header_stdc=no +fi +rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext +fi +fi +fi +echo "$as_me:$LINENO: result: $ac_cv_header_stdc" >&5 +echo "${ECHO_T}$ac_cv_header_stdc" >&6 +if test $ac_cv_header_stdc = yes; then + +cat >>confdefs.h <<\_ACEOF +#define STDC_HEADERS 1 +_ACEOF + +fi + +echo "$as_me:$LINENO: checking whether time.h and sys/time.h may both be included" >&5 +echo $ECHO_N "checking whether time.h and sys/time.h may both be included... $ECHO_C" >&6 +if test "${ac_cv_header_time+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +#include +#include + +int +main () +{ +if ((struct tm *) 0) +return 0; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_header_time=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_header_time=no +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +fi +echo "$as_me:$LINENO: result: $ac_cv_header_time" >&5 +echo "${ECHO_T}$ac_cv_header_time" >&6 +if test $ac_cv_header_time = yes; then + +cat >>confdefs.h <<\_ACEOF +#define TIME_WITH_SYS_TIME 1 +_ACEOF + +fi + +echo "$as_me:$LINENO: checking for sys/wait.h that is POSIX.1 compatible" >&5 +echo $ECHO_N "checking for sys/wait.h that is POSIX.1 compatible... $ECHO_C" >&6 +if test "${ac_cv_header_sys_wait_h+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +#include +#ifndef WEXITSTATUS +# define WEXITSTATUS(stat_val) ((unsigned)(stat_val) >> 8) +#endif +#ifndef WIFEXITED +# define WIFEXITED(stat_val) (((stat_val) & 255) == 0) +#endif + +int +main () +{ + int s; + wait (&s); + s = WIFEXITED (s) ? WEXITSTATUS (s) : 1; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_header_sys_wait_h=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_header_sys_wait_h=no +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +fi +echo "$as_me:$LINENO: result: $ac_cv_header_sys_wait_h" >&5 +echo "${ECHO_T}$ac_cv_header_sys_wait_h" >&6 +if test $ac_cv_header_sys_wait_h = yes; then + +cat >>confdefs.h <<\_ACEOF +#define HAVE_SYS_WAIT_H 1 +_ACEOF + +fi + +# On IRIX 5.3, sys/types and inttypes.h are conflicting. + + + + + + + + + +for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ + inttypes.h stdint.h unistd.h +do +as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` +echo "$as_me:$LINENO: checking for $ac_header" >&5 +echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 +if eval "test \"\${$as_ac_Header+set}\" = set"; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default + +#include <$ac_header> +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + eval "$as_ac_Header=yes" +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +eval "$as_ac_Header=no" +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +fi +echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 +echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 +if test `eval echo '${'$as_ac_Header'}'` = yes; then + cat >>confdefs.h <<_ACEOF +#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 +_ACEOF + +fi + +done + + + + + + + + + + + + + + + + + + + + + + + + + + + +for ac_header in ctype.h dirent.h errno.h fcntl.h getopt.h grp.h inttypes.h netdb.h pwd.h signal.h stdint.h strings.h string.h syslog.h tcpd.h unistd.h arpa/inet.h netinet/in.h socket.h sys/types.h sys/time.h sys/resource.h sys/wait.h sys/socket.h sys/stat.h +do +as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` +if eval "test \"\${$as_ac_Header+set}\" = set"; then + echo "$as_me:$LINENO: checking for $ac_header" >&5 +echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 +if eval "test \"\${$as_ac_Header+set}\" = set"; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +fi +echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 +echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 +else + # Is the header compilable? +echo "$as_me:$LINENO: checking $ac_header usability" >&5 +echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6 +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +#include <$ac_header> +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_header_compiler=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_header_compiler=no +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 +echo "${ECHO_T}$ac_header_compiler" >&6 + +# Is the header present? +echo "$as_me:$LINENO: checking $ac_header presence" >&5 +echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6 +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include <$ac_header> +_ACEOF +if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 + (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null; then + if test -s conftest.err; then + ac_cpp_err=$ac_c_preproc_warn_flag + ac_cpp_err=$ac_cpp_err$ac_c_werror_flag + else + ac_cpp_err= + fi +else + ac_cpp_err=yes +fi +if test -z "$ac_cpp_err"; then + ac_header_preproc=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_header_preproc=no +fi +rm -f conftest.err conftest.$ac_ext +echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 +echo "${ECHO_T}$ac_header_preproc" >&6 + +# So? What about this header? +case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in + yes:no: ) + { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 +echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 +echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} + ac_header_preproc=yes + ;; + no:yes:* ) + { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 +echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 +echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 +echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 +echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 +echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 +echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} + ( + cat <<\_ASBOX +## ------------------------------------------------- ## +## Report this to nagios-users@lists.sourceforge.net ## +## ------------------------------------------------- ## +_ASBOX + ) | + sed "s/^/$as_me: WARNING: /" >&2 + ;; +esac +echo "$as_me:$LINENO: checking for $ac_header" >&5 +echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 +if eval "test \"\${$as_ac_Header+set}\" = set"; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + eval "$as_ac_Header=\$ac_header_preproc" +fi +echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 +echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 + +fi +if test `eval echo '${'$as_ac_Header'}'` = yes; then + cat >>confdefs.h <<_ACEOF +#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 +_ACEOF + +fi + +done + + +echo "$as_me:$LINENO: checking for an ANSI C-conforming const" >&5 +echo $ECHO_N "checking for an ANSI C-conforming const... $ECHO_C" >&6 +if test "${ac_cv_c_const+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ +/* FIXME: Include the comments suggested by Paul. */ +#ifndef __cplusplus + /* Ultrix mips cc rejects this. */ + typedef int charset[2]; + const charset x; + /* SunOS 4.1.1 cc rejects this. */ + char const *const *ccp; + char **p; + /* NEC SVR4.0.2 mips cc rejects this. */ + struct point {int x, y;}; + static struct point const zero = {0,0}; + /* AIX XL C 1.02.0.0 rejects this. + It does not let you subtract one const X* pointer from another in + an arm of an if-expression whose if-part is not a constant + expression */ + const char *g = "string"; + ccp = &g + (g ? g-g : 0); + /* HPUX 7.0 cc rejects these. */ + ++ccp; + p = (char**) ccp; + ccp = (char const *const *) p; + { /* SCO 3.2v4 cc rejects this. */ + char *t; + char const *s = 0 ? (char *) 0 : (char const *) 0; + + *t++ = 0; + } + { /* Someone thinks the Sun supposedly-ANSI compiler will reject this. */ + int x[] = {25, 17}; + const int *foo = &x[0]; + ++foo; + } + { /* Sun SC1.0 ANSI compiler rejects this -- but not the above. */ + typedef const int *iptr; + iptr p = 0; + ++p; + } + { /* AIX XL C 1.02.0.0 rejects this saying + "k.c", line 2.27: 1506-025 (S) Operand must be a modifiable lvalue. */ + struct s { int j; const int *ap[3]; }; + struct s *b; b->j = 5; + } + { /* ULTRIX-32 V3.1 (Rev 9) vcc rejects this */ + const int foo = 10; + } +#endif + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_c_const=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_c_const=no +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +fi +echo "$as_me:$LINENO: result: $ac_cv_c_const" >&5 +echo "${ECHO_T}$ac_cv_c_const" >&6 +if test $ac_cv_c_const = no; then + +cat >>confdefs.h <<\_ACEOF +#define const +_ACEOF + +fi + +echo "$as_me:$LINENO: checking whether struct tm is in sys/time.h or time.h" >&5 +echo $ECHO_N "checking whether struct tm is in sys/time.h or time.h... $ECHO_C" >&6 +if test "${ac_cv_struct_tm+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +#include + +int +main () +{ +struct tm *tp; tp->tm_sec; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_struct_tm=time.h +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_struct_tm=sys/time.h +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +fi +echo "$as_me:$LINENO: result: $ac_cv_struct_tm" >&5 +echo "${ECHO_T}$ac_cv_struct_tm" >&6 +if test $ac_cv_struct_tm = sys/time.h; then + +cat >>confdefs.h <<\_ACEOF +#define TM_IN_SYS_TIME 1 +_ACEOF + +fi + +echo "$as_me:$LINENO: checking for mode_t" >&5 +echo $ECHO_N "checking for mode_t... $ECHO_C" >&6 +if test "${ac_cv_type_mode_t+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +int +main () +{ +if ((mode_t *) 0) + return 0; +if (sizeof (mode_t)) + return 0; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_type_mode_t=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_type_mode_t=no +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +fi +echo "$as_me:$LINENO: result: $ac_cv_type_mode_t" >&5 +echo "${ECHO_T}$ac_cv_type_mode_t" >&6 +if test $ac_cv_type_mode_t = yes; then + : +else + +cat >>confdefs.h <<_ACEOF +#define mode_t int +_ACEOF + +fi + +echo "$as_me:$LINENO: checking for pid_t" >&5 +echo $ECHO_N "checking for pid_t... $ECHO_C" >&6 +if test "${ac_cv_type_pid_t+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +int +main () +{ +if ((pid_t *) 0) + return 0; +if (sizeof (pid_t)) + return 0; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_type_pid_t=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_type_pid_t=no +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +fi +echo "$as_me:$LINENO: result: $ac_cv_type_pid_t" >&5 +echo "${ECHO_T}$ac_cv_type_pid_t" >&6 +if test $ac_cv_type_pid_t = yes; then + : +else + +cat >>confdefs.h <<_ACEOF +#define pid_t int +_ACEOF + +fi + +echo "$as_me:$LINENO: checking for size_t" >&5 +echo $ECHO_N "checking for size_t... $ECHO_C" >&6 +if test "${ac_cv_type_size_t+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +int +main () +{ +if ((size_t *) 0) + return 0; +if (sizeof (size_t)) + return 0; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_type_size_t=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_type_size_t=no +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +fi +echo "$as_me:$LINENO: result: $ac_cv_type_size_t" >&5 +echo "${ECHO_T}$ac_cv_type_size_t" >&6 +if test $ac_cv_type_size_t = yes; then + : +else + +cat >>confdefs.h <<_ACEOF +#define size_t unsigned +_ACEOF + +fi + +echo "$as_me:$LINENO: checking return type of signal handlers" >&5 +echo $ECHO_N "checking return type of signal handlers... $ECHO_C" >&6 +if test "${ac_cv_type_signal+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +#include +#ifdef signal +# undef signal +#endif +#ifdef __cplusplus +extern "C" void (*signal (int, void (*)(int)))(int); +#else +void (*signal ()) (); +#endif + +int +main () +{ +int i; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_type_signal=void +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_type_signal=int +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +fi +echo "$as_me:$LINENO: result: $ac_cv_type_signal" >&5 +echo "${ECHO_T}$ac_cv_type_signal" >&6 + +cat >>confdefs.h <<_ACEOF +#define RETSIGTYPE $ac_cv_type_signal +_ACEOF + + +echo "$as_me:$LINENO: checking for uid_t in sys/types.h" >&5 +echo $ECHO_N "checking for uid_t in sys/types.h... $ECHO_C" >&6 +if test "${ac_cv_type_uid_t+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "uid_t" >/dev/null 2>&1; then + ac_cv_type_uid_t=yes +else + ac_cv_type_uid_t=no +fi +rm -f conftest* + +fi +echo "$as_me:$LINENO: result: $ac_cv_type_uid_t" >&5 +echo "${ECHO_T}$ac_cv_type_uid_t" >&6 +if test $ac_cv_type_uid_t = no; then + +cat >>confdefs.h <<\_ACEOF +#define uid_t int +_ACEOF + + +cat >>confdefs.h <<\_ACEOF +#define gid_t int +_ACEOF + +fi + +echo "$as_me:$LINENO: checking type of array argument to getgroups" >&5 +echo $ECHO_N "checking type of array argument to getgroups... $ECHO_C" >&6 +if test "${ac_cv_type_getgroups+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test "$cross_compiling" = yes; then + ac_cv_type_getgroups=cross +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +/* Thanks to Mike Rendell for this test. */ +#include +#define NGID 256 +#undef MAX +#define MAX(x, y) ((x) > (y) ? (x) : (y)) + +int +main () +{ + gid_t gidset[NGID]; + int i, n; + union { gid_t gval; long lval; } val; + + val.lval = -1; + for (i = 0; i < NGID; i++) + gidset[i] = val.gval; + n = getgroups (sizeof (gidset) / MAX (sizeof (int), sizeof (gid_t)) - 1, + gidset); + /* Exit non-zero if getgroups seems to require an array of ints. This + happens when gid_t is short but getgroups modifies an array of ints. */ + exit ((n > 0 && gidset[n] != val.gval) ? 1 : 0); +} +_ACEOF +rm -f conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { ac_try='./conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_type_getgroups=gid_t +else + echo "$as_me: program exited with status $ac_status" >&5 +echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +( exit $ac_status ) +ac_cv_type_getgroups=int +fi +rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext +fi +if test $ac_cv_type_getgroups = cross; then + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "getgroups.*int.*gid_t" >/dev/null 2>&1; then + ac_cv_type_getgroups=gid_t +else + ac_cv_type_getgroups=int +fi +rm -f conftest* + +fi +fi +echo "$as_me:$LINENO: result: $ac_cv_type_getgroups" >&5 +echo "${ECHO_T}$ac_cv_type_getgroups" >&6 + +cat >>confdefs.h <<_ACEOF +#define GETGROUPS_T $ac_cv_type_getgroups +_ACEOF + + + +echo "$as_me:$LINENO: checking for int" >&5 +echo $ECHO_N "checking for int... $ECHO_C" >&6 +if test "${ac_cv_type_int+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +int +main () +{ +if ((int *) 0) + return 0; +if (sizeof (int)) + return 0; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_type_int=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_type_int=no +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +fi +echo "$as_me:$LINENO: result: $ac_cv_type_int" >&5 +echo "${ECHO_T}$ac_cv_type_int" >&6 + +echo "$as_me:$LINENO: checking size of int" >&5 +echo $ECHO_N "checking size of int... $ECHO_C" >&6 +if test "${ac_cv_sizeof_int+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test "$ac_cv_type_int" = yes; then + # The cast to unsigned long works around a bug in the HP C Compiler + # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects + # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. + # This bug is HP SR number 8606223364. + if test "$cross_compiling" = yes; then + # Depending upon the size, compute the lo and hi bounds. +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +int +main () +{ +static int test_array [1 - 2 * !(((long) (sizeof (int))) >= 0)]; +test_array [0] = 0 + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_lo=0 ac_mid=0 + while :; do + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +int +main () +{ +static int test_array [1 - 2 * !(((long) (sizeof (int))) <= $ac_mid)]; +test_array [0] = 0 + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_hi=$ac_mid; break +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_lo=`expr $ac_mid + 1` + if test $ac_lo -le $ac_mid; then + ac_lo= ac_hi= + break + fi + ac_mid=`expr 2 '*' $ac_mid + 1` +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext + done +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +int +main () +{ +static int test_array [1 - 2 * !(((long) (sizeof (int))) < 0)]; +test_array [0] = 0 + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_hi=-1 ac_mid=-1 + while :; do + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +int +main () +{ +static int test_array [1 - 2 * !(((long) (sizeof (int))) >= $ac_mid)]; +test_array [0] = 0 + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_lo=$ac_mid; break +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_hi=`expr '(' $ac_mid ')' - 1` + if test $ac_mid -le $ac_hi; then + ac_lo= ac_hi= + break + fi + ac_mid=`expr 2 '*' $ac_mid` +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext + done +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_lo= ac_hi= +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +# Binary search between lo and hi bounds. +while test "x$ac_lo" != "x$ac_hi"; do + ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo` + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +int +main () +{ +static int test_array [1 - 2 * !(((long) (sizeof (int))) <= $ac_mid)]; +test_array [0] = 0 + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_hi=$ac_mid +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_lo=`expr '(' $ac_mid ')' + 1` +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +done +case $ac_lo in +?*) ac_cv_sizeof_int=$ac_lo;; +'') { { echo "$as_me:$LINENO: error: cannot compute sizeof (int), 77 +See \`config.log' for more details." >&5 +echo "$as_me: error: cannot compute sizeof (int), 77 +See \`config.log' for more details." >&2;} + { (exit 1); exit 1; }; } ;; +esac +else + if test "$cross_compiling" = yes; then + { { echo "$as_me:$LINENO: error: cannot run test program while cross compiling +See \`config.log' for more details." >&5 +echo "$as_me: error: cannot run test program while cross compiling +See \`config.log' for more details." >&2;} + { (exit 1); exit 1; }; } +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +long longval () { return (long) (sizeof (int)); } +unsigned long ulongval () { return (long) (sizeof (int)); } +#include +#include +int +main () +{ + + FILE *f = fopen ("conftest.val", "w"); + if (! f) + exit (1); + if (((long) (sizeof (int))) < 0) + { + long i = longval (); + if (i != ((long) (sizeof (int)))) + exit (1); + fprintf (f, "%ld\n", i); + } + else + { + unsigned long i = ulongval (); + if (i != ((long) (sizeof (int)))) + exit (1); + fprintf (f, "%lu\n", i); + } + exit (ferror (f) || fclose (f) != 0); + + ; + return 0; +} +_ACEOF +rm -f conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { ac_try='./conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_sizeof_int=`cat conftest.val` +else + echo "$as_me: program exited with status $ac_status" >&5 +echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +( exit $ac_status ) +{ { echo "$as_me:$LINENO: error: cannot compute sizeof (int), 77 +See \`config.log' for more details." >&5 +echo "$as_me: error: cannot compute sizeof (int), 77 +See \`config.log' for more details." >&2;} + { (exit 1); exit 1; }; } +fi +rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext +fi +fi +rm -f conftest.val +else + ac_cv_sizeof_int=0 +fi +fi +echo "$as_me:$LINENO: result: $ac_cv_sizeof_int" >&5 +echo "${ECHO_T}$ac_cv_sizeof_int" >&6 +cat >>confdefs.h <<_ACEOF +#define SIZEOF_INT $ac_cv_sizeof_int +_ACEOF + + +echo "$as_me:$LINENO: checking for short" >&5 +echo $ECHO_N "checking for short... $ECHO_C" >&6 +if test "${ac_cv_type_short+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +int +main () +{ +if ((short *) 0) + return 0; +if (sizeof (short)) + return 0; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_type_short=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_type_short=no +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +fi +echo "$as_me:$LINENO: result: $ac_cv_type_short" >&5 +echo "${ECHO_T}$ac_cv_type_short" >&6 + +echo "$as_me:$LINENO: checking size of short" >&5 +echo $ECHO_N "checking size of short... $ECHO_C" >&6 +if test "${ac_cv_sizeof_short+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test "$ac_cv_type_short" = yes; then + # The cast to unsigned long works around a bug in the HP C Compiler + # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects + # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. + # This bug is HP SR number 8606223364. + if test "$cross_compiling" = yes; then + # Depending upon the size, compute the lo and hi bounds. +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +int +main () +{ +static int test_array [1 - 2 * !(((long) (sizeof (short))) >= 0)]; +test_array [0] = 0 + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_lo=0 ac_mid=0 + while :; do + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +int +main () +{ +static int test_array [1 - 2 * !(((long) (sizeof (short))) <= $ac_mid)]; +test_array [0] = 0 + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_hi=$ac_mid; break +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_lo=`expr $ac_mid + 1` + if test $ac_lo -le $ac_mid; then + ac_lo= ac_hi= + break + fi + ac_mid=`expr 2 '*' $ac_mid + 1` +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext + done +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +int +main () +{ +static int test_array [1 - 2 * !(((long) (sizeof (short))) < 0)]; +test_array [0] = 0 + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_hi=-1 ac_mid=-1 + while :; do + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +int +main () +{ +static int test_array [1 - 2 * !(((long) (sizeof (short))) >= $ac_mid)]; +test_array [0] = 0 + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_lo=$ac_mid; break +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_hi=`expr '(' $ac_mid ')' - 1` + if test $ac_mid -le $ac_hi; then + ac_lo= ac_hi= + break + fi + ac_mid=`expr 2 '*' $ac_mid` +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext + done +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_lo= ac_hi= +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +# Binary search between lo and hi bounds. +while test "x$ac_lo" != "x$ac_hi"; do + ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo` + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +int +main () +{ +static int test_array [1 - 2 * !(((long) (sizeof (short))) <= $ac_mid)]; +test_array [0] = 0 + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_hi=$ac_mid +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_lo=`expr '(' $ac_mid ')' + 1` +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +done +case $ac_lo in +?*) ac_cv_sizeof_short=$ac_lo;; +'') { { echo "$as_me:$LINENO: error: cannot compute sizeof (short), 77 +See \`config.log' for more details." >&5 +echo "$as_me: error: cannot compute sizeof (short), 77 +See \`config.log' for more details." >&2;} + { (exit 1); exit 1; }; } ;; +esac +else + if test "$cross_compiling" = yes; then + { { echo "$as_me:$LINENO: error: cannot run test program while cross compiling +See \`config.log' for more details." >&5 +echo "$as_me: error: cannot run test program while cross compiling +See \`config.log' for more details." >&2;} + { (exit 1); exit 1; }; } +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +long longval () { return (long) (sizeof (short)); } +unsigned long ulongval () { return (long) (sizeof (short)); } +#include +#include +int +main () +{ + + FILE *f = fopen ("conftest.val", "w"); + if (! f) + exit (1); + if (((long) (sizeof (short))) < 0) + { + long i = longval (); + if (i != ((long) (sizeof (short)))) + exit (1); + fprintf (f, "%ld\n", i); + } + else + { + unsigned long i = ulongval (); + if (i != ((long) (sizeof (short)))) + exit (1); + fprintf (f, "%lu\n", i); + } + exit (ferror (f) || fclose (f) != 0); + + ; + return 0; +} +_ACEOF +rm -f conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { ac_try='./conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_sizeof_short=`cat conftest.val` +else + echo "$as_me: program exited with status $ac_status" >&5 +echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +( exit $ac_status ) +{ { echo "$as_me:$LINENO: error: cannot compute sizeof (short), 77 +See \`config.log' for more details." >&5 +echo "$as_me: error: cannot compute sizeof (short), 77 +See \`config.log' for more details." >&2;} + { (exit 1); exit 1; }; } +fi +rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext +fi +fi +rm -f conftest.val +else + ac_cv_sizeof_short=0 +fi +fi +echo "$as_me:$LINENO: result: $ac_cv_sizeof_short" >&5 +echo "${ECHO_T}$ac_cv_sizeof_short" >&6 +cat >>confdefs.h <<_ACEOF +#define SIZEOF_SHORT $ac_cv_sizeof_short +_ACEOF + + +echo "$as_me:$LINENO: checking for long" >&5 +echo $ECHO_N "checking for long... $ECHO_C" >&6 +if test "${ac_cv_type_long+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +int +main () +{ +if ((long *) 0) + return 0; +if (sizeof (long)) + return 0; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_type_long=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_type_long=no +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +fi +echo "$as_me:$LINENO: result: $ac_cv_type_long" >&5 +echo "${ECHO_T}$ac_cv_type_long" >&6 + +echo "$as_me:$LINENO: checking size of long" >&5 +echo $ECHO_N "checking size of long... $ECHO_C" >&6 +if test "${ac_cv_sizeof_long+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test "$ac_cv_type_long" = yes; then + # The cast to unsigned long works around a bug in the HP C Compiler + # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects + # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. + # This bug is HP SR number 8606223364. + if test "$cross_compiling" = yes; then + # Depending upon the size, compute the lo and hi bounds. +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +int +main () +{ +static int test_array [1 - 2 * !(((long) (sizeof (long))) >= 0)]; +test_array [0] = 0 + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_lo=0 ac_mid=0 + while :; do + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +int +main () +{ +static int test_array [1 - 2 * !(((long) (sizeof (long))) <= $ac_mid)]; +test_array [0] = 0 + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_hi=$ac_mid; break +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_lo=`expr $ac_mid + 1` + if test $ac_lo -le $ac_mid; then + ac_lo= ac_hi= + break + fi + ac_mid=`expr 2 '*' $ac_mid + 1` +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext + done +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +int +main () +{ +static int test_array [1 - 2 * !(((long) (sizeof (long))) < 0)]; +test_array [0] = 0 + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_hi=-1 ac_mid=-1 + while :; do + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +int +main () +{ +static int test_array [1 - 2 * !(((long) (sizeof (long))) >= $ac_mid)]; +test_array [0] = 0 + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_lo=$ac_mid; break +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_hi=`expr '(' $ac_mid ')' - 1` + if test $ac_mid -le $ac_hi; then + ac_lo= ac_hi= + break + fi + ac_mid=`expr 2 '*' $ac_mid` +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext + done +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_lo= ac_hi= +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +# Binary search between lo and hi bounds. +while test "x$ac_lo" != "x$ac_hi"; do + ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo` + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +int +main () +{ +static int test_array [1 - 2 * !(((long) (sizeof (long))) <= $ac_mid)]; +test_array [0] = 0 + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_hi=$ac_mid +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_lo=`expr '(' $ac_mid ')' + 1` +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +done +case $ac_lo in +?*) ac_cv_sizeof_long=$ac_lo;; +'') { { echo "$as_me:$LINENO: error: cannot compute sizeof (long), 77 +See \`config.log' for more details." >&5 +echo "$as_me: error: cannot compute sizeof (long), 77 +See \`config.log' for more details." >&2;} + { (exit 1); exit 1; }; } ;; +esac +else + if test "$cross_compiling" = yes; then + { { echo "$as_me:$LINENO: error: cannot run test program while cross compiling +See \`config.log' for more details." >&5 +echo "$as_me: error: cannot run test program while cross compiling +See \`config.log' for more details." >&2;} + { (exit 1); exit 1; }; } +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +long longval () { return (long) (sizeof (long)); } +unsigned long ulongval () { return (long) (sizeof (long)); } +#include +#include +int +main () +{ + + FILE *f = fopen ("conftest.val", "w"); + if (! f) + exit (1); + if (((long) (sizeof (long))) < 0) + { + long i = longval (); + if (i != ((long) (sizeof (long)))) + exit (1); + fprintf (f, "%ld\n", i); + } + else + { + unsigned long i = ulongval (); + if (i != ((long) (sizeof (long)))) + exit (1); + fprintf (f, "%lu\n", i); + } + exit (ferror (f) || fclose (f) != 0); + + ; + return 0; +} +_ACEOF +rm -f conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { ac_try='./conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_sizeof_long=`cat conftest.val` +else + echo "$as_me: program exited with status $ac_status" >&5 +echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +( exit $ac_status ) +{ { echo "$as_me:$LINENO: error: cannot compute sizeof (long), 77 +See \`config.log' for more details." >&5 +echo "$as_me: error: cannot compute sizeof (long), 77 +See \`config.log' for more details." >&2;} + { (exit 1); exit 1; }; } +fi +rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext +fi +fi +rm -f conftest.val +else + ac_cv_sizeof_long=0 +fi +fi +echo "$as_me:$LINENO: result: $ac_cv_sizeof_long" >&5 +echo "${ECHO_T}$ac_cv_sizeof_long" >&6 +cat >>confdefs.h <<_ACEOF +#define SIZEOF_LONG $ac_cv_sizeof_long +_ACEOF + + + +echo "$as_me:$LINENO: checking for uint32_t" >&5 +echo $ECHO_N "checking for uint32_t... $ECHO_C" >&6 +if test "${ac_cv_type_uint32_t+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +int +main () +{ +if ((uint32_t *) 0) + return 0; +if (sizeof (uint32_t)) + return 0; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_type_uint32_t=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_type_uint32_t=no +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +fi +echo "$as_me:$LINENO: result: $ac_cv_type_uint32_t" >&5 +echo "${ECHO_T}$ac_cv_type_uint32_t" >&6 +if test $ac_cv_type_uint32_t = yes; then + : +else + +cat >>confdefs.h <<_ACEOF +#define uint32_t unsigned int +_ACEOF + +fi + +echo "$as_me:$LINENO: checking for u_int32_t" >&5 +echo $ECHO_N "checking for u_int32_t... $ECHO_C" >&6 +if test "${ac_cv_type_u_int32_t+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +int +main () +{ +if ((u_int32_t *) 0) + return 0; +if (sizeof (u_int32_t)) + return 0; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_type_u_int32_t=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_type_u_int32_t=no +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +fi +echo "$as_me:$LINENO: result: $ac_cv_type_u_int32_t" >&5 +echo "${ECHO_T}$ac_cv_type_u_int32_t" >&6 +if test $ac_cv_type_u_int32_t = yes; then + : +else + +cat >>confdefs.h <<_ACEOF +#define u_int32_t unsigned int +_ACEOF + +fi + +if test "$ac_cv_type_u_int32_t" = no ; then + if test "$ac_cv_type_u_int32_t" = yes ; then + +cat >>confdefs.h <<\_ACEOF +#define U_INT32_T_IS_UINT32_T 1 +_ACEOF + + else + if test "$ac_cv_sizeof_int" = 4 ; then + +cat >>confdefs.h <<\_ACEOF +#define U_INT32_T_IS_UINT 1 +_ACEOF + + else + if test "$ac_cv_sizeof_long" = 4 ; then + +cat >>confdefs.h <<\_ACEOF +#define U_INT32_T_IS_ULONG 1 +_ACEOF + + else + if test "$ac_cv_sizeof_short" = 4 ; then + +cat >>confdefs.h <<\_ACEOF +#define U_INT32_T_IS_USHORT 1 +_ACEOF + + fi + fi + fi + fi +fi + +echo "$as_me:$LINENO: checking for int32_t" >&5 +echo $ECHO_N "checking for int32_t... $ECHO_C" >&6 +if test "${ac_cv_type_int32_t+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +int +main () +{ +if ((int32_t *) 0) + return 0; +if (sizeof (int32_t)) + return 0; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_type_int32_t=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_type_int32_t=no +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +fi +echo "$as_me:$LINENO: result: $ac_cv_type_int32_t" >&5 +echo "${ECHO_T}$ac_cv_type_int32_t" >&6 +if test $ac_cv_type_int32_t = yes; then + : +else + +cat >>confdefs.h <<_ACEOF +#define int32_t int +_ACEOF + +fi + +if test "$ac_cv_type_int32_t" = no ; then + if test "$ac_cv_sizeof_int" = 4 ; then + +cat >>confdefs.h <<\_ACEOF +#define INT32_T_IS_UINT 1 +_ACEOF + + else + if test "$ac_cv_sizeof_long" = 4 ; then + +cat >>confdefs.h <<\_ACEOF +#define INT32_T_IS_ULONG 1 +_ACEOF + + else + if test "$ac_cv_sizeof_short" = 4 ; then + +cat >>confdefs.h <<\_ACEOF +#define INT32_T_IS_USHORT 1 +_ACEOF + + fi + fi + fi +fi + + +echo "$as_me:$LINENO: checking for va_copy" >&5 +echo $ECHO_N "checking for va_copy... $ECHO_C" >&6 +if test "${ac_cv_HAVE_VA_COPY+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +va_list ap1,ap2; +int +main () +{ +va_copy(ap1,ap2); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_HAVE_VA_COPY=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_HAVE_VA_COPY=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +fi +echo "$as_me:$LINENO: result: $ac_cv_HAVE_VA_COPY" >&5 +echo "${ECHO_T}$ac_cv_HAVE_VA_COPY" >&6 +if test x"$ac_cv_HAVE_VA_COPY" = x"yes"; then + +cat >>confdefs.h <<\_ACEOF +#define HAVE_VA_COPY 1 +_ACEOF + +else + echo "$as_me:$LINENO: checking for __va_copy" >&5 +echo $ECHO_N "checking for __va_copy... $ECHO_C" >&6 +if test "${ac_cv_HAVE___VA_COPY+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include + va_list ap1,ap2; +int +main () +{ +__va_copy(ap1,ap2); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_HAVE___VA_COPY=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_HAVE___VA_COPY=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +fi +echo "$as_me:$LINENO: result: $ac_cv_HAVE___VA_COPY" >&5 +echo "${ECHO_T}$ac_cv_HAVE___VA_COPY" >&6 + if test x"$ac_cv_HAVE___VA_COPY" = x"yes"; then + +cat >>confdefs.h <<\_ACEOF +#define HAVE___VA_COPY 1 +_ACEOF + + fi +fi + +echo "$as_me:$LINENO: checking for vsnprintf" >&5 +echo $ECHO_N "checking for vsnprintf... $ECHO_C" >&6 +if test "${ac_cv_func_vsnprintf+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +/* Define vsnprintf to an innocuous variant, in case declares vsnprintf. + For example, HP-UX 11i declares gettimeofday. */ +#define vsnprintf innocuous_vsnprintf + +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char vsnprintf (); below. + Prefer to if __STDC__ is defined, since + exists even on freestanding compilers. */ + +#ifdef __STDC__ +# include +#else +# include +#endif + +#undef vsnprintf + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +{ +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char vsnprintf (); +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined (__stub_vsnprintf) || defined (__stub___vsnprintf) +choke me +#else +char (*f) () = vsnprintf; +#endif +#ifdef __cplusplus +} +#endif + +int +main () +{ +return f != vsnprintf; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_func_vsnprintf=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_func_vsnprintf=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +fi +echo "$as_me:$LINENO: result: $ac_cv_func_vsnprintf" >&5 +echo "${ECHO_T}$ac_cv_func_vsnprintf" >&6 +if test $ac_cv_func_vsnprintf = yes; then + : +else + SNPRINTF_O=./snprintf.o +fi + +echo "$as_me:$LINENO: checking for snprintf" >&5 +echo $ECHO_N "checking for snprintf... $ECHO_C" >&6 +if test "${ac_cv_func_snprintf+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +/* Define snprintf to an innocuous variant, in case declares snprintf. + For example, HP-UX 11i declares gettimeofday. */ +#define snprintf innocuous_snprintf + +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char snprintf (); below. + Prefer to if __STDC__ is defined, since + exists even on freestanding compilers. */ + +#ifdef __STDC__ +# include +#else +# include +#endif + +#undef snprintf + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +{ +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char snprintf (); +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined (__stub_snprintf) || defined (__stub___snprintf) +choke me +#else +char (*f) () = snprintf; +#endif +#ifdef __cplusplus +} +#endif + +int +main () +{ +return f != snprintf; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_func_snprintf=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_func_snprintf=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +fi +echo "$as_me:$LINENO: result: $ac_cv_func_snprintf" >&5 +echo "${ECHO_T}$ac_cv_func_snprintf" >&6 +if test $ac_cv_func_snprintf = yes; then + : +else + SNPRINTF_O=./snprintf.o +fi + +echo "$as_me:$LINENO: checking for asprintf" >&5 +echo $ECHO_N "checking for asprintf... $ECHO_C" >&6 +if test "${ac_cv_func_asprintf+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +/* Define asprintf to an innocuous variant, in case declares asprintf. + For example, HP-UX 11i declares gettimeofday. */ +#define asprintf innocuous_asprintf + +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char asprintf (); below. + Prefer to if __STDC__ is defined, since + exists even on freestanding compilers. */ + +#ifdef __STDC__ +# include +#else +# include +#endif + +#undef asprintf + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +{ +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char asprintf (); +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined (__stub_asprintf) || defined (__stub___asprintf) +choke me +#else +char (*f) () = asprintf; +#endif +#ifdef __cplusplus +} +#endif + +int +main () +{ +return f != asprintf; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_func_asprintf=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_func_asprintf=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +fi +echo "$as_me:$LINENO: result: $ac_cv_func_asprintf" >&5 +echo "${ECHO_T}$ac_cv_func_asprintf" >&6 +if test $ac_cv_func_asprintf = yes; then + : +else + SNPRINTF_O=./snprintf.o +fi + +echo "$as_me:$LINENO: checking for vasprintf" >&5 +echo $ECHO_N "checking for vasprintf... $ECHO_C" >&6 +if test "${ac_cv_func_vasprintf+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +/* Define vasprintf to an innocuous variant, in case declares vasprintf. + For example, HP-UX 11i declares gettimeofday. */ +#define vasprintf innocuous_vasprintf + +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char vasprintf (); below. + Prefer to if __STDC__ is defined, since + exists even on freestanding compilers. */ + +#ifdef __STDC__ +# include +#else +# include +#endif + +#undef vasprintf + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +{ +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char vasprintf (); +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined (__stub_vasprintf) || defined (__stub___vasprintf) +choke me +#else +char (*f) () = vasprintf; +#endif +#ifdef __cplusplus +} +#endif + +int +main () +{ +return f != vasprintf; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_func_vasprintf=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_func_vasprintf=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +fi +echo "$as_me:$LINENO: result: $ac_cv_func_vasprintf" >&5 +echo "${ECHO_T}$ac_cv_func_vasprintf" >&6 +if test $ac_cv_func_vasprintf = yes; then + : +else + SNPRINTF_O=./snprintf.o +fi + + +echo "$as_me:$LINENO: checking for C99 vsnprintf" >&5 +echo $ECHO_N "checking for C99 vsnprintf... $ECHO_C" >&6 +if test "${ac_cv_HAVE_C99_VSNPRINTF+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + +if test "$cross_compiling" = yes; then + ac_cv_HAVE_C99_VSNPRINTF=cross +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +#include +#include +void foo(const char *format, ...) { + va_list ap; + int len; + char buf[5]; + + va_start(ap, format); + len = vsnprintf(buf, 0, format, ap); + va_end(ap); + if (len != 5) exit(1); + + va_start(ap, format); + len = vsnprintf(0, 0, format, ap); + va_end(ap); + if (len != 5) exit(1); + + if (snprintf(buf, 3, "hello") != 5 || strcmp(buf, "he") != 0) exit(1); + + exit(0); +} +main() { foo("hello"); } + +_ACEOF +rm -f conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { ac_try='./conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_HAVE_C99_VSNPRINTF=yes +else + echo "$as_me: program exited with status $ac_status" >&5 +echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +( exit $ac_status ) +ac_cv_HAVE_C99_VSNPRINTF=no +fi +rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext +fi +fi +echo "$as_me:$LINENO: result: $ac_cv_HAVE_C99_VSNPRINTF" >&5 +echo "${ECHO_T}$ac_cv_HAVE_C99_VSNPRINTF" >&6 +if test x"$ac_cv_HAVE_C99_VSNPRINTF" = x"yes"; then + +cat >>confdefs.h <<\_ACEOF +#define HAVE_C99_VSNPRINTF 1 +_ACEOF + +fi + + + + +for ac_func in getopt_long +do +as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` +echo "$as_me:$LINENO: checking for $ac_func" >&5 +echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6 +if eval "test \"\${$as_ac_var+set}\" = set"; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +/* Define $ac_func to an innocuous variant, in case declares $ac_func. + For example, HP-UX 11i declares gettimeofday. */ +#define $ac_func innocuous_$ac_func + +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char $ac_func (); below. + Prefer to if __STDC__ is defined, since + exists even on freestanding compilers. */ + +#ifdef __STDC__ +# include +#else +# include +#endif + +#undef $ac_func + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +{ +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char $ac_func (); +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined (__stub_$ac_func) || defined (__stub___$ac_func) +choke me +#else +char (*f) () = $ac_func; +#endif +#ifdef __cplusplus +} +#endif + +int +main () +{ +return f != $ac_func; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + eval "$as_ac_var=yes" +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +eval "$as_ac_var=no" +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +fi +echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5 +echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6 +if test `eval echo '${'$as_ac_var'}'` = yes; then + cat >>confdefs.h <<_ACEOF +#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1 +_ACEOF + +else + echo "$as_me:$LINENO: checking for getopt_long in -liberty" >&5 +echo $ECHO_N "checking for getopt_long in -liberty... $ECHO_C" >&6 +if test "${ac_cv_lib_iberty_getopt_long+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-liberty $LIBS" +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char getopt_long (); +int +main () +{ +getopt_long (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_iberty_getopt_long=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_lib_iberty_getopt_long=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:$LINENO: result: $ac_cv_lib_iberty_getopt_long" >&5 +echo "${ECHO_T}$ac_cv_lib_iberty_getopt_long" >&6 +if test $ac_cv_lib_iberty_getopt_long = yes; then + OTHERLIBS="$OTHERLIBS -liberty" +fi + +fi +done + + + +echo "$as_me:$LINENO: checking for main in -lnsl" >&5 +echo $ECHO_N "checking for main in -lnsl... $ECHO_C" >&6 +if test "${ac_cv_lib_nsl_main+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lnsl $LIBS" +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + + +int +main () +{ +main (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_nsl_main=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_lib_nsl_main=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:$LINENO: result: $ac_cv_lib_nsl_main" >&5 +echo "${ECHO_T}$ac_cv_lib_nsl_main" >&6 +if test $ac_cv_lib_nsl_main = yes; then + SOCKETLIBS="$SOCKETLIBS -lnsl" +fi + +echo "$as_me:$LINENO: checking for socket in -lsocket" >&5 +echo $ECHO_N "checking for socket in -lsocket... $ECHO_C" >&6 +if test "${ac_cv_lib_socket_socket+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lsocket $LIBS" +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char socket (); +int +main () +{ +socket (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_socket_socket=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_lib_socket_socket=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:$LINENO: result: $ac_cv_lib_socket_socket" >&5 +echo "${ECHO_T}$ac_cv_lib_socket_socket" >&6 +if test $ac_cv_lib_socket_socket = yes; then + SOCKETLIBS="$SOCKETLIBS -lsocket" +fi + + +echo "$as_me:$LINENO: checking for main in -lwrap" >&5 +echo $ECHO_N "checking for main in -lwrap... $ECHO_C" >&6 +if test "${ac_cv_lib_wrap_main+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lwrap $LIBS" +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + + +int +main () +{ +main (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_wrap_main=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_lib_wrap_main=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:$LINENO: result: $ac_cv_lib_wrap_main" >&5 +echo "${ECHO_T}$ac_cv_lib_wrap_main" >&6 +if test $ac_cv_lib_wrap_main = yes; then + + LIBWRAPLIBS="$LIBWRAPLIBS -lwrap" + +cat >>confdefs.h <<\_ACEOF +#define HAVE_LIBWRAP 1 +_ACEOF + + +fi + + + + + + + +for ac_func in strdup strstr strtoul initgroups closesocket +do +as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` +echo "$as_me:$LINENO: checking for $ac_func" >&5 +echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6 +if eval "test \"\${$as_ac_var+set}\" = set"; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +/* Define $ac_func to an innocuous variant, in case declares $ac_func. + For example, HP-UX 11i declares gettimeofday. */ +#define $ac_func innocuous_$ac_func + +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char $ac_func (); below. + Prefer to if __STDC__ is defined, since + exists even on freestanding compilers. */ + +#ifdef __STDC__ +# include +#else +# include +#endif + +#undef $ac_func + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +{ +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char $ac_func (); +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined (__stub_$ac_func) || defined (__stub___$ac_func) +choke me +#else +char (*f) () = $ac_func; +#endif +#ifdef __cplusplus +} +#endif + +int +main () +{ +return f != $ac_func; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + eval "$as_ac_var=yes" +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +eval "$as_ac_var=no" +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +fi +echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5 +echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6 +if test `eval echo '${'$as_ac_var'}'` = yes; then + cat >>confdefs.h <<_ACEOF +#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1 +_ACEOF + +fi +done + + +echo "$as_me:$LINENO: checking for socklen_t" >&5 +echo $ECHO_N "checking for socklen_t... $ECHO_C" >&6 +if test "${ac_cv_type_socklen_t+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +#include + +int +main () +{ +if ((socklen_t *) 0) + return 0; +if (sizeof (socklen_t)) + return 0; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_type_socklen_t=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_type_socklen_t=no +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +fi +echo "$as_me:$LINENO: result: $ac_cv_type_socklen_t" >&5 +echo "${ECHO_T}$ac_cv_type_socklen_t" >&6 +if test $ac_cv_type_socklen_t = yes; then + : +else + + echo "$as_me:$LINENO: checking for socklen_t equivalent" >&5 +echo $ECHO_N "checking for socklen_t equivalent... $ECHO_C" >&6 + if test "${curl_cv_socklen_t_equiv+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + + # Systems have either "struct sockaddr *" or + # "void *" as the second argument to getpeername + curl_cv_socklen_t_equiv= + for arg2 in "struct sockaddr" void; do + for t in int size_t unsigned long "unsigned long"; do + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + + #ifdef HAVE_SYS_TYPES_H + #include + #endif + #ifdef HAVE_SYS_SOCKET_H + #include + #endif + + int getpeername (int, $arg2 *, $t *); + +int +main () +{ + + $t len; + getpeername(0,0,&len); + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + + curl_cv_socklen_t_equiv="$t" + break + +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext + done + done + + if test "x$curl_cv_socklen_t_equiv" = x; then + { { echo "$as_me:$LINENO: error: Cannot find a type to use in place of socklen_t" >&5 +echo "$as_me: error: Cannot find a type to use in place of socklen_t" >&2;} + { (exit 1); exit 1; }; } + fi + +fi + + echo "$as_me:$LINENO: result: $curl_cv_socklen_t_equiv" >&5 +echo "${ECHO_T}$curl_cv_socklen_t_equiv" >&6 + +cat >>confdefs.h <<_ACEOF +#define socklen_t $curl_cv_socklen_t_equiv +_ACEOF + +fi + + + +echo "$as_me:$LINENO: checking for type of socket size" >&5 +echo $ECHO_N "checking for type of socket size... $ECHO_C" >&6 +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +#include +#include + +int +main () +{ +int a = send(1, (const void *)0, (size_t *) 0, (int *) 0); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + +cat >>confdefs.h <<\_ACEOF +#define SOCKET_SIZE_TYPE size_t +_ACEOF + echo "$as_me:$LINENO: result: size_t" >&5 +echo "${ECHO_T}size_t" >&6 +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + +cat >>confdefs.h <<\_ACEOF +#define SOCKET_SIZE_TYPE int +_ACEOF + echo "$as_me:$LINENO: result: int" >&5 +echo "${ECHO_T}int" >&6 +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext + +#AC_CHECK_TYPE(socklen_t,int, +# AC_DEFINE(socklen_t,int, +# Define to `int' if does not define.),[ +# #ifdef HAVE_SYS_TYPES_H +# #include +# #endif +# #ifdef HAVE_SYS_SOCKET_H +# #include +# #endif +# ]) + +# Check whether --enable-ssl or --disable-ssl was given. +if test "${enable_ssl+set}" = set; then + enableval="$enable_ssl" + + if test x$enableval = xyes; then + check_for_ssl=yes + else + check_for_ssl=no + fi + +else + check_for_ssl=yes +fi; + +ssl_dir= +ssl_inc_dir= +ssl_lib_dir= + +# Check whether --with-ssl or --without-ssl was given. +if test "${with_ssl+set}" = set; then + withval="$with_ssl" + ssl_dir=$withval +fi; + +# Check whether --with-ssl-inc or --without-ssl-inc was given. +if test "${with_ssl_inc+set}" = set; then + withval="$with_ssl_inc" + ssl_inc_dir=$withval +fi; + +# Check whether --with-ssl-lib or --without-ssl-lib was given. +if test "${with_ssl_lib+set}" = set; then + withval="$with_ssl_lib" + ssl_lib_dir=$withval +fi; + +# Check whether --with-kerberos-inc or --without-kerberos-inc was given. +if test "${with_kerberos_inc+set}" = set; then + withval="$with_kerberos_inc" + kerberos_inc_dir=$withval +fi; + +if test x$check_for_ssl = xyes; then + echo "$as_me:$LINENO: checking for SSL headers" >&5 +echo $ECHO_N "checking for SSL headers... $ECHO_C" >&6 + found_ssl=no + for dir in $ssl_inc_dir $ssl_dir /usr/local/openssl /usr/local/ssl /usr/lib/ssl /usr/ssl /usr/pkg /usr/local /usr /usr/freeware/lib/openssl /usr/sfw/include; do + ssldir="$dir" + if test -f "$dir/include/openssl/ssl.h"; then + found_ssl=yes + CFLAGS="$CFLAGS -I$dir/include/openssl -I$ssldir/include" + sslincdir="$dir/include/openssl" + break + fi + if test -f "$dir/include/ssl.h"; then + found_ssl=yes + CFLAGS="$CFLAGS -I$dir/include" + sslincdir="$dir/include" + break + fi + if test -f "$dir/ssl.h"; then + found_ssl=yes + CFLAGS="$CFLAGS -I$dir" + sslincdir="$dir" + ssldir="$dir/.." + break + fi + if test -f "$dir/openssl/ssl.h"; then + found_ssl=yes + CFLAGS="$CFLAGS -I$dir/openssl" + sslincdir="$dir/openssl" + ssldir="$dir/.." + break + fi + done + + if test x_$found_ssl != x_yes; then + { { echo "$as_me:$LINENO: error: Cannot find ssl headers" >&5 +echo "$as_me: error: Cannot find ssl headers" >&2;} + { (exit 1); exit 1; }; } + else + + printf "SSL headers found in $ssldir\n"; + + echo "$as_me:$LINENO: checking for SSL libraries" >&5 +echo $ECHO_N "checking for SSL libraries... $ECHO_C" >&6 + found_ssl=no + for dir in $ssl_lib_dir $ssl_dir /usr/lib64 /usr/lib /usr/local/lib /usr/lib/ssl /usr/ssl/lib /usr/openssl/lib /usr/pkg/lib /usr/freeware/lib/openssl /usr/sfw/lib /opt/freeware/lib; do + ssllibdir="$dir" + if test "`uname -s`" = "Darwin" ; then + soext="dylib" + elif test "`uname -s`" = "HP-UX" ; then + soext="sl" + else + soext="so" + fi + if test -f "$dir/libssl.$soext"; then + found_ssl=yes + break + fi + done + + if test x_$found_ssl != x_yes; then + { { echo "$as_me:$LINENO: error: Cannot find ssl libraries" >&5 +echo "$as_me: error: Cannot find ssl libraries" >&2;} + { (exit 1); exit 1; }; } + else + printf "SSL libraries found in $ssllibdir\n"; + + LDFLAGS="$LDFLAGS -L$ssllibdir"; + LIBS="$LIBS -lssl -lcrypto"; + + +cat >>confdefs.h <<_ACEOF +#define HAVE_SSL 1 +_ACEOF + + + + echo "" + echo "*** Generating DH Parameters for SSL/TLS ***" + if test -f "$ssldir/sbin/openssl"; then + sslbin=$ssldir/sbin/openssl + else + sslbin=$ssldir/bin/openssl + fi + # awk to strip off meta data at bottom of dhparam output + $sslbin dhparam -C 512 | awk '/^-----/ {exit} {print}' > include/dh.h + fi + fi + + echo "$as_me:$LINENO: checking for Kerberos include files" >&5 +echo $ECHO_N "checking for Kerberos include files... $ECHO_C" >&6 + found_kerberos=no + for dir in $kerberos_inc_dir /usr/kerberos/include; do + kerbdir="$dir" + if test -f "$dir/krb5.h"; then + found_kerberos=yes + CFLAGS="$CFLAGS -I$kerbdir" + +cat >>confdefs.h <<_ACEOF +#define HAVE_KRB5_H 1 +_ACEOF + + break + fi + done + + if test x_$found_kerberos != x_yes; then + printf "could not find include files\n"; + else + printf "found Kerberos include files in $kerbdir\n"; + fi + + +fi + + +# Check whether --with-log_facility or --without-log_facility was given. +if test "${with_log_facility+set}" = set; then + withval="$with_log_facility" + log_facility=$withval +else + log_facility=daemon +fi; + + +cat >>confdefs.h <<_ACEOF +#define NRPE_LOG_FACILITY "$log_facility" +_ACEOF + + + +# Check whether --with-nrpe_user or --without-nrpe_user was given. +if test "${with_nrpe_user+set}" = set; then + withval="$with_nrpe_user" + nrpe_user=$withval +else + nrpe_user=nagios +fi; + + +# Check whether --with-nrpe_group or --without-nrpe_group was given. +if test "${with_nrpe_group+set}" = set; then + withval="$with_nrpe_group" + nrpe_group=$withval +else + nrpe_group=nagios +fi; + + +# Check whether --with-nrpe_port or --without-nrpe_port was given. +if test "${with_nrpe_port+set}" = set; then + withval="$with_nrpe_port" + nrpe_port=$withval +else + nrpe_port=5666 +fi; + + +NRPE_INSTALL_OPTS="-o $nrpe_user -g $nrpe_group" + + + +cat >>confdefs.h <<_ACEOF +#define DEFAULT_SERVER_PORT $nrpe_port +_ACEOF + + + +# Check whether --with-nagios_user or --without-nagios_user was given. +if test "${with_nagios_user+set}" = set; then + withval="$with_nagios_user" + nagios_user=$withval +else + nagios_user=nagios +fi; + +# Check whether --with-nagios_group or --without-nagios_group was given. +if test "${with_nagios_group+set}" = set; then + withval="$with_nagios_group" + nagios_group=$withval +else + nagios_group=nagios +fi; + + +NAGIOS_INSTALL_OPTS="-o $nagios_user -g $nagios_group" + + +# Determine target OS, version and architecture for package build macros +if test "x$target_ver" = "x" ; then + TARGET_VER=`uname -r` +else + TARGET_VER=$target_ver +fi + +if test "x$target_os" = "x" ; then + TARGET_OS=`uname -s` +else + TARGET_OS=$target_os +fi + +if test "x$target_cpu" = "x" ; then + TARGET_ARCH=`uname -p` +else + TARGET_ARCH=$target_cpu +fi + +TARGET_PLATFORM="" +if test "x$TARGET_OS" = "xSunOS" ; then + if test "x$TARGET_VER" = "x5.10" ; then + TARGET_PLATFORM="sol10" + fi +fi + + +# Check whether --enable-command-args or --disable-command-args was given. +if test "${enable_command_args+set}" = set; then + enableval="$enable_command_args" + +cat >>confdefs.h <<_ACEOF +#define ENABLE_COMMAND_ARGUMENTS 1 +_ACEOF + +fi; + +# Check whether --enable-bash-command-substitution or --disable-bash-command-substitution was given. +if test "${enable_bash_command_substitution+set}" = set; then + enableval="$enable_bash_command_substitution" + +cat >>confdefs.h <<_ACEOF +#define ENABLE_BASH_COMMAND_SUBSTITUTION 1 +_ACEOF + +fi; + + +# Extract the first word of "perl", so it can be a program name with args. +set dummy perl; ac_word=$2 +echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_path_PERL+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + case $PERL in + [\\/]* | ?:[\\/]*) + ac_cv_path_PERL="$PERL" # 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_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_PERL="$as_dir/$ac_word$ac_exec_ext" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done + + ;; +esac +fi +PERL=$ac_cv_path_PERL + +if test -n "$PERL"; then + echo "$as_me:$LINENO: result: $PERL" >&5 +echo "${ECHO_T}$PERL" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + + + +test "x$prefix" = xNONE && prefix=$ac_default_prefix +# Let make expand exec_prefix. +test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' + +# VPATH may cause trouble with some makes, so we remove $(srcdir), +# ${srcdir} and @srcdir@ from VPATH if srcdir is ".", strip leading and +# trailing colons and then remove the whole line if VPATH becomes empty +# (actually we leave an empty line to preserve line numbers). +if test "x$srcdir" = x.; then + ac_vpsub='/^[ ]*VPATH[ ]*=/{ +s/:*\$(srcdir):*/:/; +s/:*\${srcdir}:*/:/; +s/:*@srcdir@:*/:/; +s/^\([^=]*=[ ]*\):*/\1/; +s/:*$//; +s/^[^=]*=[ ]*$//; +}' +fi + +DEFS=-DHAVE_CONFIG_H + +ac_libobjs= +ac_ltlibobjs= +for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue + # 1. Remove the extension, and $U if already installed. + ac_i=`echo "$ac_i" | + sed 's/\$U\././;s/\.o$//;s/\.obj$//'` + # 2. Add them. + ac_libobjs="$ac_libobjs $ac_i\$U.$ac_objext" + ac_ltlibobjs="$ac_ltlibobjs $ac_i"'$U.lo' +done +LIBOBJS=$ac_libobjs + +LTLIBOBJS=$ac_ltlibobjs + + + +: ${CONFIG_STATUS=./config.status} +ac_clean_files_save=$ac_clean_files +ac_clean_files="$ac_clean_files $CONFIG_STATUS" +{ echo "$as_me:$LINENO: creating $CONFIG_STATUS" >&5 +echo "$as_me: creating $CONFIG_STATUS" >&6;} +cat >$CONFIG_STATUS <<_ACEOF +#! $SHELL +# Generated by $as_me. +# Run this file to recreate the current configuration. +# Compiler output produced by configure, useful for debugging +# configure, is in config.log if it exists. + +debug=false +ac_cs_recheck=false +ac_cs_silent=false +SHELL=\${CONFIG_SHELL-$SHELL} +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF +## --------------------- ## +## M4sh Initialization. ## +## --------------------- ## + +# Be Bourne compatible +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then + emulate sh + NULLCMD=: + # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which + # is contrary to our usage. Disable this feature. + alias -g '${1+"$@"}'='"$@"' +elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then + set -o posix +fi +DUALCASE=1; export DUALCASE # for MKS sh + +# Support unset when possible. +if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then + as_unset=unset +else + as_unset=false +fi + + +# Work around bugs in pre-3.0 UWIN ksh. +$as_unset ENV MAIL MAILPATH +PS1='$ ' +PS2='> ' +PS4='+ ' + +# NLS nuisances. +for as_var in \ + LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \ + LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \ + LC_TELEPHONE LC_TIME +do + if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then + eval $as_var=C; export $as_var + else + $as_unset $as_var + fi +done + +# Required to use basename. +if expr a : '\(a\)' >/dev/null 2>&1; then + as_expr=expr +else + as_expr=false +fi + +if (basename /) >/dev/null 2>&1 && test "X`basename / 2>&1`" = "X/"; then + as_basename=basename +else + as_basename=false +fi + + +# Name of the executable. +as_me=`$as_basename "$0" || +$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ + X"$0" : 'X\(//\)$' \| \ + X"$0" : 'X\(/\)$' \| \ + . : '\(.\)' 2>/dev/null || +echo X/"$0" | + sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/; q; } + /^X\/\(\/\/\)$/{ s//\1/; q; } + /^X\/\(\/\).*/{ s//\1/; q; } + s/.*/./; q'` + + +# PATH needs CR, and LINENO needs CR and PATH. +# Avoid depending upon Character Ranges. +as_cr_letters='abcdefghijklmnopqrstuvwxyz' +as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' +as_cr_Letters=$as_cr_letters$as_cr_LETTERS +as_cr_digits='0123456789' +as_cr_alnum=$as_cr_Letters$as_cr_digits + +# The user is always right. +if test "${PATH_SEPARATOR+set}" != set; then + echo "#! /bin/sh" >conf$$.sh + echo "exit 0" >>conf$$.sh + chmod +x conf$$.sh + if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then + PATH_SEPARATOR=';' + else + PATH_SEPARATOR=: + fi + rm -f conf$$.sh +fi + + + as_lineno_1=$LINENO + as_lineno_2=$LINENO + as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` + test "x$as_lineno_1" != "x$as_lineno_2" && + test "x$as_lineno_3" = "x$as_lineno_2" || { + # Find who we are. Look in the path if we contain no path at all + # relative or not. + case $0 in + *[\\/]* ) as_myself=$0 ;; + *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break +done + + ;; + esac + # We did not find ourselves, most probably we were run as `sh COMMAND' + # in which case we are not to be found in the path. + if test "x$as_myself" = x; then + as_myself=$0 + fi + if test ! -f "$as_myself"; then + { { echo "$as_me:$LINENO: error: cannot find myself; rerun with an absolute path" >&5 +echo "$as_me: error: cannot find myself; rerun with an absolute path" >&2;} + { (exit 1); exit 1; }; } + fi + case $CONFIG_SHELL in + '') + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for as_base in sh bash ksh sh5; do + case $as_dir in + /*) + if ("$as_dir/$as_base" -c ' + as_lineno_1=$LINENO + as_lineno_2=$LINENO + as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` + test "x$as_lineno_1" != "x$as_lineno_2" && + test "x$as_lineno_3" = "x$as_lineno_2" ') 2>/dev/null; then + $as_unset BASH_ENV || test "${BASH_ENV+set}" != set || { BASH_ENV=; export BASH_ENV; } + $as_unset ENV || test "${ENV+set}" != set || { ENV=; export ENV; } + CONFIG_SHELL=$as_dir/$as_base + export CONFIG_SHELL + exec "$CONFIG_SHELL" "$0" ${1+"$@"} + fi;; + esac + done +done +;; + esac + + # Create $as_me.lineno as a copy of $as_myself, but with $LINENO + # uniformly replaced by the line number. The first 'sed' inserts a + # line-number line before each line; the second 'sed' does the real + # work. The second script uses 'N' to pair each line-number line + # with the numbered line, and appends trailing '-' during + # substitution so that $LINENO is not a special case at line end. + # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the + # second 'sed' script. Blame Lee E. McMahon for sed's syntax. :-) + sed '=' <$as_myself | + sed ' + N + s,$,-, + : loop + s,^\(['$as_cr_digits']*\)\(.*\)[$]LINENO\([^'$as_cr_alnum'_]\),\1\2\1\3, + t loop + s,-$,, + s,^['$as_cr_digits']*\n,, + ' >$as_me.lineno && + chmod +x $as_me.lineno || + { { echo "$as_me:$LINENO: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&5 +echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2;} + { (exit 1); exit 1; }; } + + # Don't try to exec as it changes $[0], causing all sort of problems + # (the dirname of $[0] is not the place where we might find the + # original and so on. Autoconf is especially sensible to this). + . ./$as_me.lineno + # Exit status is that of the last command. + exit +} + + +case `echo "testing\c"; echo 1,2,3`,`echo -n testing; echo 1,2,3` in + *c*,-n*) ECHO_N= ECHO_C=' +' ECHO_T=' ' ;; + *c*,* ) ECHO_N=-n ECHO_C= ECHO_T= ;; + *) ECHO_N= ECHO_C='\c' ECHO_T= ;; +esac + +if expr a : '\(a\)' >/dev/null 2>&1; then + as_expr=expr +else + as_expr=false +fi + +rm -f conf$$ conf$$.exe conf$$.file +echo >conf$$.file +if ln -s conf$$.file conf$$ 2>/dev/null; then + # We could just check for DJGPP; but this test a) works b) is more generic + # and c) will remain valid once DJGPP supports symlinks (DJGPP 2.04). + if test -f conf$$.exe; then + # Don't use ln at all; we don't have any links + as_ln_s='cp -p' + else + as_ln_s='ln -s' + fi +elif ln conf$$.file conf$$ 2>/dev/null; then + as_ln_s=ln +else + as_ln_s='cp -p' +fi +rm -f conf$$ conf$$.exe conf$$.file + +if mkdir -p . 2>/dev/null; then + as_mkdir_p=: +else + test -d ./-p && rmdir ./-p + as_mkdir_p=false +fi + +as_executable_p="test -f" + +# Sed expression to map a string onto a valid CPP name. +as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" + +# Sed expression to map a string onto a valid variable name. +as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" + + +# IFS +# We need space, tab and new line, in precisely that order. +as_nl=' +' +IFS=" $as_nl" + +# CDPATH. +$as_unset CDPATH + +exec 6>&1 + +# Open the log real soon, to keep \$[0] and so on meaningful, and to +# report actual input values of CONFIG_FILES etc. instead of their +# values after options handling. Logging --version etc. is OK. +exec 5>>config.log +{ + echo + sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX +## Running $as_me. ## +_ASBOX +} >&5 +cat >&5 <<_CSEOF + +This file was extended by nrpe $as_me 2.15, which was +generated by GNU Autoconf 2.59. Invocation command line was + + CONFIG_FILES = $CONFIG_FILES + CONFIG_HEADERS = $CONFIG_HEADERS + CONFIG_LINKS = $CONFIG_LINKS + CONFIG_COMMANDS = $CONFIG_COMMANDS + $ $0 $@ + +_CSEOF +echo "on `(hostname || uname -n) 2>/dev/null | sed 1q`" >&5 +echo >&5 +_ACEOF + +# Files that config.status was made for. +if test -n "$ac_config_files"; then + echo "config_files=\"$ac_config_files\"" >>$CONFIG_STATUS +fi + +if test -n "$ac_config_headers"; then + echo "config_headers=\"$ac_config_headers\"" >>$CONFIG_STATUS +fi + +if test -n "$ac_config_links"; then + echo "config_links=\"$ac_config_links\"" >>$CONFIG_STATUS +fi + +if test -n "$ac_config_commands"; then + echo "config_commands=\"$ac_config_commands\"" >>$CONFIG_STATUS +fi + +cat >>$CONFIG_STATUS <<\_ACEOF + +ac_cs_usage="\ +\`$as_me' instantiates files from templates according to the +current configuration. + +Usage: $0 [OPTIONS] [FILE]... + + -h, --help print this help, then exit + -V, --version print version number, then exit + -q, --quiet do not print progress messages + -d, --debug don't remove temporary files + --recheck update $as_me by reconfiguring in the same conditions + --file=FILE[:TEMPLATE] + instantiate the configuration file FILE + --header=FILE[:TEMPLATE] + instantiate the configuration header FILE + +Configuration files: +$config_files + +Configuration headers: +$config_headers + +Report bugs to ." +_ACEOF + +cat >>$CONFIG_STATUS <<_ACEOF +ac_cs_version="\\ +nrpe config.status 2.15 +configured by $0, generated by GNU Autoconf 2.59, + with options \\"`echo "$ac_configure_args" | sed 's/[\\""\`\$]/\\\\&/g'`\\" + +Copyright (C) 2003 Free Software Foundation, Inc. +This config.status script is free software; the Free Software Foundation +gives unlimited permission to copy, distribute and modify it." +srcdir=$srcdir +INSTALL="$INSTALL" +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF +# If no file are specified by the user, then we need to provide default +# value. By we need to know if files were specified by the user. +ac_need_defaults=: +while test $# != 0 +do + case $1 in + --*=*) + ac_option=`expr "x$1" : 'x\([^=]*\)='` + ac_optarg=`expr "x$1" : 'x[^=]*=\(.*\)'` + ac_shift=: + ;; + -*) + ac_option=$1 + ac_optarg=$2 + ac_shift=shift + ;; + *) # This is not an option, so the user has probably given explicit + # arguments. + ac_option=$1 + ac_need_defaults=false;; + esac + + case $ac_option in + # Handling of the options. +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF + -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) + ac_cs_recheck=: ;; + --version | --vers* | -V ) + echo "$ac_cs_version"; exit 0 ;; + --he | --h) + # Conflict between --help and --header + { { echo "$as_me:$LINENO: error: ambiguous option: $1 +Try \`$0 --help' for more information." >&5 +echo "$as_me: error: ambiguous option: $1 +Try \`$0 --help' for more information." >&2;} + { (exit 1); exit 1; }; };; + --help | --hel | -h ) + echo "$ac_cs_usage"; exit 0 ;; + --debug | --d* | -d ) + debug=: ;; + --file | --fil | --fi | --f ) + $ac_shift + CONFIG_FILES="$CONFIG_FILES $ac_optarg" + ac_need_defaults=false;; + --header | --heade | --head | --hea ) + $ac_shift + CONFIG_HEADERS="$CONFIG_HEADERS $ac_optarg" + ac_need_defaults=false;; + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil | --si | --s) + ac_cs_silent=: ;; + + # This is an error. + -*) { { echo "$as_me:$LINENO: error: unrecognized option: $1 +Try \`$0 --help' for more information." >&5 +echo "$as_me: error: unrecognized option: $1 +Try \`$0 --help' for more information." >&2;} + { (exit 1); exit 1; }; } ;; + + *) ac_config_targets="$ac_config_targets $1" ;; + + esac + shift +done + +ac_configure_extra_args= + +if $ac_cs_silent; then + exec 6>/dev/null + ac_configure_extra_args="$ac_configure_extra_args --silent" +fi + +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF +if \$ac_cs_recheck; then + echo "running $SHELL $0 " $ac_configure_args \$ac_configure_extra_args " --no-create --no-recursion" >&6 + exec $SHELL $0 $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion +fi + +_ACEOF + + + + + +cat >>$CONFIG_STATUS <<\_ACEOF +for ac_config_target in $ac_config_targets +do + case "$ac_config_target" in + # Handling of arguments. + "Makefile" ) CONFIG_FILES="$CONFIG_FILES Makefile" ;; + "subst" ) CONFIG_FILES="$CONFIG_FILES subst" ;; + "src/Makefile" ) CONFIG_FILES="$CONFIG_FILES src/Makefile" ;; + "package/solaris/Makefile" ) CONFIG_FILES="$CONFIG_FILES package/solaris/Makefile" ;; + "init-script" ) CONFIG_FILES="$CONFIG_FILES init-script" ;; + "init-script.debian" ) CONFIG_FILES="$CONFIG_FILES init-script.debian" ;; + "init-script.suse" ) CONFIG_FILES="$CONFIG_FILES init-script.suse" ;; + "nrpe.spec" ) CONFIG_FILES="$CONFIG_FILES nrpe.spec" ;; + "sample-config/nrpe.cfg" ) CONFIG_FILES="$CONFIG_FILES sample-config/nrpe.cfg" ;; + "sample-config/nrpe.xinetd" ) CONFIG_FILES="$CONFIG_FILES sample-config/nrpe.xinetd" ;; + "include/config.h" ) CONFIG_HEADERS="$CONFIG_HEADERS include/config.h" ;; + *) { { echo "$as_me:$LINENO: error: invalid argument: $ac_config_target" >&5 +echo "$as_me: error: invalid argument: $ac_config_target" >&2;} + { (exit 1); exit 1; }; };; + esac +done + +# If the user did not use the arguments to specify the items to instantiate, +# then the envvar interface is used. Set only those that are not. +# We use the long form for the default assignment because of an extremely +# bizarre bug on SunOS 4.1.3. +if $ac_need_defaults; then + test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files + test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers +fi + +# Have a temporary directory for convenience. Make it in the build tree +# simply because there is no reason to put it here, and in addition, +# creating and moving files from /tmp can sometimes cause problems. +# Create a temporary directory, and hook for its removal unless debugging. +$debug || +{ + trap 'exit_status=$?; rm -rf $tmp && exit $exit_status' 0 + trap '{ (exit 1); exit 1; }' 1 2 13 15 +} + +# Create a (secure) tmp directory for tmp files. + +{ + tmp=`(umask 077 && mktemp -d -q "./confstatXXXXXX") 2>/dev/null` && + test -n "$tmp" && test -d "$tmp" +} || +{ + tmp=./confstat$$-$RANDOM + (umask 077 && mkdir $tmp) +} || +{ + echo "$me: cannot create a temporary directory in ." >&2 + { (exit 1); exit 1; } +} + +_ACEOF + +cat >>$CONFIG_STATUS <<_ACEOF + +# +# CONFIG_FILES section. +# + +# No need to generate the scripts if there are no CONFIG_FILES. +# This happens for instance when ./config.status config.h +if test -n "\$CONFIG_FILES"; then + # Protect against being on the right side of a sed subst in config.status. + sed 's/,@/@@/; s/@,/@@/; s/,;t t\$/@;t t/; /@;t t\$/s/[\\\\&,]/\\\\&/g; + s/@@/,@/; s/@@/@,/; s/@;t t\$/,;t t/' >\$tmp/subs.sed <<\\CEOF +s,@SHELL@,$SHELL,;t t +s,@PATH_SEPARATOR@,$PATH_SEPARATOR,;t t +s,@PACKAGE_NAME@,$PACKAGE_NAME,;t t +s,@PACKAGE_TARNAME@,$PACKAGE_TARNAME,;t t +s,@PACKAGE_VERSION@,$PACKAGE_VERSION,;t t +s,@PACKAGE_STRING@,$PACKAGE_STRING,;t t +s,@PACKAGE_BUGREPORT@,$PACKAGE_BUGREPORT,;t t +s,@exec_prefix@,$exec_prefix,;t t +s,@prefix@,$prefix,;t t +s,@program_transform_name@,$program_transform_name,;t t +s,@bindir@,$bindir,;t t +s,@sbindir@,$sbindir,;t t +s,@libexecdir@,$libexecdir,;t t +s,@datadir@,$datadir,;t t +s,@sysconfdir@,$sysconfdir,;t t +s,@sharedstatedir@,$sharedstatedir,;t t +s,@localstatedir@,$localstatedir,;t t +s,@libdir@,$libdir,;t t +s,@includedir@,$includedir,;t t +s,@oldincludedir@,$oldincludedir,;t t +s,@infodir@,$infodir,;t t +s,@mandir@,$mandir,;t t +s,@build_alias@,$build_alias,;t t +s,@host_alias@,$host_alias,;t t +s,@target_alias@,$target_alias,;t t +s,@DEFS@,$DEFS,;t t +s,@ECHO_C@,$ECHO_C,;t t +s,@ECHO_N@,$ECHO_N,;t t +s,@ECHO_T@,$ECHO_T,;t t +s,@LIBS@,$LIBS,;t t +s,@PKG_NAME@,$PKG_NAME,;t t +s,@PKG_VERSION@,$PKG_VERSION,;t t +s,@PKG_HOME_URL@,$PKG_HOME_URL,;t t +s,@PKG_REL_DATE@,$PKG_REL_DATE,;t t +s,@RPM_RELEASE@,$RPM_RELEASE,;t t +s,@INSTALL_PROGRAM@,$INSTALL_PROGRAM,;t t +s,@INSTALL_SCRIPT@,$INSTALL_SCRIPT,;t t +s,@INSTALL_DATA@,$INSTALL_DATA,;t t +s,@INSTALL@,$INSTALL,;t t +s,@build@,$build,;t t +s,@build_cpu@,$build_cpu,;t t +s,@build_vendor@,$build_vendor,;t t +s,@build_os@,$build_os,;t t +s,@host@,$host,;t t +s,@host_cpu@,$host_cpu,;t t +s,@host_vendor@,$host_vendor,;t t +s,@host_os@,$host_os,;t t +s,@CC@,$CC,;t t +s,@CFLAGS@,$CFLAGS,;t t +s,@LDFLAGS@,$LDFLAGS,;t t +s,@CPPFLAGS@,$CPPFLAGS,;t t +s,@ac_ct_CC@,$ac_ct_CC,;t t +s,@EXEEXT@,$EXEEXT,;t t +s,@OBJEXT@,$OBJEXT,;t t +s,@SET_MAKE@,$SET_MAKE,;t t +s,@CPP@,$CPP,;t t +s,@EGREP@,$EGREP,;t t +s,@SNPRINTF_O@,$SNPRINTF_O,;t t +s,@OTHERLIBS@,$OTHERLIBS,;t t +s,@SOCKETLIBS@,$SOCKETLIBS,;t t +s,@LIBWRAPLIBS@,$LIBWRAPLIBS,;t t +s,@HAVE_SSL@,$HAVE_SSL,;t t +s,@log_facility@,$log_facility,;t t +s,@nrpe_user@,$nrpe_user,;t t +s,@nrpe_group@,$nrpe_group,;t t +s,@NRPE_INSTALL_OPTS@,$NRPE_INSTALL_OPTS,;t t +s,@nrpe_port@,$nrpe_port,;t t +s,@nagios_user@,$nagios_user,;t t +s,@nagios_group@,$nagios_group,;t t +s,@NAGIOS_INSTALL_OPTS@,$NAGIOS_INSTALL_OPTS,;t t +s,@TARGET_VER@,$TARGET_VER,;t t +s,@TARGET_OS@,$TARGET_OS,;t t +s,@TARGET_ARCH@,$TARGET_ARCH,;t t +s,@TARGET_PLATFORM@,$TARGET_PLATFORM,;t t +s,@PERL@,$PERL,;t t +s,@LIBOBJS@,$LIBOBJS,;t t +s,@LTLIBOBJS@,$LTLIBOBJS,;t t +CEOF + +_ACEOF + + cat >>$CONFIG_STATUS <<\_ACEOF + # Split the substitutions into bite-sized pieces for seds with + # small command number limits, like on Digital OSF/1 and HP-UX. + ac_max_sed_lines=48 + ac_sed_frag=1 # Number of current file. + ac_beg=1 # First line for current file. + ac_end=$ac_max_sed_lines # Line after last line for current file. + ac_more_lines=: + ac_sed_cmds= + while $ac_more_lines; do + if test $ac_beg -gt 1; then + sed "1,${ac_beg}d; ${ac_end}q" $tmp/subs.sed >$tmp/subs.frag + else + sed "${ac_end}q" $tmp/subs.sed >$tmp/subs.frag + fi + if test ! -s $tmp/subs.frag; then + ac_more_lines=false + else + # The purpose of the label and of the branching condition is to + # speed up the sed processing (if there are no `@' at all, there + # is no need to browse any of the substitutions). + # These are the two extra sed commands mentioned above. + (echo ':t + /@[a-zA-Z_][a-zA-Z_0-9]*@/!b' && cat $tmp/subs.frag) >$tmp/subs-$ac_sed_frag.sed + if test -z "$ac_sed_cmds"; then + ac_sed_cmds="sed -f $tmp/subs-$ac_sed_frag.sed" + else + ac_sed_cmds="$ac_sed_cmds | sed -f $tmp/subs-$ac_sed_frag.sed" + fi + ac_sed_frag=`expr $ac_sed_frag + 1` + ac_beg=$ac_end + ac_end=`expr $ac_end + $ac_max_sed_lines` + fi + done + if test -z "$ac_sed_cmds"; then + ac_sed_cmds=cat + fi +fi # test -n "$CONFIG_FILES" + +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF +for ac_file in : $CONFIG_FILES; do test "x$ac_file" = x: && continue + # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in". + case $ac_file in + - | *:- | *:-:* ) # input from stdin + cat >$tmp/stdin + ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` + ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; + *:* ) ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` + ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; + * ) ac_file_in=$ac_file.in ;; + esac + + # Compute @srcdir@, @top_srcdir@, and @INSTALL@ for subdirectories. + ac_dir=`(dirname "$ac_file") 2>/dev/null || +$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$ac_file" : 'X\(//\)[^/]' \| \ + X"$ac_file" : 'X\(//\)$' \| \ + X"$ac_file" : 'X\(/\)' \| \ + . : '\(.\)' 2>/dev/null || +echo X"$ac_file" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } + /^X\(\/\/\)[^/].*/{ s//\1/; q; } + /^X\(\/\/\)$/{ s//\1/; q; } + /^X\(\/\).*/{ s//\1/; q; } + s/.*/./; q'` + { if $as_mkdir_p; then + mkdir -p "$ac_dir" + else + as_dir="$ac_dir" + as_dirs= + while test ! -d "$as_dir"; do + as_dirs="$as_dir $as_dirs" + as_dir=`(dirname "$as_dir") 2>/dev/null || +$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_dir" : 'X\(//\)[^/]' \| \ + X"$as_dir" : 'X\(//\)$' \| \ + X"$as_dir" : 'X\(/\)' \| \ + . : '\(.\)' 2>/dev/null || +echo X"$as_dir" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } + /^X\(\/\/\)[^/].*/{ s//\1/; q; } + /^X\(\/\/\)$/{ s//\1/; q; } + /^X\(\/\).*/{ s//\1/; q; } + s/.*/./; q'` + done + test ! -n "$as_dirs" || mkdir $as_dirs + fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5 +echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;} + { (exit 1); exit 1; }; }; } + + ac_builddir=. + +if test "$ac_dir" != .; then + ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'` + # A "../" for each directory in $ac_dir_suffix. + ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'` +else + ac_dir_suffix= ac_top_builddir= +fi + +case $srcdir in + .) # No --srcdir option. We are building in place. + ac_srcdir=. + if test -z "$ac_top_builddir"; then + ac_top_srcdir=. + else + ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'` + fi ;; + [\\/]* | ?:[\\/]* ) # Absolute path. + ac_srcdir=$srcdir$ac_dir_suffix; + ac_top_srcdir=$srcdir ;; + *) # Relative path. + ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix + ac_top_srcdir=$ac_top_builddir$srcdir ;; +esac + +# Do not use `cd foo && pwd` to compute absolute paths, because +# the directories may not exist. +case `pwd` in +.) ac_abs_builddir="$ac_dir";; +*) + case "$ac_dir" in + .) ac_abs_builddir=`pwd`;; + [\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dir";; + *) ac_abs_builddir=`pwd`/"$ac_dir";; + esac;; +esac +case $ac_abs_builddir in +.) ac_abs_top_builddir=${ac_top_builddir}.;; +*) + case ${ac_top_builddir}. in + .) ac_abs_top_builddir=$ac_abs_builddir;; + [\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;; + *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;; + esac;; +esac +case $ac_abs_builddir in +.) ac_abs_srcdir=$ac_srcdir;; +*) + case $ac_srcdir in + .) ac_abs_srcdir=$ac_abs_builddir;; + [\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;; + *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;; + esac;; +esac +case $ac_abs_builddir in +.) ac_abs_top_srcdir=$ac_top_srcdir;; +*) + case $ac_top_srcdir in + .) ac_abs_top_srcdir=$ac_abs_builddir;; + [\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;; + *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;; + esac;; +esac + + + case $INSTALL in + [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; + *) ac_INSTALL=$ac_top_builddir$INSTALL ;; + esac + + if test x"$ac_file" != x-; then + { echo "$as_me:$LINENO: creating $ac_file" >&5 +echo "$as_me: creating $ac_file" >&6;} + rm -f "$ac_file" + fi + # Let's still pretend it is `configure' which instantiates (i.e., don't + # use $as_me), people would be surprised to read: + # /* config.h. Generated by config.status. */ + if test x"$ac_file" = x-; then + configure_input= + else + configure_input="$ac_file. " + fi + configure_input=$configure_input"Generated from `echo $ac_file_in | + sed 's,.*/,,'` by configure." + + # First look for the input files in the build tree, otherwise in the + # src tree. + ac_file_inputs=`IFS=: + for f in $ac_file_in; do + case $f in + -) echo $tmp/stdin ;; + [\\/$]*) + # Absolute (can't be DOS-style, as IFS=:) + test -f "$f" || { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5 +echo "$as_me: error: cannot find input file: $f" >&2;} + { (exit 1); exit 1; }; } + echo "$f";; + *) # Relative + if test -f "$f"; then + # Build tree + echo "$f" + elif test -f "$srcdir/$f"; then + # Source tree + echo "$srcdir/$f" + else + # /dev/null tree + { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5 +echo "$as_me: error: cannot find input file: $f" >&2;} + { (exit 1); exit 1; }; } + fi;; + esac + done` || { (exit 1); exit 1; } +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF + sed "$ac_vpsub +$extrasub +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF +:t +/@[a-zA-Z_][a-zA-Z_0-9]*@/!b +s,@configure_input@,$configure_input,;t t +s,@srcdir@,$ac_srcdir,;t t +s,@abs_srcdir@,$ac_abs_srcdir,;t t +s,@top_srcdir@,$ac_top_srcdir,;t t +s,@abs_top_srcdir@,$ac_abs_top_srcdir,;t t +s,@builddir@,$ac_builddir,;t t +s,@abs_builddir@,$ac_abs_builddir,;t t +s,@top_builddir@,$ac_top_builddir,;t t +s,@abs_top_builddir@,$ac_abs_top_builddir,;t t +s,@INSTALL@,$ac_INSTALL,;t t +" $ac_file_inputs | (eval "$ac_sed_cmds") >$tmp/out + rm -f $tmp/stdin + if test x"$ac_file" != x-; then + mv $tmp/out $ac_file + else + cat $tmp/out + rm -f $tmp/out + fi + +done +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF + +# +# CONFIG_HEADER section. +# + +# These sed commands are passed to sed as "A NAME B NAME C VALUE D", where +# NAME is the cpp macro being defined and VALUE is the value it is being given. +# +# ac_d sets the value in "#define NAME VALUE" lines. +ac_dA='s,^\([ ]*\)#\([ ]*define[ ][ ]*\)' +ac_dB='[ ].*$,\1#\2' +ac_dC=' ' +ac_dD=',;t' +# ac_u turns "#undef NAME" without trailing blanks into "#define NAME VALUE". +ac_uA='s,^\([ ]*\)#\([ ]*\)undef\([ ][ ]*\)' +ac_uB='$,\1#\2define\3' +ac_uC=' ' +ac_uD=',;t' + +for ac_file in : $CONFIG_HEADERS; do test "x$ac_file" = x: && continue + # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in". + case $ac_file in + - | *:- | *:-:* ) # input from stdin + cat >$tmp/stdin + ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` + ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; + *:* ) ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` + ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; + * ) ac_file_in=$ac_file.in ;; + esac + + test x"$ac_file" != x- && { echo "$as_me:$LINENO: creating $ac_file" >&5 +echo "$as_me: creating $ac_file" >&6;} + + # First look for the input files in the build tree, otherwise in the + # src tree. + ac_file_inputs=`IFS=: + for f in $ac_file_in; do + case $f in + -) echo $tmp/stdin ;; + [\\/$]*) + # Absolute (can't be DOS-style, as IFS=:) + test -f "$f" || { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5 +echo "$as_me: error: cannot find input file: $f" >&2;} + { (exit 1); exit 1; }; } + # Do quote $f, to prevent DOS paths from being IFS'd. + echo "$f";; + *) # Relative + if test -f "$f"; then + # Build tree + echo "$f" + elif test -f "$srcdir/$f"; then + # Source tree + echo "$srcdir/$f" + else + # /dev/null tree + { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5 +echo "$as_me: error: cannot find input file: $f" >&2;} + { (exit 1); exit 1; }; } + fi;; + esac + done` || { (exit 1); exit 1; } + # Remove the trailing spaces. + sed 's/[ ]*$//' $ac_file_inputs >$tmp/in + +_ACEOF + +# Transform confdefs.h into two sed scripts, `conftest.defines' and +# `conftest.undefs', that substitutes the proper values into +# config.h.in to produce config.h. The first handles `#define' +# templates, and the second `#undef' templates. +# And first: Protect against being on the right side of a sed subst in +# config.status. Protect against being in an unquoted here document +# in config.status. +rm -f conftest.defines conftest.undefs +# Using a here document instead of a string reduces the quoting nightmare. +# Putting comments in sed scripts is not portable. +# +# `end' is used to avoid that the second main sed command (meant for +# 0-ary CPP macros) applies to n-ary macro definitions. +# See the Autoconf documentation for `clear'. +cat >confdef2sed.sed <<\_ACEOF +s/[\\&,]/\\&/g +s,[\\$`],\\&,g +t clear +: clear +s,^[ ]*#[ ]*define[ ][ ]*\([^ (][^ (]*\)\(([^)]*)\)[ ]*\(.*\)$,${ac_dA}\1${ac_dB}\1\2${ac_dC}\3${ac_dD},gp +t end +s,^[ ]*#[ ]*define[ ][ ]*\([^ ][^ ]*\)[ ]*\(.*\)$,${ac_dA}\1${ac_dB}\1${ac_dC}\2${ac_dD},gp +: end +_ACEOF +# If some macros were called several times there might be several times +# the same #defines, which is useless. Nevertheless, we may not want to +# sort them, since we want the *last* AC-DEFINE to be honored. +uniq confdefs.h | sed -n -f confdef2sed.sed >conftest.defines +sed 's/ac_d/ac_u/g' conftest.defines >conftest.undefs +rm -f confdef2sed.sed + +# This sed command replaces #undef with comments. This is necessary, for +# example, in the case of _POSIX_SOURCE, which is predefined and required +# on some systems where configure will not decide to define it. +cat >>conftest.undefs <<\_ACEOF +s,^[ ]*#[ ]*undef[ ][ ]*[a-zA-Z_][a-zA-Z_0-9]*,/* & */, +_ACEOF + +# Break up conftest.defines because some shells have a limit on the size +# of here documents, and old seds have small limits too (100 cmds). +echo ' # Handle all the #define templates only if necessary.' >>$CONFIG_STATUS +echo ' if grep "^[ ]*#[ ]*define" $tmp/in >/dev/null; then' >>$CONFIG_STATUS +echo ' # If there are no defines, we may have an empty if/fi' >>$CONFIG_STATUS +echo ' :' >>$CONFIG_STATUS +rm -f conftest.tail +while grep . conftest.defines >/dev/null +do + # Write a limited-size here document to $tmp/defines.sed. + echo ' cat >$tmp/defines.sed <>$CONFIG_STATUS + # Speed up: don't consider the non `#define' lines. + echo '/^[ ]*#[ ]*define/!b' >>$CONFIG_STATUS + # Work around the forget-to-reset-the-flag bug. + echo 't clr' >>$CONFIG_STATUS + echo ': clr' >>$CONFIG_STATUS + sed ${ac_max_here_lines}q conftest.defines >>$CONFIG_STATUS + echo 'CEOF + sed -f $tmp/defines.sed $tmp/in >$tmp/out + rm -f $tmp/in + mv $tmp/out $tmp/in +' >>$CONFIG_STATUS + sed 1,${ac_max_here_lines}d conftest.defines >conftest.tail + rm -f conftest.defines + mv conftest.tail conftest.defines +done +rm -f conftest.defines +echo ' fi # grep' >>$CONFIG_STATUS +echo >>$CONFIG_STATUS + +# Break up conftest.undefs because some shells have a limit on the size +# of here documents, and old seds have small limits too (100 cmds). +echo ' # Handle all the #undef templates' >>$CONFIG_STATUS +rm -f conftest.tail +while grep . conftest.undefs >/dev/null +do + # Write a limited-size here document to $tmp/undefs.sed. + echo ' cat >$tmp/undefs.sed <>$CONFIG_STATUS + # Speed up: don't consider the non `#undef' + echo '/^[ ]*#[ ]*undef/!b' >>$CONFIG_STATUS + # Work around the forget-to-reset-the-flag bug. + echo 't clr' >>$CONFIG_STATUS + echo ': clr' >>$CONFIG_STATUS + sed ${ac_max_here_lines}q conftest.undefs >>$CONFIG_STATUS + echo 'CEOF + sed -f $tmp/undefs.sed $tmp/in >$tmp/out + rm -f $tmp/in + mv $tmp/out $tmp/in +' >>$CONFIG_STATUS + sed 1,${ac_max_here_lines}d conftest.undefs >conftest.tail + rm -f conftest.undefs + mv conftest.tail conftest.undefs +done +rm -f conftest.undefs + +cat >>$CONFIG_STATUS <<\_ACEOF + # Let's still pretend it is `configure' which instantiates (i.e., don't + # use $as_me), people would be surprised to read: + # /* config.h. Generated by config.status. */ + if test x"$ac_file" = x-; then + echo "/* Generated by configure. */" >$tmp/config.h + else + echo "/* $ac_file. Generated by configure. */" >$tmp/config.h + fi + cat $tmp/in >>$tmp/config.h + rm -f $tmp/in + if test x"$ac_file" != x-; then + if diff $ac_file $tmp/config.h >/dev/null 2>&1; then + { echo "$as_me:$LINENO: $ac_file is unchanged" >&5 +echo "$as_me: $ac_file is unchanged" >&6;} + else + ac_dir=`(dirname "$ac_file") 2>/dev/null || +$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$ac_file" : 'X\(//\)[^/]' \| \ + X"$ac_file" : 'X\(//\)$' \| \ + X"$ac_file" : 'X\(/\)' \| \ + . : '\(.\)' 2>/dev/null || +echo X"$ac_file" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } + /^X\(\/\/\)[^/].*/{ s//\1/; q; } + /^X\(\/\/\)$/{ s//\1/; q; } + /^X\(\/\).*/{ s//\1/; q; } + s/.*/./; q'` + { if $as_mkdir_p; then + mkdir -p "$ac_dir" + else + as_dir="$ac_dir" + as_dirs= + while test ! -d "$as_dir"; do + as_dirs="$as_dir $as_dirs" + as_dir=`(dirname "$as_dir") 2>/dev/null || +$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_dir" : 'X\(//\)[^/]' \| \ + X"$as_dir" : 'X\(//\)$' \| \ + X"$as_dir" : 'X\(/\)' \| \ + . : '\(.\)' 2>/dev/null || +echo X"$as_dir" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } + /^X\(\/\/\)[^/].*/{ s//\1/; q; } + /^X\(\/\/\)$/{ s//\1/; q; } + /^X\(\/\).*/{ s//\1/; q; } + s/.*/./; q'` + done + test ! -n "$as_dirs" || mkdir $as_dirs + fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5 +echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;} + { (exit 1); exit 1; }; }; } + + rm -f $ac_file + mv $tmp/config.h $ac_file + fi + else + cat $tmp/config.h + rm -f $tmp/config.h + fi +done +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF + +{ (exit 0); exit 0; } +_ACEOF +chmod +x $CONFIG_STATUS +ac_clean_files=$ac_clean_files_save + + +# configure is writing to config.log, and then calls config.status. +# config.status does its own redirection, appending to config.log. +# Unfortunately, on DOS this fails, as config.log is still kept open +# by configure, so config.status won't be able to write to it; its +# output is simply discarded. So we exec the FD to /dev/null, +# effectively closing config.log, so it can be properly (re)opened and +# appended to by config.status. When coming back to configure, we +# need to make the FD available again. +if test "$no_create" != yes; then + ac_cs_success=: + ac_config_status_args= + test "$silent" = yes && + ac_config_status_args="$ac_config_status_args --quiet" + exec 5>/dev/null + $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false + exec 5>>config.log + # Use ||, not &&, to avoid exiting from the if with $? = 1, which + # would make configure fail if this is the last instruction. + $ac_cs_success || { (exit 1); exit 1; } +fi + + +perl subst init-script +perl subst init-script.debian +perl subst init-script.suse +perl subst sample-config/nrpe.cfg +perl subst sample-config/nrpe.xinetd + + +echo "" +echo "" +echo "$as_me:$LINENO: result: *** Configuration summary for $PKG_NAME $PKG_VERSION $PKG_REL_DATE ***:" >&5 +echo "${ECHO_T}*** Configuration summary for $PKG_NAME $PKG_VERSION $PKG_REL_DATE ***:" >&6 + +echo "" +echo " General Options:" +echo " -------------------------" + +echo "$as_me:$LINENO: result: NRPE port: $nrpe_port" >&5 +echo "${ECHO_T} NRPE port: $nrpe_port" >&6 +echo "$as_me:$LINENO: result: NRPE user: $nrpe_user" >&5 +echo "${ECHO_T} NRPE user: $nrpe_user" >&6 +echo "$as_me:$LINENO: result: NRPE group: $nrpe_group" >&5 +echo "${ECHO_T} NRPE group: $nrpe_group" >&6 +echo "$as_me:$LINENO: result: Nagios user: $nagios_user" >&5 +echo "${ECHO_T} Nagios user: $nagios_user" >&6 +echo "$as_me:$LINENO: result: Nagios group: $nagios_group" >&5 +echo "${ECHO_T} Nagios group: $nagios_group" >&6 + + +echo "" +echo "" +echo "Review the options above for accuracy. If they look okay," +echo "type 'make all' to compile the NRPE daemon and client." +echo "" diff --git a/configure.in b/configure.in new file mode 100644 index 0000000..0453f69 --- /dev/null +++ b/configure.in @@ -0,0 +1,481 @@ +dnl Process this -*-m4-*- file with autoconf to produce a configure script. + +dnl Disable caching +define([AC_CACHE_LOAD],) +define([AC_CACHE_SAVE],) + +AC_INIT([nrpe],[2.15],[nagios-users@lists.sourceforge.net],[nrpe],[http://www.nagios.org]) +AC_CONFIG_SRCDIR([src/nrpe.c]) +AC_CONFIG_HEADERS([include/config.h]) +AC_CONFIG_FILES([Makefile + subst + src/Makefile + package/solaris/Makefile + init-script + init-script.debian + init-script.suse + nrpe.spec + sample-config/nrpe.cfg + sample-config/nrpe.xinetd]) +AC_PREFIX_DEFAULT(/usr/local/nagios) + +PKG_NAME=nrpe +PKG_VERSION="2.15" +PKG_HOME_URL="http://www.nagios.org/" +PKG_REL_DATE="09-06-2013" +RPM_RELEASE=1 +AC_SUBST(PKG_NAME) +AC_SUBST(PKG_VERSION) +AC_SUBST(PKG_HOME_URL) +AC_SUBST(PKG_REL_DATE) +AC_SUBST(RPM_RELEASE) + +dnl Figure out how to invoke "install" and what install options to use. +AC_PROG_INSTALL +AC_SUBST(INSTALL) + +dnl What OS are we running? +AC_CANONICAL_HOST + +dnl Checks for programs. +AC_PROG_CC +AC_PROG_MAKE_SET + +dnl Checks for header files. +AC_HEADER_STDC +AC_HEADER_TIME +AC_HEADER_SYS_WAIT +AC_CHECK_HEADERS(ctype.h dirent.h errno.h fcntl.h getopt.h grp.h inttypes.h netdb.h pwd.h signal.h stdint.h strings.h string.h syslog.h tcpd.h unistd.h arpa/inet.h netinet/in.h socket.h sys/types.h sys/time.h sys/resource.h sys/wait.h sys/socket.h sys/stat.h) + +dnl Checks for typedefs, structures, and compiler characteristics. +AC_C_CONST +AC_STRUCT_TM +AC_TYPE_MODE_T +AC_TYPE_PID_T +AC_TYPE_SIZE_T +AC_TYPE_SIGNAL +AC_TYPE_GETGROUPS + +dnl Check lengths for later tests of u_int32_t and int32_t +AC_CHECK_SIZEOF(int) +AC_CHECK_SIZEOF(short) +AC_CHECK_SIZEOF(long) + +dnl Define u_int32_t if we don't have it already (Solaris, etc.) +AC_CHECK_TYPE(uint32_t,unsigned int) +AC_CHECK_TYPE(u_int32_t,unsigned int) +if test "$ac_cv_type_u_int32_t" = no ; then + if test "$ac_cv_type_u_int32_t" = yes ; then + AC_DEFINE(U_INT32_T_IS_UINT32_T,[1],[u_int32_t is uint32_t]) + else + if test "$ac_cv_sizeof_int" = 4 ; then + AC_DEFINE(U_INT32_T_IS_UINT,[1],[u_int32_t is uint]) + else + if test "$ac_cv_sizeof_long" = 4 ; then + AC_DEFINE(U_INT32_T_IS_ULONG,[1],[u_int32_t is ulong]) + else + if test "$ac_cv_sizeof_short" = 4 ; then + AC_DEFINE(U_INT32_T_IS_USHORT,[1],[u_int32_t is ushort]) + fi + fi + fi + fi +fi + +dnl Define int32_t if we don't have it already +AC_CHECK_TYPE(int32_t,int) +if test "$ac_cv_type_int32_t" = no ; then + if test "$ac_cv_sizeof_int" = 4 ; then + AC_DEFINE(INT32_T_IS_UINT,[1],[int32_t is uint]) + else + if test "$ac_cv_sizeof_long" = 4 ; then + AC_DEFINE(INT32_T_IS_ULONG,[1],[int32_t is ulong]) + else + if test "$ac_cv_sizeof_short" = 4 ; then + AC_DEFINE(INT32_T_IS_USHORT,[1],[int32_t is ushort]) + fi + fi + fi +fi + + +dnl Check for asprintf() and friends... +AC_CACHE_CHECK([for va_copy],ac_cv_HAVE_VA_COPY,[ +AC_TRY_LINK([#include +va_list ap1,ap2;], [va_copy(ap1,ap2);], +ac_cv_HAVE_VA_COPY=yes, +ac_cv_HAVE_VA_COPY=no)]) +if test x"$ac_cv_HAVE_VA_COPY" = x"yes"; then + AC_DEFINE(HAVE_VA_COPY,1,[Whether va_copy() is available]) +else + AC_CACHE_CHECK([for __va_copy],ac_cv_HAVE___VA_COPY,[ + AC_TRY_LINK([#include + va_list ap1,ap2;], [__va_copy(ap1,ap2);], + ac_cv_HAVE___VA_COPY=yes, + ac_cv_HAVE___VA_COPY=no)]) + if test x"$ac_cv_HAVE___VA_COPY" = x"yes"; then + AC_DEFINE(HAVE___VA_COPY,1,[Whether __va_copy() is available]) + fi +fi + +AC_CHECK_FUNC(vsnprintf,,SNPRINTF_O=./snprintf.o) +AC_CHECK_FUNC(snprintf,,SNPRINTF_O=./snprintf.o) +AC_CHECK_FUNC(asprintf,,SNPRINTF_O=./snprintf.o) +AC_CHECK_FUNC(vasprintf,,SNPRINTF_O=./snprintf.o) + +AC_CACHE_CHECK([for C99 vsnprintf],ac_cv_HAVE_C99_VSNPRINTF,[ +AC_TRY_RUN([ +#include +#include +void foo(const char *format, ...) { + va_list ap; + int len; + char buf[5]; + + va_start(ap, format); + len = vsnprintf(buf, 0, format, ap); + va_end(ap); + if (len != 5) exit(1); + + va_start(ap, format); + len = vsnprintf(0, 0, format, ap); + va_end(ap); + if (len != 5) exit(1); + + if (snprintf(buf, 3, "hello") != 5 || strcmp(buf, "he") != 0) exit(1); + + exit(0); +} +main() { foo("hello"); } +], +ac_cv_HAVE_C99_VSNPRINTF=yes,ac_cv_HAVE_C99_VSNPRINTF=no,ac_cv_HAVE_C99_VSNPRINTF=cross)]) +if test x"$ac_cv_HAVE_C99_VSNPRINTF" = x"yes"; then + AC_DEFINE(HAVE_C99_VSNPRINTF,1,[Define if system has C99 compatible vsnprintf]) +fi + +dnl AC_CHECK_FUNC(snprintf,AC_DEFINE(HAVE_SNPRINTF),SNPRINTF_O=./snprintf.o) +AC_SUBST(SNPRINTF_O) + +dnl Check for getopt_long (Solaris) +AC_CHECK_FUNCS([getopt_long],,AC_CHECK_LIB([iberty],[getopt_long],OTHERLIBS="$OTHERLIBS -liberty")) +AC_SUBST(OTHERLIBS) + +dnl Checks for library functions. +AC_CHECK_LIB(nsl,main,SOCKETLIBS="$SOCKETLIBS -lnsl") +AC_CHECK_LIB(socket,socket,SOCKETLIBS="$SOCKETLIBS -lsocket") +AC_SUBST(SOCKETLIBS) +AC_CHECK_LIB(wrap,main,[ + LIBWRAPLIBS="$LIBWRAPLIBS -lwrap" + AC_DEFINE(HAVE_LIBWRAP,[1],[Have the TCP wrappers library]) + ]) +AC_SUBST(LIBWRAPLIBS) +AC_CHECK_FUNCS(strdup strstr strtoul initgroups closesocket) + +dnl socklen_t check - from curl +AC_CHECK_TYPE([socklen_t], ,[ + AC_MSG_CHECKING([for socklen_t equivalent]) + AC_CACHE_VAL([curl_cv_socklen_t_equiv], + [ + # Systems have either "struct sockaddr *" or + # "void *" as the second argument to getpeername + curl_cv_socklen_t_equiv= + for arg2 in "struct sockaddr" void; do + for t in int size_t unsigned long "unsigned long"; do + AC_TRY_COMPILE([ + #ifdef HAVE_SYS_TYPES_H + #include + #endif + #ifdef HAVE_SYS_SOCKET_H + #include + #endif + + int getpeername (int, $arg2 *, $t *); + ],[ + $t len; + getpeername(0,0,&len); + ],[ + curl_cv_socklen_t_equiv="$t" + break + ]) + done + done + + if test "x$curl_cv_socklen_t_equiv" = x; then + AC_MSG_ERROR([Cannot find a type to use in place of socklen_t]) + fi + ]) + AC_MSG_RESULT($curl_cv_socklen_t_equiv) + AC_DEFINE_UNQUOTED(socklen_t, $curl_cv_socklen_t_equiv, + [type to use in place of socklen_t if not defined])], + [#include +#include ]) + + +AC_MSG_CHECKING(for type of socket size) +AC_TRY_COMPILE([#include +#include +#include +], +[int a = send(1, (const void *)0, (size_t *) 0, (int *) 0);], +[AC_DEFINE(SOCKET_SIZE_TYPE, size_t, [Socket Size Type]) AC_MSG_RESULT(size_t)], +[AC_DEFINE(SOCKET_SIZE_TYPE, int, [Socket Size Type]) AC_MSG_RESULT(int)]) + +dnl Stolen from Python code: loewis@users.sourceforge.net +#AC_CHECK_TYPE(socklen_t,int, +# AC_DEFINE(socklen_t,int, +# Define to `int' if does not define.),[ +# #ifdef HAVE_SYS_TYPES_H +# #include +# #endif +# #ifdef HAVE_SYS_SOCKET_H +# #include +# #endif +# ]) + +dnl Does user want to check for SSL? +AC_ARG_ENABLE([ssl], + AS_HELP_STRING([--enable-ssl],[enables native SSL support]),[ + if test x$enableval = xyes; then + check_for_ssl=yes + else + check_for_ssl=no + fi + ],check_for_ssl=yes) + +dnl Optional SSL library and include paths +ssl_dir= +ssl_inc_dir= +ssl_lib_dir= +AC_ARG_WITH([ssl], + AS_HELP_STRING([--with-ssl=DIR],[sets location of the SSL installation]), + [ssl_dir=$withval]) +AC_ARG_WITH([ssl-inc], + AS_HELP_STRING([--with-ssl-inc=DIR], + [sets location of the SSL include files]), + [ ssl_inc_dir=$withval]) +AC_ARG_WITH([ssl-lib], + AS_HELP_STRING([--with-ssl-lib=DIR],[sets location of the SSL libraries]), + [ssl_lib_dir=$withval]) +AC_ARG_WITH([kerberos-inc], + AS_HELP_STRING([--with-kerberos-inc=DIR], + [sets location of the Kerberos include files]), + [kerberos_inc_dir=$withval]) + +dnl Check for SSL support +dnl Modified version of Mark Ethan Trostler's macro +if test x$check_for_ssl = xyes; then + AC_MSG_CHECKING(for SSL headers) + found_ssl=no + for dir in $ssl_inc_dir $ssl_dir /usr/local/openssl /usr/local/ssl /usr/lib/ssl /usr/ssl /usr/pkg /usr/local /usr /usr/freeware/lib/openssl /usr/sfw/include; do + ssldir="$dir" + if test -f "$dir/include/openssl/ssl.h"; then + found_ssl=yes + CFLAGS="$CFLAGS -I$dir/include/openssl -I$ssldir/include" + sslincdir="$dir/include/openssl" + break + fi + if test -f "$dir/include/ssl.h"; then + found_ssl=yes + CFLAGS="$CFLAGS -I$dir/include" + sslincdir="$dir/include" + break + fi + if test -f "$dir/ssl.h"; then + found_ssl=yes + CFLAGS="$CFLAGS -I$dir" + sslincdir="$dir" + ssldir="$dir/.." + break + fi + if test -f "$dir/openssl/ssl.h"; then + found_ssl=yes + CFLAGS="$CFLAGS -I$dir/openssl" + sslincdir="$dir/openssl" + ssldir="$dir/.." + break + fi + done + + if test x_$found_ssl != x_yes; then + AC_MSG_ERROR(Cannot find ssl headers) + else + + printf "SSL headers found in $ssldir\n"; + + dnl Now try and find SSL libraries + AC_MSG_CHECKING(for SSL libraries) + found_ssl=no + for dir in $ssl_lib_dir $ssl_dir /usr/lib64 /usr/lib /usr/local/lib /usr/lib/ssl /usr/ssl/lib /usr/openssl/lib /usr/pkg/lib /usr/freeware/lib/openssl /usr/sfw/lib /opt/freeware/lib; do + ssllibdir="$dir" + if test "`uname -s`" = "Darwin" ; then + soext="dylib" + elif test "`uname -s`" = "HP-UX" ; then + soext="sl" + else + soext="so" + fi + if test -f "$dir/libssl.$soext"; then + found_ssl=yes + break + fi + done + + if test x_$found_ssl != x_yes; then + AC_MSG_ERROR(Cannot find ssl libraries) + else + printf "SSL libraries found in $ssllibdir\n"; + + LDFLAGS="$LDFLAGS -L$ssllibdir"; + LIBS="$LIBS -lssl -lcrypto"; + + AC_DEFINE_UNQUOTED(HAVE_SSL,[1],[Have SSL support]) + AC_SUBST(HAVE_SSL) + + dnl Generate DH parameters + echo "" + echo "*** Generating DH Parameters for SSL/TLS ***" + if test -f "$ssldir/sbin/openssl"; then + sslbin=$ssldir/sbin/openssl + else + sslbin=$ssldir/bin/openssl + fi + # awk to strip off meta data at bottom of dhparam output + $sslbin dhparam -C 512 | awk '/^-----/ {exit} {print}' > include/dh.h + fi + fi + + dnl RedHat 8.0 and 9.0 include openssl compiled with kerberos, so we must include header file + AC_MSG_CHECKING(for Kerberos include files) + found_kerberos=no + for dir in $kerberos_inc_dir /usr/kerberos/include; do + kerbdir="$dir" + if test -f "$dir/krb5.h"; then + found_kerberos=yes + CFLAGS="$CFLAGS -I$kerbdir" + AC_DEFINE_UNQUOTED(HAVE_KRB5_H,[1],[Have the krb5.h header file]) + dnl AC_CHECK_HEADERS(krb5.h) + break + fi + done + + if test x_$found_kerberos != x_yes; then + printf "could not find include files\n"; + else + printf "found Kerberos include files in $kerbdir\n"; + fi + + +fi + +AC_ARG_WITH([log_facility], + AS_HELP_STRING([--with-log-facility=], + [sets NRPE syslog facility]), + [log_facility=$withval], + [log_facility=daemon]) +AC_SUBST(log_facility) +AC_DEFINE_UNQUOTED(NRPE_LOG_FACILITY,["$log_facility"],[NRPE syslog facility]) + +AC_ARG_WITH([nrpe_user], + AS_HELP_STRING([--with-nrpe-user=],[sets user name to run NRPE]), + [nrpe_user=$withval], + [nrpe_user=nagios]) + +AC_ARG_WITH([nrpe_group], + AS_HELP_STRING([--with-nrpe-group=],[sets group name to run NRPE]), + [nrpe_group=$withval], + [nrpe_group=nagios]) + +AC_ARG_WITH([nrpe_port], + AS_HELP_STRING([--with-nrpe-port=], + [sets port number for NRPE to listen on]), + [nrpe_port=$withval], + [nrpe_port=5666]) +AC_SUBST(nrpe_user) +AC_SUBST(nrpe_group) +NRPE_INSTALL_OPTS="-o $nrpe_user -g $nrpe_group" +AC_SUBST(NRPE_INSTALL_OPTS) +AC_SUBST(nrpe_port) +AC_DEFINE_UNQUOTED(DEFAULT_SERVER_PORT,$nrpe_port,[Default port for NRPE daemon]) + +AC_ARG_WITH([nagios_user], + AS_HELP_STRING([--with-nagios-user=], + [sets user name for file permissions]), + [nagios_user=$withval], + [nagios_user=nagios]) +AC_ARG_WITH([nagios_group], + AS_HELP_STRING([--with-nagios-group=], + [sets group name file permissions]), + [nagios_group=$withval], + [nagios_group=nagios]) +AC_SUBST(nagios_user) +AC_SUBST(nagios_group) +NAGIOS_INSTALL_OPTS="-o $nagios_user -g $nagios_group" +AC_SUBST(NAGIOS_INSTALL_OPTS) + +# Determine target OS, version and architecture for package build macros +if test "x$target_ver" = "x" ; then + TARGET_VER=`uname -r` +else + TARGET_VER=$target_ver +fi +AC_SUBST(TARGET_VER) +if test "x$target_os" = "x" ; then + TARGET_OS=`uname -s` +else + TARGET_OS=$target_os +fi +AC_SUBST(TARGET_OS) +if test "x$target_cpu" = "x" ; then + TARGET_ARCH=`uname -p` +else + TARGET_ARCH=$target_cpu +fi +AC_SUBST(TARGET_ARCH) +TARGET_PLATFORM="" +if test "x$TARGET_OS" = "xSunOS" ; then + if test "x$TARGET_VER" = "x5.10" ; then + TARGET_PLATFORM="sol10" + fi +fi +AC_SUBST(TARGET_PLATFORM) + +AC_ARG_ENABLE([command-args], + AS_HELP_STRING([--enable-command-args],[allows clients to specify command arguments. *** THIS IS A SECURITY RISK! *** Read the SECURITY file before using this option!]), + AC_DEFINE_UNQUOTED(ENABLE_COMMAND_ARGUMENTS,[1],[Enable command-line arguments])) + +AC_ARG_ENABLE([bash-command-substitution], + AS_HELP_STRING([--enable-bash-command-substitution],[allows clients to pass bash command substitutions of the form $(command). *** THIS IS A HIGH SECURITY RISK! *** Read the SECURITY file before using this option!]), + AC_DEFINE_UNQUOTED(ENABLE_BASH_COMMAND_SUBSTITUTION,[1],[Enable bash command substitution])) + + +AC_PATH_PROG(PERL,perl) +AC_OUTPUT() + +perl subst init-script +perl subst init-script.debian +perl subst init-script.suse +perl subst sample-config/nrpe.cfg +perl subst sample-config/nrpe.xinetd + + +dnl Review options +echo "" +echo "" +AC_MSG_RESULT([*** Configuration summary for $PKG_NAME $PKG_VERSION $PKG_REL_DATE ***:]) + +echo "" +echo " General Options:" +echo " -------------------------" + +AC_MSG_RESULT([ NRPE port: $nrpe_port]) +AC_MSG_RESULT([ NRPE user: $nrpe_user]) +AC_MSG_RESULT([ NRPE group: $nrpe_group]) +AC_MSG_RESULT([ Nagios user: $nagios_user]) +AC_MSG_RESULT([ Nagios group: $nagios_group]) + + +echo "" +echo "" +echo "Review the options above for accuracy. If they look okay," +echo "type 'make all' to compile the NRPE daemon and client." +echo "" diff --git a/contrib/README.nrpe_check_control b/contrib/README.nrpe_check_control new file mode 100644 index 0000000..781b961 --- /dev/null +++ b/contrib/README.nrpe_check_control @@ -0,0 +1,64 @@ +NOTES: +------ + +The service definition below assumes you have a command called "check_tcp" already setup +in your config files. + +The command definition below assumes that the $USER1$ macro is used to define the location +of your Nagios plugins (i.e. "/usr/local/nagios/libexec") and that the nrpe_check_control +service is located in that directory. + + + +SAMPLE CONFIG FILE SNIPPETS: +---------------------------- + +define service { + host_name + description NRPE + ... + event_handler nrpe_check_control + check_command check_tcp!-p 5666 + } + +define command { + command_name nrpe_check_control + command_line $USER1$/nrpe_check_control $SERVICESTATE$ $SERVICESTATETYPE$ $SERVICEATTEMPT$ "$HOSTNAME$" + } + + + + +ORIGINAL EMAIL SNIPPET: +----------------------- + +Date sent: Fri, 30 Mar 2001 18:51:48 -0500 +From: adam.bowen@<> +Subject: Event Handler +To: [nagios@nagios.org] + +I am attaching the source code for an event handler I wrote to +control checks using nrpe. I add the following check to all remote hosts +using nrpe: + + + +I added this line to the commands.cfg file: + + + +When the NRPE service check listed above has 3 failed connection +attempts, it will run the nrpe_check_control which will search the +services file for all services for $HOSTNAME$ that use the check_nrpe. + +It will then request that all these services be disabled. When the +NRPE check returns to the OK state, it will request that all services +using check_nrpe be re-enabled. This will prevent unnecessary e-mail +when there is a problem with the NRPE daemon. This does require +that external commands be enabled. + +(See attached file: nrpe_check_control.c) + +I thought some other [Nagios] users might find this useful. + +Adam G. Bowen diff --git a/contrib/nrpe_check_control.c b/contrib/nrpe_check_control.c new file mode 100644 index 0000000..04fa9e0 --- /dev/null +++ b/contrib/nrpe_check_control.c @@ -0,0 +1,121 @@ +#include +#include +#include + +#define MAX_CHARS 1024 +#define SERVICE_COUNT 12 + +#define COMMAND_FILE "/usr/local/nagios/var/rw/nagios.cmd" +#define SERVICES_FILE "/usr/local/nagios/etc/services.cfg" + +int main(int argc, char *argv[]) +{ + char check_name[MAX_CHARS]; + char ent_type[MAX_CHARS]; + char input_buffer[MAX_CHARS]; + char host_name[MAX_CHARS]; + char service_name[MAX_CHARS]; + char state[MAX_CHARS]; + char state_type[MAX_CHARS]; + char temp_input[MAX_CHARS]; + char temp_string[MAX_CHARS]; + char test_host[MAX_CHARS]; + + char *temp_var; + + FILE *command_fp; + FILE *services_fp; + + int attempt; + int i; + + time_t current_time; + + strcpy(state,argv[1]); + strcpy(state_type,argv[2]); + attempt=atoi(argv[3]); + strcpy(host_name,argv[4]); + + if(strcmp(state,"OK") == 0) + { + services_fp=fopen(SERVICES_FILE,"r"); + command_fp=fopen(COMMAND_FILE,"a"); + while((fgets(input_buffer,MAX_CHARS-1,services_fp)) != NULL) + { + if(input_buffer[0]=='#' || input_buffer[0]=='\x0' || input_buffer[0]=='\n' || input_buffer[0]=='\r') + { + continue; + } + else + { + strcpy(temp_input,input_buffer); + strcpy(temp_string,strtok(temp_input,"=")); + strcpy(ent_type,strtok(temp_string,"[")); + if(strcmp(ent_type,"service") == 0) + { + strcpy(test_host,strtok(NULL,"]")); + if(strcmp(test_host,host_name) == 0) + { + temp_var=strtok(input_buffer,"="); + strcpy(service_name,strtok(NULL,";")); + for(i=1;i<=SERVICE_COUNT;i++) + { + temp_var=strtok(NULL,";"); + } + strcpy(check_name,strtok(temp_var,"!")); + if(strcmp(check_name,"check_nrpe") == 0) + { + time(¤t_time); + fprintf(command_fp,"[%lu] ENABLE_SVC_CHECK;%s;%s\n",current_time,host_name,service_name); + } + } + } + } + } + fclose(command_fp); + fclose(services_fp); + } + else if(strcmp(state,"CRITICAL") == 0) + { + if(attempt == 3) + { + services_fp=fopen(SERVICES_FILE,"r"); + command_fp=fopen(COMMAND_FILE,"a"); + while((fgets(input_buffer,MAX_CHARS-1,services_fp)) != NULL) + { + if(input_buffer[0]=='#' || input_buffer[0]=='\x0' || input_buffer[0]=='\n' || input_buffer[0]=='\r') + { + continue; + } + else + { + strcpy(temp_input,input_buffer); + strcpy(temp_string,strtok(temp_input,"=")); + strcpy(ent_type,strtok(temp_string,"[")); + if(strcmp(ent_type,"service") == 0) + { + strcpy(test_host,strtok(NULL,"]")); + if(strcmp(test_host,host_name) == 0) + { + temp_var=strtok(input_buffer,"="); + strcpy(service_name,strtok(NULL,";")); + for(i=1;i<=SERVICE_COUNT;i++) + { + temp_var=strtok(NULL,";"); + } + strcpy(check_name,strtok(temp_var,"!")); + if(strcmp(check_name,"check_nrpe") == 0) + { + time(¤t_time); + fprintf(command_fp,"[%lu] DISABLE_SVC_CHECK;%s;%s\n",current_time,host_name,service_name); + } + } + } + } + } + fclose(command_fp); + fclose(services_fp); + } + } + return 0; +} diff --git a/docs/NRPE.odt b/docs/NRPE.odt new file mode 100644 index 0000000000000000000000000000000000000000..2749e453616fcd19c26a03f7b210083bfca353bf GIT binary patch literal 104985 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�MuEV)md&e@hbIcxFCmm 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Ό?CX~U5*X@{>tu_(E*`o@;!0P1*4UpC1 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%0D13boWA}zo53f+VrA#ukRm>2 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�n*rA<_ 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 literal 0 HcmV?d00001 diff --git a/include/acl.h b/include/acl.h new file mode 100644 index 0000000..06d9e5a --- /dev/null +++ b/include/acl.h @@ -0,0 +1,70 @@ +/*- + * acl.c - header file for acl.c + * Copyright (c) 2011 Kaspersky Lab ZAO + * Last Modified: 08-10-2011 by Konstantin Malov with Oleg Koreshkov's help + * + * License: GPL + * + * 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, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + */ + +#ifndef ACL_H_INCLUDED +#define ACL_H_INCLUDED 1 + +#include +#include + +#include +#include + +#include +#include +#include +#include +#include +#include +#include + +#define CHAR_TO_NUMBER(c) ((c) - '0') + +struct ip_acl { + int family; + struct in_addr addr; + struct in_addr mask; + struct in6_addr addr6; + struct in6_addr mask6; + struct ip_acl *next; +}; + +struct dns_acl { + char domain[255]; + struct dns_acl *next; +}; + +/* Poiters to head ACL structs */ +static struct ip_acl *ip_acl_head, *ip_acl_prev; +static struct dns_acl *dns_acl_head, *dns_acl_prev; + +/* Functions */ +void parse_allowed_hosts(char *allowed_hosts); +int add_ipv4_to_acl(char *ipv4); +int add_ipv6_to_acl(char *ipv6); +int add_domain_to_acl(char *domain); +//int is_an_allowed_host(struct in_addr); +int is_an_allowed_host(int, void *); +unsigned int prefix_from_mask(struct in_addr mask); +void show_acl_lists(void); + +#endif /* ACL_H_INCLUDED */ diff --git a/include/common.h b/include/common.h new file mode 100644 index 0000000..42dcfa2 --- /dev/null +++ b/include/common.h @@ -0,0 +1,92 @@ +/************************************************************************ + * + * COMMON.H - NRPE Common Include File + * Copyright (c) 1999-2007 Ethan Galstad (nagios@nagios.org) + * Last Modified: 09-06-2013 + * + * License: + * + * 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, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + ************************************************************************/ + +#include "config.h" + +#define PROGRAM_VERSION "2.15" +#define MODIFICATION_DATE "09-06-2013" + +#define OK 0 +#define ERROR -1 + +#define TRUE 1 +#define FALSE 0 + +#define STATE_UNKNOWN 3 /* service state return codes */ +#define STATE_CRITICAL 2 +#define STATE_WARNING 1 +#define STATE_OK 0 + + +#define DEFAULT_SOCKET_TIMEOUT 10 /* timeout after 10 seconds */ +#define DEFAULT_CONNECTION_TIMEOUT 300 /* timeout if daemon is waiting for connection more than this time */ + +#define MAX_INPUT_BUFFER 2048 /* max size of most buffers we use */ +#define MAX_FILENAME_LENGTH 256 + +#define MAX_HOST_ADDRESS_LENGTH 256 /* max size of a host address */ + +#define NRPE_HELLO_COMMAND "_NRPE_CHECK" + +#define MAX_COMMAND_ARGUMENTS 16 + + +/**************** PACKET STRUCTURE DEFINITION **********/ + +#define QUERY_PACKET 1 /* id code for a packet containing a query */ +#define RESPONSE_PACKET 2 /* id code for a packet containing a response */ + +#define NRPE_PACKET_VERSION_3 3 /* packet version identifier */ +#define NRPE_PACKET_VERSION_2 2 +#define NRPE_PACKET_VERSION_1 1 /* older packet version identifiers (no longer supported) */ + +#define MAX_PACKETBUFFER_LENGTH 1024 /* max amount of data we'll send in one query/response */ + +typedef struct packet_struct{ + int16_t packet_version; + int16_t packet_type; + u_int32_t crc32_value; + int16_t result_code; + char buffer[MAX_PACKETBUFFER_LENGTH]; + }packet; + +/**************** OPERATING SYSTEM SPECIFIC DEFINITIONS **********/ +#if defined(__sun) || defined(__hpux) + +# ifndef LOG_AUTHPRIV +# define LOG_AUTHPRIV LOG_AUTH +# endif + +# ifndef LOG_FTP +# define LOG_FTP LOG_DAEMON +# endif + +#elif _AIX + +# include + +# ifndef LOG_FTP +# define LOG_FTP LOG_DAEMON +# endif + +#endif diff --git a/include/config.h.in b/include/config.h.in new file mode 100644 index 0000000..3ece168 --- /dev/null +++ b/include/config.h.in @@ -0,0 +1,263 @@ +/************************************************************************ + * + * NRPE Common Header File + * Copyright (c) 1999-2007 Ethan Galstad (nagios@nagios.org) + * Last Modified: 11-23-2007 + * + * License: + * + * 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, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + ************************************************************************/ + +#ifndef _CONFIG_H +#define _CONFIG_H + +#include +#include + + +#define DEFAULT_SERVER_PORT @nrpe_port@ /* default port to use */ + +#define NRPE_LOG_FACILITY @log_facility@ + +#undef ENABLE_COMMAND_ARGUMENTS + +#undef ENABLE_BASH_COMMAND_SUBSTITUTION + +#undef socklen_t + +#undef HAVE_GETOPT_LONG + +#undef HAVE_LIBWRAP + +#undef STDC_HEADERS +#undef HAVE_STRDUP +#undef HAVE_STRSTR +#undef HAVE_STRTOUL +#undef HAVE_INITGROUPS +#undef HAVE_CLOSESOCKET + +#undef SIZEOF_INT +#undef SIZEOF_SHORT +#undef SIZEOF_LONG + +/* stupid stuff for u_int32_t */ +#undef U_INT32_T_IS_USHORT +#undef U_INT32_T_IS_UINT +#undef U_INT32_T_IS_ULONG +#undef U_INT32_T_IS_UINT32_T + +#ifdef U_INT32_T_IS_USHORT +typedef unsigned short u_int32_t; +#endif +#ifdef U_INT32_T_IS_ULONG +typedef unsigned long u_int32_t; +#endif +#ifdef U_INT32_T_IS_UINT +typedef unsigned int u_int32_t; +#endif +#ifdef U_INT32_T_IS_UINT32_t +typedef uint32_t u_int32_t; +#endif + +/* stupid stuff for int32_t */ +#undef INT32_T_IS_SHORT +#undef INT32_T_IS_INT +#undef INT32_T_IS_LONG + +#ifdef INT32_T_IS_USHORT +typedef short int32_t; +#endif +#ifdef INT32_T_IS_ULONG +typedef long int32_t; +#endif +#ifdef INT32_T_IS_UINT +typedef int int32_t; +#endif + + +/***** ASPRINTF() AND FRIENDS *****/ + +#undef HAVE_VSNPRINTF +#undef HAVE_SNPRINTF +#undef HAVE_ASPRINTF +#undef HAVE_VASPRINTF +#undef HAVE_C99_VSNPRINTF +#undef HAVE_VA_COPY +#undef HAVE___VA_COPY + + + +#define SOCKET_SIZE_TYPE "" +#define GETGROUPS_T "" +#define RETSIGTYPE "" + +#undef HAVE_GETOPT_H +#ifdef HAVE_GETOPT_H +#include +#endif + +#undef HAVE_STRINGS_H +#undef HAVE_STRING_H +#ifdef HAVE_STRINGS_H +#include +#endif +#ifdef HAVE_STRINGS_H +#include +#endif + +#undef HAVE_UNISTD_H +#ifdef HAVE_UNISTD_H +#include +#endif + + +#undef HAVE_SIGNAL_H +#ifdef HAVE_SIGNAL_H +#include +#endif + +#undef HAVE_SYSLOG_H +#ifdef HAVE_SYSLOG_H +#include +#endif + +#undef HAVE_SYS_STAT_H +#ifdef HAVE_SYS_STAT_H +#include +#endif + +#undef HAVE_FCNTL_H +#ifdef HAVE_FCNTL_H +#include +#endif + +#undef HAVE_SYS_TYPES_H +#ifdef HAVE_SYS_TYPES_H +#include +#endif + +#undef HAVE_SYS_WAIT_H +#ifdef HAVE_SYS_WAIT_H +#include +#endif + +#ifndef WEXITSTATUS +# define WEXITSTATUS(stat_val) ((unsigned)(stat_val) >> 8) +#endif +#ifndef WIFEXITED +# define WIFEXITED(stat_val) (((stat_val) & 255) == 0) +#endif + +#undef HAVE_ERRNO_H +#ifdef HAVE_ERRNO_H +#include +#endif + +/* needed for the time_t structures we use later... */ +#undef TIME_WITH_SYS_TIME +#undef HAVE_SYS_TIME_H +#if TIME_WITH_SYS_TIME +# include +# include +#else +# if HAVE_SYS_TIME_H +# include +# else +# include +# endif +#endif + + +#undef HAVE_SYS_SOCKET_H +#ifdef HAVE_SYS_SOCKET_H +#include +#endif + +/* Define to 'int' if does not define */ +#undef socklen_t + +#undef HAVE_SOCKET_H +#ifdef HAVE_SOCKET_H +#include +#endif + +#undef HAVE_TCPD_H +#ifdef HAVE_TCPD_H +#include +#endif + +#undef HAVE_NETINET_IN_H +#ifdef HAVE_NETINET_IN_H +#include +#endif + +#undef HAVE_ARPA_INET_H +#ifdef HAVE_ARPA_INET_H +#include +#endif + +#undef HAVE_NETDB_H +#ifdef HAVE_NETDB_H +#include +#endif + +#undef HAVE_CTYPE_H +#ifdef HAVE_CTYPE_H +#include +#endif + +#undef HAVE_PWD_H +#ifdef HAVE_PWD_H +#include +#endif + +#undef HAVE_GRP_H +#ifdef HAVE_GRP_H +#include +#endif + +#undef HAVE_DIRENT_H +#ifdef HAVE_DIRENT_H +#include +#endif + +#undef HAVE_SSL +#ifdef HAVE_SSL +#include +#include +#include +#include +#include +#include +#include +#endif + +#undef HAVE_KRB5_H +#ifdef HAVE_KRB5_H +#include +#endif + +#undef HAVE_INTTYPES_H +#undef HAVE_STDINT_H +#ifdef HAVE_INTTYPES_H +#include +#else +#ifdef HAVE_STDINT_H +#include +#endif +#endif + +#endif diff --git a/include/dh.h b/include/dh.h new file mode 100644 index 0000000..1ad355a --- /dev/null +++ b/include/dh.h @@ -0,0 +1,25 @@ +#ifndef HEADER_DH_H +#include +#endif +DH *get_dh512() + { + static unsigned char dh512_p[]={ + 0xDA,0xD8,0xF0,0xA2,0x9A,0x64,0xC2,0x9F,0x22,0x9D,0x47,0xA1, + 0xB2,0xED,0xD6,0x89,0xB5,0x46,0x6D,0x4E,0x1F,0x14,0xF4,0xF4, + 0xEB,0xCA,0x4D,0x41,0x89,0x60,0x0D,0x1F,0xB3,0x50,0xC4,0x54, + 0xE1,0x60,0xB5,0xDD,0x57,0x0C,0xF9,0xF5,0x19,0x73,0x6C,0x0C, + 0x45,0x33,0xA9,0xC1,0xD7,0xF3,0x27,0x68,0xEE,0xDA,0x8C,0x4A, + 0x1C,0x52,0xA1,0x9B, + }; + static unsigned char dh512_g[]={ + 0x02, + }; + DH *dh; + + if ((dh=DH_new()) == NULL) return(NULL); + dh->p=BN_bin2bn(dh512_p,sizeof(dh512_p),NULL); + dh->g=BN_bin2bn(dh512_g,sizeof(dh512_g),NULL); + if ((dh->p == NULL) || (dh->g == NULL)) + { DH_free(dh); return(NULL); } + return(dh); + } diff --git a/include/nrpe.h b/include/nrpe.h new file mode 100644 index 0000000..63c2d23 --- /dev/null +++ b/include/nrpe.h @@ -0,0 +1,65 @@ +/************************************************************************ + * + * NRPE.H - NRPE Include File + * Copyright (c) 1999-2007 Ethan Galstad (nagios@nagios.org) + * Last Modified: 08-10-2011 by Konstantin Malov + * + * License: + * + * 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, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + * + ************************************************************************/ + + /* + * 08-10-2011 IPv4 subnetworks support added. + * Main change in nrpe.c is that is_an_allowed_host() moved to acl.c + * + */ + +/**************** COMMAND STRUCTURE DEFINITION **********/ + +typedef struct command_struct{ + char *command_name; + char *command_line; + struct command_struct *next; + }command; + +int process_arguments(int,char **); +void wait_for_connections(void); +void handle_connection(int); +int read_config_file(char *); +int read_config_dir(char *); +int get_log_facility(char *); +int add_command(char *,char *); +command *find_command(char *); +void sighandler(int); +int drop_privileges(char *,char *); +int check_privileges(void); + +int write_pid_file(void); +int remove_pid_file(void); + +void free_memory(void); +int validate_request(packet *); +int contains_nasty_metachars(char *); +int process_macros(char *,char *,int); +int my_system(char *,int,int *,char *,int); /* executes a command via popen(), but also protects against timeouts */ +void my_system_sighandler(int); /* handles timeouts when executing commands via my_system() */ +void my_connection_sighandler(int); /* handles timeouts of connection */ + +void sighandler(int); +void child_sighandler(int); + + diff --git a/include/utils.h b/include/utils.h new file mode 100644 index 0000000..bf5cce7 --- /dev/null +++ b/include/utils.h @@ -0,0 +1,63 @@ +/************************************************************************************************ + * + * UTILS.H - NRPE Utilities Include File + * + * License: GPL + * Copyright (c) 1999-2006 Ethan Galstad (nagios@nagios.org) + * + * Last Modified: 12-11-2006 + * + * Description: + * + * This file contains common include files and function definitions used in many of the plugins. + * + * 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, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + * + ************************************************************************************************/ + +#ifndef _UTILS_H +#define _UTILS_H + +#include "../include/config.h" + + +void generate_crc32_table(void); +unsigned long calculate_crc32(char *, int); + +void randomize_buffer(char *,int); + +int my_tcp_connect(char *,int,int *); +int my_connect(const char *, struct sockaddr_storage *, u_short, int, + const char *); + +void add_listen_addr(struct addrinfo **, int, char *, int); + +void strip(char *); + +int sendall(int,char *,int *); +int recvall(int,char *,int *,int); + +char *my_strsep(char **,const char *); + +void display_license(void); + +#endif + + + + + diff --git a/init-script.debian.in b/init-script.debian.in new file mode 100644 index 0000000..8965da9 --- /dev/null +++ b/init-script.debian.in @@ -0,0 +1,34 @@ +#!/bin/sh +# Start/stop the nrpe daemon. +# +# Contributed by Andrew Ryder 06-22-02 +# Slight mods by Ethan Galstad 07-09-02 + +NrpeBin=@bindir@/nrpe +NrpeCfg=@sysconfdir@/nrpe.cfg + +test -f $NrpeBin || exit 0 + +case "$1" in +start) echo -n "Starting nagios remote plugin daemon: nrpe" + start-stop-daemon --start --quiet --exec $NrpeBin -- -c $NrpeCfg -d + echo "." + ;; +stop) echo -n "Stopping nagios remote plugin daemon: nrpe" + start-stop-daemon --stop --quiet --exec $NrpeBin + echo "." + ;; +restart) echo -n "Restarting nagios remote plugin daemon: nrpe" + start-stop-daemon --stop --quiet --exec $NrpeBin + start-stop-daemon --start --quiet --exec $NrpeBin -- -c $NrpeCfg -d + echo "." + ;; +reload|force-reload) echo -n "Reloading configuration files for nagios remote plugin daemon: nrpe" + # nrpe reloads automatically + echo "." + ;; +*) echo "Usage: /etc/init.d/nrpe start|stop|restart|reload|force-reload" + exit 1 + ;; +esac +exit 0 diff --git a/init-script.in b/init-script.in new file mode 100644 index 0000000..07b17c7 --- /dev/null +++ b/init-script.in @@ -0,0 +1,62 @@ +#!/bin/sh +# +# Created 2000-01-03 by jaclu@grm.se +# +# nrpe This shell script takes care of starting and stopping +# nrpe. +# +# chkconfig: 2345 80 30 +# description: nrpe is a daemon for a remote nagios server, \ +# running nagios plugins on this host. +# processname: nrpe +# config: /usr/local/nagios/etc/nrpe.cfg + + +# Source function library +if [ -f /etc/rc.d/init.d/functions ]; then +. /etc/rc.d/init.d/functions +elif [ -f /etc/init.d/functions ]; then +. /etc/init.d/functions +elif [ -f /etc/rc.d/functions ]; then +. /etc/rc.d/functions +fi + +# Source networking configuration. +. /etc/sysconfig/network + +# Check that networking is up. +[ ${NETWORKING} = "no" ] && exit 0 + +NrpeBin=@bindir@/nrpe +NrpeCfg=@sysconfdir@/nrpe.cfg +LockFile=/var/lock/subsys/nrpe + +# See how we were called. +case "$1" in + start) + # Start daemons. + echo -n "Starting nrpe: " + daemon $NrpeBin -c $NrpeCfg -d + echo + touch $LockFile + ;; + stop) + # Stop daemons. + echo -n "Shutting down nrpe: " + killproc nrpe + echo + rm -f $LockFile + ;; + restart) + $0 stop + $0 start + ;; + status) + status nrpe + ;; + *) + echo "Usage: nrpe {start|stop|restart|status}" + exit 1 +esac + +exit 0 diff --git a/init-script.suse.in b/init-script.suse.in new file mode 100644 index 0000000..4dab941 --- /dev/null +++ b/init-script.suse.in @@ -0,0 +1,84 @@ +#! /bin/sh +# Copyright (c) 1996-2002 SuSE GmbH Nuernberg, Germany. All rights reserved. +# Modifications for NRPE Copyright (c) 2003 Subhendu Ghosh +# Author: Christopher Mahmood , Remo Behn +# Modifications for NRPE: Subhendu Ghosh +# +# /etc/init.d/nrpe +# +### BEGIN INIT INFO +# Provides: nrpe +# Required-Start: $network +# Required-Stop: +# Default-Start: 2 3 5 +# Default-Stop: 0 1 6 +# Description: start nrpe +### END INIT INFO + +NRPEBIN=@bindir@/nrpe +NRPECFG=@sysconfdir@/nrpe.cfg + +test -x $NRPEBIN || exit 5 + +# Shell functions sourced from /etc/rc.status: +# rc_check check and set local and overall rc status +# rc_status check and set local and overall rc status +# rc_status -v ditto but be verbose in local rc status +# rc_status -v -r ditto and clear the local rc status +# rc_failed set local and overall rc status to failed +# rc_failed set local and overall rc status to +# rc_reset clear local rc status (overall remains) +# rc_exit exit appropriate to overall rc status +. /etc/rc.status + +# First reset status of this service +rc_reset + +# Return values acc. to LSB for all commands but status: +# 0 - success +# 1 - generic or unspecified error +# 2 - invalid or excess argument(s) +# 3 - unimplemented feature (e.g. "reload") +# 4 - insufficient privilege +# 5 - program is not installed +# 6 - program is not configured +# 7 - program is not running +# +# Note that starting an already running service, stopping +# or restarting a not-running service as well as the restart +# with force-reload (in case signalling is not supported) are +# considered a success. + + +case "$1" in + start) + echo -n "Starting nrpe:" + startproc $NRPEBIN -c $NRPECFG -d + rc_status -v + rc_reset + + ;; + stop) + echo -n "Shutting down nrpe:" + killproc -TERM $NRPEBIN + rc_status -v ; rc_reset + ;; + restart) + $0 stop + $0 start + rc_status + ;; + status) + echo -n "Checking for service nrpe:" + checkproc $NRPEBIN + rc_status -v + rc_reset + + ;; + *) + echo "Usage: $0 {start|stop|restart|status}" + exit 1 + ;; +esac +rc_exit + diff --git a/install-sh b/install-sh new file mode 100755 index 0000000..ebc6691 --- /dev/null +++ b/install-sh @@ -0,0 +1,250 @@ +#! /bin/sh +# +# install - install a program, script, or datafile +# This comes from X11R5 (mit/util/scripts/install.sh). +# +# Copyright 1991 by the Massachusetts Institute of Technology +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of M.I.T. not be used in advertising or +# publicity pertaining to distribution of the software without specific, +# written prior permission. M.I.T. makes no representations about the +# suitability of this software for any purpose. It is provided "as is" +# without express or implied warranty. +# +# Calling this script install-sh is preferred over install.sh, to prevent +# `make' implicit rules from creating a file called install from it +# when there is no Makefile. +# +# This script is compatible with the BSD install script, but was written +# from scratch. It can only install one file at a time, a restriction +# shared with many OS's install programs. + + +# set DOITPROG to echo to test this script + +# Don't use :- since 4.3BSD and earlier shells don't like it. +doit="${DOITPROG-}" + + +# put in absolute paths if you don't have them in your path; or use env. vars. + +mvprog="${MVPROG-mv}" +cpprog="${CPPROG-cp}" +chmodprog="${CHMODPROG-chmod}" +chownprog="${CHOWNPROG-chown}" +chgrpprog="${CHGRPPROG-chgrp}" +stripprog="${STRIPPROG-strip}" +rmprog="${RMPROG-rm}" +mkdirprog="${MKDIRPROG-mkdir}" + +transformbasename="" +transform_arg="" +instcmd="$mvprog" +chmodcmd="$chmodprog 0755" +chowncmd="" +chgrpcmd="" +stripcmd="" +rmcmd="$rmprog -f" +mvcmd="$mvprog" +src="" +dst="" +dir_arg="" + +while [ x"$1" != x ]; do + case $1 in + -c) instcmd="$cpprog" + shift + continue;; + + -d) dir_arg=true + shift + continue;; + + -m) chmodcmd="$chmodprog $2" + shift + shift + continue;; + + -o) chowncmd="$chownprog $2" + shift + shift + continue;; + + -g) chgrpcmd="$chgrpprog $2" + shift + shift + continue;; + + -s) stripcmd="$stripprog" + shift + continue;; + + -t=*) transformarg=`echo $1 | sed 's/-t=//'` + shift + continue;; + + -b=*) transformbasename=`echo $1 | sed 's/-b=//'` + shift + continue;; + + *) if [ x"$src" = x ] + then + src=$1 + else + # this colon is to work around a 386BSD /bin/sh bug + : + dst=$1 + fi + shift + continue;; + esac +done + +if [ x"$src" = x ] +then + echo "install: no input file specified" + exit 1 +else + true +fi + +if [ x"$dir_arg" != x ]; then + dst=$src + src="" + + if [ -d $dst ]; then + instcmd=: + else + instcmd=mkdir + fi +else + +# Waiting for this to be detected by the "$instcmd $src $dsttmp" command +# might cause directories to be created, which would be especially bad +# if $src (and thus $dsttmp) contains '*'. + + if [ -f $src -o -d $src ] + then + true + else + echo "install: $src does not exist" + exit 1 + fi + + if [ x"$dst" = x ] + then + echo "install: no destination specified" + exit 1 + else + true + fi + +# If destination is a directory, append the input filename; if your system +# does not like double slashes in filenames, you may need to add some logic + + if [ -d $dst ] + then + dst="$dst"/`basename $src` + else + true + fi +fi + +## this sed command emulates the dirname command +dstdir=`echo $dst | sed -e 's,[^/]*$,,;s,/$,,;s,^$,.,'` + +# Make sure that the destination directory exists. +# this part is taken from Noah Friedman's mkinstalldirs script + +# Skip lots of stat calls in the usual case. +if [ ! -d "$dstdir" ]; then +defaultIFS=' +' +IFS="${IFS-${defaultIFS}}" + +oIFS="${IFS}" +# Some sh's can't handle IFS=/ for some reason. +IFS='%' +set - `echo ${dstdir} | sed -e 's@/@%@g' -e 's@^%@/@'` +IFS="${oIFS}" + +pathcomp='' + +while [ $# -ne 0 ] ; do + pathcomp="${pathcomp}${1}" + shift + + if [ ! -d "${pathcomp}" ] ; + then + $mkdirprog "${pathcomp}" + else + true + fi + + pathcomp="${pathcomp}/" +done +fi + +if [ x"$dir_arg" != x ] +then + $doit $instcmd $dst && + + if [ x"$chowncmd" != x ]; then $doit $chowncmd $dst; else true ; fi && + if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dst; else true ; fi && + if [ x"$stripcmd" != x ]; then $doit $stripcmd $dst; else true ; fi && + if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dst; else true ; fi +else + +# If we're going to rename the final executable, determine the name now. + + if [ x"$transformarg" = x ] + then + dstfile=`basename $dst` + else + dstfile=`basename $dst $transformbasename | + sed $transformarg`$transformbasename + fi + +# don't allow the sed command to completely eliminate the filename + + if [ x"$dstfile" = x ] + then + dstfile=`basename $dst` + else + true + fi + +# Make a temp file name in the proper directory. + + dsttmp=$dstdir/#inst.$$# + +# Move or copy the file name to the temp name + + $doit $instcmd $src $dsttmp && + + trap "rm -f ${dsttmp}" 0 && + +# and set any options; do chmod last to preserve setuid bits + +# If any of these fail, we abort the whole thing. If we want to +# ignore errors from any of these, just make sure not to ignore +# errors from the above "$doit $instcmd $src $dsttmp" command. + + if [ x"$chowncmd" != x ]; then $doit $chowncmd $dsttmp; else true;fi && + if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dsttmp; else true;fi && + if [ x"$stripcmd" != x ]; then $doit $stripcmd $dsttmp; else true;fi && + if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dsttmp; else true;fi && + +# Now rename the file to the real destination. + + $doit $rmcmd -f $dstdir/$dstfile && + $doit $mvcmd $dsttmp $dstdir/$dstfile + +fi && + + +exit 0 diff --git a/nrpe.spec b/nrpe.spec new file mode 100644 index 0000000..1b7af5c --- /dev/null +++ b/nrpe.spec @@ -0,0 +1,252 @@ +%define isaix %(test "`uname -s`" = "AIX" && echo "1" || echo "0") +%define islinux %(test "`uname -s`" = "Linux" && echo "1" || echo "0") + +%if %{isaix} + %define _prefix /opt/nagios + %define _docdir %{_prefix}/doc/nrpe-2.15 + %define nshome /opt/nagios + %define _make gmake +%endif +%if %{islinux} + %define _init_dir /etc/init.d + %define _exec_prefix %{_prefix}/sbin + %define _bindir %{_prefix}/sbin + %define _sbindir %{_prefix}/lib/nagios/cgi + %define _libexecdir %{_prefix}/lib/nagios/plugins + %define _datadir %{_prefix}/share/nagios + %define _localstatedir /var/log/nagios + %define nshome /var/log/nagios + %define _make make +%endif +%define _sysconfdir /etc/nagios + +%define name nrpe +%define version 2.15 +%define release 1 +%define nsusr nagios +%define nsgrp nagios +%define nsport 5666 + +# Reserve option to override port setting with: +# rpm -ba|--rebuild --define 'nsport 5666' +%{?port:%define nsport %{port}} + +# Macro that print mesages to syslog at package (un)install time +%define nnmmsg logger -t %{name}/rpm + +Summary: Host/service/network monitoring agent for Nagios +URL: http://www.nagios.org +Name: %{name} +Version: %{version} +Release: %{release} +License: GPL +Group: Application/System +Source0: %{name}-%{version}.tar.gz +BuildRoot: %{_tmppath}/%{name}-buildroot +Prefix: %{_prefix} +Prefix: /etc/init.d +Prefix: /etc/nagios +%if %{isaix} +Requires: nagios-plugins +%endif +%if %{islinux} +Requires: bash, grep, nagios-plugins, util-linux, chkconfig, shadow-utils, sed, initscripts, mktemp +%endif + +%description +NPRE (Nagios Remote Plugin Executor) is a system daemon that +will execute various Nagios plugins locally on behalf of a +remote (monitoring) host that uses the check_nrpe plugin. +Various plugins that can be executed by the daemon are available +at: http://sourceforge.net/projects/nagiosplug + +This package provides the client-side NRPE agent (daemon). + +%package plugin +Group: Application/System +Summary: Provides nrpe plugin for Nagios. +Requires: nagios-plugins + +%description plugin +NPRE (Nagios Remote Plugin Executor) is a system daemon that +will execute various Nagios plugins locally on behalf of a +remote (monitoring) host that uses the check_nrpe plugin. +Various plugins that can be executed by the daemon are available +at: http://sourceforge.net/projects/nagiosplug + +This package provides the server-side NRPE plugin for +Nagios-related applications. + +%prep +%setup -q + + +%pre +# Create `nagios' group on the system if necessary +%if %{isaix} +lsgroup %{nsgrp} > /dev/null 2> /dev/null +if [ $? -eq 2 ] ; then + mkgroup %{nsgrp} || %nnmmsg Unexpected error adding group "%{nsgrp}". Aborting install process. +fi +%endif +%if %{islinux} +getent group %{nsgrp} > /dev/null 2> /dev/null +if [ $? -ne 0 ] ; then + groupadd %{nsgrp} || %nnmmsg Unexpected error adding group "%{nsgrp}". Aborting install process. +fi +%endif + +# Create `nagios' user on the system if necessary +%if %{isaix} +lsuser %{nsusr} > /dev/null 2> /dev/null +if [ $? -eq 2 ] ; then + useradd -d %{nshome} -c "%{nsusr}" -g %{nsgrp} %{nsusr} || \ + %nnmmsg Unexpected error adding user "%{nsusr}". Aborting install process. +fi +%endif +%if %{islinux} +getent passwd %{nsusr} > /dev/null 2> /dev/null +if [ $? -ne 0 ] ; then + useradd -r -d %{nshome} -c "%{nsusr}" -g %{nsgrp} %{nsusr} || \ + %nnmmsg Unexpected error adding user "%{nsusr}". Aborting install process. +fi +%endif + +%if %{isaix} +# Check to see if the nrpe service is running and, if so, stop it. +/usr/bin/lssrc -s nrpe > /dev/null 2> /dev/null +if [ $? -eq 0 ] ; then + status=`/usr/bin/lssrc -s nrpe | /usr/bin/gawk '$1=="nrpe" {print $NF}'` + if [ "$status" = "active" ] ; then + /usr/bin/stopsrc -s nrpe + fi +fi +%endif + +%if %{islinux} +# if LSB standard /etc/init.d does not exist, +# create it as a symlink to the first match we find +if [ -d /etc/init.d -o -L /etc/init.d ]; then + : # we're done +elif [ -d /etc/rc.d/init.d ]; then + ln -s /etc/rc.d/init.d /etc/init.d +elif [ -d /usr/local/etc/rc.d ]; then + ln -s /usr/local/etc/rc.d /etc/init.d +elif [ -d /sbin/init.d ]; then + ln -s /sbin/init.d /etc/init.d +fi +%endif + +%if %{isaix} +%post +/usr/bin/lssrc -s nrpe > /dev/null 2> /dev/null +if [ $? -eq 1 ] ; then + /usr/bin/mkssys -p %{_bindir}/nrpe -s nrpe -u 0 -a "-c %{_sysconfdir}/nrpe.cfg -d -s" -Q -R -S -n 15 -f 9 +fi +/usr/bin/startsrc -s nrpe +%endif + +%preun +%if %{isaix} +status=`/usr/bin/lssrc -s nrpe | /usr/bin/gawk '$1=="nrpe" {print $NF}'` +if [ "$status" = "active" ] ; then + /usr/bin/stopsrc -s nrpe +fi +/usr/bin/rmssys -s nrpe +%endif +%if %{islinux} +if [ "$1" = 0 ]; then + /sbin/service nrpe stop > /dev/null 2>&1 + /sbin/chkconfig --del nrpe +fi +%endif + +%if %{islinux} +%postun +if [ "$1" -ge "1" ]; then + /sbin/service nrpe condrestart >/dev/null 2>&1 || : +fi +%endif + +%build +export PATH=$PATH:/usr/sbin +CFLAGS="$RPM_OPT_FLAGS" CXXFLAGS="$RPM_OPT_FLAGS" \ +MAKE=%{_make} ./configure \ + --with-init-dir=/etc/init.d \ + --with-nrpe-port=%{nsport} \ + --with-nrpe-user=%{nsusr} \ + --with-nrpe-group=%{nsgrp} \ + --prefix=%{_prefix} \ + --exec-prefix=%{_exec_prefix} \ + --bindir=%{_bindir} \ + --sbindir=%{_sbindir} \ + --libexecdir=%{_libexecdir} \ + --datadir=%{_datadir} \ + --sysconfdir=%{_sysconfdir} \ + --localstatedir=%{_localstatedir} \ + --enable-command-args +%{_make} all + +%install +[ "$RPM_BUILD_ROOT" != "/" ] && rm -rf $RPM_BUILD_ROOT +%if %{islinux} +install -d -m 0755 ${RPM_BUILD_ROOT}%{_init_dir} +%endif +DESTDIR=${RPM_BUILD_ROOT} %{_make} install install-daemon-config +#install -d -m 0755 ${RPM_BUILD_ROOT}%{_sysconfdir} +#install -d -m 0755 ${RPM_BUILD_ROOT}%{_bindir} +#install -d -m 0755 ${RPM_BUILD_ROOT}%{_libexecdir} + +# install templated configuration files +#cp sample-config/nrpe.cfg ${RPM_BUILD_ROOT}%{_sysconfdir}/nrpe.cfg +#%if %{isaix} +#cp init-script ${RPM_BUILD_ROOT}%{_init_dir}/nrpe +#%endif +#cp src/nrpe ${RPM_BUILD_ROOT}%{_bindir} +#cp src/check_nrpe ${RPM_BUILD_ROOT}%{_libexecdir} + +%clean +rm -rf $RPM_BUILD_ROOT + + +%files +%if %{islinux} +%defattr(755,root,root) +/etc/init.d/nrpe +%endif +%{_bindir}/nrpe +%dir %{_sysconfdir} +%defattr(600,%{nsusr},%{nsgrp}) +%config(noreplace) %{_sysconfdir}/*.cfg +%defattr(755,%{nsusr},%{nsgrp}) +%doc Changelog LEGAL README + +%files plugin +%defattr(755,%{nsusr},%{nsgrp}) +%{_libexecdir} +%defattr(644,%{nsusr},%{nsgrp}) +%doc Changelog LEGAL README + +%changelog +* Mon Mar 12 2012 Eric Stanley estanley<@>nagios.com +- Created autoconf input file +- Updated to support building on AIX +- Updated install to use make install* +* Mon Jan 23 2006 Andreas Kasenides ank<@>cs.ucy.ac.cy +- fixed nrpe.cfg relocation to sample-config +- replaced Copyright label with License +- added --enable-command-args to enable remote arg passing (if desired can be disabled by commenting out) + +* Wed Nov 12 2003 Ingimar Robertsson +- Added adding of nagios group if it does not exist. + +* Tue Jan 07 2003 James 'Showkilr' Peterson +- Removed the lines which removed the nagios user and group from the system +- changed the patch release version from 3 to 1 + +* Mon Jan 06 2003 James 'Showkilr' Peterson +- Removed patch files required for nrpe 1.5 +- Update spec file for version 1.6 (1.6-1) + +* Sat Dec 28 2002 James 'Showkilr' Peterson +- First RPM build (1.5-1) diff --git a/nrpe.spec.in b/nrpe.spec.in new file mode 100644 index 0000000..2bbf346 --- /dev/null +++ b/nrpe.spec.in @@ -0,0 +1,252 @@ +%define isaix %(test "`uname -s`" = "AIX" && echo "1" || echo "0") +%define islinux %(test "`uname -s`" = "Linux" && echo "1" || echo "0") + +%if %{isaix} + %define _prefix /opt/nagios + %define _docdir %{_prefix}/doc/@PACKAGE_NAME@-@PACKAGE_VERSION@ + %define nshome /opt/nagios + %define _make gmake +%endif +%if %{islinux} + %define _init_dir /etc/init.d + %define _exec_prefix %{_prefix}/sbin + %define _bindir %{_prefix}/sbin + %define _sbindir %{_prefix}/lib/nagios/cgi + %define _libexecdir %{_prefix}/lib/nagios/plugins + %define _datadir %{_prefix}/share/nagios + %define _localstatedir /var/log/nagios + %define nshome /var/log/nagios + %define _make make +%endif +%define _sysconfdir /etc/nagios + +%define name @PACKAGE_NAME@ +%define version @PACKAGE_VERSION@ +%define release @RPM_RELEASE@ +%define nsusr @nrpe_user@ +%define nsgrp @nrpe_group@ +%define nsport @nrpe_port@ + +# Reserve option to override port setting with: +# rpm -ba|--rebuild --define 'nsport 5666' +%{?port:%define nsport %{port}} + +# Macro that print mesages to syslog at package (un)install time +%define nnmmsg logger -t %{name}/rpm + +Summary: Host/service/network monitoring agent for Nagios +URL: http://www.nagios.org +Name: %{name} +Version: %{version} +Release: %{release} +License: GPL +Group: Application/System +Source0: %{name}-%{version}.tar.gz +BuildRoot: %{_tmppath}/%{name}-buildroot +Prefix: %{_prefix} +Prefix: /etc/init.d +Prefix: /etc/nagios +%if %{isaix} +Requires: nagios-plugins +%endif +%if %{islinux} +Requires: bash, grep, nagios-plugins, util-linux, chkconfig, shadow-utils, sed, initscripts, mktemp +%endif + +%description +NPRE (Nagios Remote Plugin Executor) is a system daemon that +will execute various Nagios plugins locally on behalf of a +remote (monitoring) host that uses the check_nrpe plugin. +Various plugins that can be executed by the daemon are available +at: http://sourceforge.net/projects/nagiosplug + +This package provides the client-side NRPE agent (daemon). + +%package plugin +Group: Application/System +Summary: Provides nrpe plugin for Nagios. +Requires: nagios-plugins + +%description plugin +NPRE (Nagios Remote Plugin Executor) is a system daemon that +will execute various Nagios plugins locally on behalf of a +remote (monitoring) host that uses the check_nrpe plugin. +Various plugins that can be executed by the daemon are available +at: http://sourceforge.net/projects/nagiosplug + +This package provides the server-side NRPE plugin for +Nagios-related applications. + +%prep +%setup -q + + +%pre +# Create `nagios' group on the system if necessary +%if %{isaix} +lsgroup %{nsgrp} > /dev/null 2> /dev/null +if [ $? -eq 2 ] ; then + mkgroup %{nsgrp} || %nnmmsg Unexpected error adding group "%{nsgrp}". Aborting install process. +fi +%endif +%if %{islinux} +getent group %{nsgrp} > /dev/null 2> /dev/null +if [ $? -ne 0 ] ; then + groupadd %{nsgrp} || %nnmmsg Unexpected error adding group "%{nsgrp}". Aborting install process. +fi +%endif + +# Create `nagios' user on the system if necessary +%if %{isaix} +lsuser %{nsusr} > /dev/null 2> /dev/null +if [ $? -eq 2 ] ; then + useradd -d %{nshome} -c "%{nsusr}" -g %{nsgrp} %{nsusr} || \ + %nnmmsg Unexpected error adding user "%{nsusr}". Aborting install process. +fi +%endif +%if %{islinux} +getent passwd %{nsusr} > /dev/null 2> /dev/null +if [ $? -ne 0 ] ; then + useradd -r -d %{nshome} -c "%{nsusr}" -g %{nsgrp} %{nsusr} || \ + %nnmmsg Unexpected error adding user "%{nsusr}". Aborting install process. +fi +%endif + +%if %{isaix} +# Check to see if the nrpe service is running and, if so, stop it. +/usr/bin/lssrc -s nrpe > /dev/null 2> /dev/null +if [ $? -eq 0 ] ; then + status=`/usr/bin/lssrc -s nrpe | /usr/bin/gawk '$1=="nrpe" {print $NF}'` + if [ "$status" = "active" ] ; then + /usr/bin/stopsrc -s nrpe + fi +fi +%endif + +%if %{islinux} +# if LSB standard /etc/init.d does not exist, +# create it as a symlink to the first match we find +if [ -d /etc/init.d -o -L /etc/init.d ]; then + : # we're done +elif [ -d /etc/rc.d/init.d ]; then + ln -s /etc/rc.d/init.d /etc/init.d +elif [ -d /usr/local/etc/rc.d ]; then + ln -s /usr/local/etc/rc.d /etc/init.d +elif [ -d /sbin/init.d ]; then + ln -s /sbin/init.d /etc/init.d +fi +%endif + +%if %{isaix} +%post +/usr/bin/lssrc -s nrpe > /dev/null 2> /dev/null +if [ $? -eq 1 ] ; then + /usr/bin/mkssys -p %{_bindir}/nrpe -s nrpe -u 0 -a "-c %{_sysconfdir}/nrpe.cfg -d -s" -Q -R -S -n 15 -f 9 +fi +/usr/bin/startsrc -s nrpe +%endif + +%preun +%if %{isaix} +status=`/usr/bin/lssrc -s nrpe | /usr/bin/gawk '$1=="nrpe" {print $NF}'` +if [ "$status" = "active" ] ; then + /usr/bin/stopsrc -s nrpe +fi +/usr/bin/rmssys -s nrpe +%endif +%if %{islinux} +if [ "$1" = 0 ]; then + /sbin/service nrpe stop > /dev/null 2>&1 + /sbin/chkconfig --del nrpe +fi +%endif + +%if %{islinux} +%postun +if [ "$1" -ge "1" ]; then + /sbin/service nrpe condrestart >/dev/null 2>&1 || : +fi +%endif + +%build +export PATH=$PATH:/usr/sbin +CFLAGS="$RPM_OPT_FLAGS" CXXFLAGS="$RPM_OPT_FLAGS" \ +MAKE=%{_make} ./configure \ + --with-init-dir=/etc/init.d \ + --with-nrpe-port=%{nsport} \ + --with-nrpe-user=%{nsusr} \ + --with-nrpe-group=%{nsgrp} \ + --prefix=%{_prefix} \ + --exec-prefix=%{_exec_prefix} \ + --bindir=%{_bindir} \ + --sbindir=%{_sbindir} \ + --libexecdir=%{_libexecdir} \ + --datadir=%{_datadir} \ + --sysconfdir=%{_sysconfdir} \ + --localstatedir=%{_localstatedir} \ + --enable-command-args +%{_make} all + +%install +[ "$RPM_BUILD_ROOT" != "/" ] && rm -rf $RPM_BUILD_ROOT +%if %{islinux} +install -d -m 0755 ${RPM_BUILD_ROOT}%{_init_dir} +%endif +DESTDIR=${RPM_BUILD_ROOT} %{_make} install install-daemon-config +#install -d -m 0755 ${RPM_BUILD_ROOT}%{_sysconfdir} +#install -d -m 0755 ${RPM_BUILD_ROOT}%{_bindir} +#install -d -m 0755 ${RPM_BUILD_ROOT}%{_libexecdir} + +# install templated configuration files +#cp sample-config/nrpe.cfg ${RPM_BUILD_ROOT}%{_sysconfdir}/nrpe.cfg +#%if %{isaix} +#cp init-script ${RPM_BUILD_ROOT}%{_init_dir}/nrpe +#%endif +#cp src/nrpe ${RPM_BUILD_ROOT}%{_bindir} +#cp src/check_nrpe ${RPM_BUILD_ROOT}%{_libexecdir} + +%clean +rm -rf $RPM_BUILD_ROOT + + +%files +%if %{islinux} +%defattr(755,root,root) +/etc/init.d/nrpe +%endif +%{_bindir}/nrpe +%dir %{_sysconfdir} +%defattr(600,%{nsusr},%{nsgrp}) +%config(noreplace) %{_sysconfdir}/*.cfg +%defattr(755,%{nsusr},%{nsgrp}) +%doc Changelog LEGAL README + +%files plugin +%defattr(755,%{nsusr},%{nsgrp}) +%{_libexecdir} +%defattr(644,%{nsusr},%{nsgrp}) +%doc Changelog LEGAL README + +%changelog +* Mon Mar 12 2012 Eric Stanley estanley<@>nagios.com +- Created autoconf input file +- Updated to support building on AIX +- Updated install to use make install* +* Mon Jan 23 2006 Andreas Kasenides ank<@>cs.ucy.ac.cy +- fixed nrpe.cfg relocation to sample-config +- replaced Copyright label with License +- added --enable-command-args to enable remote arg passing (if desired can be disabled by commenting out) + +* Wed Nov 12 2003 Ingimar Robertsson +- Added adding of nagios group if it does not exist. + +* Tue Jan 07 2003 James 'Showkilr' Peterson +- Removed the lines which removed the nagios user and group from the system +- changed the patch release version from 3 to 1 + +* Mon Jan 06 2003 James 'Showkilr' Peterson +- Removed patch files required for nrpe 1.5 +- Update spec file for version 1.6 (1.6-1) + +* Sat Dec 28 2002 James 'Showkilr' Peterson +- First RPM build (1.5-1) diff --git a/package/solaris/Makefile.in b/package/solaris/Makefile.in new file mode 100644 index 0000000..904d9b6 --- /dev/null +++ b/package/solaris/Makefile.in @@ -0,0 +1,81 @@ +################################### +# Makefile for NRPE Solaris Package +# +# Last Modified: 2 Dec 2011 +################################### + +TARGET_OS=@TARGET_OS@ +TARGET_VER=@TARGET_VER@ +TARGET_ARCH=@TARGET_ARCH@ +TARGET_PLATFORM=@TARGET_PLATFORM@ + +SOLARIS_CONFIG_OPTS=--prefix=/opt/nagios --sysconfdir=/etc/nagios --enable-command-args + +PKG_NAME=NGOSnrpe +PKG_VERSION=@PKG_VERSION@ +PKG_FILE=@PACKAGE_NAME@-$(PKG_VERSION)-$(TARGET_PLATFORM)-$(TARGET_ARCH)-local + +TOPDIR=@top_builddir@ +PKGDIR=@builddir@/pkg +SRCDIR=@builddir@/build/src +INSTALLDIR=@builddir@/install +ABSINSTALLDIR=@abs_builddir@/install + +build: + if [ ! -d build ] ; then mkdir build ; fi + if [ ! -d install ] ; then mkdir install ; fi + cd build; ../../../configure $(SOLARIS_CONFIG_OPTS); $(MAKE) all; DESTDIR=$(ABSINSTALLDIR) $(MAKE) install install-daemon-config + +prototype: $(PKGDIR) + @echo "i pkginfo" > $(PKGDIR)/prototype + @echo "i copyright=../$(TOPDIR)/LEGAL" >> $(PKGDIR)/prototype + @echo "i preinstall" >> $(PKGDIR)/prototype + @echo "i i.config" >> $(PKGDIR)/prototype + @echo "i r.config" >> $(PKGDIR)/prototype + @echo "i i.manifest=/usr/sadm/install/scripts/i.manifest" >> $(PKGDIR)/prototype + @echo "i r.manifest=/usr/sadm/install/scripts/r.manifest" >> $(PKGDIR)/prototype + @echo "d none /etc/nagios 0755 nagios nagios" >> $(PKGDIR)/prototype + @echo "f config /etc/nagios/nrpe.cfg=$(INSTALLDIR)/etc/nagios/nrpe.cfg 0600 nagios nagios" >> $(PKGDIR)/prototype + @echo "d none /opt/nagios/bin 0755 nagios bin" >> $(PKGDIR)/prototype + @echo "f none /opt/nagios/bin/nrpe=$(SRCDIR)/nrpe 0755 nagios bin" >> $(PKGDIR)/prototype + @echo "d none /opt/nagios/libexec 0755 nagios bin" >> $(PKGDIR)/prototype + @echo "f none /opt/nagios/libexec/check_nrpe=$(SRCDIR)/check_nrpe 0755 nagios bin" >> $(PKGDIR)/prototype + @echo "f none /lib/svc/method/nrpe=$(PKGDIR)/nrpe 0555 root bin" >> $(PKGDIR)/prototype + @echo "d none /var/svc/manifest/application/nagios 0755 root sys" >> $(PKGDIR)/prototype + @echo "f manifest /var/svc/manifest/application/nagios/nrpe.xml=$(PKGDIR)/nrpe.xml 0444 root sys" >> $(PKGDIR)/prototype + +pkginfo: $(PKGDIR) + @echo PKG="$(PKG_NAME)" > $(PKGDIR)/pkginfo + @echo NAME="Nagios Remote Plugin Executor $(PKG_VERSION)" >> $(PKGDIR)/pkginfo + @echo VERSION="$(PKG_VERSION)" >> $(PKGDIR)/pkginfo + @echo ARCH="$(TARGET_ARCH)" >> $(PKGDIR)/pkginfo + @echo CATEGORY="utility" >> $(PKGDIR)/pkginfo + @echo CLASSES="none config manifest" >> $(PKGDIR)/pkginfo + @echo VENDOR="www.nagios.org" >> $(PKGDIR)/pkginfo + @echo EMAIL="nagios-users@lists.sourceforge.net" >> $(PKGDIR)/pkginfo + @echo ISTATES="S s 1 2 3" >> $(PKGDIR)/pkginfo + @echo RSTATES="S s 1 2 3" >> $(PKGDIR)/pkginfo + @echo BASEDIR="/" >> $(PKGDIR)/pkginfo + +$(PKG_FILE): pkginfo prototype + pkgmk -o -d $(PKGDIR) -f $(PKGDIR)/prototype -r . + pkgtrans ./pkg $(PKG_FILE) $(PKG_NAME) + +pkg: $(PKG_FILE) + +all: pkg + +clean: + rm -rf build install package + rm -rf $(PKGDIR)/$(PKG_NAME) + rm -f $(PKGDIR)/prototype $(PKGDIR)/pkginfo + rm -f $(PKGDIR)/$(PKG_FILE) + rm -f core + rm -f *~ */*~ + +distclean: clean + rm -f Makefile + rm -f config.log + +devclean: distclean + diff --git a/package/solaris/pkg/i.config b/package/solaris/pkg/i.config new file mode 100644 index 0000000..2c58a34 --- /dev/null +++ b/package/solaris/pkg/i.config @@ -0,0 +1,58 @@ +#!/usr/bin/sh + +create_cksum_file() { + srcfile=$1 + destfile=$2 + cksumfile=$3 + + echo "# DO NOT EDIT OR REMOVE THIS FILE - It is used to determine whether to" > $cksumfile + echo "# overwrite $destfile on package update or to remove" >> $cksumfile + echo "# it on package deletion." >> $cksumfile + /usr/bin/cat $srcfile | /usr/bin/cksum >> $cksumfile + /usr/bin/chmod 400 $cksumfile +} + +compare_cksum() { + destfile=$1 + cksumfile=$2 + + installed_cksum=`/usr/bin/tail -1 $cksumfile | /usr/bin/awk '{print $1}'` + current_cksum=`/usr/bin/cksum $destfile | /usr/bin/awk '{print $1}'` + test $installed_cksum = $current_cksum +} + +while read src dest ; do + destpath=`echo $dest | /usr/bin/sed -e 's/\/[^/]*$//'` + destbase=`/usr/bin/basename $dest` + cksumfile="${destpath}/.${destbase}.cksum" + if [ -f $dest ] ; then + if [ -f $cksumfile ] ; then + compare_cksum $dest $cksumfile + if [ $? -eq 0 ] ; then + /usr/bin/cp $src $dest + /usr/bin/chmod 600 $dest + /usr/bin/chown nagios:nagios $dest + else + echo "Existing $dest has been found --" + echo " installing $destbase as $dest.pkgnew" + /usr/bin/cp $src $dest.pkgnew + /usr/bin/chmod 600 $dest.pkgnew + /usr/bin/chown nagios:nagios $dest.pkgnew + fi + else + echo "Existing $dest has been found --" + echo " installing $destbase as $dest.pkgnew" + /usr/bin/cp $src $dest.pkgnew + /usr/bin/chmod 600 $dest.pkgnew + /usr/bin/chown nagios:nagios $dest.pkgnew + fi + else + create_cksum_file $src $dest $cksumfile + /usr/bin/cp $src $dest + /usr/bin/chmod 600 $dest + /usr/bin/chown nagios:nagios $dest + fi +done +if [ "$1" = "ENDOFCLASS" ] ; then + exit 0 +fi diff --git a/package/solaris/pkg/nrpe b/package/solaris/pkg/nrpe new file mode 100644 index 0000000..c3d9593 --- /dev/null +++ b/package/solaris/pkg/nrpe @@ -0,0 +1,32 @@ +#!/sbin/sh +# + +NRPE=/opt/nagios/bin/nrpe +CFGFILE=/etc/nagios/nrpe.cfg +PIDFILE=/var/run/nrpe.pid + +case $1 in +'start') + $NRPE -c $CFGFILE -d + ;; + +'restart') + if [ -f "$PIDFILE" ]; then + /usr/bin/kill -HUP `/usr/bin/cat $PIDFILE` + fi + ;; + +'stop') + if [ -f "$PIDFILE" ]; then + /usr/bin/kill `/usr/bin/cat $PIDFILE` + /bin/rm -f $PIDFILE + fi + ;; + +*) + echo "Usage: $0 { start | restart | stop }" + exit 1 + ;; +esac + +exit $? diff --git a/package/solaris/pkg/nrpe.xml b/package/solaris/pkg/nrpe.xml new file mode 100644 index 0000000..1eb4913 --- /dev/null +++ b/package/solaris/pkg/nrpe.xml @@ -0,0 +1,131 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/package/solaris/pkg/postinstall b/package/solaris/pkg/postinstall new file mode 100644 index 0000000..b5f8db3 --- /dev/null +++ b/package/solaris/pkg/postinstall @@ -0,0 +1,5 @@ +#!/usr/bin/sh + +echo "To begin using NRPE, first edit /etc/nagios/nrpe.cfg, update the" +echo "allowed_hosts line and any command lines. Then start the nrpe service" +echo "by running the command 'svcadm enable nrpe' as root." diff --git a/package/solaris/pkg/preinstall b/package/solaris/pkg/preinstall new file mode 100644 index 0000000..c4cc269 --- /dev/null +++ b/package/solaris/pkg/preinstall @@ -0,0 +1,35 @@ +#!/usr/bin/sh + +user="nagios" +uid=-1 +group="nagios" +gid=-1 + +/usr/bin/getent group $group > /dev/null 2> /dev/null +result=$? +if [ $result -eq 2 ] ; then + echo "Group $group does not exist. Creating..." + if [ $gid -ne -1 ] ; then + /usr/sbin/groupadd -g $gid $group + else + /usr/sbin/groupadd $group + fi +elif [ $result -ne 0 ] ; then + echo "An error occurred determining the existence of the groug $group. Terminating." + exit 1; +fi + +/usr/bin/getent passwd $user > /dev/null 2> /dev/null +result=$? +if [ $result -eq 2 ] ; then + echo "User $user does not exist. Creating..." + if [ $uid -ne -1 ] ; then + /usr/sbin/useradd -u $uid -g $group $user + else + /usr/sbin/useradd -g $group $user + fi +elif [ $result -ne 0 ] ; then + echo "An error occurred determining the existence of the user $user. Terminating." + exit 1; +fi + diff --git a/package/solaris/pkg/r.config b/package/solaris/pkg/r.config new file mode 100644 index 0000000..72871dd --- /dev/null +++ b/package/solaris/pkg/r.config @@ -0,0 +1,33 @@ +#!/usr/bin/sh + +compare_cksum() { + destfile=$1 + cksumfile=$2 + + installed_cksum=`/usr/bin/tail -1 $cksumfile | /usr/bin/awk '{print $1}'` + current_cksum=`/usr/bin/cksum $destfile | /usr/bin/awk '{print $1}'` + test $installed_cksum = $current_cksum +} + +while read path ; do + destpath=`echo $path | /usr/bin/sed -e 's/\/[^/]*$//'` + destbase=`/usr/bin/basename $path` + cksumfile="${destpath}/.${destbase}.cksum" + if [ -f $path ] ; then + if [ -f $cksumfile ] ; then + compare_cksum $path $cksumfile + if [ $? -eq 0 ] ; then + /usr/bin/rm -f $path $cksumfile + else + echo "$path has been modified since it was installed -- " + echo " leaving it in place." + fi + else + echo "$path may have been modified since it was installed -- " + echo " leaving it in place." + fi + fi +done +if [ "$1" = "ENDOFCLASS" ] ; then + exit 0 +fi diff --git a/sample-config/nrpe.cfg.in b/sample-config/nrpe.cfg.in new file mode 100644 index 0000000..da6a280 --- /dev/null +++ b/sample-config/nrpe.cfg.in @@ -0,0 +1,235 @@ +############################################################################# +# Sample NRPE Config File +# Written by: Ethan Galstad (nagios@nagios.org) +# +# Last Modified: 11-23-2007 +# +# NOTES: +# This is a sample configuration file for the NRPE daemon. It needs to be +# located on the remote host that is running the NRPE daemon, not the host +# from which the check_nrpe client is being executed. +############################################################################# + + +# LOG FACILITY +# The syslog facility that should be used for logging purposes. + +log_facility=@log_facility@ + + + +# PID FILE +# The name of the file in which the NRPE daemon should write it's process ID +# number. The file is only written if the NRPE daemon is started by the root +# user and is running in standalone mode. + +pid_file=/var/run/nrpe.pid + + + +# PORT NUMBER +# Port number we should wait for connections on. +# NOTE: This must be a non-priviledged port (i.e. > 1024). +# NOTE: This option is ignored if NRPE is running under either inetd or xinetd + +server_port=@nrpe_port@ + + + +# SERVER ADDRESS +# Address that nrpe should bind to in case there are more than one interface +# and you do not want nrpe to bind on all interfaces. +# NOTE: This option is ignored if NRPE is running under either inetd or xinetd + +#server_address=127.0.0.1 + + + +# NRPE USER +# This determines the effective user that the NRPE daemon should run as. +# You can either supply a username or a UID. +# +# NOTE: This option is ignored if NRPE is running under either inetd or xinetd + +nrpe_user=@nrpe_user@ + + + +# NRPE GROUP +# This determines the effective group that the NRPE daemon should run as. +# You can either supply a group name or a GID. +# +# NOTE: This option is ignored if NRPE is running under either inetd or xinetd + +nrpe_group=@nrpe_group@ + + + +# ALLOWED HOST ADDRESSES +# This is an optional comma-delimited list of IP address or hostnames +# that are allowed to talk to the NRPE daemon. Network addresses with a bit mask +# (i.e. 192.168.1.0/24) are also supported. Hostname wildcards are not currently +# supported. +# +# Note: The daemon only does rudimentary checking of the client's IP +# address. I would highly recommend adding entries in your /etc/hosts.allow +# file to allow only the specified host to connect to the port +# you are running this daemon on. +# +# NOTE: This option is ignored if NRPE is running under either inetd or xinetd + +allowed_hosts=127.0.0.1 + + + +# COMMAND ARGUMENT PROCESSING +# This option determines whether or not the NRPE daemon will allow clients +# to specify arguments to commands that are executed. This option only works +# if the daemon was configured with the --enable-command-args configure script +# option. +# +# *** ENABLING THIS OPTION IS A SECURITY RISK! *** +# Read the SECURITY file for information on some of the security implications +# of enabling this variable. +# +# Values: 0=do not allow arguments, 1=allow command arguments + +dont_blame_nrpe=0 + + + +# BASH COMMAND SUBTITUTION +# This option determines whether or not the NRPE daemon will allow clients +# to specify arguments that contain bash command substitutions of the form +# $(...). This option only works if the daemon was configured with both +# the --enable-command-args and --enable-bash-command-substitution configure +# script options. +# +# *** ENABLING THIS OPTION IS A HIGH SECURITY RISK! *** +# Read the SECURITY file for information on some of the security implications +# of enabling this variable. +# +# Values: 0=do not allow bash command substitutions, +# 1=allow bash command substitutions + +allow_bash_command_substitution=0 + + + +# COMMAND PREFIX +# This option allows you to prefix all commands with a user-defined string. +# A space is automatically added between the specified prefix string and the +# command line from the command definition. +# +# *** THIS EXAMPLE MAY POSE A POTENTIAL SECURITY RISK, SO USE WITH CAUTION! *** +# Usage scenario: +# Execute restricted commmands using sudo. For this to work, you need to add +# the nagios user to your /etc/sudoers. An example entry for alllowing +# execution of the plugins from might be: +# +# nagios ALL=(ALL) NOPASSWD: /usr/lib/nagios/plugins/ +# +# This lets the nagios user run all commands in that directory (and only them) +# without asking for a password. If you do this, make sure you don't give +# random users write access to that directory or its contents! + +# command_prefix=/usr/bin/sudo + + + +# DEBUGGING OPTION +# This option determines whether or not debugging messages are logged to the +# syslog facility. +# Values: 0=debugging off, 1=debugging on + +debug=0 + + + +# COMMAND TIMEOUT +# This specifies the maximum number of seconds that the NRPE daemon will +# allow plugins to finish executing before killing them off. + +command_timeout=60 + + + +# CONNECTION TIMEOUT +# This specifies the maximum number of seconds that the NRPE daemon will +# wait for a connection to be established before exiting. This is sometimes +# seen where a network problem stops the SSL being established even though +# all network sessions are connected. This causes the nrpe daemons to +# accumulate, eating system resources. Do not set this too low. + +connection_timeout=300 + + + +# WEEK RANDOM SEED OPTION +# This directive allows you to use SSL even if your system does not have +# a /dev/random or /dev/urandom (on purpose or because the necessary patches +# were not applied). The random number generator will be seeded from a file +# which is either a file pointed to by the environment valiable $RANDFILE +# or $HOME/.rnd. If neither exists, the pseudo random number generator will +# be initialized and a warning will be issued. +# Values: 0=only seed from /dev/[u]random, 1=also seed from weak randomness + +#allow_weak_random_seed=1 + + + +# INCLUDE CONFIG FILE +# This directive allows you to include definitions from an external config file. + +#include= + + + +# INCLUDE CONFIG DIRECTORY +# This directive allows you to include definitions from config files (with a +# .cfg extension) in one or more directories (with recursion). + +#include_dir= +#include_dir= + + + +# COMMAND DEFINITIONS +# Command definitions that this daemon will run. Definitions +# are in the following format: +# +# command[]= +# +# When the daemon receives a request to return the results of +# it will execute the command specified by the argument. +# +# Unlike Nagios, the command line cannot contain macros - it must be +# typed exactly as it should be executed. +# +# Note: Any plugins that are used in the command lines must reside +# on the machine that this daemon is running on! The examples below +# assume that you have plugins installed in a /usr/local/nagios/libexec +# directory. Also note that you will have to modify the definitions below +# to match the argument format the plugins expect. Remember, these are +# examples only! + + +# The following examples use hardcoded command arguments... + +command[check_users]=@libexecdir@/check_users -w 5 -c 10 +command[check_load]=@libexecdir@/check_load -w 15,10,5 -c 30,25,20 +command[check_hda1]=@libexecdir@/check_disk -w 20% -c 10% -p /dev/hda1 +command[check_zombie_procs]=@libexecdir@/check_procs -w 5 -c 10 -s Z +command[check_total_procs]=@libexecdir@/check_procs -w 150 -c 200 + + +# The following examples allow user-supplied arguments and can +# only be used if the NRPE daemon was compiled with support for +# command arguments *AND* the dont_blame_nrpe directive in this +# config file is set to '1'. This poses a potential security risk, so +# make sure you read the SECURITY file before doing this. + +#command[check_users]=@libexecdir@/check_users -w $ARG1$ -c $ARG2$ +#command[check_load]=@libexecdir@/check_load -w $ARG1$ -c $ARG2$ +#command[check_disk]=@libexecdir@/check_disk -w $ARG1$ -c $ARG2$ -p $ARG3$ +#command[check_procs]=@libexecdir@/check_procs -w $ARG1$ -c $ARG2$ -s $ARG3$ diff --git a/sample-config/nrpe.xinetd.in b/sample-config/nrpe.xinetd.in new file mode 100644 index 0000000..e49e627 --- /dev/null +++ b/sample-config/nrpe.xinetd.in @@ -0,0 +1,16 @@ +# default: on +# description: NRPE (Nagios Remote Plugin Executor) +service nrpe +{ + flags = REUSE + socket_type = stream + port = @nrpe_port@ + wait = no + user = @nrpe_user@ + group = @nrpe_group@ + server = @bindir@/nrpe + server_args = -c @sysconfdir@/nrpe.cfg --inetd + log_on_failure += USERID + disable = no + only_from = 127.0.0.1 +} diff --git a/src/Makefile.in b/src/Makefile.in new file mode 100644 index 0000000..68a7b88 --- /dev/null +++ b/src/Makefile.in @@ -0,0 +1,64 @@ +############################### +# Makefile for NRPE +# +# Last Modified: 08-13-2007 +############################### + +srcdir=@srcdir@ + +# Source code directories +SRC_INCLUDE=@srcdir@/../include +CFG_INCLUDE=../include + +CC=@CC@ +CFLAGS=@CFLAGS@ @DEFS@ -I $(CFG_INCLUDE) -I $(SRC_INCLUDE) +LDFLAGS=@LDFLAGS@ @LIBS@ +SOCKETLIBS=@SOCKETLIBS@ +LIBWRAPLIBS=@LIBWRAPLIBS@ +OTHERLIBS=@OTHERLIBS@ + +CP=@CP@ + +prefix=@prefix@ +exec_prefix=@exec_prefix@ +CFGDIR=@sysconfdir@ +BINDIR=@bindir@ +SBINDIR=@sbindir@ +LIBEXECDIR=@libexecdir@ +INSTALL=@INSTALL@ +NAGIOS_INSTALL_OPTS=@NAGIOS_INSTALL_OPTS@ +NRPE_INSTALL_OPTS=@NRPE_INSTALL_OPTS@ + +# Generated automatically from configure script +SNPRINTF_O=@SNPRINTF_O@ + + +all: nrpe check_nrpe + +nrpe: $(srcdir)/nrpe.c $(srcdir)/utils.c $(srcdir)/acl.c $(SRC_INCLUDE)/nrpe.h $(SRC_INCLUDE)/utils.h $(SRC_INCLUDE)/common.h $(CFG_INCLUDE)/config.h $(SRC_INCLUDE)/acl.h $(SNPRINTF_O) + $(CC) $(CFLAGS) -o $@ $(srcdir)/nrpe.c $(srcdir)/utils.c $(srcdir)/acl.c $(LDFLAGS) $(SOCKETLIBS) $(LIBWRAPLIBS) $(SNPRINTF_O) $(OTHERLIBS) + +check_nrpe: $(srcdir)/check_nrpe.c $(srcdir)/utils.c $(SRC_INCLUDE)/utils.h $(SRC_INCLUDE)/common.h $(CFG_INCLUDE)/config.h + $(CC) $(CFLAGS) -o $@ $(srcdir)/check_nrpe.c $(srcdir)/utils.c $(LDFLAGS) $(SOCKETLIBS) $(OTHERLIBS) + +install: + $(MAKE) install-plugin + $(MAKE) install-daemon + +install-plugin: + $(INSTALL) -m 775 $(NAGIOS_INSTALL_OPTS) -d $(DESTDIR)$(LIBEXECDIR) + $(INSTALL) -m 775 $(NAGIOS_INSTALL_OPTS) check_nrpe $(DESTDIR)$(LIBEXECDIR) + +install-daemon: + $(INSTALL) -m 775 $(NAGIOS_INSTALL_OPTS) -d $(DESTDIR)$(BINDIR) + $(INSTALL) -m 775 $(NRPE_INSTALL_OPTS) nrpe $(DESTDIR)$(BINDIR) + +clean: + rm -f core nrpe check_nrpe $(SNPRINTF_O) + rm -f *~ */*~ + rm -rf nrpe.dSYM check_nrpe.dSYM + +distclean: clean + rm -f Makefile + +devclean: distclean diff --git a/src/acl.c b/src/acl.c new file mode 100644 index 0000000..f5ec890 --- /dev/null +++ b/src/acl.c @@ -0,0 +1,613 @@ +/*- + * acl.c - a small library for nrpe.c. It adds IPv4 subnets support to ACL in nrpe. + * Copyright (c) 2011 Kaspersky Lab ZAO + * Last Modified: 08-10-2011 by Konstantin Malov with Oleg Koreshkov's help + * + * Description: + * acl.c creates two linked lists. One is for IPv4 hosts and networks, another is for domain names. + * All connecting hosts (if allowed_hosts is defined) are checked in these two lists. + * + * Some notes: + * 1) IPv6 isn't supported in ACL. + * 2) Only ANCII names are supported in ACL. + * + * License: GPL + * + * 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, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + */ + +#include +#include + +#include +#include + +#include +#include +#include +#include +#include +#include +#include + +#include "../include/acl.h" + +/* This function checks if a char argumnet from valid char range. + * Valid range is: ASCII only, a number or a letter, a space, a dot, a slash, a dash, a comma. + * + * Returns: + * 0 - char isn't from valid group + * 1 - char is a number + * 2 - char is a letter + * 3 - char is a space(' ') + * 4 - char is a dot('.') + * 5 - char is a slash('/') + * 6 - char is a dash('-') + * 7 - char is a comma(',') + */ + +int isvalidchar(int c) { + if (!isascii(c)) + return 0; + + if (isdigit(c)) + return 1; + + if (isalpha(c)) + return 2; + + if (isspace(c)) + return 3; + + switch (c) { + case '.': + return 4; + break; + case '/': + return 5; + break; + case '-': + return 6; + break; + case ',': + return 7; + break; + default: + return 0; + } +} + +/* + * Get substring from allowed_hosts from s position to e position. + */ + +char * acl_substring(char *string, int s, int e) { + char *substring; + int len = e - s; + + if (len < 0) + return NULL; + + if ( (substring = malloc(len + 1)) == NULL) + return NULL; + + memmove(substring, string + s, len + 1); + return substring; +} + +/* + * Add IPv4 host or network to IP ACL. IPv4 format is X.X.X.X[/X]. + * Host will be added to ACL only if it has passed IPv4 format check. + * + * Returns: + * 1 - on success + * 0 - on failure + * + * States for IPv4 format check: + * 0 - numbers(-> 1), dot(-> -1), slash(-> -1), other(-> -1) + * 1 - numbers(-> 1), dot(-> 2), slash(-> -1), other(-> -1) + * 2 - numbers(-> 3), dot(-> -1), slash(-> -1), other(-> -1) + * 3 - numbers(-> 3), dot(-> 4), slash(-> -1), other(-> -1) + * 4 - numbers(-> 5), dot(-> -1), slash(-> -1), other(-> -1) + * 5 - numbers(-> 5), dot(-> 6), slash(-> -1), other(-> -1) + * 6 - numbers(-> 7), dot(-> -1), slash(-> -1), other(-> -1) + * 7 - numbers(-> 7), dor(-> -1), slash(-> 8), other(-> -1) + * 8 - numbers(-> 9), dor(-> -1), slash(-> -1), other(-> -1) + * 9 - numbers(-> 9), dot(-> -1), slash(-> -1), other(-> -1) + * + * Good states are 7(IPv4 host) and 9(IPv4 network) + */ + +int add_ipv4_to_acl(char *ipv4) { + int state = 0; + int octet = 0; + int index = 0; /* position in data array */ + int data[5]; /* array to store ip octets and mask */ + int len = strlen(ipv4); + int i, c; + unsigned long ip, mask; + struct ip_acl *ip_acl_curr; + + /* Check for min and max IPv4 valid length */ + if (len < 7 || len > 18) + return 0; + + /* default mask for ipv4 */ + data[4] = 32; + + /* Basic IPv4 format check */ + for (i = 0; i < len; i++) { + /* Return 0 on error state */ + if (state == -1) + return 0; + + c = ipv4[i]; + + switch (c) { + case '0': case '1': case '2': case '3': case '4': + case '5': case '6': case '7': case '8': case '9': + octet = octet * 10 + CHAR_TO_NUMBER(c); + switch (state) { + case 0: case 2: case 4: case 6: case 8: + state++; + break; + } + break; + case '.': + switch (state) { + case 1: case 3: case 5: + data[index++] = octet; + octet = 0; + state++; + break; + default: + state = -1; + } + break; + case '/': + switch (state) { + case 7: + data[index++] = octet; + octet = 0; + state++; + break; + default: + state = -1; + } + break; + default: + state = -1; + } + } + + /* Exit state handling */ + switch (state) { + case 7: case 9: + data[index] = octet; + break; + default: + /* Bad states */ + return 0; + } + + /* + * Final IPv4 format check. + */ + for (i=0; i < 4; i++) { + if (data[i] < 0 || data[i] > 255) { + syslog(LOG_ERR,"Invalid IPv4 address/network format(%s) in allowed_hosts option\n",ipv4); + return 0; + } + } + + if (data[4] < 0 || data[4] > 32) { + syslog(LOG_ERR,"Invalid IPv4 network mask format(%s) in allowed_hosts option\n",ipv4); + return 0; + } + + /* Conver ip and mask to unsigned long */ + ip = htonl((data[0] << 24) + (data[1] << 16) + (data[2] << 8) + data[3]); + mask = htonl(-1 << (32 - data[4])); + + /* Wrong network address */ + if ( (ip & mask) != ip) { + syslog(LOG_ERR,"IP address and mask do not match in %s\n",ipv4); + return 0; + } + + /* Add addr to ip_acl list */ + if ( (ip_acl_curr = malloc(sizeof(*ip_acl_curr))) == NULL) { + syslog(LOG_ERR,"Can't allocate memory for ACL, malloc error\n"); + return 0; + } + + /* Save result in ACL ip list */ + ip_acl_curr->family = AF_INET; + ip_acl_curr->addr.s_addr = ip; + ip_acl_curr->mask.s_addr = mask; + ip_acl_curr->next = NULL; + + if (ip_acl_head == NULL) { + ip_acl_head = ip_acl_curr; + } else { + ip_acl_prev->next = ip_acl_curr; + } + ip_acl_prev = ip_acl_curr; + return 1; +} + +/* + * Add IPv6 host or network to IP ACL. Host will be added to ACL only if + * it has passed IPv6 format check. + * + */ + +int add_ipv6_to_acl(char *ipv6) { + char *ipv6tmp; + char *addrtok; + char *addrsave; + struct in6_addr addr; + struct in6_addr mask; + int maskval; + int byte, bit; + int nbytes = sizeof(mask.s6_addr) / sizeof(mask.s6_addr[0]); + int x; + struct ip_acl *ip_acl_curr; + + /* Save temporary copy of ipv6 so we can use the original in error + messages if needed */ + ipv6tmp = strdup(ipv6); + if(NULL == ipv6tmp) { + syslog(LOG_ERR, "Memory allocation failed for copy of address: %s\n", + ipv6); + return 0; + } + + /* Parse the address itself */ + addrtok = strtok_r(ipv6tmp, "/", &addrsave); + if(inet_pton(AF_INET6, addrtok, &addr) <= 0) { + syslog(LOG_ERR, "Invalid IPv6 address in ACL: %s\n", ipv6); + free(ipv6tmp); + return 0; + } + + /* Check whether there is a netmask */ + addrtok = strtok_r(NULL, "/", &addrsave); + if(NULL != addrtok) { + /* If so, build a netmask */ + + /* Get the number of bits in the mask */ + maskval = atoi(addrtok); + if(maskval < 0 || maskval > 128) { + syslog(LOG_ERR, "Invalid IPv6 netmask in ACL: %s\n", ipv6); + free(ipv6tmp); + return 0; + } + + /* Initialize to zero */ + for(x = 0; x < nbytes; x++) { + mask.s6_addr[x] = 0; + } + + /* Set mask based on mask bits */ + byte = 0; + bit = 7; + while(maskval > 0) { + mask.s6_addr[byte] |= 1 << bit; + bit -= 1; + if(bit < 0) { + bit = 7; + byte++; + } + maskval--; + } + } + else { + /* Otherwise, this is a single address */ + for(x = 0; x < nbytes; x++) { + mask.s6_addr[x] = 0xFF; + } + } + + /* Add address to ip_acl list */ + ip_acl_curr = malloc(sizeof(*ip_acl_curr)); + if(NULL == ip_acl_curr) { + syslog(LOG_ERR, "Memory allocation failed for ACL: %s\n", ipv6); + return 0; + } + + /* Save result in ACL ip list */ + ip_acl_curr->family = AF_INET6; + for(x = 0; x < nbytes; x++) { + ip_acl_curr->addr6.s6_addr[x] = + addr.s6_addr[x] & mask.s6_addr[x]; + ip_acl_curr->mask6.s6_addr[x] = mask.s6_addr[x]; + } + ip_acl_curr->next = NULL; + + if(NULL == ip_acl_head) { + ip_acl_head = ip_acl_curr; + } + else { + ip_acl_prev->next = ip_acl_curr; + } + ip_acl_prev = ip_acl_curr; + + free(ipv6tmp); + return 1; + } + +/* + * Add domain to DNS ACL list + * Domain will be added only if it has passed domain name check. + * + * In this case domain valid format is: + * 1) Domain names must use only alphanumeric characters and dashes (-). + * 2) Domain names mustn't begin or end with dashes (-). + * 3) Domain names mustn't have more than 63 characters. + * + * Return: + * 1 - for success + * 0 - for failure + * + * 0 - alpha(-> 1), number(-> 1), dot(-> -1), dash(-> -1), all other(-> -1) + * 1 - alpha(-> 1), number(-> 1), dot(-> 2), dash(-> 6), all other(-> -1) + * 2 - alpha(-> 3), number(-> 1), dot(-> -1), dash(-> -1), all other(-> -1) + * 3 - alpha(-> 4), number(-> 1), dot(-> 2), dash(-> 6), all other(-> -1) + * 4 - alpha(-> 5), number(-> 1), dot(-> 2), dash(-> 6), all other(-> -1) + * 5 - alpha(-> 1), number(-> 1), dot(-> 2), dash(-> 6), all other(-> -1) + * 6 - alpha(-> 1), number(-> 1), dot(-> 2), dash(-> 6), all other(-> -1) + + * For real FQDN only 4 and 5 states are good for exit. + * I don't check if top domain exists (com, ru and etc.) + * But in real life NRPE could work in LAN, + * with local domain zones like .local or with names like 'mars' added to /etc/hosts. + * So 1 is good state too. And maybe this check is not necessary at all... + */ + +int add_domain_to_acl(char *domain) { + int state = 0; + int len = strlen(domain); + int i, c; + + struct dns_acl *dns_acl_curr; + + if (len > 63) + return 0; + + for (i = 0; i < len; i++) { + c = domain[i]; + switch (isvalidchar(c)) { + case 1: + state = 1; + break; + case 2: + switch (state) { + case 0: case 1: case 5: case 6: + state = 1; + break; + case 2: case 3: case 4: + state++; + break; + } + break; + + case 4: + switch (state) { + case 0: case 2: + state = -1; + break; + default: + state = 2; + } + break; + case 6: + switch (state) { + case 0: case 2: + state = -1; + break; + default: + state = 6; + } + break; + default: + /* Not valid chars */ + return 0; + } + } + + /* Check exit code */ + switch (state) { + case 1: case 4: case 5: + /* Add name to domain ACL list */ + if ( (dns_acl_curr = malloc(sizeof(*dns_acl_curr))) == NULL) { + syslog(LOG_ERR,"Can't allocate memory for ACL, malloc error\n"); + return 0; + } + strcpy(dns_acl_curr->domain, domain); + dns_acl_curr->next = NULL; + + if (dns_acl_head == NULL) + dns_acl_head = dns_acl_curr; + else + dns_acl_prev->next = dns_acl_curr; + + dns_acl_prev = dns_acl_curr; + return 1; + default: + return 0; + } +} + +/* Checks connectiong host in ACL + * + * Returns: + * 1 - on success + * 0 - on failure + */ + +int is_an_allowed_host(int family, void *host) { + struct ip_acl *ip_acl_curr = ip_acl_head; + int nbytes; + int x; + struct dns_acl *dns_acl_curr = dns_acl_head; + struct in_addr addr; + struct in6_addr addr6; + struct hostent *he; + + while (ip_acl_curr != NULL) { + if(ip_acl_curr->family == family) { + switch(ip_acl_curr->family) { + case AF_INET: + if((((struct in_addr *)host)->s_addr & + ip_acl_curr->mask.s_addr) == + ip_acl_curr->addr.s_addr) { + return 1; + } + break; + case AF_INET6: + nbytes = sizeof(ip_acl_curr->mask6.s6_addr) / + sizeof(ip_acl_curr->mask6.s6_addr[0]); + for(x = 0; x < nbytes; x++) { + if((((struct in6_addr *)host)->s6_addr[x] & + ip_acl_curr->mask6.s6_addr[x]) != + ip_acl_curr->addr6.s6_addr[x]) { + break; + } + } + if(x == nbytes) { + /* All bytes in host's address pass the netmask mask */ + return 1; + } + break; + } + } + ip_acl_curr = ip_acl_curr->next; + } + + while(dns_acl_curr != NULL) { + he = gethostbyname(dns_acl_curr->domain); + if (he == NULL) return 0; + + while (*he->h_addr_list) { + switch(he->h_addrtype) { + case AF_INET: + memmove((char *)&addr,*he->h_addr_list++, sizeof(addr)); + if (addr.s_addr == ((struct in_addr *)host)->s_addr) return 1; + break; + case AF_INET6: + memcpy((char *)&addr6, *he->h_addr_list++, sizeof(addr6)); + for(x = 0; x < nbytes; x++) { + if(addr6.s6_addr[x] != + ((struct in6_addr *)host)->s6_addr[x]) { + break; + } + } + if(x == nbytes) { + /* All bytes in host's address match the ACL */ + return 1; + } + break; + } + } + dns_acl_curr = dns_acl_curr->next; + } + return 0; + } + +/* The trim() function takes a source string and copies it to the destination string, + * stripped of leading and training whitespace. The destination string must be + * allocated at least as large as the source string. + */ + +void trim( char *src, char *dest) { + char *sptr, *dptr; + + for( sptr = src; isblank( *sptr) && *sptr; sptr++); /* Jump past leading spaces */ + for( dptr = dest; !isblank( *sptr) && *sptr; ) { + *dptr = *sptr; + sptr++; + dptr++; + } + *dptr = '\0'; + return; +} + +/* This function splits allowed_hosts to substrings with comma(,) as a delimeter. + * It doesn't check validness of ACL record (add_ipv4_to_acl() and add_domain_to_acl() do), + * just trims spaces from ACL records. + * After this it sends ACL records to add_ipv4_to_acl() or add_domain_to_acl(). + */ + +void parse_allowed_hosts(char *allowed_hosts) { + char *hosts = strdup( allowed_hosts); /* Copy since strtok* modifes original */ + char *saveptr; + char *tok; + const char *delim = ","; + char *trimmed_tok; + + tok = strtok_r( hosts, delim, &saveptr); + while( tok) { + trimmed_tok = malloc( sizeof( char) * ( strlen( tok) + 1)); + trim( tok, trimmed_tok); + if( strlen( trimmed_tok) > 0) { + if (!add_ipv4_to_acl(trimmed_tok) && !add_ipv6_to_acl(trimmed_tok) + && !add_domain_to_acl(trimmed_tok)) { + syslog(LOG_ERR,"Can't add to ACL this record (%s). Check allowed_hosts option!\n",trimmed_tok); + } + } + free( trimmed_tok); + tok = strtok_r(( char *)0, delim, &saveptr); + } + + free( hosts); +} + +/* + * Converts mask in unsigned long format to two digit prefix + */ + +unsigned int prefix_from_mask(struct in_addr mask) { + int prefix = 0; + unsigned long bit = 1; + int i; + + for (i = 0; i < 32; i++) { + if (mask.s_addr & bit) + prefix++; + + bit = bit << 1; + } + return (prefix); +} + +/* + * It shows all hosts in ACL lists + */ + +void show_acl_lists(void) { + struct ip_acl *ip_acl_curr = ip_acl_head; + struct dns_acl *dns_acl_curr = dns_acl_head; + + while (ip_acl_curr != NULL) { + printf(" IP ACL: %s/%u %u\n", inet_ntoa(ip_acl_curr->addr), prefix_from_mask(ip_acl_curr->mask), ip_acl_curr->addr.s_addr); + ip_acl_curr = ip_acl_curr->next; + } + + while (dns_acl_curr != NULL) { + printf("DNS ACL: %s\n", dns_acl_curr->domain); + dns_acl_curr = dns_acl_curr->next; + } +} diff --git a/src/check_nrpe.c b/src/check_nrpe.c new file mode 100644 index 0000000..51c8874 --- /dev/null +++ b/src/check_nrpe.c @@ -0,0 +1,490 @@ +/******************************************************************************************** + * + * CHECK_NRPE.C - NRPE Plugin For Nagios + * Copyright (c) 1999-2008 Ethan Galstad (nagios@nagios.org) + * License: GPL + * + * Last Modified: 09-06-2013 + * + * Command line: CHECK_NRPE -H [-p port] [-c command] [-to to_sec] + * + * Description: + * + * This plugin will attempt to connect to the NRPE daemon on the specified server and port. + * The daemon will attempt to run the command defined as [command]. Program output and + * return code are sent back from the daemon and displayed as this plugin's own output and + * return code. + * + ********************************************************************************************/ + +#include "config.h" +#include "common.h" +#include "utils.h" + + +#define DEFAULT_NRPE_COMMAND "_NRPE_CHECK" /* check version of NRPE daemon */ + +u_short server_port=DEFAULT_SERVER_PORT; +char *server_name=NULL; +char *bind_address=NULL; +struct sockaddr_storage hostaddr; +int address_family=AF_UNSPEC; +char *command_name=NULL; +int socket_timeout=DEFAULT_SOCKET_TIMEOUT; +int timeout_return_code=STATE_CRITICAL; +int sd; + +char query[MAX_INPUT_BUFFER]=""; + +int show_help=FALSE; +int show_license=FALSE; +int show_version=FALSE; + +#ifdef HAVE_SSL +#ifdef __sun +SSL_METHOD *meth; +#else +const SSL_METHOD *meth; +#endif +SSL_CTX *ctx; +SSL *ssl; +int use_ssl=TRUE; +#else +int use_ssl=FALSE; +#endif + + +int process_arguments(int,char **); +void alarm_handler(int); +int graceful_close(int,int); + + + + +int main(int argc, char **argv){ + u_int32_t packet_crc32; + u_int32_t calculated_crc32; + int16_t result; + int rc; + packet send_packet; + packet receive_packet; + int bytes_to_send; + int bytes_to_recv; + + result=process_arguments(argc,argv); + + if(result!=OK || show_help==TRUE || show_license==TRUE || show_version==TRUE){ + + if(result!=OK) + printf("Incorrect command line arguments supplied\n"); + printf("\n"); + printf("NRPE Plugin for Nagios\n"); + printf("Copyright (c) 1999-2008 Ethan Galstad (nagios@nagios.org)\n"); + printf("Version: %s\n",PROGRAM_VERSION); + printf("Last Modified: %s\n",MODIFICATION_DATE); + printf("License: GPL v2 with exemptions (-l for more info)\n"); +#ifdef HAVE_SSL + printf("SSL/TLS Available: Anonymous DH Mode, OpenSSL 0.9.6 or higher required\n"); +#endif + printf("\n"); + } + + if(result!=OK || show_help==TRUE){ + + printf("Usage: check_nrpe -H [ -b ] [-4] [-6] [-n] [-u] [-p ] [-t ] [-c ] [-a ]\n"); + printf("\n"); + printf("Options:\n"); + printf(" -n = Do no use SSL\n"); + printf(" -u = Make socket timeouts return an UNKNOWN state instead of CRITICAL\n"); + printf(" = The address of the host running the NRPE daemon\n"); + printf(" = bind to local address\n"); + printf(" -4 = user ipv4 only\n"); + printf(" -6 = user ipv6 only\n"); + printf(" [port] = The port on which the daemon is running (default=%d)\n",DEFAULT_SERVER_PORT); + printf(" [timeout] = Number of seconds before connection times out (default=%d)\n",DEFAULT_SOCKET_TIMEOUT); + printf(" [command] = The name of the command that the remote daemon should run\n"); + printf(" [arglist] = Optional arguments that should be passed to the command. Multiple\n"); + printf(" arguments should be separated by a space. If provided, this must be\n"); + printf(" the last option supplied on the command line.\n"); + printf("\n"); + printf("Note:\n"); + printf("This plugin requires that you have the NRPE daemon running on the remote host.\n"); + printf("You must also have configured the daemon to associate a specific plugin command\n"); + printf("with the [command] option you are specifying here. Upon receipt of the\n"); + printf("[command] argument, the NRPE daemon will run the appropriate plugin command and\n"); + printf("send the plugin output and return code back to *this* plugin. This allows you\n"); + printf("to execute plugins on remote hosts and 'fake' the results to make Nagios think\n"); + printf("the plugin is being run locally.\n"); + printf("\n"); + } + + if(show_license==TRUE) + display_license(); + + if(result!=OK || show_help==TRUE || show_license==TRUE || show_version==TRUE) + exit(STATE_UNKNOWN); + + + /* generate the CRC 32 table */ + generate_crc32_table(); + +#ifdef HAVE_SSL + /* initialize SSL */ + if(use_ssl==TRUE){ + SSL_library_init(); + SSLeay_add_ssl_algorithms(); + meth=SSLv23_client_method(); + SSL_load_error_strings(); + if((ctx=SSL_CTX_new(meth))==NULL){ + printf("CHECK_NRPE: Error - could not create SSL context.\n"); + exit(STATE_CRITICAL); + } + + /* ADDED 01/19/2004 */ + /* use only TLSv1 protocol */ + SSL_CTX_set_options(ctx,SSL_OP_NO_SSLv2 | SSL_OP_NO_SSLv3); + } +#endif + + /* initialize alarm signal handling */ + signal(SIGALRM,alarm_handler); + + /* set socket timeout */ + alarm(socket_timeout); + + /* try to connect to the host at the given port number */ + if((sd=my_connect(server_name, &hostaddr, server_port, address_family, + bind_address)) < 0 ) { + exit (255); + } + else { + result=STATE_OK; + } + +#ifdef HAVE_SSL + /* do SSL handshake */ + if(result==STATE_OK && use_ssl==TRUE){ + if((ssl=SSL_new(ctx))!=NULL){ + SSL_CTX_set_cipher_list(ctx,"ADH"); + SSL_set_fd(ssl,sd); + if((rc=SSL_connect(ssl))!=1){ + printf("CHECK_NRPE: Error - Could not complete SSL handshake.\n"); +#ifdef DEBUG + printf("SSL_connect=%d\n",rc); + /* + rc=SSL_get_error(ssl,rc); + printf("SSL_get_error=%d\n",rc); + printf("ERR_get_error=%lu\n",ERR_get_error()); + printf("%s\n",ERR_error_string(rc,NULL)); + */ + ERR_print_errors_fp(stdout); +#endif + result=STATE_CRITICAL; + } + } + else{ + printf("CHECK_NRPE: Error - Could not create SSL connection structure.\n"); + result=STATE_CRITICAL; + } + + /* bail if we had errors */ + if(result!=STATE_OK){ + SSL_CTX_free(ctx); + close(sd); + exit(result); + } + } +#endif + + /* we're connected and ready to go */ + if(result==STATE_OK){ + + /* clear the packet buffer */ + bzero(&send_packet,sizeof(send_packet)); + + /* fill the packet with semi-random data */ + randomize_buffer((char *)&send_packet,sizeof(send_packet)); + + /* initialize packet data */ + send_packet.packet_version=(int16_t)htons(NRPE_PACKET_VERSION_2); + send_packet.packet_type=(int16_t)htons(QUERY_PACKET); + strncpy(&send_packet.buffer[0],query,MAX_PACKETBUFFER_LENGTH); + send_packet.buffer[MAX_PACKETBUFFER_LENGTH-1]='\x0'; + + /* calculate the crc 32 value of the packet */ + send_packet.crc32_value=(u_int32_t)0L; + calculated_crc32=calculate_crc32((char *)&send_packet,sizeof(send_packet)); + send_packet.crc32_value=(u_int32_t)htonl(calculated_crc32); + + + /***** ENCRYPT REQUEST *****/ + + + /* send the packet */ + bytes_to_send=sizeof(send_packet); + if(use_ssl==FALSE) + rc=sendall(sd,(char *)&send_packet,&bytes_to_send); +#ifdef HAVE_SSL + else{ + rc=SSL_write(ssl,&send_packet,bytes_to_send); + if(rc<0) + rc=-1; + } +#endif + if(rc==-1){ + printf("CHECK_NRPE: Error sending query to host.\n"); + close(sd); + return STATE_UNKNOWN; + } + + /* wait for the response packet */ + bytes_to_recv=sizeof(receive_packet); + if(use_ssl==FALSE) + rc=recvall(sd,(char *)&receive_packet,&bytes_to_recv,socket_timeout); +#ifdef HAVE_SSL + else + rc=SSL_read(ssl,&receive_packet,bytes_to_recv); +#endif + + /* reset timeout */ + alarm(0); + + /* close the connection */ +#ifdef HAVE_SSL + if(use_ssl==TRUE){ + SSL_shutdown(ssl); + SSL_free(ssl); + SSL_CTX_free(ctx); + } +#endif + graceful_close(sd,1000); + + /* recv() error */ + if(rc<0){ + printf("CHECK_NRPE: Error receiving data from daemon.\n"); + return STATE_UNKNOWN; + } + + /* server disconnected */ + else if(rc==0){ + printf("CHECK_NRPE: Received 0 bytes from daemon. Check the remote server logs for error messages.\n"); + return STATE_UNKNOWN; + } + + /* receive underflow */ + else if(bytes_to_recv0){ + + for(c=argindex-1;c=recv(sd,buf,sizeof(buf),0)) + break; + } + +#ifdef HAVE_CLOSESOCKET + closesocket(sd); +#else + close(sd); +#endif + + return OK; + } diff --git a/src/nrpe.c b/src/nrpe.c new file mode 100644 index 0000000..381f0ac --- /dev/null +++ b/src/nrpe.c @@ -0,0 +1,2162 @@ +/******************************************************************************* + * + * NRPE.C - Nagios Remote Plugin Executor + * Copyright (c) 1999-2008 Ethan Galstad (nagios@nagios.org) + * License: GPL + * + * Last Modified: 09-06-2013 + * + * Command line: nrpe -c [--inetd | --daemon] + * + * Description: + * + * This program is designed to run as a background process and + * handle incoming requests (from the host running Nagios) for + * plugin execution. It is useful for running "local" plugins + * such as check_users, check_load, check_disk, etc. without + * having to use rsh or ssh. + * + ******************************************************************************/ + +/* + * 08-10-2011 IPv4 subnetworks support added. + * Main change in nrpe.c is that is_an_allowed_host() moved to acl.c. + * now allowed_hosts is parsed by parse_allowed_hosts() from acl.c. + */ + +#include "config.h" +#include "common.h" +#include "nrpe.h" +#include "utils.h" +#include "acl.h" + +#ifdef HAVE_SSL +#include "../include/dh.h" +#endif + +#ifdef HAVE_LIBWRAP +int allow_severity=LOG_INFO; +int deny_severity=LOG_WARNING; +#endif + +#ifdef HAVE_SSL +#ifdef __sun +SSL_METHOD *meth; +#else +const SSL_METHOD *meth; +#endif +SSL_CTX *ctx; +int use_ssl=TRUE; +#else +int use_ssl=FALSE; +#endif + +#define DEFAULT_COMMAND_TIMEOUT 60 /* default timeout for execution of plugins */ +#define MAXFD 64 +#define NASTY_METACHARS "|`&><'\"\\[]{};" +#define howmany(x,y) (((x)+((y)-1))/(y)) +#define MAX_LISTEN_SOCKS 16 + + +char *command_name=NULL; +char *macro_argv[MAX_COMMAND_ARGUMENTS]; + +char config_file[MAX_INPUT_BUFFER]="nrpe.cfg"; +int log_facility=LOG_DAEMON; +int server_port=DEFAULT_SERVER_PORT; +char server_address[NI_MAXHOST]=""; +struct addrinfo *listen_addrs=NULL; +int listen_socks[MAX_LISTEN_SOCKS]; +int num_listen_socks = 0; +int address_family=AF_UNSPEC; +int socket_timeout=DEFAULT_SOCKET_TIMEOUT; +int command_timeout=DEFAULT_COMMAND_TIMEOUT; +int connection_timeout=DEFAULT_CONNECTION_TIMEOUT; +char *command_prefix=NULL; + +command *command_list=NULL; + +char *nrpe_user=NULL; +char *nrpe_group=NULL; + +char *allowed_hosts=NULL; + +char *pid_file=NULL; +int wrote_pid_file=FALSE; + +int allow_arguments=FALSE; +int allow_bash_command_substitution=FALSE; + +int allow_weak_random_seed=FALSE; + +int sigrestart=FALSE; +int sigshutdown=FALSE; + +int show_help=FALSE; +int show_license=FALSE; +int show_version=FALSE; +int use_inetd=TRUE; +int debug=FALSE; +int use_src=FALSE; /* Define parameter for SRC option */ + + +void complete_SSL_shutdown( SSL *); + + +int main(int argc, char **argv){ + int result=OK; + int x; + char buffer[MAX_INPUT_BUFFER]; + char *env_string=NULL; +#ifdef HAVE_SSL + DH *dh; + char seedfile[FILENAME_MAX]; + int i,c; +#endif + + /* set some environment variables */ + asprintf(&env_string,"NRPE_MULTILINESUPPORT=1"); + putenv(env_string); + asprintf(&env_string,"NRPE_PROGRAMVERSION=%s",PROGRAM_VERSION); + putenv(env_string); + + /* process command-line args */ + result=process_arguments(argc,argv); + + if(result!=OK || show_help==TRUE || show_license==TRUE || show_version==TRUE){ + + printf("\n"); + printf("NRPE - Nagios Remote Plugin Executor\n"); + printf("Copyright (c) 1999-2008 Ethan Galstad (nagios@nagios.org)\n"); + printf("Version: %s\n",PROGRAM_VERSION); + printf("Last Modified: %s\n",MODIFICATION_DATE); + printf("License: GPL v2 with exemptions (-l for more info)\n"); +#ifdef HAVE_SSL + printf("SSL/TLS Available: Anonymous DH Mode, OpenSSL 0.9.6 or higher required\n"); +#endif +#ifdef HAVE_LIBWRAP + printf("TCP Wrappers Available\n"); +#endif + printf("\n"); +#ifdef ENABLE_COMMAND_ARGUMENTS + printf("***************************************************************\n"); + printf("** POSSIBLE SECURITY RISK - COMMAND ARGUMENTS ARE SUPPORTED! **\n"); + printf("** Read the NRPE SECURITY file for more information **\n"); + printf("***************************************************************\n"); + printf("\n"); +#endif +#ifndef HAVE_LIBWRAP + printf("***************************************************************\n"); + printf("** POSSIBLE SECURITY RISK - TCP WRAPPERS ARE NOT AVAILABLE! **\n"); + printf("** Read the NRPE SECURITY file for more information **\n"); + printf("***************************************************************\n"); + printf("\n"); +#endif + } + + if(show_license==TRUE) + display_license(); + + else if(result!=OK || show_help==TRUE){ + + printf("Usage: nrpe [-n] -c [-4|-6] \n"); + printf("\n"); + printf("Options:\n"); + printf(" -n = Do not use SSL\n"); + printf(" = Name of config file to use\n"); + printf(" -4 = use ipv4 only\n"); + printf(" -6 = use ipv6 only\n"); + printf(" = One of the following operating modes:\n"); + printf(" -i = Run as a service under inetd or xinetd\n"); + printf(" -d = Run as a standalone daemon\n"); + /* Updates help section to indicate how to start under SRC on AIX */ + printf(" -d -s = Run as a subsystem under AIX\n"); + printf("\n"); + printf("Notes:\n"); + printf("This program is designed to process requests from the check_nrpe\n"); + printf("plugin on the host(s) running Nagios. It can run as a service\n"); + printf("under inetd or xinetd (read the docs for info on this), or as a\n"); + printf("standalone daemon. Once a request is received from an authorized\n"); + printf("host, NRPE will execute the command/plugin (as defined in the\n"); + printf("config file) and return the plugin output and return code to the\n"); + printf("check_nrpe plugin.\n"); + printf("\n"); + } + + if(result!=OK || show_help==TRUE || show_license==TRUE || show_version==TRUE) + exit(STATE_UNKNOWN); + + + /* open a connection to the syslog facility */ + /* facility name may be overridden later */ + get_log_facility(NRPE_LOG_FACILITY); + openlog("nrpe",LOG_PID,log_facility); + + /* make sure the config file uses an absolute path */ + if(config_file[0]!='/'){ + + /* save the name of the config file */ + strncpy(buffer,config_file,sizeof(buffer)); + buffer[sizeof(buffer)-1]='\x0'; + + /* get absolute path of current working directory */ + strcpy(config_file,""); + getcwd(config_file,sizeof(config_file)); + + /* append a forward slash */ + strncat(config_file,"/",sizeof(config_file)-2); + config_file[sizeof(config_file)-1]='\x0'; + + /* append the config file to the path */ + strncat(config_file,buffer,sizeof(config_file)-strlen(config_file)-1); + config_file[sizeof(config_file)-1]='\x0'; + } + + /* read the config file */ + result=read_config_file(config_file); + + /* exit if there are errors... */ + if(result==ERROR){ + syslog(LOG_ERR,"Config file '%s' contained errors, aborting...",config_file); + return STATE_CRITICAL; + } + + /* generate the CRC 32 table */ + generate_crc32_table(); + + /* initialize macros */ + for(x=0;x=0;x--){ + if(isspace(input_line[x])) + input_line[x]='\x0'; + else + break; + } + + /* skip comments and blank lines */ + if(input_line[0]=='#') + continue; + if(input_line[0]=='\x0') + continue; + if(input_line[0]=='\n') + continue; + + /* get the variable name */ + varname=strtok(input_line,"="); + if(varname==NULL){ + syslog(LOG_ERR,"No variable name specified in config file '%s' - Line %d\n",filename,line); + return ERROR; + } + + /* get the variable value */ + varvalue=strtok(NULL,"\n"); + if(varvalue==NULL){ + syslog(LOG_ERR,"No variable value specified in config file '%s' - Line %d\n",filename,line); + return ERROR; + } + + /* allow users to specify directories to recurse into for config files */ + else if(!strcmp(varname,"include_dir")){ + + strncpy(config_file,varvalue,sizeof(config_file)-1); + config_file[sizeof(config_file)-1]='\x0'; + + /* strip trailing / if necessary */ + if(config_file[strlen(config_file)-1]=='/') + config_file[strlen(config_file)-1]='\x0'; + + /* process the config directory... */ + if(read_config_dir(config_file)==ERROR) + syslog(LOG_ERR,"Continuing with errors..."); + } + + /* allow users to specify individual config files to include */ + else if(!strcmp(varname,"include") || !strcmp(varname,"include_file")){ + + /* process the config file... */ + if(read_config_file(varvalue)==ERROR) + syslog(LOG_ERR,"Continuing with errors..."); + } + + else if(!strcmp(varname,"server_port")){ + server_port=atoi(varvalue); + if(server_port<1024){ + syslog(LOG_ERR,"Invalid port number specified in config file '%s' - Line %d\n",filename,line); + return ERROR; + } + } + else if(!strcmp(varname,"command_prefix")) + command_prefix=strdup(varvalue); + + else if(!strcmp(varname,"server_address")){ + strncpy(server_address,varvalue,sizeof(server_address) - 1); + server_address[sizeof(server_address)-1]='\0'; + } + else if(!strcmp(varname,"allowed_hosts")) { + allowed_hosts=strdup(varvalue); + parse_allowed_hosts(allowed_hosts); + } + else if(strstr(input_line,"command[")){ + temp_buffer=strtok(varname,"["); + temp_buffer=strtok(NULL,"]"); + if(temp_buffer==NULL){ + syslog(LOG_ERR,"Invalid command specified in config file '%s' - Line %d\n",filename,line); + return ERROR; + } + add_command(temp_buffer,varvalue); + } + + else if(strstr(input_buffer,"debug")){ + debug=atoi(varvalue); + if(debug>0) + debug=TRUE; + else + debug=FALSE; + } + + else if(!strcmp(varname,"nrpe_user")) + nrpe_user=strdup(varvalue); + + else if(!strcmp(varname,"nrpe_group")) + nrpe_group=strdup(varvalue); + + else if(!strcmp(varname,"dont_blame_nrpe")) + allow_arguments=(atoi(varvalue)==1)?TRUE:FALSE; + + else if(!strcmp(varname,"allow_bash_command_substitution")) + allow_bash_command_substitution=(atoi(varvalue)==1)?TRUE:FALSE; + + else if(!strcmp(varname,"command_timeout")){ + command_timeout=atoi(varvalue); + if(command_timeout<1){ + syslog(LOG_ERR,"Invalid command_timeout specified in config file '%s' - Line %d\n",filename,line); + return ERROR; + } + } + + else if(!strcmp(varname,"connection_timeout")){ + connection_timeout=atoi(varvalue); + if(connection_timeout<1){ + syslog(LOG_ERR,"Invalid connection_timeout specified in config file '%s' - Line %d\n",filename,line); + return ERROR; + } + } + + else if(!strcmp(varname,"allow_weak_random_seed")) + allow_weak_random_seed=(atoi(varvalue)==1)?TRUE:FALSE; + + else if(!strcmp(varname,"pid_file")) + pid_file=strdup(varvalue); + + else if(!strcmp(varname,"log_facility")){ + if((get_log_facility(varvalue))==OK){ + /* re-open log using new facility */ + closelog(); + openlog("nrpe",LOG_PID,log_facility); + } + else + syslog(LOG_WARNING,"Invalid log_facility specified in config file '%s' - Line %d\n",filename,line); + } + + else{ + syslog(LOG_WARNING,"Unknown option specified in config file '%s' - Line %d\n",filename,line); + continue; + } + + } + + + /* close the config file */ + fclose(fp); + + return OK; + } + + +/* process all config files in a specific config directory (with directory recursion) */ +int read_config_dir(char *dirname){ + char config_file[MAX_FILENAME_LENGTH]; + DIR *dirp; + struct dirent *dirfile; + struct stat buf; + int result=OK; + int x; + + /* open the directory for reading */ + dirp=opendir(dirname); + if(dirp==NULL){ + syslog(LOG_ERR,"Could not open config directory '%s' for reading.\n",dirname); + return ERROR; + } + + /* process all files in the directory... */ + while((dirfile=readdir(dirp))!=NULL){ + + /* create the full path to the config file or subdirectory */ + snprintf(config_file,sizeof(config_file)-1,"%s/%s",dirname,dirfile->d_name); + config_file[sizeof(config_file)-1]='\x0'; + stat(config_file, &buf); + + /* process this if it's a config file... */ + x=strlen(dirfile->d_name); + if(x>4 && !strcmp(dirfile->d_name+(x-4),".cfg")){ + + /* only process normal files */ + if(!S_ISREG(buf.st_mode)) + continue; + + /* process the config file */ + result=read_config_file(config_file); + + /* break out if we encountered an error */ + if(result==ERROR) + break; + } + + /* recurse into subdirectories... */ + if(S_ISDIR(buf.st_mode)){ + + /* ignore current, parent and hidden directory entries */ + if(dirfile->d_name[0]=='.') + continue; + + /* process the config directory */ + result=read_config_dir(config_file); + + /* break out if we encountered an error */ + if(result==ERROR) + break; + } + } + + closedir(dirp); + + return result; + } + + + +/* determines facility to use with syslog */ +int get_log_facility(char *varvalue){ + + if(!strcmp(varvalue,"kern")) + log_facility=LOG_KERN; + else if(!strcmp(varvalue,"user")) + log_facility=LOG_USER; + else if(!strcmp(varvalue,"mail")) + log_facility=LOG_MAIL; + else if(!strcmp(varvalue,"daemon")) + log_facility=LOG_DAEMON; + else if(!strcmp(varvalue,"auth")) + log_facility=LOG_AUTH; + else if(!strcmp(varvalue,"syslog")) + log_facility=LOG_SYSLOG; + else if(!strcmp(varvalue,"lrp")) + log_facility=LOG_LPR; + else if(!strcmp(varvalue,"news")) + log_facility=LOG_NEWS; + else if(!strcmp(varvalue,"uucp")) + log_facility=LOG_UUCP; + else if(!strcmp(varvalue,"cron")) + log_facility=LOG_CRON; + else if(!strcmp(varvalue,"authpriv")) + log_facility=LOG_AUTHPRIV; + else if(!strcmp(varvalue,"ftp")) + log_facility=LOG_FTP; + else if(!strcmp(varvalue,"local0")) + log_facility=LOG_LOCAL0; + else if(!strcmp(varvalue,"local1")) + log_facility=LOG_LOCAL1; + else if(!strcmp(varvalue,"local2")) + log_facility=LOG_LOCAL2; + else if(!strcmp(varvalue,"local3")) + log_facility=LOG_LOCAL3; + else if(!strcmp(varvalue,"local4")) + log_facility=LOG_LOCAL4; + else if(!strcmp(varvalue,"local5")) + log_facility=LOG_LOCAL5; + else if(!strcmp(varvalue,"local6")) + log_facility=LOG_LOCAL6; + else if(!strcmp(varvalue,"local7")) + log_facility=LOG_LOCAL7; + else{ + log_facility=LOG_DAEMON; + return ERROR; + } + + return OK; + } + + + +/* adds a new command definition from the config file to the list in memory */ +int add_command(char *command_name, char *command_line){ + command *new_command; + + if(command_name==NULL || command_line==NULL) + return ERROR; + + /* allocate memory for the new command */ + new_command=(command *)malloc(sizeof(command)); + if(new_command==NULL) + return ERROR; + + new_command->command_name=strdup(command_name); + if(new_command->command_name==NULL){ + free(new_command); + return ERROR; + } + new_command->command_line=strdup(command_line); + if(new_command->command_line==NULL){ + free(new_command->command_name); + free(new_command); + return ERROR; + } + + /* add new command to head of list in memory */ + new_command->next=command_list; + command_list=new_command; + + if(debug==TRUE) + syslog(LOG_DEBUG,"Added command[%s]=%s\n",command_name,command_line); + + return OK; + } + + + +/* given a command name, find the structure in memory */ +command *find_command(char *command_name){ + command *temp_command; + + for(temp_command=command_list;temp_command!=NULL;temp_command=temp_command->next) + if(!strcmp(command_name,temp_command->command_name)) + return temp_command; + + return NULL; + } + + +/* + * Close all listening sockets + */ +static void close_listen_socks(void) { + int i; + + for (i = 0; i <= num_listen_socks; i++) { + close(listen_socks[i]); + num_listen_socks--; + } + } + +/* Start listen on a particular port */ +void create_listener(struct addrinfo *ai) { + + int ret; + char ntop[NI_MAXHOST], strport[NI_MAXSERV]; + int listen_sock; + int flag=1; + + if(ai->ai_family != AF_INET && ai->ai_family != AF_INET6) return; + + if(num_listen_socks >= MAX_LISTEN_SOCKS) { + syslog(LOG_ERR, "Too many listen sockets. Enlarge MAX_LISTEN_SOCKS"); + exit(1); + } + + if((ret = getnameinfo(ai->ai_addr, ai->ai_addrlen, ntop, sizeof(ntop), + strport, sizeof(strport), NI_NUMERICHOST|NI_NUMERICSERV)) != 0) { + syslog(LOG_ERR, "getnameinfo failed: %.100s", gai_strerror(ret)); + return; + } + + /* Create socket for listening. */ + listen_sock = socket(ai->ai_family, ai->ai_socktype, ai->ai_protocol); + if (listen_sock < 0) { + /* kernel may not support ipv6 */ + syslog(LOG_ERR, "socket: %.100s", strerror(errno)); + return; + } + + /* socket should be non-blocking */ + fcntl(listen_sock,F_SETFL,O_NONBLOCK); + + /* set the reuse address flag so we don't get errors when + restarting */ + if(setsockopt(listen_sock, SOL_SOCKET,SO_REUSEADDR, &flag, + sizeof(flag)) < 0) { + syslog(LOG_ERR, "setsockopt SO_REUSEADDR: %s", strerror(errno)); + return; + } + +#ifdef IPV6_V6ONLY + /* Only communicate in IPv6 over AF_INET6 sockets. */ + if (ai->ai_family == AF_INET6) { + if (setsockopt(listen_sock, IPPROTO_IPV6, IPV6_V6ONLY, &flag, + sizeof(flag)) == -1) { + fprintf(stderr, "setsockopt IPV6_V6ONLY: %s", strerror(errno)); + } + } +#endif + + /* Bind the socket to the desired port. */ + if (bind(listen_sock, ai->ai_addr, ai->ai_addrlen) < 0) { + syslog(LOG_ERR, "Bind to port %s on %s failed: %.200s.", strport, + ntop, strerror(errno)); close(listen_sock); + return; + } + listen_socks[num_listen_socks] = listen_sock; + num_listen_socks++; + + /* Start listening on the port. */ + if (listen(listen_sock, 5) < 0) { + syslog(LOG_ERR, "listen on [%s]:%s: %.100s", ntop, strport, + strerror(errno)); + exit(1); + } + + syslog(LOG_INFO, "Server listening on %s port %s.", ntop, strport); + } + +/* wait for incoming connection requests */ +void wait_for_connections(void){ + struct addrinfo *ai; + fd_set *fdset=NULL; + int maxfd=0; + struct sockaddr_storage from; + socklen_t fromlen; + char ipstr[INET6_ADDRSTRLEN]; + int i; + int r; + + struct sockaddr_in myname; + struct sockaddr_in *nptr; + struct sockaddr_in6 *nptr6; + struct sockaddr_storage addr; + int rc; + int sock, new_sd; + socklen_t addrlen; + pid_t pid; + fd_set fdread; + struct timeval timeout; + int retval; +#ifdef HAVE_LIBWRAP + struct request_info req; +#endif + + add_listen_addr(&listen_addrs, address_family, + (strcmp(server_address, "") == 0) ? NULL : server_address, + server_port); + + for(ai = listen_addrs; ai; ai = ai->ai_next) { + create_listener(ai); + } + + if (!num_listen_socks) { + syslog(LOG_ERR, "Cannot bind to any address."); + exit(1); + } + + /* log warning about command arguments */ +#ifdef ENABLE_COMMAND_ARGUMENTS + if(allow_arguments==TRUE) + syslog(LOG_NOTICE,"Warning: Daemon is configured to accept command arguments from clients!"); +#ifdef ENABLE_BASH_COMMAND_SUBSTITUTION + if(TRUE==allow_bash_command_substitution) { + if(TRUE==allow_arguments) + syslog(LOG_NOTICE,"Warning: Daemon is configured to accept command arguments with bash command substitutions!"); + else + syslog(LOG_NOTICE,"Warning: Daemon is configured to accept command arguments with bash command substitutions, but is not configured to accept command argements from clients. Enable command arguments if you wish to allow command arguments with bash command substitutions."); + } +#endif +#endif + + syslog(LOG_INFO,"Listening for connections on port %d\n",htons(myname.sin_port)); + + if(allowed_hosts) + syslog(LOG_INFO,"Allowing connections from: %s\n",allowed_hosts); + + /* listen for connection requests - fork() if we get one */ + while(1){ + + /* bail out if necessary */ + if(sigrestart==TRUE || sigshutdown==TRUE) break; + + for(i = 0; i < num_listen_socks; i++) { + if (listen_socks[i] > maxfd) maxfd = listen_socks[i]; + } + + if(fdset != NULL) free(fdset); + fdset = (fd_set *)calloc(howmany(maxfd + 1, NFDBITS), sizeof(fd_mask)); + + for (i = 0; i < num_listen_socks; i++) FD_SET(listen_socks[i], fdset); + + /* Wait in select until there is a connection. */ + retval = select(maxfd+1, fdset, NULL, NULL, NULL); + + /* bail out if necessary */ + if(sigrestart==TRUE || sigshutdown==TRUE) break; + + /* error */ + if(retval<0) continue; + + for (i = 0; i < num_listen_socks; i++) { + if (!FD_ISSET(listen_socks[i], fdset)) continue; + fromlen = sizeof(from); + + /* accept a new connection request */ + new_sd = accept(listen_socks[i], (struct sockaddr *)&from, &fromlen); + + /* some kind of error occurred... */ + if(new_sd<0){ + + /* bail out if necessary */ + if(sigrestart==TRUE || sigshutdown==TRUE) + break; + + /* retry */ + if(errno==EWOULDBLOCK || errno==EINTR) + continue; + + /* socket is nonblocking and we don't have a connection yet */ + if(errno==EAGAIN) + continue; + + /* fix for HP-UX 11.0 - just retry */ + if(errno==ENOBUFS) + continue; + + /* else handle the error later */ + break; + } + + /* child process should handle the connection */ + pid=fork(); + if(pid==0) { + + /* fork again so we don't create zombies */ + pid=fork(); + if(pid==0) { + + /* hey, there was an error... */ + if(new_sd<0) { + + /* log error to syslog facility */ + syslog(LOG_ERR, "Network server accept failure (%d: %s)", + errno, strerror(errno)); + + /* close socket prioer to exiting */ + close(sock); + + return; + } + + /* handle signals */ + signal(SIGQUIT,child_sighandler); + signal(SIGTERM,child_sighandler); + signal(SIGHUP,child_sighandler); + + /* grandchild does not need to listen for connections */ + close_listen_socks(); + + /* find out who just connected... */ + addrlen=sizeof(addr); + rc=getpeername(new_sd, (struct sockaddr *)&addr, &addrlen); + + if(rc<0) { + + /* log error to syslog facility */ + syslog(LOG_ERR, "Error: Network server getpeername() failure (%d: %s)", + errno, strerror(errno)); + + /* close socket prior to exiting */ + close(new_sd); + + return; + } + + /* is this is a blessed machine? */ + if(allowed_hosts) { + switch(addr.ss_family) { + case AF_INET: + nptr = (struct sockaddr_in *)&addr; + + /* log info to syslog facility */ + if(debug==TRUE) { + syslog(LOG_DEBUG, "Connection from %s port %d", + inet_ntoa(nptr->sin_addr), + nptr->sin_port); + } + if(!is_an_allowed_host(AF_INET, + (void *)&(nptr->sin_addr))) { + /* log error to syslog facility */ + syslog(LOG_ERR, + "Host %s is not allowed to talk to us!", + inet_ntoa(nptr->sin_addr)); + + /* log info to syslog facility */ + if ( debug==TRUE ) { + syslog(LOG_DEBUG, + "Connection from %s closed.", + inet_ntoa(nptr->sin_addr)); + } + + /* close socket prior to exiting */ + close(new_sd); + exit(STATE_OK); + } + else { + /* log info to syslog facility */ + if(debug==TRUE) { + syslog(LOG_DEBUG, + "Host address is in allowed_hosts"); + } + + } + break; + case AF_INET6: + nptr6 = (struct sockaddr_in6 *)&addr; + if(inet_ntop(AF_INET6, + (const void *)&(nptr6->sin6_addr), ipstr, + sizeof(ipstr)) == NULL) { + strncpy(ipstr, "Unknown", sizeof(ipstr)); + } + + /* log info to syslog facility */ + if(debug==TRUE) { + syslog(LOG_DEBUG, "Connection from %s port %d", + ipstr, nptr6->sin6_port); + } + if(!is_an_allowed_host(AF_INET6, + (void *)&(nptr6->sin6_addr))) { + /* log error to syslog facility */ + syslog(LOG_ERR, + "Host %s is not allowed to talk to us!", + ipstr); + + /* log info to syslog facility */ + if ( debug==TRUE ) { + syslog(LOG_DEBUG, + "Connection from %s closed.", + ipstr); + } + + /* close socket prior to exiting */ + close(new_sd); + exit(STATE_OK); + } + else { + /* log info to syslog facility */ + if(debug==TRUE) { + syslog(LOG_DEBUG, + "Host address is in allowed_hosts"); + } + + } + break; + } + } + +#ifdef HAVE_LIBWRAP + /* Check whether or not connections are allowed from this host */ + request_init(&req,RQ_DAEMON,"nrpe",RQ_FILE,new_sd,0); + fromhost(&req); + + if(!hosts_access(&req)){ + + syslog(LOG_DEBUG,"Connection refused by TCP wrapper"); + + /* refuse the connection */ + refuse(&req); + close(new_sd); + + /* should not be reached */ + syslog(LOG_ERR,"libwrap refuse() returns!"); + exit(STATE_CRITICAL); + } +#endif + + /* handle the client connection */ + handle_connection(new_sd); + + /* log info to syslog facility */ + if(debug==TRUE) { + syslog(LOG_DEBUG,"Connection from %s closed.",ipstr); + } + + /* close socket prior to exiting */ + close(new_sd); + + exit(STATE_OK); + } + + /* first child returns immediately, grandchild is inherited by + INIT process -> no zombies... */ + else + exit(STATE_OK); + } + + /* parent ... */ + else { + /* parent doesn't need the new connection */ + close(new_sd); + + /* parent waits for first child to exit */ + waitpid(pid,NULL,0); + } + } + } + + /* close the sockets we're listening on */ + close_listen_socks(); + freeaddrinfo(listen_addrs); + listen_addrs=NULL; + + return; + } + + +/* handles a client connection */ +void handle_connection(int sock){ + u_int32_t calculated_crc32; + command *temp_command; + packet receive_packet; + packet send_packet; + int bytes_to_send; + int bytes_to_recv; + char buffer[MAX_INPUT_BUFFER]; + char raw_command[MAX_INPUT_BUFFER]; + char processed_command[MAX_INPUT_BUFFER]; + int result=STATE_OK; + int early_timeout=FALSE; + int rc; + int x; +#ifdef DEBUG + FILE *errfp; +#endif +#ifdef HAVE_SSL + SSL *ssl=NULL; +#endif + + + /* log info to syslog facility */ + if(debug==TRUE) + syslog(LOG_DEBUG,"Handling the connection..."); + +#ifdef OLDSTUFF + /* socket should be non-blocking */ + fcntl(sock,F_SETFL,O_NONBLOCK); +#endif + + /* set connection handler */ + signal(SIGALRM,my_connection_sighandler); + alarm(connection_timeout); + +#ifdef HAVE_SSL + /* do SSL handshake */ + if(result==STATE_OK && use_ssl==TRUE){ + if((ssl=SSL_new(ctx))!=NULL){ + SSL_set_fd(ssl,sock); + + /* keep attempting the request if needed */ + while(((rc=SSL_accept(ssl))!=1) && (SSL_get_error(ssl,rc)==SSL_ERROR_WANT_READ)); + + if(rc!=1){ + syslog(LOG_ERR,"Error: Could not complete SSL handshake. %d\n",SSL_get_error(ssl,rc)); +#ifdef DEBUG + errfp=fopen("/tmp/err.log","w"); + ERR_print_errors_fp(errfp); + fclose(errfp); +#endif + return; + } + } + else{ + syslog(LOG_ERR,"Error: Could not create SSL connection structure.\n"); +#ifdef DEBUG + errfp=fopen("/tmp/err.log","w"); + ERR_print_errors_fp(errfp); + fclose(errfp); +#endif + return; + } + } +#endif + + bytes_to_recv=sizeof(receive_packet); + if(use_ssl==FALSE) + rc=recvall(sock,(char *)&receive_packet,&bytes_to_recv,socket_timeout); +#ifdef HAVE_SSL + else{ + while(((rc=SSL_read(ssl,&receive_packet,bytes_to_recv))<=0) && (SSL_get_error(ssl,rc)==SSL_ERROR_WANT_READ)); + } +#endif + + /* recv() error or client disconnect */ + if(rc<=0){ + + /* log error to syslog facility */ + syslog(LOG_ERR,"Could not read request from client, bailing out..."); + +#ifdef HAVE_SSL + if(ssl){ + complete_SSL_shutdown( ssl); + SSL_free(ssl); + syslog(LOG_INFO,"INFO: SSL Socket Shutdown.\n"); + } +#endif + + return; + } + + /* we couldn't read the correct amount of data, so bail out */ + else if(bytes_to_recv!=sizeof(receive_packet)){ + + /* log error to syslog facility */ + syslog(LOG_ERR,"Data packet from client was too short, bailing out..."); + +#ifdef HAVE_SSL + if(ssl){ + complete_SSL_shutdown( ssl); + SSL_free(ssl); + } +#endif + + return; + } + +#ifdef DEBUG + fp=fopen("/tmp/packet","w"); + if(fp){ + fwrite(&receive_packet,1,sizeof(receive_packet),fp); + fclose(fp); + } +#endif + + /* make sure the request is valid */ + if(validate_request(&receive_packet)==ERROR){ + + /* log an error */ + syslog(LOG_ERR,"Client request was invalid, bailing out..."); + + /* free memory */ + free(command_name); + command_name=NULL; + for(x=0;xcommand_line,sizeof(raw_command)-1); + else + snprintf(raw_command,sizeof(raw_command)-1,"%s %s",command_prefix,temp_command->command_line); + raw_command[sizeof(raw_command)-1]='\x0'; + process_macros(raw_command,processed_command,sizeof(processed_command)); + + /* log info to syslog facility */ + if(debug==TRUE) + syslog(LOG_DEBUG,"Running command: %s",processed_command); + + /* run the command */ + strcpy(buffer,""); + result=my_system(processed_command,command_timeout,&early_timeout,buffer,sizeof(buffer)); + + /* log debug info */ + if(debug==TRUE) + syslog(LOG_DEBUG,"Command completed with return code %d and output: %s",result,buffer); + + /* see if the command timed out */ + if(early_timeout==TRUE) + snprintf(buffer,sizeof(buffer)-1,"NRPE: Command timed out after %d seconds\n",command_timeout); + else if(!strcmp(buffer,"")) + snprintf(buffer,sizeof(buffer)-1,"NRPE: Unable to read output\n"); + + buffer[sizeof(buffer)-1]='\x0'; + + /* check return code bounds */ + if((result<0) || (result>3)){ + + /* log error to syslog facility */ + syslog(LOG_ERR,"Bad return code for [%s]: %d", buffer,result); + + result=STATE_UNKNOWN; + } + } + } + + /* free memory */ + free(command_name); + command_name=NULL; + for(x=0;xnext; + if(this_command->command_name) + free(this_command->command_name); + if(this_command->command_line) + free(this_command->command_line); + free(this_command); + this_command=next_command; + } + + command_list=NULL; + + return; + } + + + +/* executes a system command via popen(), but protects against timeouts */ +int my_system(char *command,int timeout,int *early_timeout,char *output,int output_length){ + pid_t pid; + int status; + int result; + extern int errno; + char buffer[MAX_INPUT_BUFFER]; + int fd[2]; + FILE *fp; + int bytes_read=0; + time_t start_time,end_time; + + /* initialize return variables */ + if(output!=NULL) + strcpy(output,""); + *early_timeout=FALSE; + + /* if no command was passed, return with no error */ + if(command==NULL) + return STATE_OK; + + /* create a pipe */ + pipe(fd); + + /* make the pipe non-blocking */ + fcntl(fd[0],F_SETFL,O_NONBLOCK); + fcntl(fd[1],F_SETFL,O_NONBLOCK); + + /* get the command start time */ + time(&start_time); + + /* fork */ + pid=fork(); + + /* return an error if we couldn't fork */ + if(pid==-1){ + + snprintf(buffer,sizeof(buffer)-1,"NRPE: Call to fork() failed\n"); + buffer[sizeof(buffer)-1]='\x0'; + + if(output!=NULL){ + strncpy(output,buffer,output_length-1); + output[output_length-1]='\x0'; + } + + /* close both ends of the pipe */ + close(fd[0]); + close(fd[1]); + + return STATE_UNKNOWN; + } + + /* execute the command in the child process */ + if(pid==0){ + + /* close pipe for reading */ + close(fd[0]); + + /* become process group leader */ + setpgid(0,0); + + /* trap commands that timeout */ + signal(SIGALRM,my_system_sighandler); + alarm(timeout); + + /* run the command */ + fp=popen(command,"r"); + + /* report an error if we couldn't run the command */ + if(fp==NULL){ + + strncpy(buffer,"NRPE: Call to popen() failed\n",sizeof(buffer)-1); + buffer[sizeof(buffer)-1]='\x0'; + + /* write the error back to the parent process */ + write(fd[1],buffer,strlen(buffer)+1); + + result=STATE_CRITICAL; + } + else{ + + /* read all lines of output - supports Nagios 3.x multiline output */ + while((bytes_read=fread(buffer,1,sizeof(buffer)-1,fp))>0){ + + /* write the output back to the parent process */ + write(fd[1],buffer,bytes_read); + } + + /* close the command and get termination status */ + status=pclose(fp); + + /* report an error if we couldn't close the command */ + if(status==-1) + result=STATE_CRITICAL; + /* report an error if child died due to signal (Klas Lindfors) */ + else if(!WIFEXITED(status)) + result=STATE_CRITICAL; + else + result=WEXITSTATUS(status); + } + + /* close pipe for writing */ + close(fd[1]); + + /* reset the alarm */ + alarm(0); + + /* return plugin exit code to parent process */ + exit(result); + } + + /* parent waits for child to finish executing command */ + else{ + + /* close pipe for writing */ + close(fd[1]); + + /* wait for child to exit */ + waitpid(pid,&status,0); + + /* get the end time for running the command */ + time(&end_time); + + /* get the exit code returned from the program */ + result=WEXITSTATUS(status); + + /* because of my idiotic idea of having UNKNOWN states be equivalent to -1, I must hack things a bit... */ + if(result==255) + result=STATE_UNKNOWN; + + /* check bounds on the return value */ + if(result<0 || result>3) + result=STATE_UNKNOWN; + + /* try and read the results from the command output (retry if we encountered a signal) */ + if(output!=NULL){ + do{ + bytes_read=read(fd[0], output, output_length-1); + }while (bytes_read==-1 && errno==EINTR); + + if(bytes_read==-1) + *output='\0'; + else + output[bytes_read]='\0'; + } + + /* if there was a critical return code and no output AND the command time exceeded the timeout thresholds, assume a timeout */ + if(result==STATE_CRITICAL && bytes_read==-1 && (end_time-start_time)>=timeout){ + *early_timeout=TRUE; + + /* send termination signal to child process group */ + kill((pid_t)(-pid),SIGTERM); + kill((pid_t)(-pid),SIGKILL); + } + + /* close the pipe for reading */ + close(fd[0]); + } + +#ifdef DEBUG + printf("my_system() end\n"); +#endif + + return result; + } + + + +/* handle timeouts when executing commands via my_system() */ +void my_system_sighandler(int sig){ + + /* force the child process to exit... */ + exit(STATE_CRITICAL); + } + + +/* handle errors where connection takes too long */ +void my_connection_sighandler(int sig) { + + syslog(LOG_ERR,"Connection has taken too long to establish. Exiting..."); + + exit(STATE_CRITICAL); + } + + +/* drops privileges */ +int drop_privileges(char *user, char *group){ + uid_t uid=-1; + gid_t gid=-1; + struct group *grp; + struct passwd *pw; + + /* set effective group ID */ + if(group!=NULL){ + + /* see if this is a group name */ + if(strspn(group,"0123456789")gr_gid); + else + syslog(LOG_ERR,"Warning: Could not get group entry for '%s'",group); + endgrent(); + } + + /* else we were passed the GID */ + else + gid=(gid_t)atoi(group); + + /* set effective group ID if other than current EGID */ + if(gid!=getegid()){ + + if(setgid(gid)==-1) + syslog(LOG_ERR,"Warning: Could not set effective GID=%d",(int)gid); + } + } + + + /* set effective user ID */ + if(user!=NULL){ + + /* see if this is a user name */ + if(strspn(user,"0123456789")pw_uid); + else + syslog(LOG_ERR,"Warning: Could not get passwd entry for '%s'",user); + endpwent(); + } + + /* else we were passed the UID */ + else + uid=(uid_t)atoi(user); + + /* set effective user ID if other than current EUID */ + if(uid!=geteuid()){ + +#ifdef HAVE_INITGROUPS + /* initialize supplementary groups */ + if(initgroups(user,gid)==-1){ + if(errno==EPERM) + syslog(LOG_ERR,"Warning: Unable to change supplementary groups using initgroups()"); + else{ + syslog(LOG_ERR,"Warning: Possibly root user failed dropping privileges with initgroups()"); + return ERROR; + } + } +#endif + + if(setuid(uid)==-1) + syslog(LOG_ERR,"Warning: Could not set effective UID=%d",(int)uid); + } + } + + return OK; + } + + +/* write an optional pid file */ +int write_pid_file(void){ + int fd; + int result=0; + pid_t pid=0; + char pbuf[16]; + + /* no pid file was specified */ + if(pid_file==NULL) + return OK; + + /* read existing pid file */ + if((fd=open(pid_file,O_RDONLY))>=0){ + + result=read(fd,pbuf,(sizeof pbuf)-1); + + close(fd); + + if(result>0){ + + pbuf[result]='\x0'; + pid=(pid_t)atoi(pbuf); + + /* if previous process is no longer running running, remove the old pid file */ + if(pid && (pid==getpid() || kill(pid,0)<0)) + unlink(pid_file); + + /* previous process is still running */ + else{ + syslog(LOG_ERR,"There's already an NRPE server running (PID %lu). Bailing out...",(unsigned long)pid); + return ERROR; + } + } + } + + /* write new pid file */ + if((fd=open(pid_file,O_WRONLY | O_CREAT,0644))>=0){ + sprintf(pbuf,"%d\n",(int)getpid()); + write(fd,pbuf,strlen(pbuf)); + close(fd); + wrote_pid_file=TRUE; + } + else{ + syslog(LOG_ERR,"Cannot write to pidfile '%s' - check your privileges.",pid_file); + } + + return OK; + } + + + +/* remove pid file */ +int remove_pid_file(void){ + + /* no pid file was specified */ + if(pid_file==NULL) + return OK; + + /* pid file was not written */ + if(wrote_pid_file==FALSE) + return OK; + + /* remove existing pid file */ + if(unlink(pid_file)==-1){ + syslog(LOG_ERR,"Cannot remove pidfile '%s' - check your privileges.",pid_file); + return ERROR; + } + + return OK; + } + +void complete_SSL_shutdown( SSL *ssl) { + + /* + Thanks to Jari Takkala (jtakkala@gmail.com) for the following information. + + We need to call SSL_shutdown() at least twice, otherwise we'll + be left with data in the socket receive buffer, and the + subsequent process termination will cause TCP RST's to be sent + to the client. + + See http://bugs.ruby-lang.org/projects/ruby-trunk/repository/revisions/32219/diff + for more information. + */ + + int x; + + for( x = 0; x < 4; x++) { + if( SSL_shutdown( ssl)) break; + } +} + +/* bail if daemon is running as root */ +int check_privileges(void){ + uid_t uid=-1; + gid_t gid=-1; + + uid=geteuid(); + gid=getegid(); + + if(uid==0 || gid==0){ + syslog(LOG_ERR,"Error: NRPE daemon cannot be run as user/group root!"); + exit(STATE_CRITICAL); + } + + return OK; + } + + + +/* handle signals (parent process) */ +void sighandler(int sig){ + static char *sigs[]={"EXIT","HUP","INT","QUIT","ILL","TRAP","ABRT","BUS","FPE","KILL","USR1","SEGV","USR2","PIPE","ALRM","TERM","STKFLT","CHLD","CONT","STOP","TSTP","TTIN","TTOU","URG","XCPU","XFSZ","VTALRM","PROF","WINCH","IO","PWR","UNUSED","ZERR","DEBUG",(char *)NULL}; + int i; + + if(sig<0) + sig=-sig; + + for(i=0;sigs[i]!=(char *)NULL;i++); + + sig%=i; + + /* we received a SIGHUP, so restart... */ + if(sig==SIGHUP){ + + sigrestart=TRUE; + + syslog(LOG_NOTICE,"Caught SIGHUP - restarting...\n"); + } + + /* else begin shutting down... */ + if(sig==SIGTERM){ + + /* if shutdown is already true, we're in a signal trap loop! */ + if(sigshutdown==TRUE) + exit(STATE_CRITICAL); + + sigshutdown=TRUE; + + syslog(LOG_NOTICE,"Caught SIG%s - shutting down...\n",sigs[sig]); + } + + return; + } + + + +/* handle signals (child processes) */ +void child_sighandler(int sig){ + + /* free all memory we allocated */ + free_memory(); + + /* terminate */ + exit(0); + + /* so the compiler doesn't complain... */ + return; + } + + + +/* tests whether or not a client request is valid */ +int validate_request(packet *pkt){ + u_int32_t packet_crc32; + u_int32_t calculated_crc32; + char *ptr; +#ifdef ENABLE_COMMAND_ARGUMENTS + int x; +#endif + + + /***** DECRYPT REQUEST ******/ + + + /* check the crc 32 value */ + packet_crc32=ntohl(pkt->crc32_value); + pkt->crc32_value=0L; + calculated_crc32=calculate_crc32((char *)pkt,sizeof(packet)); + if(packet_crc32!=calculated_crc32){ + syslog(LOG_ERR,"Error: Request packet had invalid CRC32."); + return ERROR; + } + + /* make sure this is the right type of packet */ + if(ntohs(pkt->packet_type)!=QUERY_PACKET || ntohs(pkt->packet_version)!=NRPE_PACKET_VERSION_2){ + syslog(LOG_ERR,"Error: Request packet type/version was invalid!"); + return ERROR; + } + + /* make sure buffer is terminated */ + pkt->buffer[MAX_PACKETBUFFER_LENGTH-1]='\x0'; + + /* client must send some kind of request */ + if(!strcmp(pkt->buffer,"")){ + syslog(LOG_ERR,"Error: Request contained no query!"); + return ERROR; + } + + /* make sure request doesn't contain nasties */ + if(contains_nasty_metachars(pkt->buffer)==TRUE){ + syslog(LOG_ERR,"Error: Request contained illegal metachars!"); + return ERROR; + } + + /* make sure the request doesn't contain arguments */ + if(strchr(pkt->buffer,'!')){ +#ifdef ENABLE_COMMAND_ARGUMENTS + if(allow_arguments==FALSE){ + syslog(LOG_ERR,"Error: Request contained command arguments, but argument option is not enabled!"); + return ERROR; + } +#else + syslog(LOG_ERR,"Error: Request contained command arguments!"); + return ERROR; +#endif + } + + /* get command name */ +#ifdef ENABLE_COMMAND_ARGUMENTS + ptr=strtok(pkt->buffer,"!"); +#else + ptr=pkt->buffer; +#endif + command_name=strdup(ptr); + if(command_name==NULL){ + syslog(LOG_ERR,"Error: Memory allocation failed"); + return ERROR; + } + +#ifdef ENABLE_COMMAND_ARGUMENTS + /* get command arguments */ + if(allow_arguments==TRUE){ + + for(x=0;x=1 && arg_index<=MAX_COMMAND_ARGUMENTS) + selected_macro=macro_argv[arg_index-1]; + } + + /* an escaped $ is done by specifying two $$ next to each other */ + else if(!strcmp(temp_buffer,"")){ + strncat(output_buffer,"$",buffer_length-strlen(output_buffer)-1); + } + + /* a non-macro, just some user-defined string between two $s */ + else{ + strncat(output_buffer,"$",buffer_length-strlen(output_buffer)-1); + output_buffer[buffer_length-1]='\x0'; + strncat(output_buffer,temp_buffer,buffer_length-strlen(output_buffer)-1); + output_buffer[buffer_length-1]='\x0'; + strncat(output_buffer,"$",buffer_length-strlen(output_buffer)-1); + } + + + /* insert macro */ + if(selected_macro!=NULL) + strncat(output_buffer,(selected_macro==NULL)?"":selected_macro,buffer_length-strlen(output_buffer)-1); + + output_buffer[buffer_length-1]='\x0'; + } + + in_macro=FALSE; + } + } + + return OK; + } + + + +/* process command line arguments */ +int process_arguments(int argc, char **argv){ + char optchars[MAX_INPUT_BUFFER]; + int c=1; + int have_mode=FALSE; + +#ifdef HAVE_GETOPT_LONG + int option_index=0; + static struct option long_options[]={ + {"config", required_argument, 0, 'c'}, + {"inetd", no_argument, 0, 'i'}, + /* To compatibility between short and long options but not used on AIX */ + {"src", no_argument, 0, 's'}, + {"4", no_argument, 0, '4'}, + {"6", no_argument, 0, '4'}, + {"daemon", no_argument, 0, 'd'}, + {"no-ssl", no_argument, 0, 'n'}, + {"help", no_argument, 0, 'h'}, + {"license", no_argument, 0, 'l'}, + {0, 0, 0, 0} + }; +#endif + + /* no options were supplied */ + if(argc<2) + return ERROR; + + snprintf(optchars,MAX_INPUT_BUFFER,"c:hVldi46n"); + + while(1){ +#ifdef HAVE_GETOPT_LONG + c=getopt_long(argc,argv,optchars,long_options,&option_index); +#else + c=getopt(argc,argv,optchars); +#endif + if(c==-1 || c==EOF) + break; + + /* process all arguments */ + switch(c){ + + case '?': + case 'h': + show_help=TRUE; + break; + case 'V': + show_version=TRUE; + break; + case 'l': + show_license=TRUE; + break; + case 'c': + strncpy(config_file,optarg,sizeof(config_file)); + config_file[sizeof(config_file)-1]='\x0'; + break; + case 'd': + use_inetd=FALSE; + have_mode=TRUE; + break; + case 'i': + use_inetd=TRUE; + have_mode=TRUE; + break; + case '4': + address_family=AF_INET; + break; + case '6': + address_family=AF_INET6; + break; + case 'n': + use_ssl=FALSE; + break; + case 's': /* Argument s to indicate SRC option*/ + use_src=TRUE; + break; + default: + return ERROR; + break; + } + } + + /* bail if we didn't get required args */ + if(have_mode==FALSE) + return ERROR; + + return OK; + } + diff --git a/src/snprintf.c b/src/snprintf.c new file mode 100644 index 0000000..ef77305 --- /dev/null +++ b/src/snprintf.c @@ -0,0 +1,1452 @@ +/* + * NOTE: If you change this file, please merge it into rsync, samba, etc. + */ + +/* + * Copyright Patrick Powell 1995 + * This code is based on code written by Patrick Powell (papowell@astart.com) + * It may be used for any purpose as long as this notice remains intact + * on all source code distributions + */ + +/************************************************************** + * Original: + * Patrick Powell Tue Apr 11 09:48:21 PDT 1995 + * A bombproof version of doprnt (dopr) included. + * Sigh. This sort of thing is always nasty do deal with. Note that + * the version here does not include floating point... + * + * snprintf() is used instead of sprintf() as it does limit checks + * for string length. This covers a nasty loophole. + * + * The other functions are there to prevent NULL pointers from + * causing nast effects. + * + * More Recently: + * Brandon Long 9/15/96 for mutt 0.43 + * This was ugly. It is still ugly. I opted out of floating point + * numbers, but the formatter understands just about everything + * from the normal C string format, at least as far as I can tell from + * the Solaris 2.5 printf(3S) man page. + * + * Brandon Long 10/22/97 for mutt 0.87.1 + * Ok, added some minimal floating point support, which means this + * probably requires libm on most operating systems. Don't yet + * support the exponent (e,E) and sigfig (g,G). Also, fmtint() + * was pretty badly broken, it just wasn't being exercised in ways + * which showed it, so that's been fixed. Also, formated the code + * to mutt conventions, and removed dead code left over from the + * original. Also, there is now a builtin-test, just compile with: + * gcc -DTEST_SNPRINTF -o snprintf snprintf.c -lm + * and run snprintf for results. + * + * Thomas Roessler 01/27/98 for mutt 0.89i + * The PGP code was using unsigned hexadecimal formats. + * Unfortunately, unsigned formats simply didn't work. + * + * Michael Elkins 03/05/98 for mutt 0.90.8 + * The original code assumed that both snprintf() and vsnprintf() were + * missing. Some systems only have snprintf() but not vsnprintf(), so + * the code is now broken down under HAVE_SNPRINTF and HAVE_VSNPRINTF. + * + * Andrew Tridgell (tridge@samba.org) Oct 1998 + * fixed handling of %.0f + * added test for HAVE_LONG_DOUBLE + * + * tridge@samba.org, idra@samba.org, April 2001 + * got rid of fcvt code (twas buggy and made testing harder) + * added C99 semantics + * + * date: 2002/12/19 19:56:31; author: herb; state: Exp; lines: +2 -0 + * actually print args for %g and %e + * + * date: 2002/06/03 13:37:52; author: jmcd; state: Exp; lines: +8 -0 + * Since includes.h isn't included here, VA_COPY has to be defined here. I don't + * see any include file that is guaranteed to be here, so I'm defining it + * locally. Fixes AIX and Solaris builds. + * + * date: 2002/06/03 03:07:24; author: tridge; state: Exp; lines: +5 -13 + * put the ifdef for HAVE_VA_COPY in one place rather than in lots of + * functions + * + * date: 2002/05/17 14:51:22; author: jmcd; state: Exp; lines: +21 -4 + * Fix usage of va_list passed as an arg. Use __va_copy before using it + * when it exists. + * + * date: 2002/04/16 22:38:04; author: idra; state: Exp; lines: +20 -14 + * Fix incorrect zpadlen handling in fmtfp. + * Thanks to Ollie Oldham for spotting it. + * few mods to make it easier to compile the tests. + * addedd the "Ollie" test to the floating point ones. + * + * Martin Pool (mbp@samba.org) April 2003 + * Remove NO_CONFIG_H so that the test case can be built within a source + * tree with less trouble. + * Remove unnecessary SAFE_FREE() definition. + * + * Martin Pool (mbp@samba.org) May 2003 + * Put in a prototype for dummy_snprintf() to quiet compiler warnings. + * + * Move #endif to make sure VA_COPY, LDOUBLE, etc are defined even + * if the C library has some snprintf functions already. + * + * Darren Tucker (dtucker@zip.com.au) 2005 + * Fix bug allowing read overruns of the source string with "%.*s" + * Usually harmless unless the read runs outside the process' allocation + * (eg if your malloc does guard pages) in which case it will segfault. + * From OpenSSH. Also added test for same. + * + * Simo Sorce (idra@samba.org) Jan 2006 + * + * Add support for position independent parameters + * fix fmtstr now it conforms to sprintf wrt min.max + * + **************************************************************/ + +#ifndef NO_CONFIG_H +/* 08/13/2007 EG changed path to config.h to match NRPE distro */ +#include "../include/config.h" +#else +#define NULL 0 +#endif + +#ifdef TEST_SNPRINTF /* need math library headers for testing */ + +/* In test mode, we pretend that this system doesn't have any snprintf + * functions, regardless of what config.h says. */ +# undef HAVE_SNPRINTF +# undef HAVE_VSNPRINTF +# undef HAVE_C99_VSNPRINTF +# undef HAVE_ASPRINTF +# undef HAVE_VASPRINTF +# include +#endif /* TEST_SNPRINTF */ + +#ifdef HAVE_STRING_H +#include +#endif + +#ifdef HAVE_STRINGS_H +#include +#endif +#ifdef HAVE_CTYPE_H +#include +#endif +#include +#include +#ifdef HAVE_STDLIB_H +#include +#endif + +#if defined(HAVE_SNPRINTF) && defined(HAVE_VSNPRINTF) && defined(HAVE_C99_VSNPRINTF) +/* only include stdio.h if we are not re-defining snprintf or vsnprintf */ +#include + /* make the compiler happy with an empty file */ + void dummy_snprintf(void); + void dummy_snprintf(void) {} +#endif /* HAVE_SNPRINTF, etc */ + +#ifdef HAVE_LONG_DOUBLE +#define LDOUBLE long double +#else +#define LDOUBLE double +#endif + +#ifdef HAVE_LONG_LONG +#define LLONG long long +#else +#define LLONG long +#endif + +#ifndef VA_COPY +#ifdef HAVE_VA_COPY +#define VA_COPY(dest, src) va_copy(dest, src) +#else +#ifdef HAVE___VA_COPY +#define VA_COPY(dest, src) __va_copy(dest, src) +#else +#define VA_COPY(dest, src) (dest) = (src) +#endif +#endif + +/* + * dopr(): poor man's version of doprintf + */ + +/* format read states */ +#define DP_S_DEFAULT 0 +#define DP_S_FLAGS 1 +#define DP_S_MIN 2 +#define DP_S_DOT 3 +#define DP_S_MAX 4 +#define DP_S_MOD 5 +#define DP_S_CONV 6 +#define DP_S_DONE 7 + +/* format flags - Bits */ +#define DP_F_MINUS (1 << 0) +#define DP_F_PLUS (1 << 1) +#define DP_F_SPACE (1 << 2) +#define DP_F_NUM (1 << 3) +#define DP_F_ZERO (1 << 4) +#define DP_F_UP (1 << 5) +#define DP_F_UNSIGNED (1 << 6) + +/* Conversion Flags */ +#define DP_C_CHAR 1 +#define DP_C_SHORT 2 +#define DP_C_LONG 3 +#define DP_C_LDOUBLE 4 +#define DP_C_LLONG 5 + +/* Chunk types */ +#define CNK_FMT_STR 0 +#define CNK_INT 1 +#define CNK_OCTAL 2 +#define CNK_UINT 3 +#define CNK_HEX 4 +#define CNK_FLOAT 5 +#define CNK_CHAR 6 +#define CNK_STRING 7 +#define CNK_PTR 8 +#define CNK_NUM 9 +#define CNK_PRCNT 10 + +#define char_to_int(p) ((p)- '0') +#ifndef MAX +#define MAX(p,q) (((p) >= (q)) ? (p) : (q)) +#endif + +/* yes this really must be a ||. Don't muck with this (tridge) */ +#if !defined(HAVE_VSNPRINTF) || !defined(HAVE_C99_VSNPRINTF) + +struct pr_chunk { + int type; /* chunk type */ + int num; /* parameter number */ + int min; + int max; + int flags; + int cflags; + int start; + int len; + LLONG value; + LDOUBLE fvalue; + char *strvalue; + void *pnum; + struct pr_chunk *min_star; + struct pr_chunk *max_star; + struct pr_chunk *next; +}; + +struct pr_chunk_x { + struct pr_chunk **chunks; + int num; +}; + +static size_t dopr(char *buffer, size_t maxlen, const char *format, + va_list args_in); +static void fmtstr(char *buffer, size_t *currlen, size_t maxlen, + char *value, int flags, int min, int max); +static void fmtint(char *buffer, size_t *currlen, size_t maxlen, + long value, int base, int min, int max, int flags); +static void fmtfp(char *buffer, size_t *currlen, size_t maxlen, + LDOUBLE fvalue, int min, int max, int flags); +static void dopr_outch(char *buffer, size_t *currlen, size_t maxlen, char c); +static struct pr_chunk *new_chunk(void); +static int add_cnk_list_entry(struct pr_chunk_x **list, + int max_num, struct pr_chunk *chunk); + +static size_t dopr(char *buffer, size_t maxlen, const char *format, va_list args_in) +{ + char ch; + int state; + int pflag; + int pnum; + int pfirst; + size_t currlen; + va_list args; + const char *base; + struct pr_chunk *chunks = NULL; + struct pr_chunk *cnk = NULL; + struct pr_chunk_x *clist = NULL; + int max_pos; + size_t ret = -1; + + VA_COPY(args, args_in); + + state = DP_S_DEFAULT; + pfirst = 1; + pflag = 0; + pnum = 0; + + max_pos = 0; + base = format; + ch = *format++; + + /* retrieve the string structure as chunks */ + while (state != DP_S_DONE) { + if (ch == '\0') + state = DP_S_DONE; + + switch(state) { + case DP_S_DEFAULT: + + if (cnk) { + cnk->next = new_chunk(); + cnk = cnk->next; + } else { + cnk = new_chunk(); + } + if (!cnk) goto done; + if (!chunks) chunks = cnk; + + if (ch == '%') { + state = DP_S_FLAGS; + ch = *format++; + } else { + cnk->type = CNK_FMT_STR; + cnk->start = format - base -1; + while ((ch != '\0') && (ch != '%')) ch = *format++; + cnk->len = format - base - cnk->start -1; + } + break; + case DP_S_FLAGS: + switch (ch) { + case '-': + cnk->flags |= DP_F_MINUS; + ch = *format++; + break; + case '+': + cnk->flags |= DP_F_PLUS; + ch = *format++; + break; + case ' ': + cnk->flags |= DP_F_SPACE; + ch = *format++; + break; + case '#': + cnk->flags |= DP_F_NUM; + ch = *format++; + break; + case '0': + cnk->flags |= DP_F_ZERO; + ch = *format++; + break; + case 'I': + /* internationalization not supported yet */ + ch = *format++; + break; + default: + state = DP_S_MIN; + break; + } + break; + case DP_S_MIN: + if (isdigit((unsigned char)ch)) { + cnk->min = 10 * cnk->min + char_to_int (ch); + ch = *format++; + } else if (ch == '$') { + if (!pfirst && !pflag) { + /* parameters must be all positioned or none */ + goto done; + } + if (pfirst) { + pfirst = 0; + pflag = 1; + } + if (cnk->min == 0) /* what ?? */ + goto done; + cnk->num = cnk->min; + cnk->min = 0; + ch = *format++; + } else if (ch == '*') { + if (pfirst) pfirst = 0; + cnk->min_star = new_chunk(); + if (!cnk->min_star) /* out of memory :-( */ + goto done; + cnk->min_star->type = CNK_INT; + if (pflag) { + int num; + ch = *format++; + if (!isdigit((unsigned char)ch)) { + /* parameters must be all positioned or none */ + goto done; + } + for (num = 0; isdigit((unsigned char)ch); ch = *format++) { + num = 10 * num + char_to_int(ch); + } + cnk->min_star->num = num; + if (ch != '$') /* what ?? */ + goto done; + } else { + cnk->min_star->num = ++pnum; + } + max_pos = add_cnk_list_entry(&clist, max_pos, cnk->min_star); + if (max_pos == 0) /* out of memory :-( */ + goto done; + ch = *format++; + state = DP_S_DOT; + } else { + if (pfirst) pfirst = 0; + state = DP_S_DOT; + } + break; + case DP_S_DOT: + if (ch == '.') { + state = DP_S_MAX; + ch = *format++; + } else { + state = DP_S_MOD; + } + break; + case DP_S_MAX: + if (isdigit((unsigned char)ch)) { + if (cnk->max < 0) + cnk->max = 0; + cnk->max = 10 * cnk->max + char_to_int (ch); + ch = *format++; + } else if (ch == '$') { + if (!pfirst && !pflag) { + /* parameters must be all positioned or none */ + goto done; + } + if (cnk->max <= 0) /* what ?? */ + goto done; + cnk->num = cnk->max; + cnk->max = -1; + ch = *format++; + } else if (ch == '*') { + cnk->max_star = new_chunk(); + if (!cnk->max_star) /* out of memory :-( */ + goto done; + cnk->max_star->type = CNK_INT; + if (pflag) { + int num; + ch = *format++; + if (!isdigit((unsigned char)ch)) { + /* parameters must be all positioned or none */ + goto done; + } + for (num = 0; isdigit((unsigned char)ch); ch = *format++) { + num = 10 * num + char_to_int(ch); + } + cnk->max_star->num = num; + if (ch != '$') /* what ?? */ + goto done; + } else { + cnk->max_star->num = ++pnum; + } + max_pos = add_cnk_list_entry(&clist, max_pos, cnk->max_star); + if (max_pos == 0) /* out of memory :-( */ + goto done; + + ch = *format++; + state = DP_S_MOD; + } else { + state = DP_S_MOD; + } + break; + case DP_S_MOD: + switch (ch) { + case 'h': + cnk->cflags = DP_C_SHORT; + ch = *format++; + if (ch == 'h') { + cnk->cflags = DP_C_CHAR; + ch = *format++; + } + break; + case 'l': + cnk->cflags = DP_C_LONG; + ch = *format++; + if (ch == 'l') { /* It's a long long */ + cnk->cflags = DP_C_LLONG; + ch = *format++; + } + break; + case 'L': + cnk->cflags = DP_C_LDOUBLE; + ch = *format++; + break; + default: + break; + } + state = DP_S_CONV; + break; + case DP_S_CONV: + if (cnk->num == 0) cnk->num = ++pnum; + max_pos = add_cnk_list_entry(&clist, max_pos, cnk); + if (max_pos == 0) /* out of memory :-( */ + goto done; + + switch (ch) { + case 'd': + case 'i': + cnk->type = CNK_INT; + break; + case 'o': + cnk->type = CNK_OCTAL; + cnk->flags |= DP_F_UNSIGNED; + break; + case 'u': + cnk->type = CNK_UINT; + cnk->flags |= DP_F_UNSIGNED; + break; + case 'X': + cnk->flags |= DP_F_UP; + case 'x': + cnk->type = CNK_HEX; + cnk->flags |= DP_F_UNSIGNED; + break; + case 'A': + /* hex float not supported yet */ + case 'E': + case 'G': + case 'F': + cnk->flags |= DP_F_UP; + case 'a': + /* hex float not supported yet */ + case 'e': + case 'f': + case 'g': + cnk->type = CNK_FLOAT; + break; + case 'c': + cnk->type = CNK_CHAR; + break; + case 's': + cnk->type = CNK_STRING; + break; + case 'p': + cnk->type = CNK_PTR; + break; + case 'n': + cnk->type = CNK_NUM; + break; + case '%': + cnk->type = CNK_PRCNT; + break; + default: + /* Unknown, bail out*/ + goto done; + } + ch = *format++; + state = DP_S_DEFAULT; + break; + case DP_S_DONE: + break; + default: + /* hmm? */ + break; /* some picky compilers need this */ + } + } + + /* retieve the format arguments */ + for (pnum = 0; pnum < max_pos; pnum++) { + int i; + + if (clist[pnum].num == 0) { + /* ignoring a parameter should not be permitted + * all parameters must be matched at least once + * BUT seem some system ignore this rule ... + * at least my glibc based system does --SSS + */ +#ifdef DEBUG_SNPRINTF + printf("parameter at position %d not used\n", pnum+1); +#endif + /* eat the parameter */ + va_arg (args, int); + continue; + } + for (i = 1; i < clist[pnum].num; i++) { + if (clist[pnum].chunks[0]->type != clist[pnum].chunks[i]->type) { + /* nooo noo no! + * all the references to a parameter + * must be of the same type + */ + goto done; + } + } + cnk = clist[pnum].chunks[0]; + switch (cnk->type) { + case CNK_INT: + if (cnk->cflags == DP_C_SHORT) + cnk->value = va_arg (args, int); + else if (cnk->cflags == DP_C_LONG) + cnk->value = va_arg (args, long int); + else if (cnk->cflags == DP_C_LLONG) + cnk->value = va_arg (args, LLONG); + else + cnk->value = va_arg (args, int); + + for (i = 1; i < clist[pnum].num; i++) { + clist[pnum].chunks[i]->value = cnk->value; + } + break; + + case CNK_OCTAL: + case CNK_UINT: + case CNK_HEX: + if (cnk->cflags == DP_C_SHORT) + cnk->value = va_arg (args, unsigned int); + else if (cnk->cflags == DP_C_LONG) + cnk->value = (long)va_arg (args, unsigned long int); + else if (cnk->cflags == DP_C_LLONG) + cnk->value = (LLONG)va_arg (args, unsigned LLONG); + else + cnk->value = (long)va_arg (args, unsigned int); + + for (i = 1; i < clist[pnum].num; i++) { + clist[pnum].chunks[i]->value = cnk->value; + } + break; + + case CNK_FLOAT: + if (cnk->cflags == DP_C_LDOUBLE) + cnk->fvalue = va_arg (args, LDOUBLE); + else + cnk->fvalue = va_arg (args, double); + + for (i = 1; i < clist[pnum].num; i++) { + clist[pnum].chunks[i]->fvalue = cnk->fvalue; + } + break; + + case CNK_CHAR: + cnk->value = va_arg (args, int); + + for (i = 1; i < clist[pnum].num; i++) { + clist[pnum].chunks[i]->value = cnk->value; + } + break; + + case CNK_STRING: + cnk->strvalue = va_arg (args, char *); + if (!cnk->strvalue) cnk->strvalue = "(NULL)"; + + for (i = 1; i < clist[pnum].num; i++) { + clist[pnum].chunks[i]->strvalue = cnk->strvalue; + } + break; + + case CNK_PTR: + cnk->strvalue = va_arg (args, void *); + for (i = 1; i < clist[pnum].num; i++) { + clist[pnum].chunks[i]->strvalue = cnk->strvalue; + } + break; + + case CNK_NUM: + if (cnk->cflags == DP_C_CHAR) + cnk->pnum = va_arg (args, char *); + else if (cnk->cflags == DP_C_SHORT) + cnk->pnum = va_arg (args, short int *); + else if (cnk->cflags == DP_C_LONG) + cnk->pnum = va_arg (args, long int *); + else if (cnk->cflags == DP_C_LLONG) + cnk->pnum = va_arg (args, LLONG *); + else + cnk->pnum = va_arg (args, int *); + + for (i = 1; i < clist[pnum].num; i++) { + clist[pnum].chunks[i]->pnum = cnk->pnum; + } + break; + + case CNK_PRCNT: + break; + + default: + /* what ?? */ + goto done; + } + } + /* print out the actual string from chunks */ + currlen = 0; + cnk = chunks; + while (cnk) { + int len, min, max; + + if (cnk->min_star) min = cnk->min_star->value; + else min = cnk->min; + if (cnk->max_star) max = cnk->max_star->value; + else max = cnk->max; + + switch (cnk->type) { + + case CNK_FMT_STR: + if (maxlen != 0 && maxlen > currlen) { + if (maxlen > (currlen + cnk->len)) len = cnk->len; + else len = maxlen - currlen; + + memcpy(&(buffer[currlen]), &(base[cnk->start]), len); + } + currlen += cnk->len; + + break; + + case CNK_INT: + case CNK_UINT: + fmtint (buffer, &currlen, maxlen, cnk->value, 10, min, max, cnk->flags); + break; + + case CNK_OCTAL: + fmtint (buffer, &currlen, maxlen, cnk->value, 8, min, max, cnk->flags); + break; + + case CNK_HEX: + fmtint (buffer, &currlen, maxlen, cnk->value, 16, min, max, cnk->flags); + break; + + case CNK_FLOAT: + fmtfp (buffer, &currlen, maxlen, cnk->fvalue, min, max, cnk->flags); + break; + + case CNK_CHAR: + dopr_outch (buffer, &currlen, maxlen, cnk->value); + break; + + case CNK_STRING: + if (max == -1) { + max = strlen(cnk->strvalue); + } + fmtstr (buffer, &currlen, maxlen, cnk->strvalue, cnk->flags, min, max); + break; + + case CNK_PTR: + fmtint (buffer, &currlen, maxlen, (long)(cnk->strvalue), 16, min, max, cnk->flags); + break; + + case CNK_NUM: + if (cnk->cflags == DP_C_CHAR) + *((char *)(cnk->pnum)) = (char)currlen; + else if (cnk->cflags == DP_C_SHORT) + *((short int *)(cnk->pnum)) = (short int)currlen; + else if (cnk->cflags == DP_C_LONG) + *((long int *)(cnk->pnum)) = (long int)currlen; + else if (cnk->cflags == DP_C_LLONG) + *((LLONG *)(cnk->pnum)) = (LLONG)currlen; + else + *((int *)(cnk->pnum)) = (int)currlen; + break; + + case CNK_PRCNT: + dopr_outch (buffer, &currlen, maxlen, '%'); + break; + + default: + /* what ?? */ + goto done; + } + cnk = cnk->next; + } + if (maxlen != 0) { + if (currlen < maxlen - 1) + buffer[currlen] = '\0'; + else if (maxlen > 0) + buffer[maxlen - 1] = '\0'; + } + ret = currlen; + +done: + while (chunks) { + cnk = chunks->next; + free(chunks); + chunks = cnk; + } + if (clist) { + for (pnum = 0; pnum < max_pos; pnum++) { + if (clist[pnum].chunks) free(clist[pnum].chunks); + } + free(clist); + } + return ret; +} + +static void fmtstr(char *buffer, size_t *currlen, size_t maxlen, + char *value, int flags, int min, int max) +{ + int padlen, strln; /* amount to pad */ + int cnt = 0; + +#ifdef DEBUG_SNPRINTF + printf("fmtstr min=%d max=%d s=[%s]\n", min, max, value); +#endif + if (value == 0) { + value = ""; + } + + for (strln = 0; strln < max && value[strln]; ++strln); /* strlen */ + padlen = min - strln; + if (padlen < 0) + padlen = 0; + if (flags & DP_F_MINUS) + padlen = -padlen; /* Left Justify */ + + while (padlen > 0) { + dopr_outch (buffer, currlen, maxlen, ' '); + --padlen; + } + while (*value && (cnt < max)) { + dopr_outch (buffer, currlen, maxlen, *value++); + ++cnt; + } + while (padlen < 0) { + dopr_outch (buffer, currlen, maxlen, ' '); + ++padlen; + } +} + +/* Have to handle DP_F_NUM (ie 0x and 0 alternates) */ + +static void fmtint(char *buffer, size_t *currlen, size_t maxlen, + long value, int base, int min, int max, int flags) +{ + int signvalue = 0; + unsigned long uvalue; + char convert[20]; + int place = 0; + int spadlen = 0; /* amount to space pad */ + int zpadlen = 0; /* amount to zero pad */ + int caps = 0; + + if (max < 0) + max = 0; + + uvalue = value; + + if(!(flags & DP_F_UNSIGNED)) { + if( value < 0 ) { + signvalue = '-'; + uvalue = -value; + } else { + if (flags & DP_F_PLUS) /* Do a sign (+/i) */ + signvalue = '+'; + else if (flags & DP_F_SPACE) + signvalue = ' '; + } + } + + if (flags & DP_F_UP) caps = 1; /* Should characters be upper case? */ + + do { + convert[place++] = + (caps? "0123456789ABCDEF":"0123456789abcdef") + [uvalue % (unsigned)base ]; + uvalue = (uvalue / (unsigned)base ); + } while(uvalue && (place < 20)); + if (place == 20) place--; + convert[place] = 0; + + zpadlen = max - place; + spadlen = min - MAX (max, place) - (signvalue ? 1 : 0); + if (zpadlen < 0) zpadlen = 0; + if (spadlen < 0) spadlen = 0; + if (flags & DP_F_ZERO) { + zpadlen = MAX(zpadlen, spadlen); + spadlen = 0; + } + if (flags & DP_F_MINUS) + spadlen = -spadlen; /* Left Justifty */ + +#ifdef DEBUG_SNPRINTF + printf("zpad: %d, spad: %d, min: %d, max: %d, place: %d\n", + zpadlen, spadlen, min, max, place); +#endif + + /* Spaces */ + while (spadlen > 0) { + dopr_outch (buffer, currlen, maxlen, ' '); + --spadlen; + } + + /* Sign */ + if (signvalue) + dopr_outch (buffer, currlen, maxlen, signvalue); + + /* Zeros */ + if (zpadlen > 0) { + while (zpadlen > 0) { + dopr_outch (buffer, currlen, maxlen, '0'); + --zpadlen; + } + } + + /* Digits */ + while (place > 0) + dopr_outch (buffer, currlen, maxlen, convert[--place]); + + /* Left Justified spaces */ + while (spadlen < 0) { + dopr_outch (buffer, currlen, maxlen, ' '); + ++spadlen; + } +} + +static LDOUBLE abs_val(LDOUBLE value) +{ + LDOUBLE result = value; + + if (value < 0) + result = -value; + + return result; +} + +static LDOUBLE POW10(int exp) +{ + LDOUBLE result = 1; + + while (exp) { + result *= 10; + exp--; + } + + return result; +} + +static LLONG ROUND(LDOUBLE value) +{ + LLONG intpart; + + intpart = (LLONG)value; + value = value - intpart; + if (value >= 0.5) intpart++; + + return intpart; +} + +/* a replacement for modf that doesn't need the math library. Should + be portable, but slow */ +static double my_modf(double x0, double *iptr) +{ + int i; + long l; + double x = x0; + double f = 1.0; + + for (i=0;i<100;i++) { + l = (long)x; + if (l <= (x+1) && l >= (x-1)) break; + x *= 0.1; + f *= 10.0; + } + + if (i == 100) { + /* yikes! the number is beyond what we can handle. What do we do? */ + (*iptr) = 0; + return 0; + } + + if (i != 0) { + double i2; + double ret; + + ret = my_modf(x0-l*f, &i2); + (*iptr) = l*f + i2; + return ret; + } + + (*iptr) = l; + return x - (*iptr); +} + + +static void fmtfp (char *buffer, size_t *currlen, size_t maxlen, + LDOUBLE fvalue, int min, int max, int flags) +{ + int signvalue = 0; + double ufvalue; + char iconvert[311]; + char fconvert[311]; + int iplace = 0; + int fplace = 0; + int padlen = 0; /* amount to pad */ + int zpadlen = 0; + int caps = 0; + int idx; + double intpart; + double fracpart; + double temp; + + /* + * AIX manpage says the default is 0, but Solaris says the default + * is 6, and sprintf on AIX defaults to 6 + */ + if (max < 0) + max = 6; + + ufvalue = abs_val (fvalue); + + if (fvalue < 0) { + signvalue = '-'; + } else { + if (flags & DP_F_PLUS) { /* Do a sign (+/i) */ + signvalue = '+'; + } else { + if (flags & DP_F_SPACE) + signvalue = ' '; + } + } + +#if 0 + if (flags & DP_F_UP) caps = 1; /* Should characters be upper case? */ +#endif + +#if 0 + if (max == 0) ufvalue += 0.5; /* if max = 0 we must round */ +#endif + + /* + * Sorry, we only support 9 digits past the decimal because of our + * conversion method + */ + if (max > 9) + max = 9; + + /* We "cheat" by converting the fractional part to integer by + * multiplying by a factor of 10 + */ + + temp = ufvalue; + my_modf(temp, &intpart); + + fracpart = ROUND((POW10(max)) * (ufvalue - intpart)); + + if (fracpart >= POW10(max)) { + intpart++; + fracpart -= POW10(max); + } + + + /* Convert integer part */ + do { + temp = intpart*0.1; + my_modf(temp, &intpart); + idx = (int) ((temp -intpart +0.05)* 10.0); + /* idx = (int) (((double)(temp*0.1) -intpart +0.05) *10.0); */ + /* printf ("%llf, %f, %x\n", temp, intpart, idx); */ + iconvert[iplace++] = + (caps? "0123456789ABCDEF":"0123456789abcdef")[idx]; + } while (intpart && (iplace < 311)); + if (iplace == 311) iplace--; + iconvert[iplace] = 0; + + /* Convert fractional part */ + if (fracpart) + { + do { + temp = fracpart*0.1; + my_modf(temp, &fracpart); + idx = (int) ((temp -fracpart +0.05)* 10.0); + /* idx = (int) ((((temp/10) -fracpart) +0.05) *10); */ + /* printf ("%lf, %lf, %ld\n", temp, fracpart, idx ); */ + fconvert[fplace++] = + (caps? "0123456789ABCDEF":"0123456789abcdef")[idx]; + } while(fracpart && (fplace < 311)); + if (fplace == 311) fplace--; + } + fconvert[fplace] = 0; + + /* -1 for decimal point, another -1 if we are printing a sign */ + padlen = min - iplace - max - 1 - ((signvalue) ? 1 : 0); + zpadlen = max - fplace; + if (zpadlen < 0) zpadlen = 0; + if (padlen < 0) + padlen = 0; + if (flags & DP_F_MINUS) + padlen = -padlen; /* Left Justifty */ + + if ((flags & DP_F_ZERO) && (padlen > 0)) { + if (signvalue) { + dopr_outch (buffer, currlen, maxlen, signvalue); + --padlen; + signvalue = 0; + } + while (padlen > 0) { + dopr_outch (buffer, currlen, maxlen, '0'); + --padlen; + } + } + while (padlen > 0) { + dopr_outch (buffer, currlen, maxlen, ' '); + --padlen; + } + if (signvalue) + dopr_outch (buffer, currlen, maxlen, signvalue); + + while (iplace > 0) + dopr_outch (buffer, currlen, maxlen, iconvert[--iplace]); + +#ifdef DEBUG_SNPRINTF + printf("fmtfp: fplace=%d zpadlen=%d\n", fplace, zpadlen); +#endif + + /* + * Decimal point. This should probably use locale to find the correct + * char to print out. + */ + if (max > 0) { + dopr_outch (buffer, currlen, maxlen, '.'); + + while (zpadlen > 0) { + dopr_outch (buffer, currlen, maxlen, '0'); + --zpadlen; + } + + while (fplace > 0) + dopr_outch (buffer, currlen, maxlen, fconvert[--fplace]); + } + + while (padlen < 0) { + dopr_outch (buffer, currlen, maxlen, ' '); + ++padlen; + } +} + +static void dopr_outch(char *buffer, size_t *currlen, size_t maxlen, char c) +{ + if (*currlen < maxlen) { + buffer[(*currlen)] = c; + } + (*currlen)++; +} + +static struct pr_chunk *new_chunk(void) { + struct pr_chunk *new_c = (struct pr_chunk *)malloc(sizeof(struct pr_chunk)); + + if ( !new_c ) + return NULL; + + new_c->type = 0; + new_c->num = 0; + new_c->min = 0; + new_c->min_star = NULL; + new_c->max = -1; + new_c->max_star = NULL; + new_c->flags = 0; + new_c->cflags = 0; + new_c->start = 0; + new_c->len = 0; + new_c->value = 0; + new_c->fvalue = 0; + new_c->strvalue = NULL; + new_c->pnum = NULL; + new_c->next = NULL; + + return new_c; +} + +static int add_cnk_list_entry(struct pr_chunk_x **list, + int max_num, struct pr_chunk *chunk) { + struct pr_chunk_x *l; + struct pr_chunk **c; + int max; + int cnum; + int i, pos; + + if (chunk->num > max_num) { + max = chunk->num; + + if (*list == NULL) { + l = (struct pr_chunk_x *)malloc(sizeof(struct pr_chunk_x) * max); + pos = 0; + } else { + l = (struct pr_chunk_x *)realloc(*list, sizeof(struct pr_chunk_x) * max); + pos = max_num; + } + if (l == NULL) { + for (i = 0; i < max; i++) { + if ((*list)[i].chunks) free((*list)[i].chunks); + } + return 0; + } + for (i = pos; i < max; i++) { + l[i].chunks = NULL; + l[i].num = 0; + } + } else { + l = *list; + max = max_num; + } + + i = chunk->num - 1; + cnum = l[i].num + 1; + if (l[i].chunks == NULL) { + c = (struct pr_chunk **)malloc(sizeof(struct pr_chunk *) * cnum); + } else { + c = (struct pr_chunk **)realloc(l[i].chunks, sizeof(struct pr_chunk *) * cnum); + } + if (c == NULL) { + for (i = 0; i < max; i++) { + if (l[i].chunks) free(l[i].chunks); + } + return 0; + } + c[l[i].num] = chunk; + l[i].chunks = c; + l[i].num = cnum; + + *list = l; + return max; +} + + int smb_vsnprintf (char *str, size_t count, const char *fmt, va_list args) +{ + return dopr(str, count, fmt, args); +} +#define vsnprintf smb_vsnprintf +#endif + +/* yes this really must be a ||. Don't muck with this (tridge) + * + * The logic for these two is that we need our own definition if the + * OS *either* has no definition of *sprintf, or if it does have one + * that doesn't work properly according to the autoconf test. + */ +#if !defined(HAVE_SNPRINTF) || !defined(HAVE_C99_VSNPRINTF) +int smb_snprintf(char *str,size_t count,const char *fmt,...) +{ + size_t ret; + va_list ap; + + va_start(ap, fmt); + ret = vsnprintf(str, count, fmt, ap); + va_end(ap); + return ret; +} +#define snprintf smb_snprintf +#endif + +#endif + +#ifndef HAVE_VASPRINTF + int vasprintf(char **ptr, const char *format, va_list ap) +{ + int ret; + va_list ap2; + + VA_COPY(ap2, ap); + + ret = vsnprintf(NULL, 0, format, ap2); + if (ret <= 0) return ret; + + (*ptr) = (char *)malloc(ret+1); + if (!*ptr) return -1; + + VA_COPY(ap2, ap); + + ret = vsnprintf(*ptr, ret+1, format, ap2); + + return ret; +} +#endif + + +#ifndef HAVE_ASPRINTF + int asprintf(char **ptr, const char *format, ...) +{ + va_list ap; + int ret; + + *ptr = NULL; + va_start(ap, format); + ret = vasprintf(ptr, format, ap); + va_end(ap); + + return ret; +} +#endif + +#ifdef TEST_SNPRINTF + + int sprintf(char *str,const char *fmt,...); + + int main (void) +{ + char buf1[1024]; + char buf2[1024]; + char *buf3; + char *fp_fmt[] = { + "%1.1f", + "%-1.5f", + "%1.5f", + "%123.9f", + "%10.5f", + "% 10.5f", + "%+22.9f", + "%+4.9f", + "%01.3f", + "%4f", + "%3.1f", + "%3.2f", + "%.0f", + "%f", + "%-8.8f", + "%-9.9f", + NULL + }; + double fp_nums[] = { 6442452944.1234, -1.5, 134.21, 91340.2, 341.1234, 203.9, 0.96, 0.996, + 0.9996, 1.996, 4.136, 5.030201, 0.00205, + /* END LIST */ 0}; + char *int_fmt[] = { + "%-1.5d", + "%1.5d", + "%123.9d", + "%5.5d", + "%10.5d", + "% 10.5d", + "%+22.33d", + "%01.3d", + "%4d", + "%d", + NULL + }; + long int_nums[] = { -1, 134, 91340, 341, 0203, 0, 1234567890}; + char *str_fmt[] = { + "%10.5s", + "%-10.5s", + "%5.10s", + "%-5.10s", + "%10.1s", + "%0.10s", + "%10.0s", + "%1.10s", + "%s", + "%.1s", + "%.10s", + "%10s", + NULL + }; + char *str_vals[] = {"hello", "a", "", "a longer string", NULL}; + int x, y; + int fail = 0; + int num = 0; + int l1, l2; + + printf ("Testing snprintf format codes against system sprintf...\n"); + + for (x = 0; fp_fmt[x] ; x++) { + for (y = 0; fp_nums[y] != 0 ; y++) { + buf1[0] = buf2[0] = '\0'; + l1 = snprintf(NULL, 0, fp_fmt[x], fp_nums[y]); + l2 = snprintf(buf1, sizeof(buf1), fp_fmt[x], fp_nums[y]); + sprintf (buf2, fp_fmt[x], fp_nums[y]); + buf1[1023] = buf1[1023] = '\0'; + if (strcmp (buf1, buf2) || (l1 != l2)) { + printf("snprintf doesn't match Format: %s\n\tsnprintf(%d) = [%s]\n\t sprintf(%d) = [%s]\n", + fp_fmt[x], l1, buf1, l2, buf2); + fail++; + } + num++; + } + } + + for (x = 0; int_fmt[x] ; x++) { + for (y = 0; int_nums[y] != 0 ; y++) { + buf1[0] = buf2[0] = '\0'; + l1 = snprintf(NULL, 0, int_fmt[x], int_nums[y]); + l2 = snprintf(buf1, sizeof(buf1), int_fmt[x], int_nums[y]); + sprintf (buf2, int_fmt[x], int_nums[y]); + buf1[1023] = buf1[1023] = '\0'; + if (strcmp (buf1, buf2) || (l1 != l2)) { + printf("snprintf doesn't match Format: %s\n\tsnprintf(%d) = [%s]\n\t sprintf(%d) = [%s]\n", + int_fmt[x], l1, buf1, l2, buf2); + fail++; + } + num++; + } + } + + for (x = 0; str_fmt[x] ; x++) { + for (y = 0; str_vals[y] != 0 ; y++) { + buf1[0] = buf2[0] = '\0'; + l1 = snprintf(NULL, 0, str_fmt[x], str_vals[y]); + l2 = snprintf(buf1, sizeof(buf1), str_fmt[x], str_vals[y]); + sprintf (buf2, str_fmt[x], str_vals[y]); + buf1[1023] = buf1[1023] = '\0'; + if (strcmp (buf1, buf2) || (l1 != l2)) { + printf("snprintf doesn't match Format: %s\n\tsnprintf(%d) = [%s]\n\t sprintf(%d) = [%s]\n", + str_fmt[x], l1, buf1, l2, buf2); + fail++; + } + num++; + } + } + +#define BUFSZ 2048 + + buf1[0] = buf2[0] = '\0'; + if ((buf3 = malloc(BUFSZ)) == NULL) { + fail++; + } else { + num++; + memset(buf3, 'a', BUFSZ); + snprintf(buf1, sizeof(buf1), "%.*s", 1, buf3); + buf1[1023] = '\0'; + if (strcmp(buf1, "a") != 0) { + printf("length limit buf1 '%s' expected 'a'\n", buf1); + fail++; + } + } + + buf1[0] = buf2[0] = '\0'; + l1 = snprintf(buf1, sizeof(buf1), "%4$*1$d %2$s %3$*1$.*1$f", 3, "pos test", 12.3456, 9); + l2 = sprintf(buf2, "%4$*1$d %2$s %3$*1$.*1$f", 3, "pos test", 12.3456, 9); + buf1[1023] = buf1[1023] = '\0'; + if (strcmp(buf1, buf2) || (l1 != l2)) { + printf("snprintf doesn't match Format: %s\n\tsnprintf(%d) = [%s]\n\t sprintf(%d) = [%s]\n", + "%4$*1$d %2$s %3$*1$.*1$f", l1, buf1, l2, buf2); + fail++; + } + + buf1[0] = buf2[0] = '\0'; + l1 = snprintf(buf1, sizeof(buf1), "%4$*4$d %2$s %3$*4$.*4$f", 3, "pos test", 12.3456, 9); + l2 = sprintf(buf2, "%4$*4$d %2$s %3$*4$.*4$f", 3, "pos test", 12.3456, 9); + buf1[1023] = buf1[1023] = '\0'; + if (strcmp(buf1, buf2)) { + printf("snprintf doesn't match Format: %s\n\tsnprintf(%d) = [%s]\n\t sprintf(%d) = [%s]\n", + "%4$*1$d %2$s %3$*1$.*1$f", l1, buf1, l2, buf2); + fail++; + } +#if 0 + buf1[0] = buf2[0] = '\0'; + l1 = snprintf(buf1, sizeof(buf1), "%lld", (LLONG)1234567890); + l2 = sprintf(buf2, "%lld", (LLONG)1234567890); + buf1[1023] = buf1[1023] = '\0'; + if (strcmp(buf1, buf2)) { + printf("snprintf doesn't match Format: %s\n\tsnprintf(%d) = [%s]\n\t sprintf(%d) = [%s]\n", + "%lld", l1, buf1, l2, buf2); + fail++; + } + + buf1[0] = buf2[0] = '\0'; + l1 = snprintf(buf1, sizeof(buf1), "%Lf", (LDOUBLE)890.1234567890123); + l2 = sprintf(buf2, "%Lf", (LDOUBLE)890.1234567890123); + buf1[1023] = buf1[1023] = '\0'; + if (strcmp(buf1, buf2)) { + printf("snprintf doesn't match Format: %s\n\tsnprintf(%d) = [%s]\n\t sprintf(%d) = [%s]\n", + "%Lf", l1, buf1, l2, buf2); + fail++; + } +#endif + printf ("%d tests failed out of %d.\n", fail, num); + + printf("seeing how many digits we support\n"); + { + double v0 = 0.12345678901234567890123456789012345678901; + for (x=0; x<100; x++) { + double p = pow(10, x); + double r = v0*p; + snprintf(buf1, sizeof(buf1), "%1.1f", r); + sprintf(buf2, "%1.1f", r); + if (strcmp(buf1, buf2)) { + printf("we seem to support %d digits\n", x-1); + break; + } + } + } + + return 0; +} +#endif /* TEST_SNPRINTF */ diff --git a/src/utils.c b/src/utils.c new file mode 100644 index 0000000..fee42ec --- /dev/null +++ b/src/utils.c @@ -0,0 +1,390 @@ +/**************************************************************************** + * + * UTILS.C - NRPE Utility Functions + * + * License: GPL + * Copyright (c) 1999-2006 Ethan Galstad (nagios@nagios.org) + * + * Last Modified: 12-11-2006 + * + * Description: + * + * This file contains common network functions used in nrpe and check_nrpe. + * + * 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, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + * + ****************************************************************************/ + +#include "../include/common.h" +#include "../include/utils.h" + +#ifndef NI_MAXSERV +#define NI_MAXSERV 32 +#endif + +#ifndef NI_MAXHOST +#define NI_MAXHOST 1025 +#endif + +static unsigned long crc32_table[256]; + + + +/* build the crc table - must be called before calculating the crc value */ +void generate_crc32_table(void){ + unsigned long crc, poly; + int i, j; + + poly=0xEDB88320L; + for(i=0;i<256;i++){ + crc=i; + for(j=8;j>0;j--){ + if(crc & 1) + crc=(crc>>1)^poly; + else + crc>>=1; + } + crc32_table[i]=crc; + } + + return; + } + + +/* calculates the CRC 32 value for a buffer */ +unsigned long calculate_crc32(char *buffer, int buffer_size){ + register unsigned long crc; + int this_char; + int current_index; + + crc=0xFFFFFFFF; + + for(current_index=0;current_index>8) & 0x00FFFFFF) ^ crc32_table[(crc ^ this_char) & 0xFF]; + } + + return (crc ^ 0xFFFFFFFF); + } + + +/* fill a buffer with semi-random data */ +void randomize_buffer(char *buffer,int buffer_size){ + FILE *fp; + int x; + int seed; + + /**** FILL BUFFER WITH RANDOM ALPHA-NUMERIC CHARACTERS ****/ + + /*************************************************************** + Only use alpha-numeric characters becase plugins usually + only generate numbers and letters in their output. We + want the buffer to contain the same set of characters as + plugins, so its harder to distinguish where the real output + ends and the rest of the buffer (padded randomly) starts. + ***************************************************************/ + + /* try to get seed value from /dev/urandom, as its a better source of entropy */ + fp=fopen("/dev/urandom","r"); + if(fp!=NULL){ + seed=fgetc(fp); + fclose(fp); + } + + /* else fallback to using the current time as the seed */ + else + seed=(int)time(NULL); + + srand(seed); + for(x=0;xai_next) { + if (ai->ai_family != AF_INET && ai->ai_family != AF_INET6) continue; + if (getnameinfo(ai->ai_addr, ai->ai_addrlen, ntop, sizeof(ntop), + strport, sizeof(strport), NI_NUMERICHOST|NI_NUMERICSERV) != 0) { + fprintf(stderr, "my_connect: getnameinfo failed\n"); + continue; + } + + /* Create a socket for connecting. */ + sock = my_create_socket(ai, bind_address); + if (sock < 0) { + /* Any error is already output */ + continue; + } + + if (connect(sock, ai->ai_addr, ai->ai_addrlen) >= 0) { + /* Successful connection. */ + memcpy(hostaddr, ai->ai_addr, ai->ai_addrlen); + break; + } + else { + fprintf(stderr,"connect to address %s port %s: %s\n", ntop, strport, + strerror(errno)); + close(sock); + sock = -1; + } + } + + freeaddrinfo(aitop); + + /* Return failure if we didn't get a successful connection. */ + if (sock == -1) { + fprintf(stderr, "connect to host %s port %s: %s", host, strport, + strerror(errno)); + return -1; + } + return sock; + } + +/* Creates a socket for the connection. */ +int my_create_socket(struct addrinfo *ai, const char *bind_address) { + int sock, gaierr; + struct addrinfo hints, *res; + + sock = socket(ai->ai_family, ai->ai_socktype, ai->ai_protocol); + if (sock < 0) fprintf(stderr,"socket: %.100s\n", strerror(errno)); + + /* Bind the socket to an alternative local IP address */ + if (bind_address == NULL) return sock; + + memset(&hints, 0, sizeof(hints)); + hints.ai_family = ai->ai_family; + hints.ai_socktype = ai->ai_socktype; + hints.ai_protocol = ai->ai_protocol; + hints.ai_flags = AI_PASSIVE; + gaierr = getaddrinfo(bind_address, NULL, &hints, &res); + if(gaierr) { + fprintf(stderr, "getaddrinfo: %s: %s\n", bind_address, + gai_strerror(gaierr)); + close(sock); + return -1; + } + if(bind(sock, res->ai_addr, res->ai_addrlen) < 0) { + fprintf(stderr, "bind: %s: %s\n", bind_address, strerror(errno)); + close(sock); + freeaddrinfo(res); + return -1; + } + freeaddrinfo(res); + return sock; +} + +void add_listen_addr(struct addrinfo **listen_addrs, int address_family, + char *addr, int port) { + struct addrinfo hints, *ai, *aitop; + char strport[NI_MAXSERV]; + int gaierr; + + memset(&hints, 0, sizeof(hints)); + hints.ai_family = address_family; + hints.ai_socktype = SOCK_STREAM; + hints.ai_flags = (addr == NULL) ? AI_PASSIVE : 0; + snprintf(strport, sizeof strport, "%d", port); + if((gaierr = getaddrinfo(addr, strport, &hints, &aitop)) != 0) { + syslog(LOG_ERR,"bad addr or host: %s (%s)\n", addr ? addr : "", + gai_strerror(gaierr)); + exit(1); + } + for(ai = aitop; ai->ai_next; ai = ai->ai_next); + ai->ai_next = *listen_addrs; + *listen_addrs = aitop; + } + +void strip(char *buffer){ + int x; + int index; + + for(x=strlen(buffer);x>=1;x--){ + index=x-1; + if(buffer[index]==' ' || buffer[index]=='\r' || buffer[index]=='\n' || buffer[index]=='\t') + buffer[index]='\x0'; + else + break; + } + + return; + } + + +/* sends all data - thanks to Beej's Guide to Network Programming */ +int sendall(int s, char *buf, int *len){ + int total=0; + int bytesleft=*len; + int n=0; + + /* send all the data */ + while(total<*len){ + + /* send some data */ + n=send(s,buf+total,bytesleft,0); + + /* break on error */ + if(n==-1) + break; + + /* apply bytes we sent */ + total+=n; + bytesleft-=n; + } + + /* return number of bytes actually send here */ + *len=total; + + /* return -1 on failure, 0 on success */ + return n==-1?-1:0; + } + + +/* receives all data - modelled after sendall() */ +int recvall(int s, char *buf, int *len, int timeout){ + int total=0; + int bytesleft=*len; + int n=0; + time_t start_time; + time_t current_time; + + /* clear the receive buffer */ + bzero(buf,*len); + + time(&start_time); + + /* receive all data */ + while(total<*len){ + + /* receive some data */ + n=recv(s,buf+total,bytesleft,0); + + /* no data has arrived yet (non-blocking socket) */ + if(n==-1 && errno==EAGAIN){ + time(¤t_time); + if(current_time-start_time>timeout) + break; + sleep(1); + continue; + } + + /* receive error or client disconnect */ + else if(n<=0) + break; + + /* apply bytes we received */ + total+=n; + bytesleft-=n; + } + + /* return number of bytes actually received here */ + *len=total; + + /* return <=0 on failure, bytes received on success */ + return (n<=0)?n:total; + } + + +/* fixes compiler problems under Solaris, since strsep() isn't included */ +/* this code is taken from the glibc source */ +char *my_strsep (char **stringp, const char *delim){ + char *begin, *end; + + begin = *stringp; + if (begin == NULL) + return NULL; + + /* A frequent case is when the delimiter string contains only one + character. Here we don't need to call the expensive `strpbrk' + function and instead work using `strchr'. */ + if(delim[0]=='\0' || delim[1]=='\0'){ + char ch = delim[0]; + + if(ch=='\0') + end=NULL; + else{ + if(*begin==ch) + end=begin; + else + end=strchr(begin+1,ch); + } + } + + else + /* Find the end of the token. */ + end = strpbrk (begin, delim); + + if(end){ + + /* Terminate the token and set *STRINGP past NUL character. */ + *end++='\0'; + *stringp=end; + } + else + /* No more delimiters; this is the last token. */ + *stringp=NULL; + + return begin; + } + + +/* show license */ +void display_license(void){ + + printf("This program is released under the GPL (see below) with the additional\n"); + printf("exemption that compiling, linking, and/or using OpenSSL is allowed.\n\n"); + + printf("This program is free software; you can redistribute it and/or modify\n"); + printf("it under the terms of the GNU General Public License as published by\n"); + printf("the Free Software Foundation; either version 2 of the License, or\n"); + printf("(at your option) any later version.\n\n"); + printf("This program is distributed in the hope that it will be useful,\n"); + printf("but WITHOUT ANY WARRANTY; without even the implied warranty of\n"); + printf("MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n"); + printf("GNU General Public License for more details.\n\n"); + printf("You should have received a copy of the GNU General Public License\n"); + printf("along with this program; if not, write to the Free Software\n"); + printf("Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.\n\n"); + + return; + } + + + diff --git a/subst.in b/subst.in new file mode 100755 index 0000000..ad7417a --- /dev/null +++ b/subst.in @@ -0,0 +1,61 @@ +#!/usr/bin/perl -w + +# This script finishes the job started by config.status by replacing the variables +# of the form ${...} which were inserted into the file(s) by config.status. + +# Read all files with a single read statement +$/ = undef; + +# List of variables to replace +my %configvars = ( + "prefix" => { "value" => '@prefix@'}, + "exec_prefix" => { "value" => '@exec_prefix@'}, +); + +sub replace_var { + my $filep = shift; + my $cvp = shift; + my $varname = shift; + + return if( $cvp->{ $varname}->{ "replaced"}); + if( defined( $cvp->{ $varname}->{ "dependency"})) { + if( !$cvp->{ $cvp->{ $varname}->{ "dependency"}}->{ "replaced"}) { + # If a dependency exists and it is not already replaced, replace it + replace_var( $filep, $cvp, $cvp->{ $varname}->{ "dependency"}); + } + } + my $replacement = $cvp->{ $varname}->{ "value"}; + $$filep =~ s/\${$varname}/$replacement/g; + $cvp->{ $varname}->{ "replaced"} = 1; +} + +# Figure out the dependencies. +foreach my $cv ( keys %configvars ) { + if( $configvars{ $cv}->{ "value"} =~ /\${([^}]+)}/) { + my $dependency = $1; + if( exists( $configvars{ $dependency})) { + $configvars{ $dependency}->{ "dependency"} = $cv; + } + $configvars{ $cv}->{ "replaced"} = 0; + } +} + +# Process each file +while ($f = shift @ARGV) { + + # Read in the file + open( FILE, $f) || die "Unable to open $f for reading"; + my $file = ; + close( FILE) || die "Unable to close $f after reading"; + + # Replace each of the variables we know about + foreach $cv ( keys %configvars ) { + replace_var( \$file, \%configvars, $cv); + } + + # Write out the replacements + open( FILE, ">$f") || die "Unable to open $f for writing"; + print FILE $file; + close( FILE) || die "Unable to close $f after writing"; + +} diff --git a/update-version b/update-version new file mode 100755 index 0000000..0f6e2c1 --- /dev/null +++ b/update-version @@ -0,0 +1,81 @@ +#!/bin/sh + +# Make sure autoconf is installed and is the correct version +min_autoconf_major=2 +min_autoconf_minor=59 +autoconf_error="Autoconf version $min_autoconf_major.$min_autoconf_minor or later must be installed to run this script." +autoconf_version=`(autoconf -V 2> /dev/null) |\ + grep "^autoconf (GNU Autoconf)" | gawk '{print $NF}'` +if [ "$autoconf_version" != "" ] ; then + autoconf_major=`echo $autoconf_version | gawk -F '.' '{print $1}'` + autoconf_minor=`echo $autoconf_version | gawk -F '.' '{print $2}'` + if [ $autoconf_major -lt $min_autoconf_major -o $autoconf_minor -lt $min_autoconf_minor ] ; then + echo $autoconf_error + exit 1 + fi +else + echo $autoconf_error + exit 1 +fi + +# Get date (two formats) +if [ -n "$2" ]; then + LONGDATE=`date -d "$2" "+%B %d, %Y"` + SHORTDATE=`date -d "$2" "+%m-%d-%Y"` +else + LONGDATE=`date "+%B %d, %Y"` + SHORTDATE=`date "+%m-%d-%Y"` +fi + +# Current version number +CURRENTVERSION=2.15 + +# Last date +LASTDATE=09-06-2013 + +if [ "x$1" = "x" ] +then + echo "Usage: $0 [revision date]" + echo "" + echo "Run this script with the name of the new version (i.e \"2.6\") to" + echo "update version number and modification date in files." + echo "Use the \"newdate\" argument if you want to keep the current version" + echo "number and just update the modification date." + echo "" + echo "Current version=$CURRENTVERSION" + echo "Current Modification date=$LASTDATE" + echo "" + exit 1 +fi + +newversion=$1 +if [ "x$newversion" = "xnewdate" ] +then + newversion=$CURRENTVERSION +fi + +# Update version number and release date in common code +perl -i -p -e "s/VERSION \".*\"/VERSION \"$1\"/;" include/common.h +perl -i -p -e "s/MODIFICATION_DATE \".*\"/MODIFICATION_DATE \"$SHORTDATE\"/;" include/common.h +perl -i -p -e "s/Last Modified: [0-9].*/Last Modified: $SHORTDATE/;" include/common.h + +# Update version number and release date in main code +perl -i -p -e "s/Last Modified: [0-9].*/Last Modified: $SHORTDATE/;" src/nrpe.c +perl -i -p -e "s/Last Modified: [0-9].*/Last Modified: $SHORTDATE/;" src/check_nrpe.c + +# Update version number and release date in configure.in +perl -i -p -e "if( /^AC_INIT/) { s/$CURRENTVERSION/$1/; }" configure.in +perl -i -p -e "s/PKG_VERSION=.*/PKG_VERSION=\"$1\"/;" configure.in +perl -i -p -e "s/PKG_REL_DATE=.*\"/PKG_REL_DATE=\"$SHORTDATE\"/;" configure.in + +# Run autoconf to update configure (this is easier than updating every instance +# of the version number in configure) +autoconf + +# Update RPM spec file with version number +perl -i -p -e "s/%define version .*/%define version $1/;" nrpe.spec +perl -i -p -e "if( /\%define _docdir/) { s/$CURRENTVERSION/$1/; }" nrpe.spec + +# Update this file with version number and last date +perl -i -p -e "s/^CURRENTVERSION=.*/CURRENTVERSION=$newversion/;" update-version +perl -i -p -e "s/^LASTDATE=.*/LASTDATE=$SHORTDATE/;" update-version