>From 0f55887f603d7492e2dd0a4a2b5dfe4e02a734ae Mon Sep 17 00:00:00 2001 From: Jakub Hrozek Date: Thu, 5 Sep 2013 06:52:15 +0200 Subject: [PATCH 1/2] Add journald support --- Makefile.am | 6 ++++++ configure.ac | 6 ++++++ src/conf_macros.m4 | 22 ++++++++++++++++++++++ src/external/systemd.m4 | 13 +++++++++++++ src/util/sss_log.c | 35 +++++++++++++++++++++++++++++++++++ 5 files changed, 82 insertions(+) diff --git a/Makefile.am b/Makefile.am index 610f149984d6fd9c98adc95a6dd1fac21c3f87cf..034002324b5c0014db2e79341f71695d6265e190 100644 --- a/Makefile.am +++ b/Makefile.am @@ -279,6 +279,7 @@ AM_CPPFLAGS = \ $(LIBNL_CFLAGS) \ $(OPENLDAP_CFLAGS) \ $(GLIB2_CFLAGS) \ + $(JOURNALD_CFLAGS) \ -DLIBDIR=\"$(libdir)\" \ -DVARDIR=\"$(localstatedir)\" \ -DSHLIBEXT=\"$(SHLIBEXT)\" \ @@ -516,6 +517,10 @@ if HAVE_PTHREAD CLIENT_LIBS += -lpthread endif +if WITH_JOURNALD +SYSLOG_LIBS = $(JOURNALD_LIBS) +endif + ##################### # Utility libraries # ##################### @@ -524,6 +529,7 @@ libsss_debug_la_SOURCES = \ src/util/debug.c \ src/util/sss_log.c libsss_debug_la_LDFLAGS = \ + $(SYSLOG_LIBS) \ -avoid-version pkglib_LTLIBRARIES += libsss_child.la diff --git a/configure.ac b/configure.ac index c389bec4f2600568e73be4034d29ebcc44bb047f..d28d55f3b0eb35cc4ecc02ae9b1fafbcb9588dcf 100644 --- a/configure.ac +++ b/configure.ac @@ -125,6 +125,7 @@ WITH_SUDO_LIB_PATH WITH_AUTOFS WITH_SSH WITH_CRYPTO +WITH_SYSLOG m4_include([src/external/pkg.m4]) m4_include([src/external/libpopt.m4]) @@ -245,6 +246,11 @@ if test x$HAVE_SYSTEMD_UNIT != x; then AM_CHECK_SYSTEMD fi +dnl If journald was selected for logging, configure journald +if test x$syslog = xjournald; then + AM_CHECK_JOURNALD +fi + if test x$cryptolib = xnss; then AM_CHECK_NSS fi diff --git a/src/conf_macros.m4 b/src/conf_macros.m4 index b4db0b4a2b34e69734402f2f4a4c2ccadbf94fb8..7f99cbb870b258ad35a51dbe0e6e044c57fcd11a 100644 --- a/src/conf_macros.m4 +++ b/src/conf_macros.m4 @@ -152,6 +152,28 @@ AC_DEFUN([WITH_INITSCRIPT], AC_MSG_NOTICE([Will use init script type: $initscript]) ]) +AC_DEFUN([WITH_SYSLOG], + [ AC_ARG_WITH([syslog], + [AC_HELP_STRING([--with-syslog=SYSLOG_TYPE], + [Type of your system logger (syslog|journald). [syslog]] + ) + ] + ) + default_syslog=syslog + if test x"$with_syslog" = x; then + with_syslog=$default_syslog + fi + + if test x"$with_syslog" = xsyslog || \ + test x"$with_syslog" = xjournald; then + syslog=$with_syslog + else + AC_MSG_ERROR([Uknown syslog type, supported types are syslog and journald]) + fi + + AM_CONDITIONAL([WITH_JOURNALD], [test x"$syslog" = xjournald]) + ]) + AC_DEFUN([WITH_ENVIRONMENT_FILE], [ AC_ARG_WITH([environment_file], [AC_HELP_STRING([--with-environment-file=PATH], [Path to environment file [/etc/sysconfig/sssd]]) diff --git a/src/external/systemd.m4 b/src/external/systemd.m4 index 202915a560e54ba92912ad8f289ae33e1d1a001f..8e0a5b6a79a97f5e77a2b5fb0204dcc815dbe85e 100644 --- a/src/external/systemd.m4 +++ b/src/external/systemd.m4 @@ -6,7 +6,20 @@ AC_DEFUN([AM_CHECK_SYSTEMD], [AC_MSG_ERROR([Could not detect systemd presence])] ) ]) + AM_COND_IF([HAVE_SYSTEMD], [PKG_CHECK_MODULES([SYSTEMD_LOGIN], [libsystemd-login], [AC_DEFINE_UNQUOTED(HAVE_SYSTEMD_LOGIN, 1, [Build with libsystemdlogin support])], [AC_DEFINE_UNQUOTED(HAVE_SYSTEMD_LOGIN, 0, [Build without libsystemd-login support])])]) + +dnl A macro to check presence of journald on the system +AC_DEFUN([AM_CHECK_JOURNALD], +[ + PKG_CHECK_MODULES(JOURNALD, + libsystemd-journal, + [AC_DEFINE_UNQUOTED([WITH_JOURNALD], 1, [journald is available])]) + dnl Some older versions of pkg-config might not set these automatically + dnl while setting CFLAGS and LIBS manually twice doesn't hurt. + AC_SUBST([JOURNALD_CFLAGS]) + AC_SUBST([JOURNALD_LIBS]) +]) diff --git a/src/util/sss_log.c b/src/util/sss_log.c index 45e883109a0a45a146b62dcedf43113147e78c28..6b78c9d4baa6ee9bc15d461ad8136c7bcfca579a 100644 --- a/src/util/sss_log.c +++ b/src/util/sss_log.c @@ -23,7 +23,12 @@ */ #include "util/util.h" + +#ifdef WITH_JOURNALD +#include +#else /* WITH_JOURNALD */ #include +#endif /* WITH_JOURNALD */ static int sss_to_syslog(int priority) { @@ -52,6 +57,34 @@ static int sss_to_syslog(int priority) } } +#ifdef WITH_JOURNALD + +void sss_log(int priority, const char *format, ...) +{ + va_list ap; + int syslog_priority; + int ret; + char *message; + + va_start(ap, format); + ret = vasprintf(&message, format, ap); + va_end(ap); + + if (ret == -1) { + /* ENOMEM */ + return; + } + + syslog_priority = sss_to_syslog(priority); + sd_journal_send("MESSAGE=%s", message, + "PRIORITY=%i", syslog_priority, + "SYSLOG_FACILITY=%i", LOG_FAC(LOG_DAEMON), + "SYSLOG_IDENTIFIER=%s", debug_prg_name, + NULL); +} + +#else /* WITH_JOURNALD */ + void sss_log(int priority, const char *format, ...) { va_list ap; @@ -67,3 +100,5 @@ void sss_log(int priority, const char *format, ...) closelog(); } + +#endif /* WITH_JOURNALD */ -- 1.8.3.1