You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
gentoo-overlay/app-admin/syslog-ng/files/syslog-ng-3.3.5-utmpx.patch

140 lines
3.8 KiB

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