Merge branch 'collectd-4.4' into collectd-4.5
authorFlorian Forster <octo@leeloo.lan.home.verplant.org>
Sat, 8 Nov 2008 07:59:17 +0000 (08:59 +0100)
committerFlorian Forster <octo@leeloo.lan.home.verplant.org>
Sat, 8 Nov 2008 07:59:17 +0000 (08:59 +0100)
1  2 
ChangeLog
configure.in
src/apcups.c
src/configfile.c
src/mysql.c
src/utils_dns.c

diff --combined ChangeLog
+++ b/ChangeLog
@@@ -1,65 -1,3 +1,65 @@@
 +2008-10-16, Version 4.5.1
 +      * build system: Change `--enable-<plugin>' to abort with an error if
 +        dependencies are not met. Thanks to Bruno PrĂ©mont for the patch.
 +        Also, the poisoning of various string functions has been restricted
 +        to debug builds.
 +      * collectd: Fix a memory leak in the global value cache. With every
 +        *missing* value a couple of bytes would be leaked. Another memory
 +        leak in the configuration handling code has been fixed. Thanks to
 +        Niraj Tolia for reporting these issues.
 +      * collectd: Fix an off-by-one error in the ignorelist functionality.
 +        When using regular expressions, the last character would be missing,
 +        possibly matching differently from what one would expect.
 +      * collectdmon: Don't block SIGCHLD. This fixes a potential portability
 +        problem.
 +      * collectd-nagios: Fix handling of the `-d' option. Thanks to Fabian
 +        Linzberger for reporting the bug.
 +      * iptables plugin: Fix an off-by-one error. If a string was just one
 +        character too long, it was truncated instead of reporting an error.
 +      * network plugin: Fix a memory leak in the configuration handling
 +        code. Thanks to Niraj Tolia for reporting this issue.
 +      * perl plugin: Log an error message if bootstrapping `Collectd' fails.
 +      * postgresql plugin: Don't reopen connection during reinitialization.
 +        This fixes a bug under Solaris and potentially other platforms.
 +        Missing calls to `PQclear' have been added, too. This fixes memory
 +        leaks. Thanks to ``Admin'' for reporting these bugs.
 +      * snmp plugin: Don't expect null-terminated strings from the Net-SNMP
 +        library.
 +      * tail plugin: Call `clearerr(3)' after reading an EOF. This fixes
 +        problems with some `libc's. Thanks to Matthias Lay for reporting the
 +        bug.
 +
 +2008-09-04, Version 4.5.0
 +      * collectd: Added the ability to flush certain identifiers.
 +      * collectd: The concept of `notification meta data' has been
 +        introduced.
 +      * filecount plugin: The new filecount plugin counts the number of
 +        files in a directory and its subdirectories.
 +      * ipmi plugin: Sensor names have been changed to ensure unique names.
 +        Notifications upon added and removed sensors can now be generated.
 +      * notify_desktop plugin: This new plugin sends notifications to the
 +        X desktop using the structure defined in the `Desktop Notification
 +        Specification'.
 +      * notify_email plugin: This new plugin sends out notifications via
 +        email, using the `esmtp' library.
 +      * onewire plugin: The new experimental(!) onewire plugin reads values,
 +        such as temperatures, from sensors connected to the computer via the
 +        onewire bus.
 +      * perl plugin: Improved synchronized access to internal data structures
 +        and fixed a possible dead-lock.
 +      * perl plugin: Added the ability to flush certain identifiers and marked
 +        plugin_flush_all() and plugin_flush_one() as deprecated in favor of
 +        plugin_flush().
 +      * perl plugin: Added the ability to configure Perl plugins.
 +      * postgresql plugin: The new postgresql plugin collects statistics
 +        about or from a PostgreSQL database.
 +      * processes plugin: The `ProcessMatch' option has been added.
 +      * rrdtool plugin: Implement throttling of the `update queue' to lessen
 +        IO load.
 +      * tcpconns plugin: This plugin has been ported to OpenBSD.
 +      * thermal plugin: The new thermal plugin collects system temperatures
 +        using Linux ACPI thermal zone data.
 +
  2008-10-16, Version 4.4.4
        * build system: Change `--enable-<plugin>' to abort with an error if
          dependencies are not met. Thanks to Bruno PrĂ©mont for the patch.
        * collectdmon: Don't block SIGCHLD. This fixes a potential portability
          problem.
        * collectd-nagios: Fix handling of the `-d' option. Thanks to Fabian
-         Linzberger for reporting the but.
+         Linzberger for reporting the bug.
        * network plugin: Fix a memory leak in the configuration handling
          code. Thanks to Niraj Tolia for reporting this issue.
        * perl plugin: Log an error message if bootstrapping `Collectd' fails.
