public inbox for gentoo-commits@lists.gentoo.org
 help / color / mirror / Atom feed
* [gentoo-commits] gentoo-x86 commit in app-admin/syslog-ng/files: syslog-ng-3.3.5-threading.patch syslog-ng-3.3.5-utmpx.patch
@ 2012-06-08 18:50 Michael Sterrett (mr_bones_)
  0 siblings, 0 replies; only message in thread
From: Michael Sterrett (mr_bones_) @ 2012-06-08 18:50 UTC (permalink / raw
  To: gentoo-commits

mr_bones_    12/06/08 18:50:14

  Added:                syslog-ng-3.3.5-threading.patch
                        syslog-ng-3.3.5-utmpx.patch
  Log:
  Add a couple of upstream patches
  
  (Portage version: 2.1.10.49/cvs/Linux x86_64)

Revision  Changes    Path
1.1                  app-admin/syslog-ng/files/syslog-ng-3.3.5-threading.patch

file : http://sources.gentoo.org/viewvc.cgi/gentoo-x86/app-admin/syslog-ng/files/syslog-ng-3.3.5-threading.patch?rev=1.1&view=markup
plain: http://sources.gentoo.org/viewvc.cgi/gentoo-x86/app-admin/syslog-ng/files/syslog-ng-3.3.5-threading.patch?rev=1.1&content-type=text/plain

Index: syslog-ng-3.3.5-threading.patch
===================================================================
From c0afec5b46eb3508fd3b1449e37b7e550f7d35e2 Mon Sep 17 00:00:00 2001
From: Gergely Nagy <algernon@balabit.hu>
Date: Fri, 08 Jun 2012 15:28:33 +0200
Subject: dnscache: Fix a memory corruption when destroying the DNS cache

The DNS cache gets destroyed every time a worker thread quits, which
is fine, as most of the dns cache variables are thread local.

However, dns_cache_hosts is not, it's a global static, and
dns_cache_destroy() was freeing that aswell.

The solution is to not free dns_cache_hosts when a worker stops, but
do so when syslog-ng stops. This patch introduces dns_cache_deinit()
which does just that, and removes the same thing from
dns_cache_destroy(), which now only touches thread-local variables.

Reported-by: EgonB <egon@local.ee>
Signed-off-by: Gergely Nagy <algernon@balabit.hu>
---
diff --git a/lib/dnscache.c b/lib/dnscache.c
index 49102b7..9cdc2c0 100644
--- a/lib/dnscache.c
+++ b/lib/dnscache.c
@@ -361,6 +361,12 @@ dns_cache_destroy(void)
   cache_last.prev = NULL;
   persist_first.next = NULL;
   persist_last.prev = NULL;
+}
+
+void
+dns_cache_deinit(void)
+{
   if (dns_cache_hosts)
     g_free(dns_cache_hosts);
+  dns_cache_hosts = NULL;
 }
diff --git a/lib/dnscache.h b/lib/dnscache.h
index 8bae5f1..647ba19 100644
--- a/lib/dnscache.h
+++ b/lib/dnscache.h
@@ -34,5 +34,6 @@ void dns_cache_store(gboolean persistent, gint family, void *addr, const gchar *
 void dns_cache_set_params(gint cache_size, gint expire, gint expire_failed, const gchar *hosts);
 void dns_cache_init(void);
 void dns_cache_destroy(void);
+void dns_cache_deinit(void);
 
 #endif
diff --git a/lib/mainloop.c b/lib/mainloop.c
index 1203098..e294fa3 100644
--- a/lib/mainloop.c
+++ b/lib/mainloop.c
@@ -585,6 +585,7 @@ main_loop_exit_finish(void)
   /* deinit the current configuration, as at this point we _know_ that no
    * threads are running.  This will unregister ivykis tasks and timers
    * that could fire while the configuration is being destructed */
+  dns_cache_deinit();
   cfg_deinit(current_configuration);
   iv_quit();
 }
--
cgit v0.8.3.4-1-gaabc



1.1                  app-admin/syslog-ng/files/syslog-ng-3.3.5-utmpx.patch

file : http://sources.gentoo.org/viewvc.cgi/gentoo-x86/app-admin/syslog-ng/files/syslog-ng-3.3.5-utmpx.patch?rev=1.1&view=markup
plain: http://sources.gentoo.org/viewvc.cgi/gentoo-x86/app-admin/syslog-ng/files/syslog-ng-3.3.5-utmpx.patch?rev=1.1&content-type=text/plain

Index: syslog-ng-3.3.5-utmpx.patch
===================================================================
From 4b450a09da83bc8e27bd7c8adccea3f125387fa7 Mon Sep 17 00:00:00 2001
From: Gergely Nagy <algernon@balabit.hu>
Date: Tue, 5 Jun 2012 14:40:08 +0200
Subject: [PATCH] afuser: Use utmpx when available, instead of utmp

FreeBSD 9 removed support for utmp, and one must use the
POSIX-specified utmpx instead. The same utmpx is available on Linux
too (and it is the same as utmp there).

The patch below converts afuser to use utmpx when available, utmp
otherwise. It is based on the post-build sed magic applied to
syslog-ng within the FreeBSD ports collection, with other bits based
on a patch from Alex Zimnitsky.

