summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Makefile.am6
-rw-r--r--configure.ac6
-rw-r--r--src/conf_macros.m420
-rw-r--r--src/external/systemd.m413
-rw-r--r--src/util/sss_log.c35
5 files changed, 80 insertions, 0 deletions
diff --git a/Makefile.am b/Makefile.am
index 5aba76037..67f5652f7 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)\" \
@@ -517,6 +518,10 @@ if HAVE_PTHREAD
CLIENT_LIBS += -lpthread
endif
+if WITH_JOURNALD
+SYSLOG_LIBS = $(JOURNALD_LIBS)
+endif
+
#####################
# Utility libraries #
#####################
@@ -525,6 +530,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 c389bec4f..d28d55f3b 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 b4db0b4a2..1aecaea4d 100644
--- a/src/conf_macros.m4
+++ b/src/conf_macros.m4
@@ -152,6 +152,26 @@ 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]]
+ )
+ ],
+ [],
+ [with_syslog="syslog"]
+ )
+
+ 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 9afb65def..dbced0d66 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_MSG_NOTICE([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 45e883109..6b78c9d4b 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 <systemd/sd-journal.h>
+#else /* WITH_JOURNALD */
#include <syslog.h>
+#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 */