-       * tail plugin: Call `clearerr' after reading an EOF. This fixes
+       * tail plugin: Call `clearerr(3)' after reading an EOF. This fixes
          problems with some `libc's. Thanks to Matthias Lay for reporting the
          bug.
  
diff --combined configure.in
@@@ -45,9 -45,6 +45,9 @@@ case $host_os i
        *darwin*)
        ac_system="Darwin"
        ;;
 +      *openbsd*)
 +      ac_system="OpenBSD"
 +      ;;
        *)
        ac_system="unknown"
  esac
@@@ -72,7 -69,7 +72,7 @@@ AC_HEADER_STD
  AC_HEADER_SYS_WAIT
  AC_HEADER_DIRENT
  
 -AC_CHECK_HEADERS(stdint.h stdio.h errno.h math.h stdarg.h syslog.h fcntl.h signal.h assert.h sys/types.h sys/socket.h sys/select.h poll.h netdb.h arpa/inet.h sys/resource.h sys/param.h kstat.h regex.h sys/ioctl.h endian.h sys/isa_defs.h)
 +AC_CHECK_HEADERS(stdio.h stdint.h stdbool.h errno.h math.h stdarg.h syslog.h fcntl.h signal.h assert.h sys/types.h sys/socket.h sys/select.h poll.h netdb.h arpa/inet.h sys/resource.h sys/param.h kstat.h regex.h sys/ioctl.h endian.h sys/isa_defs.h)
  
  # For ping library
  AC_CHECK_HEADERS(netinet/in_systm.h, [], [],
  fi
  
  with_libkvm="no"
 +AC_CHECK_LIB(kvm, kvm_getprocs, [with_kvm_getprocs="yes"], [with_kvm_getprocs="no"])
 +if test "x$with_kvm_getprocs" = "xyes"
 +then
 +      AC_DEFINE(HAVE_LIBKVM_GETPROCS, 1,
 +                [Define to 1 if you have the 'kvm' library with the 'kvm_getprocs' symbol (-lkvm)])
 +      with_libkvm="yes"
 +fi
 +AM_CONDITIONAL(BUILD_WITH_LIBKVM_GETPROCS, test "x$with_kvm_getprocs" = "xyes")
 +
  AC_CHECK_LIB(kvm, kvm_getswapinfo, [with_kvm_getswapinfo="yes"], [with_kvm_getswapinfo="no"])
  if test "x$with_kvm_getswapinfo" = "xyes"
  then
  fi
  AM_CONDITIONAL(BUILD_WITH_LIBKVM_GETSWAPINFO, test "x$with_kvm_getswapinfo" = "xyes")
  
 +AC_CHECK_LIB(kvm, kvm_nlist, [with_kvm_nlist="yes"], [with_kvm_nlist="no"])
 +if test "x$with_kvm_nlist" = "xyes"
 +then
 +      AC_DEFINE(HAVE_LIBKVM_NLIST, 1,
 +                [Define to 1 if you have the 'kvm' library with the 'kvm_nlist' symbol (-lkvm)])
 +      with_libkvm="yes"
 +fi
 +AM_CONDITIONAL(BUILD_WITH_LIBKVM_NLIST, test "x$with_kvm_nlist" = "xyes")
 +
  with_sensors_cflags=""
  with_sensors_ldflags=""
  AC_ARG_WITH(lm-sensors, [AS_HELP_STRING([--with-lm-sensors@<:@=PREFIX@:>@], [Path to lm_sensors.])],
  
        if test $mysql_config_status -ne 0
        then
-               with_libmysql="no"
+               with_libmysql="no ($with_mysql_config failed)"
        else
                SAVE_CPPFLAGS="$CPPFLAGS"
                CPPFLAGS="$CPPFLAGS $with_mysql_cflags"
  
-               AC_CHECK_HEADERS(mysql/mysql.h, [], [with_libmysql="no (mysql/mysql.h not found)"], [])
+               have_mysql_h="no"
+               have_mysql_mysql_h="no"
+               AC_CHECK_HEADERS(mysql.h, [have_mysql_h="yes"])
+               if test "x$have_mysql_h" = "xno"
+               then
+                       AC_CHECK_HEADERS(mysql/mysql.h, [have_mysql_mysql_h="yes"])
+               fi
+               if test "x$have_mysql_h$have_mysql_mysql_h" = "xnono"
+               then
+                       with_libmysql="no (mysql.h not found)"
+               fi
  
                CPPFLAGS="$SAVE_CPPFLAGS"
        fi
@@@ -1376,7 -1367,7 +1388,7 @@@ the
  
        if test $mysql_config_status -ne 0
        then
-               with_libmysql="no"
+               with_libmysql="no ($with_mysql_config failed)"
        else
                AC_CHECK_LIB(mysqlclient, mysql_init,
                 [with_libmysql="yes"],
  AM_CONDITIONAL(BUILD_WITH_LIBOPING, test "x$with_liboping" = "xyes")
  AM_CONDITIONAL(BUILD_WITH_OWN_LIBOPING, test "x$with_own_liboping" = "xyes")
  
 +with_libowcapi_cppflags=""
 +with_libowcapi_libs="-lowcapi"
 +AC_ARG_WITH(libowcapi, [AS_HELP_STRING([--with-libowcapi@<:@=PREFIX@:>@], [Path to libowcapi.])],
 +[
 +      if test "x$withval" != "xno" && test "x$withval" != "xyes"
 +      then
 +              with_libowcapi_cppflags="-I$withval/include"
 +              with_libowcapi_libs="-L$withval/lib -lowcapi"
 +              with_libowcapi="yes"
 +      else
 +              with_libowcapi="$withval"
 +      fi
 +],
 +[
 +      with_libowcapi="yes"
 +])
 +if test "x$with_libowcapi" = "xyes"
 +then
 +      SAVE_CPPFLAGS="$CPPFLAGS"
 +      CPPFLAGS="$with_libowcapi_cppflags"
 +      
 +      AC_CHECK_HEADERS(owcapi.h, [with_libowcapi="yes"], [with_libowcapi="no (owcapi.h not found)"])
 +
 +      CPPFLAGS="$SAVE_CPPFLAGS"
 +fi
 +if test "x$with_libowcapi" = "xyes"
 +then
 +      SAVE_LDFLAGS="$LDFLAGS"
 +      SAVE_CPPFLAGS="$CPPFLAGS"
 +      LDFLAGS="$with_libowcapi_libs"
 +      CPPFLAGS="$with_libowcapi_cppflags"
 +      
 +      AC_CHECK_LIB(owcapi, OW_get, [with_libowcapi="yes"], [with_libowcapi="no (libowcapi not found)"])
 +
 +      LDFLAGS="$SAVE_LDFLAGS"
 +      CPPFLAGS="$SAVE_CPPFLAGS"
 +fi
 +if test "x$with_libowcapi" = "xyes"
 +then
 +      BUILD_WITH_LIBOWCAPI_CPPFLAGS="$with_libowcapi_cppflags"
 +      BUILD_WITH_LIBOWCAPI_LIBS="$with_libowcapi_libs"
 +      AC_SUBST(BUILD_WITH_LIBOWCAPI_CPPFLAGS)
 +      AC_SUBST(BUILD_WITH_LIBOWCAPI_LIBS)
 +fi
 +
 +
  AC_ARG_WITH(libpcap, [AS_HELP_STRING([--with-libpcap@<:@=PREFIX@:>@], [Path to libpcap.])],
  [
        if test "x$withval" != "xno" && test "x$withval" != "xyes"
@@@ -1575,52 -1520,10 +1587,52 @@@ AC_DEFINE_UNQUOTED(COLLECT_LIBPCAP, [$c
        [Wether or not to use the pcap library])
  AM_CONDITIONAL(BUILD_WITH_LIBPCAP, test "x$with_libpcap" = "xyes")
  
 +AC_ARG_WITH(libesmtp, [AS_HELP_STRING([--with-libesmtp@<:@=PREFIX@:>@], [Path to libesmtp.])],
 +[
 +      if test "x$withval" != "xno" && test "x$withval" != "xyes"
 +      then
 +              LDFLAGS="$LDFLAGS -L$withval/lib"
 +              CPPFLAGS="$CPPFLAGS -I$withval/include -D_THREAD_SAFE"
 +              with_libesmtp="yes"
 +      else
 +              with_libesmtp="$withval"
 +      fi
 +],
 +[
 +      with_libesmtp="yes"
 +])
 +if test "x$with_libesmtp" = "xyes"
 +then
 +      AC_CHECK_LIB(esmtp, smtp_create_session,
 +      [
 +              AC_DEFINE(HAVE_LIBESMTP, 1, [Define to 1 if you have the esmtp library (-lesmtp).])
 +      ], [with_libesmtp="no (libesmtp not found)"])
 +fi
 +if test "x$with_libesmtp" = "xyes"
 +then
 +      AC_CHECK_HEADERS(libesmtp.h,
 +      [
 +              AC_DEFINE(HAVE_LIBESMTP_H, 1, [Define to 1 if you have the <libesmtp.h> header file.])
 +      ], [with_libesmtp="no (libesmtp.h not found)"])
 +fi
 +if test "x$with_libesmtp" = "xyes"
 +then
 +      collect_libesmtp=1
 +else
 +      collect_libesmtp=0
 +fi
 +AC_DEFINE_UNQUOTED(COLLECT_LIBESMTP, [$collect_libesmtp],
 +      [Wether or not to use the esmtp library])
 +AM_CONDITIONAL(BUILD_WITH_LIBESMTP, test "x$with_libesmtp" = "xyes")
 +
  perl_interpreter="perl"
  AC_ARG_WITH(libperl, [AS_HELP_STRING([--with-libperl@<:@=PREFIX@:>@], [Path to libperl.])],
  [
 -      if test "x$withval" != "xno" && test "x$withval" != "xyes"
 +      if test -x "$withval"
 +      then
 +              perl_interpreter="$withval"
 +              with_libperl="yes"
 +      else if test "x$withval" != "xno" && test "x$withval" != "xyes"
        then
                LDFLAGS="$LDFLAGS -L$withval/lib"
                CPPFLAGS="$CPPFLAGS -I$withval/include"
                with_libperl="yes"
        else
                with_libperl="$withval"
 -      fi
 +      fi; fi
  ],
  [
        with_libperl="yes"
@@@ -1638,7 -1541,7 +1650,7 @@@ AC_MSG_CHECKING([for perl]
  perl_interpreter=`which "$perl_interpreter" 2> /dev/null`
  if test -x "$perl_interpreter"
  then
 -      AC_MSG_RESULT([yes])
 +      AC_MSG_RESULT([yes ($perl_interpreter)])
  else
        perl_interpreter=""
        AC_MSG_RESULT([no])
      AC_LINK_IFELSE(
        AC_LANG_PROGRAM(
        [[
 +#define PERL_NO_GET_CONTEXT
  #include <EXTERN.h>
  #include <perl.h>
  #include <XSUB.h>
        ]],
        [[
 -       PerlInterpreter *perl = NULL;
 -       Perl_load_module (perl, PERL_LOADMOD_NOIMPORT,
 +       dTHX;
 +       load_module (PERL_LOADMOD_NOIMPORT,
                         newSVpv ("Collectd::Plugin::FooBar", 24),
                         Nullsv);
        ]]),
  fi
  AM_CONDITIONAL(BUILD_WITH_LIBNETSNMP, test "x$with_libnetsnmp" = "xyes")
  
 +PKG_CHECK_MODULES([LIBNOTIFY], [libnotify],
 +              [with_libnotify="yes"],
 +              [with_libnotify="no ($LIBNOTIFY_PKG_ERRORS)"])
 +
  with_libupsclient="no (pkg-config isn't available)"
  with_libupsclient_cflags=""
  with_libupsclient_libs=""
        AC_SUBST(BUILD_WITH_OPENIPMI_LIBS)
  fi
  
 +dnl Check for libpq.
 +with_pg_config="pg_config"
 +with_libpq_includedir=""
 +with_libpq_libdir=""
 +with_libpq_cppflags=""
 +with_libpq_ldflags=""
 +AC_ARG_WITH(libpq, [AS_HELP_STRING([--with-libpq@<:@=PREFIX@:>@],
 +      [Path to libpq.])],
 +[
 +      if test "x$withval" = "xno"
 +      then
 +              with_libpq="no"
 +      else if test "x$withval" = "xyes"
 +      then
 +              with_libpq="yes"
 +      else
 +              if test -f "$withval" && test -x "$withval";
 +              then
 +                      with_pg_config="$withval"
 +              else if test -x "$withval/bin/pg_config"
 +              then
 +                      with_pg_config="$withval/bin/pg_config"
 +              fi; fi
 +              with_libpq="yes"
 +      fi; fi
 +],
 +[
 +      with_libpq="yes"
 +])
 +if test "x$with_libpq" = "xyes"
 +then
 +      with_libpq_includedir=`$with_pg_config --includedir 2> /dev/null`
 +      pg_config_status=$?
 +
 +      if test $pg_config_status -eq 0
 +      then
 +              if test -n "$with_libpq_includedir"; then
 +                      for dir in $with_libpq_includedir; do
 +                              with_libpq_cppflags="$with_libpq_cppflags -I$dir"
 +                      done
 +              fi
 +      else
 +              AC_MSG_WARN([$with_pg_config returned with status $pg_config_status])
 +      fi
 +
 +      SAVE_CPPFLAGS="$CPPFLAGS"
 +      CPPFLAGS="$CPPFLAGS $with_libpq_cppflags"
 +
 +      AC_CHECK_HEADERS(libpq-fe.h, [],
 +              [with_libpq="no (libpq-fe.h not found)"], [])
 +
 +      CPPFLAGS="$SAVE_CPPFLAGS"
 +fi
 +if test "x$with_libpq" = "xyes"
 +then
 +      with_libpq_libdir=`$with_pg_config --libdir 2> /dev/null`
 +      pg_config_status=$?
 +
 +      if test $pg_config_status -eq 0
 +      then
 +              if test -n "$with_libpq_libdir"; then
 +                      for dir in $with_libpq_libdir; do
 +                              with_libpq_ldflags="$with_libpq_ldflags -L$dir"
 +                      done
 +              fi
 +      else
 +              AC_MSG_WARN([$with_pg_config returned with status $pg_config_status])
 +      fi
 +
 +      SAVE_LDFLAGS="$LDFLAGS"
 +      LDFLAGS="$LDFLAGS $with_libpq_ldflags"
 +
 +      AC_CHECK_LIB(pq, PQconnectdb,
 +              [with_libpq="yes"],
 +              [with_libpq="no (symbol 'PQconnectdb' not found)"])
 +
 +      LDFLAGS="$SAVE_LDFLAGS"
 +fi
 +if test "x$with_libpq" = "xyes"
 +then
 +      BUILD_WITH_LIBPQ_CPPFLAGS="$with_libpq_cppflags"
 +      BUILD_WITH_LIBPQ_LDFLAGS="$with_libpq_ldflags"
 +      AC_SUBST(BUILD_WITH_LIBPQ_CPPFLAGS)
 +      AC_SUBST(BUILD_WITH_LIBPQ_LDFLAGS)
 +fi
 +AM_CONDITIONAL(BUILD_WITH_LIBPQ, test "x$with_libpq" = "xyes")
 +
  dnl Check for libvirt and libxml2 libraries.
  with_libxml2="no (pkg-config isn't available)"
  with_libxml2_cflags=""
@@@ -2522,7 -2333,6 +2534,7 @@@ plugin_serial="no
  plugin_swap="no"
  plugin_tape="no"
  plugin_tcpconns="no"
 +plugin_thermal="no"
  plugin_users="no"
  plugin_vmem="no"
  plugin_vserver="no"
@@@ -2545,7 -2355,6 +2557,7 @@@ the
        plugin_serial="yes"
        plugin_swap="yes"
        plugin_tcpconns="yes"
 +      plugin_thermal="yes"
        plugin_vmem="yes"
        plugin_vserver="yes"
        plugin_wireless="yes"
        fi
  fi
  
 +if test "x$ac_system" = "xOpenBSD"
 +then
 +      plugin_tcpconns="yes"
 +fi
 +
  # Mac OS X devices
  if test "x$with_libiokit" = "xyes"
  then
        plugin_processes="yes"
  fi
  
 +if test "x$with_kvm_getprocs" = "xyes"
 +then
 +      plugin_processes="yes"
 +fi
 +
  if test "x$with_kvm_getswapinfo" = "xyes"
  then
        plugin_swap="yes"
  fi
  
 +if test "x$with_kvm_nlist" = "xyes"
 +then
 +      plugin_tcpconns="yes"
 +fi
 +
  if test "x$have_getutent" = "xyes"
  then
        plugin_users="yes"
@@@ -2694,14 -2488,12 +2706,14 @@@ AC_PLUGIN([battery],     [$plugin_batte
  AC_PLUGIN([cpu],         [$plugin_cpu],        [CPU usage statistics])
  AC_PLUGIN([cpufreq],     [$plugin_cpufreq],    [CPU frequency statistics])
  AC_PLUGIN([csv],         [yes],                [CSV output plugin])
 +AC_PLUGIN([notify_desktop], [$with_libnotify], [Desktop notifications])
  AC_PLUGIN([df],          [$plugin_df],         [Filesystem usage statistics])
  AC_PLUGIN([disk],        [$plugin_disk],       [Disk usage statistics])
  AC_PLUGIN([dns],         [$with_libpcap],      [DNS traffic analysis])
  AC_PLUGIN([email],       [yes],                [EMail statistics])
  AC_PLUGIN([entropy],     [$plugin_entropy],    [Entropy statistics])
  AC_PLUGIN([exec],        [yes],                [Execution of external programs])
 +AC_PLUGIN([filecount],   [yes],                [Count files in directories])
  AC_PLUGIN([hddtemp],     [yes],                [Query hddtempd])
  AC_PLUGIN([interface],   [$plugin_interface],  [Interface traffic statistics])
  AC_PLUGIN([iptables],    [$with_libiptc],      [IPTables rule counters])
@@@ -2720,13 -2512,10 +2732,13 @@@ AC_PLUGIN([netlink],     [$with_libnetl
  AC_PLUGIN([network],     [yes],                [Network communication plugin])
  AC_PLUGIN([nfs],         [$plugin_nfs],        [NFS statistics])
  AC_PLUGIN([nginx],       [$with_libcurl],      [nginx statistics])
 +AC_PLUGIN([notify_email], [$with_libesmtp],    [Email notifier])
  AC_PLUGIN([ntpd],        [yes],                [NTPd statistics])
  AC_PLUGIN([nut],         [$with_libupsclient], [Network UPS tools statistics])
 +AC_PLUGIN([onewire],     [$with_libowcapi],    [OneWire sensor statistics])
  AC_PLUGIN([perl],        [$plugin_perl],       [Embed a Perl interpreter])
  AC_PLUGIN([ping],        [$with_liboping],     [Network latency statistics])
 +AC_PLUGIN([postgresql],  [$with_libpq],        [PostgreSQL database statistics])
  AC_PLUGIN([powerdns],    [yes],                [PowerDNS statistics])
  AC_PLUGIN([processes],   [$plugin_processes],  [Process statistics])
  AC_PLUGIN([rrdtool],     [$with_rrdtool],      [RRDTool output plugin])
@@@ -2739,7 -2528,6 +2751,7 @@@ AC_PLUGIN([tail],        [yes]
  AC_PLUGIN([tape],        [$plugin_tape],       [Tape drive statistics])
  AC_PLUGIN([tcpconns],    [$plugin_tcpconns],   [TCP connection statistics])
  AC_PLUGIN([teamspeak2],  [yes],                [TeamSpeak2 server statistics])
 +AC_PLUGIN([thermal],     [$plugin_thermal],    [Linux ACPI thermal zone statistics])
  AC_PLUGIN([unixsock],    [yes],                [Unixsock communication plugin])
  AC_PLUGIN([users],       [$plugin_users],      [User statistics])
  AC_PLUGIN([uuid],        [yes],                [UUID as hostname plugin])
@@@ -2821,100 -2609,91 +2833,100 @@@ cat <<EOF
  
  Configuration:
    Libraries:
 -    libcurl . . . . . . $with_libcurl
 -    libiokit  . . . . . $with_libiokit
 -    libiptc . . . . . . $with_libiptc
 -    libkstat  . . . . . $with_kstat
 -    libkvm  . . . . . . $with_libkvm
 -    libmysql  . . . . . $with_libmysql
 -    libnetlink  . . . . $with_libnetlink
 -    libnetsnmp  . . . . $with_libnetsnmp
 -    liboconfig  . . . . $with_liboconfig
 -    libopenipmi . . . . $with_libopenipmipthread
 -    liboping  . . . . . $with_liboping
 -    libpcap . . . . . . $with_libpcap
 -    libperl . . . . . . $with_libperl
 -    libpthread  . . . . $with_libpthread
 -    librrd  . . . . . . $with_rrdtool
 -    libsensors  . . . . $with_lm_sensors
 -    libstatgrab . . . . $with_libstatgrab
 -    libupsclient  . . . $with_libupsclient
 -    libvirt . . . . . . $with_libvirt
 -    libxml2 . . . . . . $with_libxml2
 -    libxmms . . . . . . $with_libxmms
 +    libcurl . . . . . . . $with_libcurl
 +    libesmtp  . . . . . . $with_libesmtp
 +    libiokit  . . . . . . $with_libiokit
 +    libiptc . . . . . . . $with_libiptc
 +    libkstat  . . . . . . $with_kstat
 +    libkvm  . . . . . . . $with_libkvm
 +    libmysql  . . . . . . $with_libmysql
 +    libnetlink  . . . . . $with_libnetlink
 +    libnetsnmp  . . . . . $with_libnetsnmp
 +    libnotify . . . . . . $with_libnotify
 +    liboconfig  . . . . . $with_liboconfig
 +    libopenipmi . . . . . $with_libopenipmipthread
 +    liboping  . . . . . . $with_liboping
 +    libpcap . . . . . . . $with_libpcap
 +    libperl . . . . . . . $with_libperl
 +    libpthread  . . . . . $with_libpthread
 +    libpq . . . . . . . . $with_libpq
 +    librrd  . . . . . . . $with_rrdtool
 +    libsensors  . . . . . $with_lm_sensors
 +    libstatgrab . . . . . $with_libstatgrab
 +    libupsclient  . . . . $with_libupsclient
 +    libvirt . . . . . . . $with_libvirt
 +    libxml2 . . . . . . . $with_libxml2
 +    libxmms . . . . . . . $with_libxmms
  
    Features:
 -    daemon mode . . . . $enable_daemon
 -    debug . . . . . . . $enable_debug
 +    daemon mode . . . . $enable_daemon
 +    debug . . . . . . . $enable_debug
  
    Bindings:
 -    perl  . . . . . . . $with_perl_bindings
 +    perl  . . . . . . . $with_perl_bindings
  
    Modules:
 -    apache  . . . . . . $enable_apache
 -    apcups  . . . . . . $enable_apcups
 -    apple_sensors . . . $enable_apple_sensors
 -    ascent  . . . . . . $enable_ascent
 -    battery . . . . . . $enable_battery
 -    cpu . . . . . . . . $enable_cpu
 -    cpufreq . . . . . . $enable_cpufreq
 -    csv . . . . . . . . $enable_csv
 -    df  . . . . . . . . $enable_df
 -    disk  . . . . . . . $enable_disk
 -    dns . . . . . . . . $enable_dns
 -    email . . . . . . . $enable_email
 -    entropy . . . . . . $enable_entropy
 -    exec  . . . . . . . $enable_exec
 -    hddtemp . . . . . . $enable_hddtemp
 -    interface . . . . . $enable_interface
 -    iptables  . . . . . $enable_iptables
 -    ipmi  . . . . . . . $enable_ipmi
 -    ipvs  . . . . . . . $enable_ipvs
 -    irq . . . . . . . . $enable_irq
 -    libvirt . . . . . . $enable_libvirt
 -    load  . . . . . . . $enable_load
 -    logfile . . . . . . $enable_logfile
 -    mbmon . . . . . . . $enable_mbmon
 -    memcached . . . . . $enable_memcached
 -    memory  . . . . . . $enable_memory
 -    multimeter  . . . . $enable_multimeter
 -    mysql . . . . . . . $enable_mysql
 -    netlink . . . . . . $enable_netlink
 -    network . . . . . . $enable_network
 -    nfs . . . . . . . . $enable_nfs
 -    nginx . . . . . . . $enable_nginx
 -    ntpd  . . . . . . . $enable_ntpd
 -    nut . . . . . . . . $enable_nut
 -    perl  . . . . . . . $enable_perl
 -    ping  . . . . . . . $enable_ping
 -    powerdns  . . . . . $enable_powerdns
 -    processes . . . . . $enable_processes
 -    rrdtool . . . . . . $enable_rrdtool
 -    sensors . . . . . . $enable_sensors
 -    serial  . . . . . . $enable_serial
 -    snmp  . . . . . . . $enable_snmp
 -    swap  . . . . . . . $enable_swap
 -    syslog  . . . . . . $enable_syslog
 -    tail  . . . . . . . $enable_tail
 -    tape  . . . . . . . $enable_tape
 -    tcpconns  . . . . . $enable_tcpconns
 -    teamspeak2  . . . . $enable_teamspeak2
 -    unixsock  . . . . . $enable_unixsock
 -    users . . . . . . . $enable_users
 -    uuid  . . . . . . . $enable_uuid
 -    vmem  . . . . . . . $enable_vmem
 -    vserver . . . . . . $enable_vserver
 -    wireless  . . . . . $enable_wireless
 -    xmms  . . . . . . . $enable_xmms
 +    apache  . . . . . . . $enable_apache
 +    apcups  . . . . . . . $enable_apcups
 +    apple_sensors . . . . $enable_apple_sensors
 +    ascent  . . . . . . . $enable_ascent
 +    battery . . . . . . . $enable_battery
 +    cpu . . . . . . . . . $enable_cpu
 +    cpufreq . . . . . . . $enable_cpufreq
 +    csv . . . . . . . . . $enable_csv
 +    df  . . . . . . . . . $enable_df
 +    disk  . . . . . . . . $enable_disk
 +    dns . . . . . . . . . $enable_dns
 +    email . . . . . . . . $enable_email
 +    entropy . . . . . . . $enable_entropy
 +    exec  . . . . . . . . $enable_exec
 +    filecount . . . . . . $enable_filecount
 +    hddtemp . . . . . . . $enable_hddtemp
 +    interface . . . . . . $enable_interface
 +    iptables  . . . . . . $enable_iptables
 +    ipmi  . . . . . . . . $enable_ipmi
 +    ipvs  . . . . . . . . $enable_ipvs
 +    irq . . . . . . . . . $enable_irq
 +    libvirt . . . . . . . $enable_libvirt
 +    load  . . . . . . . . $enable_load
 +    logfile . . . . . . . $enable_logfile
 +    mbmon . . . . . . . . $enable_mbmon
 +    memcached . . . . . . $enable_memcached
 +    memory  . . . . . . . $enable_memory
 +    multimeter  . . . . . $enable_multimeter
 +    mysql . . . . . . . . $enable_mysql
 +    netlink . . . . . . . $enable_netlink
 +    network . . . . . . . $enable_network
 +    nfs . . . . . . . . . $enable_nfs
 +    nginx . . . . . . . . $enable_nginx
 +    notify_desktop  . . . $enable_notify_desktop
 +    notify_email  . . . . $enable_notify_email
 +    ntpd  . . . . . . . . $enable_ntpd
 +    nut . . . . . . . . . $enable_nut
 +    onewire . . . . . . . $enable_onewire
 +    perl  . . . . . . . . $enable_perl
 +    ping  . . . . . . . . $enable_ping
 +    postgresql  . . . . . $enable_postgresql
 +    powerdns  . . . . . . $enable_powerdns
 +    processes . . . . . . $enable_processes
 +    rrdtool . . . . . . . $enable_rrdtool
 +    sensors . . . . . . . $enable_sensors
 +    serial  . . . . . . . $enable_serial
 +    snmp  . . . . . . . . $enable_snmp
 +    swap  . . . . . . . . $enable_swap
 +    syslog  . . . . . . . $enable_syslog
 +    tail  . . . . . . . . $enable_tail
 +    tape  . . . . . . . . $enable_tape
 +    tcpconns  . . . . . . $enable_tcpconns
 +    teamspeak2  . . . . . $enable_teamspeak2
 +    thermal . . . . . . . $enable_thermal
 +    unixsock  . . . . . . $enable_unixsock
 +    users . . . . . . . . $enable_users
 +    uuid  . . . . . . . . $enable_uuid
 +    vmem  . . . . . . . . $enable_vmem
 +    vserver . . . . . . . $enable_vserver
 +    wireless  . . . . . . $enable_wireless
 +    xmms  . . . . . . . . $enable_xmms
  
  EOF
  
diff --combined src/apcups.c
   *   Anthony Gialluca <tonyabg at charter.net>
   **/
  
- /*
-  * FIXME: Don't know why but without this here atof() was not returning
-  * correct values for me. This is behavior that I don't understand and
-  * should be examined in closer detail.
-  */
- #include <stdlib.h>
  #include "collectd.h"
  #include "common.h"      /* rrd_update_file */
  #include "plugin.h"      /* plugin_register, plugin_submit */
@@@ -124,7 -117,8 +117,7 @@@ static int net_open (char *host, int po
        assert ((port > 0x00000000) && (port <= 0x0000FFFF));
  
        /* Convert the port to a string */
 -      snprintf (port_str, 8, "%i", port);
 -      port_str[7] = '\0';
 +      ssnprintf (port_str, sizeof (port_str), "%i", port);
  
        /* Resolve name */
        memset ((void *) &ai_hints, '\0', sizeof (ai_hints));
@@@ -375,10 -369,9 +368,10 @@@ static void apc_submit_generic (char *t
        sstrncpy (vl.host, hostname_g, sizeof (vl.host));
        sstrncpy (vl.plugin, "apcups", sizeof (vl.plugin));
        sstrncpy (vl.plugin_instance, "", sizeof (vl.plugin_instance));
 -      strncpy (vl.type_instance, type_inst, sizeof (vl.type_instance));
 +      sstrncpy (vl.type, type, sizeof (vl.type));
 +      sstrncpy (vl.type_instance, type_inst, sizeof (vl.type_instance));
  
 -      plugin_dispatch_values (type, &vl);
 +      plugin_dispatch_values (&vl);
  }
  
  static void apc_submit (struct apc_detail_s *apcups_detail)
diff --combined src/configfile.c
@@@ -182,7 -182,8 +182,7 @@@ static int dispatch_global_option (cons
        else if (ci->values[0].type == OCONFIG_TYPE_NUMBER)
        {
                char tmp[128];
 -              snprintf (tmp, sizeof (tmp), "%lf", ci->values[0].value.number);
 -              tmp[127] = '\0';
 +              ssnprintf (tmp, sizeof (tmp), "%lf", ci->values[0].value.number);
                return (global_option_set (ci->key, tmp));
        }
        else if (ci->values[0].type == OCONFIG_TYPE_BOOLEAN)
@@@ -257,13 -258,13 +257,13 @@@ static int dispatch_value_plugin (cons
                int status = -1;
  
                if (ci->values[i].type == OCONFIG_TYPE_STRING)
 -                      status = snprintf (buffer_ptr, buffer_free, " %s",
 +                      status = ssnprintf (buffer_ptr, buffer_free, " %s",
                                        ci->values[i].value.string);
                else if (ci->values[i].type == OCONFIG_TYPE_NUMBER)
 -                      status = snprintf (buffer_ptr, buffer_free, " %lf",
 +                      status = ssnprintf (buffer_ptr, buffer_free, " %lf",
                                        ci->values[i].value.number);
                else if (ci->values[i].type == OCONFIG_TYPE_BOOLEAN)
 -                      status = snprintf (buffer_ptr, buffer_free, " %s",
 +                      status = ssnprintf (buffer_ptr, buffer_free, " %s",
                                        ci->values[i].value.boolean
                                        ? "true" : "false");
  
        buffer_ptr = buffer + 1;
  
        return (cf_dispatch (plugin, ci->key, buffer_ptr));
- } /* int plugin_conf_dispatch */
+ } /* int dispatch_value_plugin */
  
  static int dispatch_value (const oconfig_item_t *ci)
  {
@@@ -547,7 -548,7 +547,7 @@@ static oconfig_item_t *cf_read_dir (con
                if ((de->d_name[0] == '.') || (de->d_name[0] == '\0'))
                        continue;
  
 -              status = snprintf (name, sizeof (name), "%s/%s",
 +              status = ssnprintf (name, sizeof (name), "%s/%s",
                                dir, de->d_name);
                if (status >= sizeof (name))
                {
diff --combined src/mysql.c
@@@ -24,7 -24,9 +24,9 @@@
  #include "plugin.h"
  #include "configfile.h"
  
- #ifdef HAVE_MYSQL_MYSQL_H
+ #ifdef HAVE_MYSQL_H
+ #include <mysql.h>
+ #elif defined(HAVE_MYSQL_MYSQL_H)
  #include <mysql/mysql.h>
  #endif
  
@@@ -128,10 -130,9 +130,10 @@@ static void counter_submit (const char 
        vl.time = time (NULL);
        sstrncpy (vl.host, hostname_g, sizeof (vl.host));
        sstrncpy (vl.plugin, "mysql", sizeof (vl.plugin));
 -      strncpy (vl.type_instance, type_instance, sizeof (vl.type_instance));
 +      sstrncpy (vl.type, type, sizeof (vl.type));
 +      sstrncpy (vl.type_instance, type_instance, sizeof (vl.type_instance));
  
 -      plugin_dispatch_values (type, &vl);
 +      plugin_dispatch_values (&vl);
  } /* void counter_submit */
  
  static void qcache_submit (counter_t hits, counter_t inserts,
        vl.time = time (NULL);
        sstrncpy (vl.host, hostname_g, sizeof (vl.host));
        sstrncpy (vl.plugin, "mysql", sizeof (vl.plugin));
 +      sstrncpy (vl.type, "mysql_qcache", sizeof (vl.type));
  
 -      plugin_dispatch_values ("mysql_qcache", &vl);
 +      plugin_dispatch_values (&vl);
  } /* void qcache_submit */
  
  static void threads_submit (gauge_t running, gauge_t connected, gauge_t cached,
        vl.time = time (NULL);
        sstrncpy (vl.host, hostname_g, sizeof (vl.host));
        sstrncpy (vl.plugin, "mysql", sizeof (vl.plugin));
 +      sstrncpy (vl.type, "mysql_threads", sizeof (vl.type));
  
 -      plugin_dispatch_values ("mysql_threads", &vl);
 +      plugin_dispatch_values (&vl);
  } /* void threads_submit */
  
  static void traffic_submit (counter_t rx, counter_t tx)
        vl.time = time (NULL);
        sstrncpy (vl.host, hostname_g, sizeof (vl.host));
        sstrncpy (vl.plugin, "mysql", sizeof (vl.plugin));
 +      sstrncpy (vl.type, "mysql_octets", sizeof (vl.type));
  
 -      plugin_dispatch_values ("mysql_octets", &vl);
 +      plugin_dispatch_values (&vl);
  } /* void traffic_submit */
  
  static int mysql_read (void)
diff --combined src/utils_dns.c
@@@ -34,7 -34,6 +34,7 @@@
   */
  
  #include "collectd.h"
 +#include "common.h"
  
  #if HAVE_NETINET_IN_SYSTM_H
  # include <netinet/in_systm.h>
@@@ -385,13 -384,13 +385,13 @@@ handle_dns(const char *buf, int len
      if (0 != x)
        return 0;
      if ('\0' == qh.qname[0])
 -      strncpy (qh.qname, ".", sizeof (qh.qname));
 +      sstrncpy (qh.qname, ".", sizeof (qh.qname));
      while ((t = strchr(qh.qname, '\n')))
        *t = ' ';
      while ((t = strchr(qh.qname, '\r')))
        *t = ' ';
      for (t = qh.qname; *t; t++)
-       *t = tolower(*t);
+       *t = tolower((int) *t);
  
      memcpy(&us, buf + offset, 2);
      qh.qtype = ntohs(us);
@@@ -816,7 -815,8 +816,7 @@@ const char *qtype_str(int t
            case T_ANY:         return ("ANY"); /* ... 255 */
  #endif /* __BIND >= 19950621 */
            default:
 -                  snprintf (buf, 32, "#%i", t);
 -                  buf[31] = '\0';
 +                  ssnprintf (buf, sizeof (buf), "#%i", t);
                    return (buf);
      }; /* switch (t) */
      /* NOTREACHED */
@@@ -843,7 -843,7 +843,7 @@@ const char *opcode_str (int o
        return "Update";
        break;
      default:
 -      snprintf(buf, 30, "Opcode%d", o);
 +      ssnprintf(buf, sizeof (buf), "Opcode%d", o);
        return buf;
      }
      /* NOTREACHED */
@@@ -887,7 -887,8 +887,7 @@@ const char *rcode_str (int rcode
  #endif  /* RFC2136 rcodes */
  #endif /* __BIND >= 19950621 */
                default:
 -                      snprintf (buf, 32, "RCode%i", rcode);
 -                      buf[31] = '\0';
 +                      ssnprintf (buf, sizeof (buf), "RCode%i", rcode);
                        return (buf);
        }
        /* Never reached */