debug: Set backends from logging parameter in smb.conf
authorChristof Schmitt <cs@samba.org>
Fri, 9 Jan 2015 21:46:32 +0000 (14:46 -0700)
committerChristof Schmitt <cs@samba.org>
Mon, 23 Mar 2015 20:22:11 +0000 (21:22 +0100)
Fallback to the settings of 'syslog' and 'syslog only' if logging has not
been set.

Signed-off-by: Christof Schmitt <cs@samba.org>
Reviewed-by: Amitay Isaacs <amitay@gmail.com>
lib/param/loadparm.c
lib/util/debug.c
lib/util/debug.h
lib/util/debug_s3.c

index c619ad2a3a8b9951124ee0e178970c0512488971..e2b0ca29acc8add6809bf6d00ca4b46b88bf529b 100644 (file)
@@ -2875,15 +2875,15 @@ static bool lpcfg_update(struct loadparm_context *lp_ctx)
        ZERO_STRUCT(settings);
        /* Add any more debug-related smb.conf parameters created in
         * future here */
-       settings.syslog = lp_ctx->globals->syslog;
-       settings.syslog_only = lp_ctx->globals->syslog_only;
        settings.timestamp_logs = lp_ctx->globals->timestamp_logs;
        settings.debug_prefix_timestamp = lp_ctx->globals->debug_prefix_timestamp;
        settings.debug_hires_timestamp = lp_ctx->globals->debug_hires_timestamp;
        settings.debug_pid = lp_ctx->globals->debug_pid;
        settings.debug_uid = lp_ctx->globals->debug_uid;
        settings.debug_class = lp_ctx->globals->debug_class;
-       debug_set_settings(&settings);
+       debug_set_settings(&settings, lp_ctx->globals->logging,
+                          lp_ctx->globals->syslog,
+                          lp_ctx->globals->syslog_only);
 
        /* FIXME: This is a bit of a hack, but we can't use a global, since 
         * not everything that uses lp also uses the socket library */
index 35deb79dcd1cc88e60784321ba941ad706ae3ef3..412333b4fbe13cf33fe8ad2a4c11bf26cf61ec05 100644 (file)
@@ -684,12 +684,40 @@ static void debug_init(void)
        }
 }
 
-/* This forces in some smb.conf derived values into the debug system.
- * There are no pointers in this structure, so we can just
- * structure-assign it in */
-void debug_set_settings(struct debug_settings *settings)
+void debug_set_settings(struct debug_settings *settings,
+                       const char *logging_param,
+                       int syslog_level, bool syslog_only)
 {
+       char fake_param[20];
+
+       /*
+        * This forces in some smb.conf derived values into the debug
+        * system. There are no pointers in this structure, so we can
+        * just structure-assign it in
+        */
        state.settings = *settings;
+
+       state.settings.syslog = syslog_level;
+       state.settings.syslog_only = syslog_only;
+
+       /*
+        * If 'logging' is not set, create backend settings from
+        * deprecated 'syslog' and 'syslog only' paramters
+        */
+       if (!logging_param) {
+               if (syslog_only) {
+                       snprintf(fake_param, sizeof(fake_param),
+                                "syslog:%d", syslog_level - 1);
+               } else {
+                       snprintf(fake_param, sizeof(fake_param),
+                                "syslog:%d file:%d", syslog_level -1,
+                                MAX_DEBUG_LEVEL);
+               }
+
+               logging_param = fake_param;
+       }
+
+       debug_set_backends(logging_param);
 }
 
 /**
@@ -718,12 +746,6 @@ void setup_logging(const char *prog_name, enum debug_logtype new_logtype)
                state.prog_name = prog_name;
        }
        reopen_logs_internal();
-
-#ifdef WITH_SYSLOG
-       if (state.logtype == DEBUG_FILE) {
-               debug_syslog_reload(true, false, state.prog_name);
-       }
-#endif
 }
 
 /***************************************************************************
index 8063ace4510dee779295bd8c5edb8b1ef29b347f..9a3accc0c99fab16113c6d34379a1918b9ee8037 100644 (file)
@@ -241,7 +241,9 @@ int debug_add_class(const char *classname);
 bool debug_parse_levels(const char *params_str);
 void debug_setup_talloc_log(void);
 void debug_set_logfile(const char *name);
-void debug_set_settings(struct debug_settings *settings);
+void debug_set_settings(struct debug_settings *settings,
+                       const char *logging_param,
+                       int syslog_level, bool syslog_only);
 bool reopen_logs_internal( void );
 void force_check_log_size( void );
 bool need_to_check_log_size( void );
index ccf577f7b564dcec33ed8c5c4e6a8fb87b7fe8c8..160e2ef230f67ca3a76366c97f95b6faa38eb44d 100644 (file)
@@ -34,15 +34,14 @@ bool reopen_logs(void)
 
                ZERO_STRUCT(settings);
                settings.max_log_size = lp_max_log_size();
-               settings.syslog = lp_syslog();
-               settings.syslog_only = lp_syslog_only();
                settings.timestamp_logs = lp_timestamp_logs();
                settings.debug_prefix_timestamp = lp_debug_prefix_timestamp();
                settings.debug_hires_timestamp = lp_debug_hires_timestamp();
                settings.debug_pid = lp_debug_pid();
                settings.debug_uid = lp_debug_uid();
                settings.debug_class = lp_debug_class();
-               debug_set_settings(&settings);
+               debug_set_settings(&settings, lp_logging(talloc_tos()),
+                                  lp_syslog(), lp_syslog_only());
        }
        return reopen_logs_internal();
 }