We have moved to Git. This repository is only provided for compatibility with old installations. Learn how to migrate your installation here.

changeset 54:90a7a9dbfafb

importing net-analyzer/nrpe-2.14 from official portage tree
author Daniel Neugebauer <dneuge@energiequant.de>
date Mon, 17 Mar 2014 16:09:30 +0100
parents 5cc622037103
children c6adeffb54f5
files net-analyzer/nrpe/files/nrpe-2.14-multiline.patch net-analyzer/nrpe/files/nrpe-2.14-tcpd-et-al.patch net-analyzer/nrpe/files/nrpe.init net-analyzer/nrpe/files/nrpe.xinetd.2 net-analyzer/nrpe/nrpe-2.14.ebuild
diffstat 5 files changed, 441 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/net-analyzer/nrpe/files/nrpe-2.14-multiline.patch	Mon Mar 17 16:09:30 2014 +0100
@@ -0,0 +1,204 @@
+Add support for large output
+
+http://opsview-blog.opsera.com/dotorg/2008/08/enhancing-nrpe.htmlIndex: nrpe-2.14/include/common.h
+===================================================================
+Index: nrpe-2.14/include/common.h
+===================================================================
+--- nrpe-2.14.orig/include/common.h
++++ nrpe-2.14/include/common.h
+@@ -41,7 +41,7 @@
+ #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_INPUT_BUFFER	16384	/* max size of most buffers we use */
+ #define MAX_FILENAME_LENGTH     256
+ 
+ #define MAX_HOST_ADDRESS_LENGTH	256	/* max size of a host address */
+@@ -55,12 +55,14 @@
+ 
+ #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    RESPONSE_PACKET_WITH_MORE   3   /* id code for a packet containing a response, with more data to follow */
+ 
+ #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 */
++											/* WARNING - do not change this as older clients/servers will not work */
+ 
+ typedef struct packet_struct{
+ 	int16_t   packet_version;
+Index: nrpe-2.14/src/check_nrpe.c
+===================================================================
+--- nrpe-2.14.orig/src/check_nrpe.c
++++ nrpe-2.14/src/check_nrpe.c
+@@ -221,6 +221,11 @@ int main(int argc, char **argv){
+ 			return STATE_UNKNOWN;
+ 		        }
+ 
++		/* Altinity patch: Allow multiple packets to be received */
++		/* Indentation not corrected to allow simpler patching */
++		/* START MULTI_PACKET LOOP */
++		do {
++
+ 		/* wait for the response packet */
+ 		bytes_to_recv=sizeof(receive_packet);
+ 		if(use_ssl==FALSE)
+@@ -233,31 +238,24 @@ int main(int argc, char **argv){
+ 		/* 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");
++			graceful_close(sd,1000);
+ 			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");
++			graceful_close(sd,1000);
+ 			return STATE_UNKNOWN;
+ 		        }
+ 
+ 		/* receive underflow */
+ 		else if(bytes_to_recv<sizeof(receive_packet)){
+ 			printf("CHECK_NRPE: Receive underflow - only %d bytes received (%d expected).\n",bytes_to_recv,sizeof(receive_packet));
++			graceful_close(sd,1000);
+ 			return STATE_UNKNOWN;
+ 		        }
+ 
+@@ -271,21 +269,21 @@ int main(int argc, char **argv){
+ 		calculated_crc32=calculate_crc32((char *)&receive_packet,sizeof(receive_packet));
+ 		if(packet_crc32!=calculated_crc32){
+ 			printf("CHECK_NRPE: Response packet had invalid CRC32.\n");
+-			close(sd);
++			graceful_close(sd,1000);
+ 			return STATE_UNKNOWN;
+                         }
+ 	
+ 		/* check packet version */
+ 		if(ntohs(receive_packet.packet_version)!=NRPE_PACKET_VERSION_2){
+ 			printf("CHECK_NRPE: Invalid packet version received from server.\n");
+-			close(sd);
++			graceful_close(sd,1000);
+ 			return STATE_UNKNOWN;
+ 			}
+ 
+ 		/* check packet type */
+-		if(ntohs(receive_packet.packet_type)!=RESPONSE_PACKET){
++		if(ntohs(receive_packet.packet_type)!=RESPONSE_PACKET && ntohs(receive_packet.packet_type)!=RESPONSE_PACKET_WITH_MORE){
+ 			printf("CHECK_NRPE: Invalid packet type received from server.\n");
+-			close(sd);
++			graceful_close(sd,1000);
+ 			return STATE_UNKNOWN;
+ 			}
+ 
+@@ -297,8 +295,18 @@ int main(int argc, char **argv){
+ 		if(!strcmp(receive_packet.buffer,""))
+ 			printf("CHECK_NRPE: No output returned from daemon.\n");
+ 		else
+-			printf("%s\n",receive_packet.buffer);
+-	        }
++			printf("%s",receive_packet.buffer);
++
++		} while (ntohs(receive_packet.packet_type)==RESPONSE_PACKET_WITH_MORE);
++		/* END MULTI_PACKET LOOP */
++
++		/* Finish output with newline */
++		printf("\n");
++
++		/* close the connection */
++		graceful_close(sd,1000);
++
++	}
+ 
+ 	/* reset the alarm */
+ 	else
+@@ -434,6 +442,14 @@ int graceful_close(int sd, int timeout){
+         struct timeval tv;
+         char buf[1000];
+ 
++#ifdef HAVE_SSL
++		if(use_ssl==TRUE){
++			SSL_shutdown(ssl);
++			SSL_free(ssl);
++			SSL_CTX_free(ctx);
++		}
++#endif
++
+ 	/* send FIN packet */
+         shutdown(sd,SHUT_WR);  
+         for(;;){
+Index: nrpe-2.14/src/nrpe.c
+===================================================================
+--- nrpe-2.14.orig/src/nrpe.c
++++ nrpe-2.14/src/nrpe.c
+@@ -1056,6 +1056,8 @@ void handle_connection(int sock){
+ 	char processed_command[MAX_INPUT_BUFFER];
+ 	int result=STATE_OK;
+ 	int early_timeout=FALSE;
++	int bytes_copied=0;
++	char *pbuffer=&buffer[0];
+ 	int rc;
+ 	int x;
+ #ifdef DEBUG
+@@ -1272,6 +1274,14 @@ void handle_connection(int sock){
+ 	if(buffer[strlen(buffer)-1]=='\n')
+ 		buffer[strlen(buffer)-1]='\x0';
+ 
++	/* Altinity patch to allow multi packet responses */
++	/* Loop not indented to allow easier patching */
++	/* START MULTI_PACKET LOOP */
++	do {
++
++		if(debug==TRUE)
++			syslog(LOG_DEBUG,"Sending response - bytes left: %d", strlen(pbuffer));
++
+ 	/* clear the response packet buffer */
+ 	bzero(&send_packet,sizeof(send_packet));
+ 
+@@ -1280,11 +1290,17 @@ void handle_connection(int sock){
+ 
+ 	/* initialize response packet data */
+ 	send_packet.packet_version=(int16_t)htons(NRPE_PACKET_VERSION_2);
+-	send_packet.packet_type=(int16_t)htons(RESPONSE_PACKET);
+ 	send_packet.result_code=(int16_t)htons(result);
+-	strncpy(&send_packet.buffer[0],buffer,MAX_PACKETBUFFER_LENGTH);
++	strncpy(&send_packet.buffer[0],pbuffer,MAX_PACKETBUFFER_LENGTH);
+ 	send_packet.buffer[MAX_PACKETBUFFER_LENGTH-1]='\x0';
+-	
++
++	bytes_copied = strlen(&send_packet.buffer[0]);
++	pbuffer = pbuffer+bytes_copied;
++	if(strlen(pbuffer)>0)
++		send_packet.packet_type=(int16_t)htons(RESPONSE_PACKET_WITH_MORE);
++	else
++		send_packet.packet_type=(int16_t)htons(RESPONSE_PACKET);
++
+ 	/* 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));
+@@ -1303,6 +1319,9 @@ void handle_connection(int sock){
+ 		SSL_write(ssl,&send_packet,bytes_to_send);
+ #endif
+ 
++	} while (strlen(pbuffer) > 0);
++	/* END MULTI_PACKET LOOP */
++
+ #ifdef HAVE_SSL
+ 	if(ssl){
+ 		complete_SSL_shutdown( ssl);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/net-analyzer/nrpe/files/nrpe-2.14-tcpd-et-al.patch	Mon Mar 17 16:09:30 2014 +0100
@@ -0,0 +1,74 @@
+--- nrpe-2.14.orig/configure.in
++++ nrpe-2.14/configure.in
+@@ -1,12 +1,8 @@
+ dnl Process this -*-m4-*- file with autoconf to produce a configure script.
+ 
+-dnl Disable caching
+-define([AC_CACHE_LOAD],)
+-define([AC_CACHE_SAVE],)
+-
+-2.14([nrpe],[2.13],[nagios-users@lists.sourceforge.net],[nrpe],[http://www.nagios.org])
++AC_INIT([nrpe],[2.14],[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
+@@ -16,7 +12,8 @@
+ 	init-script.suse
+ 	nrpe.spec
+ 	sample-config/nrpe.cfg
+-	sample-config/nrpe.xinetd])
++	sample-config/nrpe.xinetd
++	include/config.h])
+ AC_PREFIX_DEFAULT(/usr/local/nagios)
+ 
+ PKG_NAME=nrpe
+@@ -45,7 +42,7 @@
+ 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)
++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 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
+@@ -164,11 +161,20 @@
+ 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_ARG_ENABLE([tcp-wrapper],
++    AS_HELP_STRING([--disable-tcp-wrapper], [Disable building with TCP wrappers. *** DISABLING IS A SECURITY RISK! *** Read the SECURITY file before using this option! @<:@default=enable@:>@]))
++
++LIBWRAPLIBS=""
++AS_IF([test "x$enable_tcp_wrapper" != "xno"], [
++    AC_CHECK_LIB([wrap],[hosts_access],[
++        LIBWRAPLIBS="$LIBWRAPLIBS -lwrap"
+ 	AC_DEFINE(HAVE_LIBWRAP,[1],[Have the TCP wrappers library])
+-	])
++	AC_DEFINE(HAVE_TCPD_H,[1],[Have the TCP wrappers library])
++    ])
++])
+ AC_SUBST(LIBWRAPLIBS)
++
+ AC_CHECK_FUNCS(strdup strstr strtoul initgroups closesocket)
+ 
+ dnl socklen_t check - from curl
+@@ -438,8 +444,11 @@
+ 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]))
++	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!]))
++
++AS_IF([test "x$enable_command_args" = "xyes"], [
++	AC_DEFINE(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!]),
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/net-analyzer/nrpe/files/nrpe.init	Mon Mar 17 16:09:30 2014 +0100
@@ -0,0 +1,29 @@
+#!/sbin/runscript
+# Copyright 1999-2013 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+# $Header: /var/cvsroot/gentoo-x86/net-analyzer/nrpe/files/nrpe.init,v 1.3 2013/01/25 17:43:36 flameeyes Exp $
+
+: ${CFGFILE:=/etc/nagios/nrpe.cfg}
+
+get_config() {
+    [ -f ${CFGFILE} ] || return 1
+
+    sed -n -e 's:^[ \t]*'$1'=\([^#]\+\).*:\1:p' \
+	${CFGFILE}
+}
+
+extra_started_commands="reload"
+
+command=/usr/libexec/${SVCNAME}
+command_args="-c ${CFGFILE} --daemon"
+pidfile=$(get_config pid_file)
+
+depend() {
+    config ${CFGFILE}
+}
+
+reload() {
+    ebegin "Reloading ${SVCNAME}"
+    kill -HUP `cat ${pidfile}`
+    eend $?
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/net-analyzer/nrpe/files/nrpe.xinetd.2	Mon Mar 17 16:09:30 2014 +0100
@@ -0,0 +1,11 @@
+service nrpe {
+	socket_type = stream
+	protocol    = tcp
+	wait        = no
+	user        = nagios
+	group       = nagios
+	server      = /usr/libexec/nrpe
+	server_args = -c /etc/nagios/nrpe.cfg --inetd
+#	only_from   = 127.0.0.1
+	disabled    = yes
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/net-analyzer/nrpe/nrpe-2.14.ebuild	Mon Mar 17 16:09:30 2014 +0100
@@ -0,0 +1,123 @@
+# Copyright 1999-2013 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+# $Header: /var/cvsroot/gentoo-x86/net-analyzer/nrpe/nrpe-2.14.ebuild,v 1.8 2013/03/09 19:09:06 ago Exp $
+
+EAPI=4
+
+inherit eutils toolchain-funcs multilib user autotools
+
+DESCRIPTION="Nagios Remote Plugin Executor"
+HOMEPAGE="http://www.nagios.org/"
+SRC_URI="mirror://sourceforge/nagios/${P}.tar.gz"
+
+LICENSE="GPL-2+"
+SLOT="0"
+KEYWORDS="alpha amd64 hppa ppc ppc64 sparc x86"
+IUSE="command-args ssl tcpd minimal"
+
+DEPEND="ssl? ( dev-libs/openssl )
+	!minimal? ( tcpd? ( sys-apps/tcp-wrappers ) )"
+RDEPEND="${DEPEND}
+	!minimal? ( >=net-analyzer/nagios-plugins-1.3.0 )"
+
+pkg_setup() {
+	enewgroup nagios
+	enewuser nagios -1 /bin/bash /dev/null nagios
+
+	elog "If you plan to use \"nrpe_check_control\" then you may want to specify"
+	elog "different command and services files. You can override the defaults"
+	elog "through the \"NAGIOS_COMMAND_FILE\" and \"NAGIOS_SERVICES_FILE\" environment variables."
+	elog "NAGIOS_COMMAND_FILE=${NAGIOS_COMMAND_FILE:-/var/rw/nagios.cmd}"
+	elog "NAGIOS_SERVICES_FILE=${NAGIOS_SERVICES_FILE:-/etc/services.cfg}"
+}
+
+src_prepare() {
+	# Add support for large output,
+	# http://opsview-blog.opsera.com/dotorg/2008/08/enhancing-nrpe.html
+	epatch "${FILESDIR}"/${P}-multiline.patch
+	# fix configure, among others #326367, #397603
+	epatch "${FILESDIR}"/${P}-tcpd-et-al.patch
+
+	sed -i -e '/define \(COMMAND\|SERVICES\)_FILE/d' contrib/nrpe_check_control.c || die
+
+	# change the default location of the pid file
+	sed -i -e '/pid_file/s:/var/run:/run:' sample-config/nrpe.cfg.in || die
+
+	# fix TFU handling of autoheader
+	sed -i -e '/#undef/d' include/config.h.in || die
+
+	eautoreconf
+}
+
+src_configure() {
+	local myconf
+	if use minimal; then
+		myconf="--disable-tcp-wrapper --disable-command-args"
+	else
+		myconf="$(use_enable tcpd tcp-wrapper) $(use_enable command-args)"
+	fi
+
+	econf \
+		--libexecdir=/usr/$(get_libdir)/nagios/plugins \
+		--localstatedir=/var/nagios \
+		--sysconfdir=/etc/nagios \
+		--with-nrpe-user=nagios \
+		--with-nrpe-group=nagios \
+		$(use_enable ssl) \
+		${myconf}
+}
+
+src_compile() {
+	emake -C src check_nrpe $(use minimal || echo nrpe)
+
+	# Add nifty nrpe check tool
+	$(tc-getCC) ${CPPFLAGS} ${CFLAGS} \
+		-DCOMMAND_FILE=\"${NAGIOS_COMMAND_FILE:-/var/rw/nagios.cmd}\" \
+		-DSERVICES_FILE=\"${NAGIOS_SERVICES_FILE:-/etc/services.cfg}\" \
+		${LDFLAGS} -o nrpe_check_control contrib/nrpe_check_control.c || die
+}
+
+src_install() {
+	dodoc LEGAL Changelog README SECURITY \
+		contrib/README.nrpe_check_control \
+		$(use ssl && echo README.SSL)
+
+	exeinto /usr/$(get_libdir)/nagios/plugins
+	doexe src/check_nrpe nrpe_check_control
+
+	use minimal && return 0
+
+	## NON-MINIMAL INSTALL FOLLOWS ##
+
+	insinto /etc/nagios
+	newins sample-config/nrpe.cfg nrpe.cfg
+	fowners root:nagios /etc/nagios/nrpe.cfg
+	fperms 0640 /etc/nagios/nrpe.cfg
+
+	exeinto /usr/libexec
+	doexe src/nrpe
+
+	newinitd "${FILESDIR}"/nrpe.init nrpe
+
+	insinto /etc/xinetd.d/
+	newins "${FILESDIR}/nrpe.xinetd.2" nrpe
+
+	if use tcpd; then
+		sed -i -e '/^reload()/, /^}/ d' -e '/extra_started_commands/s:reload::' \
+			"${D}"/etc/init.d/nrpe
+	fi
+}
+
+pkg_postinst() {
+	elog "If you are using the nrpe daemon, remember to edit"
+	elog "the config file /etc/nagios/nrpe.cfg"
+
+	if use command-args ; then
+		ewarn ""
+		ewarn "You have enabled command-args for NRPE. This enables"
+		ewarn "the ability for clients to supply arguments to commands"
+		ewarn "which should be run. "
+		ewarn "THIS IS CONSIDERED A SECURITY RISK!"
+		ewarn "Please read /usr/share/doc/${PF}/SECURITY.bz2 for more info"
+	fi
+}