summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStephen Gallagher <sgallagh@redhat.com>2011-04-27 15:28:07 -0400
committerStephen Gallagher <sgallagh@redhat.com>2011-05-04 10:14:40 -0400
commitd3750f3c3a9e232629c8b634b7b5407114667700 (patch)
tree3f9a038c2e99edcde2d50ac7ab7ecc7e6429883b
parentb36dfa237c0d9ad3a1c9d59790d6aab3b1e2e82d (diff)
downloadsssd-d3750f3c3a9e232629c8b634b7b5407114667700.tar.gz
sssd-d3750f3c3a9e232629c8b634b7b5407114667700.tar.bz2
sssd-d3750f3c3a9e232629c8b634b7b5407114667700.zip
Override config file debug_level with command-line
This patch also makes the following changes: 1) The [sssd] debug_level setting no longer acts as a default for all other sections. 2) We will now skip passing the debug argument to the child processes from the master unless the SSSD was run with a command-line argument for the debug level. https://fedorahosted.org/sssd/ticket/764
-rw-r--r--src/monitor/monitor.c63
-rw-r--r--src/util/debug.c3
-rw-r--r--src/util/server.c19
-rw-r--r--src/util/util.h3
4 files changed, 66 insertions, 22 deletions
diff --git a/src/monitor/monitor.c b/src/monitor/monitor.c
index e46125ba..194e74c5 100644
--- a/src/monitor/monitor.c
+++ b/src/monitor/monitor.c
@@ -57,6 +57,8 @@
* monitor will get crazy hammering children with messages */
#define MONITOR_DEF_PING_TIME 10
+int cmdline_debug_level;
+
struct svc_spy;
struct mt_svc {
@@ -942,13 +944,30 @@ static int get_service_config(struct mt_ctx *ctx, const char *name,
}
if (!svc->command) {
- svc->command = talloc_asprintf(svc, "%s/sssd_%s -d %d%s%s",
- SSSD_LIBEXEC_PATH,
- svc->name, debug_level,
- (debug_timestamps?
- "": " --debug-timestamps=0"),
- (debug_to_file ?
- " --debug-to-files":""));
+ if (cmdline_debug_level == SSS_UNRESOLVED_DEBUG_LEVEL) {
+ svc->command = talloc_asprintf(svc, "%s/sssd_%s %s%s",
+ SSSD_LIBEXEC_PATH,
+ svc->name,
+ (debug_timestamps?
+ "": " --debug-timestamps=0"),
+ (debug_to_file ?
+ " --debug-to-files":""));
+ } else {
+ /* If the debug level was specified at the command-line,
+ * make sure to pass it into the children, overriding the
+ * config file.
+ */
+ svc->command = talloc_asprintf(svc, "%s/sssd_%s -d %d%s%s",
+ SSSD_LIBEXEC_PATH,
+ svc->name,
+ cmdline_debug_level,
+ debug_timestamps ?
+ "" :
+ " --debug-timestamps=0",
+ debug_to_file ?
+ " --debug-to-files" :
+ "");
+ }
if (!svc->command) {
talloc_free(svc);
return ENOMEM;
@@ -1071,12 +1090,25 @@ static int get_provider_config(struct mt_ctx *ctx, const char *name,
/* if there are no custom commands, build a default one */
if (!svc->command) {
- svc->command = talloc_asprintf(svc,
- "%s/sssd_be -d %d%s%s --domain %s",
- SSSD_LIBEXEC_PATH, debug_level,
- (debug_timestamps?"": " --debug-timestamps=0"),
- (debug_to_file?" --debug-to-files":""),
- svc->name);
+ if (cmdline_debug_level == SSS_UNRESOLVED_DEBUG_LEVEL) {
+ svc->command = talloc_asprintf(svc,
+ "%s/sssd_be --domain %s%s%s",
+ SSSD_LIBEXEC_PATH,
+ svc->name,
+ debug_timestamps ? ""
+ : " --debug-timestamps=0",
+ debug_to_file ? " --debug-to-files" : "");
+ } else {
+ svc->command = talloc_asprintf(svc,
+ "%s/sssd_be --domain %s -d %d%s%s ",
+ SSSD_LIBEXEC_PATH,
+ svc->name,
+ cmdline_debug_level,
+ debug_timestamps ? ""
+ : " --debug-timestamps=0",
+ debug_to_file ? " --debug-to-files" : "");
+ }
+
if (!svc->command) {
talloc_free(svc);
return ENOMEM;
@@ -2261,6 +2293,11 @@ int main(int argc, const char *argv[])
}
}
+ /* If the level was passed at the command-line, we want
+ * to save it and pass it to the children later.
+ */
+ cmdline_debug_level = debug_level;
+
if (opt_daemon && opt_interactive) {
fprintf(stderr, "Option -i|--interactive is not allowed together with -D|--daemon\n");
poptPrintUsage(pc, stderr, 0);
diff --git a/src/util/debug.c b/src/util/debug.c
index 1b78ebae..129b9d9b 100644
--- a/src/util/debug.c
+++ b/src/util/debug.c
@@ -31,7 +31,8 @@
#include "util/util.h"
const char *debug_prg_name = "sssd";
-int debug_level = 0;
+
+int debug_level = SSS_UNRESOLVED_DEBUG_LEVEL;
int debug_timestamps = 1;
int debug_to_file = 0;
diff --git a/src/util/server.c b/src/util/server.c
index 1e8b148d..977c7511 100644
--- a/src/util/server.c
+++ b/src/util/server.c
@@ -444,14 +444,17 @@ int server_setup(const char *name, int flags,
return ret;
}
- /* set debug level if any in conf_entry */
- ret = confdb_get_int(ctx->confdb_ctx, ctx, conf_entry,
- CONFDB_SERVICE_DEBUG_LEVEL,
- debug_level, &debug_level);
- if (ret != EOK) {
- DEBUG(0, ("Error reading from confdb (%d) [%s]\n",
- ret, strerror(ret)));
- return ret;
+ if (debug_level == SSS_UNRESOLVED_DEBUG_LEVEL) {
+ /* set debug level if any in conf_entry */
+ ret = confdb_get_int(ctx->confdb_ctx, ctx, conf_entry,
+ CONFDB_SERVICE_DEBUG_LEVEL,
+ SSS_DEFAULT_DEBUG_LEVEL,
+ &debug_level);
+ if (ret != EOK) {
+ DEBUG(0, ("Error reading from confdb (%d) [%s]\n",
+ ret, strerror(ret)));
+ return ret;
+ }
}
/* same for debug timestamps */
diff --git a/src/util/util.h b/src/util/util.h
index 61fe7f6c..ac6704ae 100644
--- a/src/util/util.h
+++ b/src/util/util.h
@@ -60,6 +60,9 @@ extern const char *debug_log_file;
void debug_fn(const char *format, ...);
errno_t set_debug_file_from_fd(const int fd);
+#define SSS_DEFAULT_DEBUG_LEVEL 0
+#define SSS_UNRESOLVED_DEBUG_LEVEL -1
+
#define SSSD_DEBUG_OPTS \
{"debug-level", 'd', POPT_ARG_INT, &debug_level, 0, \
_("Debug level"), NULL}, \