diff options
author | Jakub Hrozek <jhrozek@redhat.com> | 2014-07-08 15:05:24 +0200 |
---|---|---|
committer | Jakub Hrozek <jhrozek@redhat.com> | 2014-07-09 17:36:08 +0200 |
commit | 9a990aa9f7e8c105e0cfeea8d8cbdc776c2d5d7a (patch) | |
tree | 05da2bdd23b7c8834338a7d72ce5b302c46bc386 | |
parent | 842f83f8db513214241a0fea076ac160b180e1dd (diff) | |
download | sssd-9a990aa9f7e8c105e0cfeea8d8cbdc776c2d5d7a.tar.gz sssd-9a990aa9f7e8c105e0cfeea8d8cbdc776c2d5d7a.tar.xz sssd-9a990aa9f7e8c105e0cfeea8d8cbdc776c2d5d7a.zip |
SSSD: Send debug to stderr when running on foreground
https://fedorahosted.org/sssd/ticket/2348
When SSSD is running in interactive mode, we should print DEBUG messages
directly to stderr, not journal.
Reviewed-by: Michal Židek <mzidek@redhat.com>
-rw-r--r-- | src/monitor/monitor.c | 21 | ||||
-rw-r--r-- | src/providers/ldap/ldap_child.c | 2 | ||||
-rw-r--r-- | src/util/child_common.c | 10 | ||||
-rw-r--r-- | src/util/debug.c | 3 | ||||
-rw-r--r-- | src/util/util.h | 3 |
5 files changed, 37 insertions, 2 deletions
diff --git a/src/monitor/monitor.c b/src/monitor/monitor.c index 5feba706a..39f4e6437 100644 --- a/src/monitor/monitor.c +++ b/src/monitor/monitor.c @@ -1124,6 +1124,14 @@ static int get_service_config(struct mt_ctx *ctx, const char *name, talloc_free(svc); return ENOMEM; } + } else if (ctx->is_daemon == false) { + svc->command = talloc_strdup_append( + svc->command, " --debug-to-stderr" + ); + if (!svc->command) { + talloc_free(svc); + return ENOMEM; + } } } @@ -1287,6 +1295,14 @@ static int get_provider_config(struct mt_ctx *ctx, const char *name, talloc_free(svc); return ENOMEM; } + } else if (ctx->is_daemon == false) { + svc->command = talloc_strdup_append( + svc->command, " --debug-to-stderr" + ); + if (!svc->command) { + talloc_free(svc); + return ENOMEM; + } } } @@ -2735,7 +2751,10 @@ int main(int argc, const char *argv[]) } if (opt_daemon) flags |= FLAGS_DAEMON; - if (opt_interactive) flags |= FLAGS_INTERACTIVE; + if (opt_interactive) { + flags |= FLAGS_INTERACTIVE; + debug_to_stderr = 1; + } if (opt_config_file) { config_file = talloc_strdup(tmp_ctx, opt_config_file); diff --git a/src/providers/ldap/ldap_child.c b/src/providers/ldap/ldap_child.c index ee7bbff89..e2fe3f232 100644 --- a/src/providers/ldap/ldap_child.c +++ b/src/providers/ldap/ldap_child.c @@ -439,6 +439,8 @@ int main(int argc, const char *argv[]) _("Show timestamps with microseconds"), NULL}, {"debug-fd", 0, POPT_ARG_INT, &debug_fd, 0, _("An open file descriptor for the debug logs"), NULL}, + {"debug-to-stderr", 0, POPT_ARG_NONE | POPT_ARGFLAG_DOC_HIDDEN, &debug_to_stderr, 0, \ + _("Send the debug output to stderr directly."), NULL }, \ POPT_TABLEEND }; diff --git a/src/util/child_common.c b/src/util/child_common.c index 08aac1143..81bbab70e 100644 --- a/src/util/child_common.c +++ b/src/util/child_common.c @@ -637,8 +637,10 @@ static errno_t prepare_child_argv(TALLOC_CTX *mem_ctx, bool child_debug_to_file = debug_to_file; bool child_debug_timestamps = debug_timestamps; bool child_debug_microseconds = debug_microseconds; + bool child_debug_stderr = debug_to_stderr; if (child_debug_to_file) argc++; + if (child_debug_stderr) argc++; /* * program name, debug_level, debug_to_file, debug_timestamps, @@ -659,6 +661,14 @@ static errno_t prepare_child_argv(TALLOC_CTX *mem_ctx, goto fail; } + if (child_debug_stderr) { + argv[--argc] = talloc_strdup(argv, "--debug-to-stderr"); + if (argv[argc] == NULL) { + ret = ENOMEM; + goto fail; + } + } + if (child_debug_to_file) { argv[--argc] = talloc_asprintf(argv, "--debug-fd=%d", child_debug_fd); diff --git a/src/util/debug.c b/src/util/debug.c index b66de07b4..a99d5403a 100644 --- a/src/util/debug.c +++ b/src/util/debug.c @@ -42,6 +42,7 @@ int debug_level = SSSDBG_UNRESOLVED; int debug_timestamps = SSSDBG_TIMESTAMP_UNRESOLVED; int debug_microseconds = SSSDBG_MICROSECONDS_UNRESOLVED; int debug_to_file = 0; +int debug_to_stderr = 0; const char *debug_log_file = "sssd"; FILE *debug_file = NULL; @@ -212,7 +213,7 @@ void debug_fn(const char *file, errno_t ret; va_list ap_fallback; - if (!debug_file) { + if (!debug_file && !debug_to_stderr) { /* If we are not outputting logs to files, we should be sending them * to journald. * NOTE: on modern systems, this is where stdout/stderr will end up diff --git a/src/util/util.h b/src/util/util.h index 5c02c33a5..6a9bc0c2e 100644 --- a/src/util/util.h +++ b/src/util/util.h @@ -68,6 +68,7 @@ extern int debug_level; extern int debug_timestamps; extern int debug_microseconds; extern int debug_to_file; +extern int debug_to_stderr; extern const char *debug_log_file; void debug_fn(const char *file, long line, @@ -107,6 +108,8 @@ errno_t set_debug_file_from_fd(const int fd); _("Debug level"), NULL}, \ {"debug-to-files", 'f', POPT_ARG_NONE, &debug_to_file, 0, \ _("Send the debug output to files instead of stderr"), NULL }, \ + {"debug-to-stderr", 0, POPT_ARG_NONE | POPT_ARGFLAG_DOC_HIDDEN, &debug_to_stderr, 0, \ + _("Send the debug output to stderr directly."), NULL }, \ {"debug-timestamps", 0, POPT_ARG_INT, &debug_timestamps, 0, \ _("Add debug timestamps"), NULL}, \ {"debug-microseconds", 0, POPT_ARG_INT, &debug_microseconds, 0, \ |