From: Marc Fournier Date: Wed, 26 Aug 2015 21:40:18 +0000 (+0200) Subject: Merge branch 'collectd-5.4' into collectd-5.5 X-Git-Tag: collectd-5.5.1~67 X-Git-Url: https://git.octo.it/?p=collectd.git;a=commitdiff_plain;h=eab8493d114c7c209d90ac54edb7c8026c085747;hp=9ad5eefaa9dcc557c9117f8692cec1792f7ac7f0 Merge branch 'collectd-5.4' into collectd-5.5 --- diff --git a/Makefile.am b/Makefile.am index 35f24cb1..b79ea1ca 100644 --- a/Makefile.am +++ b/Makefile.am @@ -1,6 +1,12 @@ ACLOCAL_AMFLAGS = -I libltdl/m4 -SUBDIRS = libltdl src bindings . +SUBDIRS = + +if BUILD_INCLUDED_LTDL +SUBDIRS += libltdl +endif + +SUBDIRS += src bindings . AM_CPPFLAGS = $(LTDLINCL) diff --git a/configure.ac b/configure.ac index a7cddb5e..dcaac3c7 100644 --- a/configure.ac +++ b/configure.ac @@ -4,6 +4,11 @@ AC_CONFIG_SRCDIR(src/) AC_CONFIG_HEADERS(src/config.h) AC_CONFIG_AUX_DIR([libltdl/config]) +dnl older automake's default of ARFLAGS=cru is noisy on newer binutils; +dnl we don't really need the 'u' even in older toolchains. Then there is +dnl older libtool, which spelled it AR_FLAGS +m4_divert_text([DEFAULTS], [: "${ARFLAGS=cr} ${AR_FLAGS=cr}"]) + m4_ifdef([LT_PACKAGE_VERSION], # libtool >= 2.2 [ @@ -24,6 +29,8 @@ m4_ifdef([LT_PACKAGE_VERSION], ] ) +AM_CONDITIONAL([BUILD_INCLUDED_LTDL], [test "x$LTDLDEPS" != "x"]) + AM_INIT_AUTOMAKE([tar-pax dist-bzip2 foreign]) m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])]) AC_LANG(C) @@ -632,6 +639,9 @@ AC_CHECK_HEADERS(net/pfvar.h, #if HAVE_NET_IF_H # include #endif +#if HAVE_NETINET_IN_H +# include +#endif ]) # For the multimeter plugin @@ -3245,11 +3255,6 @@ then fi if test "x$with_libpcap" = "xyes" then - AC_CHECK_HEADERS(pcap-bpf.h,, - [with_libpcap="no (pcap-bpf.h not found)"]) -fi -if test "x$with_libpcap" = "xyes" -then AC_CACHE_CHECK([whether libpcap has PCAP_ERROR_IFACE_NOT_UP], [c_cv_libpcap_have_pcap_error_iface_not_up], AC_COMPILE_IFELSE([AC_LANG_PROGRAM( diff --git a/src/dns.c b/src/dns.c index fd75dc93..3421c475 100644 --- a/src/dns.c +++ b/src/dns.c @@ -34,7 +34,6 @@ #include #include -#include /* * Private data types diff --git a/src/exec.c b/src/exec.c old mode 100644 new mode 100755 index 8d737cea..f080ad67 --- a/src/exec.c +++ b/src/exec.c @@ -355,6 +355,31 @@ static void reset_signal_mask (void) /* {{{ */ sigprocmask (SIG_SETMASK, &ss, /* old mask = */ NULL); } /* }}} void reset_signal_mask */ +static int create_pipe (int fd_pipe[2]) /* {{{ */ +{ + char errbuf[1024]; + int status; + + status = pipe (fd_pipe); + if (status != 0) + { + ERROR ("exec plugin: pipe failed: %s", + sstrerror (errno, errbuf, sizeof (errbuf))); + return (-1); + } + + return 0; +} /* }}} int create_pipe */ + +static void close_pipe (int fd_pipe[2]) /* {{{ */ +{ + if (fd_pipe[0] != -1) + close (fd_pipe[0]); + + if (fd_pipe[1] != -1) + close (fd_pipe[1]); +} /* }}} void close_pipe */ + /* * Creates three pipes (one for reading, one for writing and one for errors), * forks a child, sets up the pipes so that fd_in is connected to STDIN of @@ -363,9 +388,9 @@ static void reset_signal_mask (void) /* {{{ */ */ static int fork_child (program_list_t *pl, int *fd_in, int *fd_out, int *fd_err) /* {{{ */ { - int fd_pipe_in[2]; - int fd_pipe_out[2]; - int fd_pipe_err[2]; + int fd_pipe_in[2] = {-1, -1}; + int fd_pipe_out[2] = {-1, -1}; + int fd_pipe_err[2] = {-1, -1}; char errbuf[1024]; int status; int pid; @@ -381,29 +406,10 @@ static int fork_child (program_list_t *pl, int *fd_in, int *fd_out, int *fd_err) if (pl->pid != 0) return (-1); - status = pipe (fd_pipe_in); - if (status != 0) - { - ERROR ("exec plugin: pipe failed: %s", - sstrerror (errno, errbuf, sizeof (errbuf))); - return (-1); - } - - status = pipe (fd_pipe_out); - if (status != 0) - { - ERROR ("exec plugin: pipe failed: %s", - sstrerror (errno, errbuf, sizeof (errbuf))); - return (-1); - } - - status = pipe (fd_pipe_err); - if (status != 0) - { - ERROR ("exec plugin: pipe failed: %s", - sstrerror (errno, errbuf, sizeof (errbuf))); - return (-1); - } + if ((create_pipe(fd_pipe_in) == -1) + || (create_pipe(fd_pipe_out) == -1) + || (create_pipe(fd_pipe_err) == -1)) + goto failed; sp_ptr = NULL; status = getpwnam_r (pl->user, &sp, nambuf, sizeof (nambuf), &sp_ptr); @@ -411,12 +417,13 @@ static int fork_child (program_list_t *pl, int *fd_in, int *fd_out, int *fd_err) { ERROR ("exec plugin: Failed to get user information for user ``%s'': %s", pl->user, sstrerror (errno, errbuf, sizeof (errbuf))); - return (-1); + goto failed; } + if (sp_ptr == NULL) { ERROR ("exec plugin: No such user: `%s'", pl->user); - return (-1); + goto failed; } uid = sp.pw_uid; @@ -424,7 +431,7 @@ static int fork_child (program_list_t *pl, int *fd_in, int *fd_out, int *fd_err) if (uid == 0) { ERROR ("exec plugin: Cowardly refusing to exec program as root."); - return (-1); + goto failed; } /* The group configured in the configfile is set as effective group, because @@ -442,12 +449,12 @@ static int fork_child (program_list_t *pl, int *fd_in, int *fd_out, int *fd_err) ERROR ("exec plugin: Failed to get group information " "for group ``%s'': %s", pl->group, sstrerror (errno, errbuf, sizeof (errbuf))); - return (-1); + goto failed; } if (NULL == gr_ptr) { ERROR ("exec plugin: No such group: `%s'", pl->group); - return (-1); + goto failed; } egid = gr.gr_gid; @@ -463,7 +470,7 @@ static int fork_child (program_list_t *pl, int *fd_in, int *fd_out, int *fd_err) { ERROR ("exec plugin: fork failed: %s", sstrerror (errno, errbuf, sizeof (errbuf))); - return (-1); + goto failed; } else if (pid == 0) { @@ -531,6 +538,13 @@ static int fork_child (program_list_t *pl, int *fd_in, int *fd_out, int *fd_err) close (fd_pipe_err[0]); return (pid); + +failed: + close_pipe(fd_pipe_in); + close_pipe(fd_pipe_out); + close_pipe(fd_pipe_err); + + return (-1); } /* int fork_child }}} */ static int parse_line (char *buffer) /* {{{ */ diff --git a/src/liboconfig/scanner.l b/src/liboconfig/scanner.l index 638e3a23..41d66438 100644 --- a/src/liboconfig/scanner.l +++ b/src/liboconfig/scanner.l @@ -28,6 +28,7 @@ %{ #include +#include #include "oconfig.h" #include "aux_types.h" #include "parser.h" diff --git a/src/pf.c b/src/pf.c index 29f3a3d5..112e28f3 100644 --- a/src/pf.c +++ b/src/pf.c @@ -32,6 +32,9 @@ #if HAVE_NET_IF_H # include #endif +#if HAVE_NETINET_IN_H +# include +#endif #include diff --git a/src/utils_vl_lookup.c b/src/utils_vl_lookup.c index 75c02061..f0f0b463 100644 --- a/src/utils_vl_lookup.c +++ b/src/utils_vl_lookup.c @@ -304,9 +304,10 @@ static int lu_handle_user_class (lookup_t *obj, /* {{{ */ { /* call lookup_class_callback_t() and insert into the list of user objects. */ user_obj = lu_create_user_obj (obj, ds, vl, user_class); - pthread_mutex_unlock (&user_class->lock); - if (user_obj == NULL) + if (user_obj == NULL) { + pthread_mutex_unlock (&user_class->lock); return (-1); + } } pthread_mutex_unlock (&user_class->lock);