[Pkg-nagios-changes] [pkg-check-mk] 01/01: add waitmax.c since upstream isn't including it

Matt Taggart taggart at moszumanska.debian.org
Wed May 27 20:54:17 UTC 2015


This is an automated email from the git hooks/post-receive script.

taggart pushed a commit to branch master
in repository pkg-check-mk.

commit f556c2e8f5b5709d77b7193ce5e3f62ce5fcbfde
Author: Matt Taggart <taggart at riseup.net>
Date:   Wed May 27 13:54:27 2015 -0700

    add waitmax.c since upstream isn't including it
---
 debian/rules     |   3 +-
 debian/waitmax.c | 157 +++++++++++++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 159 insertions(+), 1 deletion(-)

diff --git a/debian/rules b/debian/rules
index 159674e..bd5d431 100755
--- a/debian/rules
+++ b/debian/rules
@@ -61,7 +61,8 @@ install: build
 	DESTDIR=debian/tmp ./setup.sh --yes
 	#don't use the statically linked binary.
 	rm debian/tmp/usr/share/check_mk/agents/waitmax
-	gcc -s -o debian/tmp/usr/share/check_mk/agents/waitmax debian/tmp/usr/share/check_mk/agents/waitmax.c
+	# upstream stopped including waitmax.c, so we carry it in debian/
+	gcc -s -o debian/tmp/usr/share/check_mk/agents/waitmax debian/waitmax.c
 	cp -a livestatus.src/debian/tmp/* debian/tmp/
 	# We need 2 different "defaults" files for Icinga and Nagios3
 	rm debian/tmp/usr/share/check_mk/modules/defaults
diff --git a/debian/waitmax.c b/debian/waitmax.c
new file mode 100644
index 0000000..de09216
--- /dev/null
+++ b/debian/waitmax.c
@@ -0,0 +1,157 @@
+// +------------------------------------------------------------------+
+// |             ____ _               _        __  __ _  __           |
+// |            / ___| |__   ___  ___| | __   |  \/  | |/ /           |
+// |           | |   | '_ \ / _ \/ __| |/ /   | |\/| | ' /            |
+// |           | |___| | | |  __/ (__|   <    | |  | | . \            |
+// |            \____|_| |_|\___|\___|_|\_\___|_|  |_|_|\_\           |
+// |                                                                  |
+// | Copyright Mathias Kettner 2014             mk at mathias-kettner.de |
+// +------------------------------------------------------------------+
+//
+// This file is part of Check_MK.
+// The official homepage is at http://mathias-kettner.de/check_mk.
+//
+// check_mk 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 in version 2.  check_mk is  distributed
+// in the hope that it will be useful, but WITHOUT ANY WARRANTY;  with-
+// out even the implied warranty of  MERCHANTABILITY  or  FITNESS FOR A
+// PARTICULAR PURPOSE. See the  GNU General Public License for more de-
+// ails.  You should have  received  a copy of the  GNU  General Public
+// License along with GNU Make; see the file  COPYING.  If  not,  write
+// to the Free Software Foundation, Inc., 51 Franklin St,  Fifth Floor,
+// Boston, MA 02110-1301 USA.
+
+#include <stdio.h>
+#include <sys/types.h>
+#include <sys/wait.h>
+#include <sys/errno.h>
+#include <unistd.h>
+#include <stdlib.h>
+#include <string.h>
+#include <errno.h>
+#include <signal.h>
+#include <getopt.h>
+
+/* macros for using write(2) instead of fprintf(stderr, ) */
+#define out(text) write(2, text, strlen(text));
+
+int g_pid;
+int g_timeout = 0;
+int g_signum = 15;
+
+struct option long_options[] = {
+  { "version"          , no_argument,       0, 'V' },
+  { "help"             , no_argument,       0, 'h' },
+  { "signal"           , required_argument, 0, 's' },
+  { 0, 0, 0, 0 } };
+
+void version()
+{
+  out("waitmax version 1.1\n"
+      "Copyright Mathias Kettner 2008\n"
+      "This is free software; see the source for copying conditions.  There is NO\n"
+      "warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n");
+  exit(0);
+}
+
+
+void usage()
+{
+  out("Usage: waitmax [-s SIGNUM] MAXTIME PROGRAM [ARGS...]\n"
+      "\n"
+      "Execute PROGRAM as a subprocess. If PROGRAM does not exit before MAXTIME\n"
+      "seconds, it will be killed with SIGTERM or an alternative signal.\n"
+      "\n"
+      "   -s, --signal SIGNUM   kill with SIGNUM on timeout\n"
+      "   -h, --help            this help\n"
+      "   -V, --version         show version an exit\n\n");
+  exit(1);
+}
+
+
+void signalhandler(int signum)
+{
+  if (0 == kill(g_pid, g_signum))
+    g_timeout = 1;
+}
+
+
+int main(int argc, char **argv)
+{
+  int indexptr=0;
+  int ret;
+  setenv("POSIXLY_CORRECT", "true", 0);
+  while (0 <= (ret = getopt_long(argc, argv, "Vhs:", long_options, &indexptr))) {
+    switch (ret)
+      {
+      case 'V':
+	version();
+
+      case 'h':
+	usage();
+
+      case 's':
+	g_signum = strtoul(optarg, 0, 10);
+	if (g_signum < 1 || g_signum > 32) {
+	  out("Signalnumber must be between 1 and 32.\n");
+	  exit(1);
+	}
+	break;
+
+      default:
+	usage(argv[0]);
+	exit(1);
+	break;
+      }
+  }
+
+  if (optind + 1 >= argc) usage();
+
+  int maxtime = atoi(argv[optind]);
+  if (maxtime <= 0) usage();
+
+  g_pid = fork();
+  if (g_pid == 0) {
+    signal(SIGALRM, signalhandler);
+    execvp(argv[optind + 1], argv + optind + 1);
+    out("Cannot execute ");
+    out(argv[optind + 1]);
+    out(": ");
+    out(strerror(errno));
+    out("\n");
+    exit(253);
+  }
+
+  signal(SIGALRM, signalhandler);
+  alarm(maxtime);
+  int status;
+  while (1) {
+      int pid = waitpid(g_pid, &status, 0);
+      if (pid <= 0) {
+        if (errno == EINTR) continue; // interuppted by alarm
+      else
+        out("Strange: waitpid() fails: ");
+	out(strerror(errno));
+	out("\n");
+        exit(1);
+      }
+      else break;
+  }
+
+  if (WIFEXITED(status)) {
+    int exitcode = WEXITSTATUS(status);
+    return exitcode;
+  }
+  else if (WIFSIGNALED(status)) {
+    int signum = WTERMSIG(status);
+    if (g_timeout)
+      return 255;
+    else
+      return 128 + signum;
+  }
+  else {
+    out("Strange: program did neither exit nor was signalled.\n");
+    return 254;
+  }
+}

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-nagios/pkg-check-mk.git



More information about the Pkg-nagios-changes mailing list