Signed-off-by: Gergely Nagy <algernon@balabit.hu>
---
 configure.in            |    4 ++--
 lib/utils.c             |    2 +-
 lib/utils.h             |    7 ++++++-
 modules/afuser/afuser.c |   20 +++++++++++++++++++-
 4 files changed, 28 insertions(+), 5 deletions(-)

diff --git a/configure.in b/configure.in
index aafb980..c76d7d9 100644
--- a/configure.in
+++ b/configure.in
@@ -383,7 +383,7 @@ dnl ***************************************************************************
 
 AC_HEADER_STDC
 AC_CHECK_HEADER(dmalloc.h)
-AC_CHECK_HEADERS(strings.h getopt.h stropts.h sys/strlog.h door.h sys/capability.h sys/prctl.h)
+AC_CHECK_HEADERS(strings.h getopt.h stropts.h sys/strlog.h door.h sys/capability.h sys/prctl.h utmpx.h)
 AC_CHECK_HEADERS(tcpd.h)
 
 
@@ -479,7 +479,7 @@ if test "x$enable_linux_caps" = "xyes" -o "x$enable_linux_caps" = "xauto"; then
 	AC_CHECK_LIB(cap, cap_set_proc, LIBCAP_LIBS="-lcap")
 fi
 
-AC_CHECK_FUNCS(strdup strtol strtoll strtoimax inet_aton inet_ntoa getopt_long getaddrinfo getutent pread pwrite strcasestr memrchr localtime_r gmtime_r)
+AC_CHECK_FUNCS(strdup strtol strtoll strtoimax inet_aton inet_ntoa getopt_long getaddrinfo getutent getutxent pread pwrite strcasestr memrchr localtime_r gmtime_r)
 old_LIBS=$LIBS
 LIBS=$BASE_LIBS
 AC_CHECK_FUNCS(clock_gettime)
diff --git a/lib/utils.c b/lib/utils.c
index 2b5c525..3c05426 100644
--- a/lib/utils.c
+++ b/lib/utils.c
@@ -47,7 +47,7 @@ int inet_aton(const char *cp, struct in_addr *addr)
 }
 #endif
 
-#ifndef HAVE_GETUTENT
+#if !defined(HAVE_GETUTENT) && !defined(HAVE_GETUTXENT)
 
 static int utent_fd = -1;
 
diff --git a/lib/utils.h b/lib/utils.h
index 86e3a7f..a0f3dcc 100644
--- a/lib/utils.h
+++ b/lib/utils.h
@@ -28,13 +28,18 @@
 #include <sys/types.h>
 #include <sys/socket.h>
 #include <netinet/in.h>
+
+#ifdef HAVE_UTMPX_H
+#include <utmpx.h>
+#else
 #include <utmp.h>
+#endif
 
 #ifndef HAVE_INET_ATON
 int inet_aton(const char *cp, struct in_addr *addr);
 #endif
 
-#ifndef HAVE_GETUTENT
+#if !defined(HAVE_GETUTENT) && !defined(HAVE_GETUTXENT)
 struct utmp *getutent(void);
 void endutent(void);
 #endif
diff --git a/modules/afuser/afuser.c b/modules/afuser/afuser.c
index 8f170e5..7d082b2 100644
--- a/modules/afuser/afuser.c
+++ b/modules/afuser/afuser.c
@@ -25,7 +25,13 @@
 #include "alarms.h"
 #include "messages.h"
 
+#ifdef HAVE_UTMPX_H
+#include <utmpx.h>
+#define ut_name ut_user
+#else
 #include <utmp.h>
+#endif
+
 #include <string.h>
 #include <fcntl.h>
 #include <unistd.h>
@@ -46,7 +52,11 @@
 {
   AFUserDestDriver *self = (AFUserDestDriver *) s;
   gchar buf[8192];
+#ifdef HAVE_UTMPX_H
+  struct utmpx *ut;
+#else
   struct utmp *ut;
+#endif
   GString *timestamp;
   time_t now;
   
@@ -63,7 +73,11 @@
   g_string_free(timestamp, TRUE);
   
   /* NOTE: there's a private implementations of getutent in utils.c on Systems which do not provide one. */
-  while ((ut = getutent())) 
+#ifdef HAVE_GETUTXENT
+  while ((ut = getutxent()))
+#else
+  while ((ut = getutent()))
+#endif
     {
 #if HAVE_MODERN_UTMP
       if (ut->ut_type == USER_PROCESS &&
@@ -106,7 +120,11 @@
             }
         }
     }
+#if HAVE_UTMPX_H
+  endutxent();
+#else
   endutent();
+#endif
 finish:
   log_msg_ack(msg, path_options);
   log_msg_unref(msg);
-- 
1.7.10







^ permalink raw reply related	[flat|nested] only message in thread

only message in thread, other threads:[~2012-06-08 18:50 UTC | newest]

Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2012-06-08 18:50 [gentoo-commits] gentoo-x86 commit in app-admin/syslog-ng/files: syslog-ng-3.3.5-threading.patch syslog-ng-3.3.5-utmpx.patch Michael Sterrett (mr_bones_)

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox