summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJakub Hrozek <jhrozek@redhat.com>2013-09-10 19:16:48 +0200
committerJakub Hrozek <jhrozek@redhat.com>2013-09-18 18:56:41 +0200
commitd6837823b0a002c9c8afb48caf3eeda5cb73f173 (patch)
tree55beed451ed18fe3d08f96fe7478d5cc6b330648
parent77c0d1f6074059dafd2293f9c42ea0f9d60f8aad (diff)
downloadsssd-d6837823b0a002c9c8afb48caf3eeda5cb73f173.tar.gz
sssd-d6837823b0a002c9c8afb48caf3eeda5cb73f173.tar.xz
sssd-d6837823b0a002c9c8afb48caf3eeda5cb73f173.zip
BE: Log domain name to journald if available
If the SSSD is compiled with journald support, then all sss_log() statements will include a new field called "SSSD_DOMAIN" that includes the domain name. Filtering only messages from the single domain is then as easy as: # journalctl SSSD_DOMAIN=foo.example.com
-rw-r--r--src/providers/data_provider_be.c2
-rw-r--r--src/util/server.c5
-rw-r--r--src/util/sss_log.c7
-rw-r--r--src/util/util.h2
4 files changed, 16 insertions, 0 deletions
diff --git a/src/providers/data_provider_be.c b/src/providers/data_provider_be.c
index 912b4191c..ccd51b45f 100644
--- a/src/providers/data_provider_be.c
+++ b/src/providers/data_provider_be.c
@@ -2891,6 +2891,8 @@ int main(int argc, const char *argv[])
return 2;
}
+ setenv(SSS_DOM_ENV, be_domain, 1);
+
ret = die_if_parent_died();
if (ret != EOK) {
/* This is not fatal, don't return */
diff --git a/src/util/server.c b/src/util/server.c
index a33207b3d..3dcfccaf6 100644
--- a/src/util/server.c
+++ b/src/util/server.c
@@ -423,6 +423,11 @@ int server_setup(const char *name, int flags,
setenv("_SSS_LOOPS", "NO", 0);
+ /* To make sure the domain cannot be set from the environment, unset the
+ * variable explicitly when setting up any server. Backends later set the
+ * value after reading domain from the configuration */
+ unsetenv(SSS_DOM_ENV);
+
setup_signals();
/* we want default permissions on created files to be very strict,
diff --git a/src/util/sss_log.c b/src/util/sss_log.c
index 6b78c9d4b..5be9e7f2b 100644
--- a/src/util/sss_log.c
+++ b/src/util/sss_log.c
@@ -65,6 +65,7 @@ void sss_log(int priority, const char *format, ...)
int syslog_priority;
int ret;
char *message;
+ const char *domain;
va_start(ap, format);
ret = vasprintf(&message, format, ap);
@@ -75,8 +76,14 @@ void sss_log(int priority, const char *format, ...)
return;
}
+ domain = getenv(SSS_DOM_ENV);
+ if (domain == NULL) {
+ domain = "";
+ }
+
syslog_priority = sss_to_syslog(priority);
sd_journal_send("MESSAGE=%s", message,
+ "SSSD_DOMAIN=%s", domain,
"PRIORITY=%i", syslog_priority,
"SYSLOG_FACILITY=%i", LOG_FAC(LOG_DAEMON),
"SYSLOG_IDENTIFIER=%s", debug_prg_name,
diff --git a/src/util/util.h b/src/util/util.h
index 18ec4176b..20d230c12 100644
--- a/src/util/util.h
+++ b/src/util/util.h
@@ -72,6 +72,8 @@ int debug_get_level(int old_level);
int debug_convert_old_level(int old_level);
errno_t set_debug_file_from_fd(const int fd);
+#define SSS_DOM_ENV "_SSS_DOM"
+
#define SSSDBG_FATAL_FAILURE 0x0010 /* level 0 */
#define SSSDBG_CRIT_FAILURE 0x0020 /* level 1 */
#define SSSDBG_OP_FAILURE 0x0040 /* level 2 */