From 356b68ae1fad8d9e03028d8b5e918bcbe8aaaa2a Mon Sep 17 00:00:00 2001 From: William Brown Date: Wed, 13 Apr 2016 14:07:44 +1000 Subject: [PATCH] Ticket 47968 - Disable journald logs by default Bug Description: Due to performance, security, and other issues with journald we cannot support this in most installs. Fix Description: This adds a default-off configure switch for journald as part of systemd, until such time the issues with journald are resolved. https://fedorahosted.org/389/ticket/47968 Author: wibrown Review by: ??? --- configure | 62 +++++++++++++++++++++++++++++++++++++++++++---- ldap/servers/slapd/log.c | 14 +++++------ ldap/servers/slapd/slap.h | 4 ++- m4/systemd.m4 | 37 ++++++++++++++++++++++++---- 4 files changed, 99 insertions(+), 18 deletions(-) diff --git a/configure b/configure index ecdc5ee..1cf5ecb 100755 --- a/configure +++ b/configure @@ -693,6 +693,8 @@ OPENLDAP_TRUE SELINUX_FALSE SELINUX_TRUE PACKAGE_BASE_VERSION +JOURNALD_FALSE +JOURNALD_TRUE SYSTEMD_FALSE SYSTEMD_TRUE with_systemdgroupname @@ -973,6 +975,7 @@ with_nunc_stans with_nunc_stans_inc with_nunc_stans_lib with_systemd +with_journald with_systemdsystemunitdir with_systemdsystemconfdir with_systemdgroupname @@ -1733,6 +1736,8 @@ Optional Packages: --with-nunc-stans-lib=PATH nunc-stans library directory --with-systemd Enable Systemd native integration. + --with-journald Enable Journald native integration. WARNING, this + may cause system instability --with-systemdsystemunitdir=PATH Directory for systemd service files (default: $with_systemdsystemunitdir) @@ -21180,6 +21185,29 @@ fi if test "$with_systemd" = yes; then + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for --with-journald" >&5 +$as_echo_n "checking for --with-journald... " >&6; } + +# Check whether --with-journald was given. +if test "${with_journald+set}" = set; then : + withval=$with_journald; + if test "$withval" = yes + then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: using journald logging: WARNING, this may cause system instability" >&5 +$as_echo "using journald logging: WARNING, this may cause system instability" >&6; } + with_systemd=yes + else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + fi + +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + # Extract the first word of "pkg-config", so it can be a program name with args. set dummy pkg-config; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 @@ -21222,12 +21250,24 @@ fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Systemd with pkg-config" >&5 $as_echo_n "checking for Systemd with pkg-config... " >&6; } - if test -n "$PKG_CONFIG" && $PKG_CONFIG --exists systemd libsystemd-journal libsystemd-daemon ; then - systemd_inc=`$PKG_CONFIG --cflags-only-I systemd libsystemd-journal libsystemd-daemon` - systemd_lib=`$PKG_CONFIG --libs-only-l systemd libsystemd-journal libsystemd-daemon` - systemd_defs="-DWITH_SYSTEMD" + if test "$with_journald" = yes; then + + if test -n "$PKG_CONFIG" && $PKG_CONFIG --exists systemd libsystemd-journal libsystemd-daemon ; then + systemd_inc=`$PKG_CONFIG --cflags-only-I systemd libsystemd-journal libsystemd-daemon` + systemd_lib=`$PKG_CONFIG --libs-only-l systemd libsystemd-journal libsystemd-daemon` + systemd_defs="-DWITH_SYSTEMD -DHAVE_JOURNALD" + else + as_fn_error $? "no Systemd / Journald pkg-config files" "$LINENO" 5 + fi else - as_fn_error $? "no Systemd / Journald pkg-config files" "$LINENO" 5 + + if test -n "$PKG_CONFIG" && $PKG_CONFIG --exists systemd libsystemd-daemon ; then + systemd_inc=`$PKG_CONFIG --cflags-only-I systemd libsystemd-daemon` + systemd_lib=`$PKG_CONFIG --libs-only-l systemd libsystemd-daemon` + systemd_defs="-DWITH_SYSTEMD" + else + as_fn_error $? "no Systemd pkg-config files" "$LINENO" 5 + fi fi # Check for the pkg config provided unit paths @@ -21319,6 +21359,14 @@ else SYSTEMD_FALSE= fi + if test -n "$with_journald"; then + JOURNALD_TRUE= + JOURNALD_FALSE='#' +else + JOURNALD_TRUE='#' + JOURNALD_FALSE= +fi + @@ -21660,6 +21708,10 @@ if test -z "${SYSTEMD_TRUE}" && test -z "${SYSTEMD_FALSE}"; then as_fn_error $? "conditional \"SYSTEMD\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi +if test -z "${JOURNALD_TRUE}" && test -z "${JOURNALD_FALSE}"; then + as_fn_error $? "conditional \"JOURNALD\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi if test -z "${SELINUX_TRUE}" && test -z "${SELINUX_FALSE}"; then as_fn_error $? "conditional \"SELINUX\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 diff --git a/ldap/servers/slapd/log.c b/ldap/servers/slapd/log.c index 34ca10d..13f98bb 100644 --- a/ldap/servers/slapd/log.c +++ b/ldap/servers/slapd/log.c @@ -412,7 +412,7 @@ log_set_backend(const char *attrname, char *value, int logtype, char *errorbuf, backend |= LOGGING_BACKEND_INTERNAL; } else if (slapi_UTF8NCASECMP(backendstr, "syslog", 6) == 0) { backend |= LOGGING_BACKEND_SYSLOG; -#ifdef WITH_SYSTEMD +#ifdef HAVE_JOURNALD } else if (slapi_UTF8NCASECMP(backendstr, "journald", 8) == 0 ) { backend |= LOGGING_BACKEND_JOURNALD; #endif @@ -422,7 +422,7 @@ log_set_backend(const char *attrname, char *value, int logtype, char *errorbuf, if ( !( backend & LOGGING_BACKEND_INTERNAL) && ! (backend & LOGGING_BACKEND_SYSLOG) -#ifdef WITH_SYSTEMD +#ifdef HAVE_JOURNALD && ! (backend & LOGGING_BACKEND_JOURNALD) #endif ) { @@ -1993,7 +1993,7 @@ slapd_log_audit ( /* This returns void, so we hope it worked */ syslog(LOG_NOTICE, "%s", buffer); } -#ifdef WITH_SYSTEMD +#ifdef HAVE_JOURNALD if (lbackend & LOGGING_BACKEND_JOURNALD) { retval = sd_journal_print(LOG_NOTICE, "%s", buffer); } @@ -2052,7 +2052,7 @@ slapd_log_auditfail ( /* This returns void, so we hope it worked */ syslog(LOG_NOTICE, "%s", buffer); } -#ifdef WITH_SYSTEMD +#ifdef HAVE_JOURNALD if (lbackend & LOGGING_BACKEND_JOURNALD) { retval = sd_journal_print(LOG_NOTICE, "%s", buffer); } @@ -2122,7 +2122,7 @@ slapd_log_error_proc( /* va_end(ap_file); */ va_end(ap_err); } -#ifdef WITH_SYSTEMD +#ifdef HAVE_JOURNALD if (loginfo.log_backend & LOGGING_BACKEND_JOURNALD) { va_start( ap_err, fmt ); /* va_start( ap_file, fmt ); */ @@ -2364,7 +2364,7 @@ slapi_log_error( int severity, char *subsystem, char *fmt, ... ) /* va_end(ap_file); */ va_end(ap_err); } -#ifdef WITH_SYSTEMD +#ifdef HAVE_JOURNALD if (lbackend & LOGGING_BACKEND_JOURNALD) { va_start( ap_err, fmt ); /* va_start( ap_file, fmt ); */ @@ -2504,7 +2504,7 @@ slapi_log_access( int level, vsyslog(LOG_INFO, fmt, ap); va_end( ap ); } -#ifdef WITH_SYSTEMD +#ifdef HAVE_JOURNALD if (lbackend & LOGGING_BACKEND_JOURNALD) { va_start (ap, fmt ); rc = sd_journal_printv(LOG_INFO, fmt, ap); diff --git a/ldap/servers/slapd/slap.h b/ldap/servers/slapd/slap.h index 57bed0e..0019c68 100644 --- a/ldap/servers/slapd/slap.h +++ b/ldap/servers/slapd/slap.h @@ -126,7 +126,9 @@ typedef struct symbol_t { #endif #ifdef WITH_SYSTEMD +#ifdef HAVE_JOURNALD #include +#endif #include #endif @@ -1897,7 +1899,7 @@ typedef struct _slapdEntryPoints { #define LOGGING_BACKEND_INTERNAL 0x1 #define LOGGING_BACKEND_SYSLOG 0x2 -#ifdef WITH_SYSTEMD +#ifdef HAVE_JOURNALD #define LOGGING_BACKEND_JOURNALD 0x4 #endif diff --git a/m4/systemd.m4 b/m4/systemd.m4 index d91a9da..939af4f 100644 --- a/m4/systemd.m4 +++ b/m4/systemd.m4 @@ -23,14 +23,40 @@ AC_ARG_WITH(systemd, AS_HELP_STRING([--with-systemd],[Enable Systemd native inte AC_MSG_RESULT(no)) if test "$with_systemd" = yes; then + + AC_MSG_CHECKING(for --with-journald) + AC_ARG_WITH(journald, AS_HELP_STRING([--with-journald],[Enable Journald native integration. WARNING, this may cause system instability]), + [ + if test "$withval" = yes + then + AC_MSG_RESULT([using journald logging: WARNING, this may cause system instability]) + with_systemd=yes + else + AC_MSG_RESULT(no) + fi + ], + AC_MSG_RESULT(no)) + AC_PATH_PROG(PKG_CONFIG, pkg-config) AC_MSG_CHECKING(for Systemd with pkg-config) - if test -n "$PKG_CONFIG" && $PKG_CONFIG --exists systemd libsystemd-journal libsystemd-daemon ; then - systemd_inc=`$PKG_CONFIG --cflags-only-I systemd libsystemd-journal libsystemd-daemon` - systemd_lib=`$PKG_CONFIG --libs-only-l systemd libsystemd-journal libsystemd-daemon` - systemd_defs="-DWITH_SYSTEMD" + if test "$with_journald" = yes; then + + if test -n "$PKG_CONFIG" && $PKG_CONFIG --exists systemd libsystemd-journal libsystemd-daemon ; then + systemd_inc=`$PKG_CONFIG --cflags-only-I systemd libsystemd-journal libsystemd-daemon` + systemd_lib=`$PKG_CONFIG --libs-only-l systemd libsystemd-journal libsystemd-daemon` + systemd_defs="-DWITH_SYSTEMD -DHAVE_JOURNALD" + else + AC_MSG_ERROR([no Systemd / Journald pkg-config files]) + fi else - AC_MSG_ERROR([no Systemd / Journald pkg-config files]) + + if test -n "$PKG_CONFIG" && $PKG_CONFIG --exists systemd libsystemd-daemon ; then + systemd_inc=`$PKG_CONFIG --cflags-only-I systemd libsystemd-daemon` + systemd_lib=`$PKG_CONFIG --libs-only-l systemd libsystemd-daemon` + systemd_defs="-DWITH_SYSTEMD" + else + AC_MSG_ERROR([no Systemd pkg-config files]) + fi fi # Check for the pkg config provided unit paths @@ -101,4 +127,5 @@ fi # End of with_systemd AM_CONDITIONAL([SYSTEMD],[test -n "$with_systemd"]) +AM_CONDITIONAL([JOURNALD],[test -n "$with_journald"]) -- 2.5.5