From: Christof Schmitt Date: Fri, 9 Jan 2015 21:46:32 +0000 (-0700) Subject: debug: Set backends from logging parameter in smb.conf X-Git-Tag: tdb-1.3.5~313 X-Git-Url: http://git.samba.org/samba.git/?p=sfrench%2Fsamba-autobuild%2F.git;a=commitdiff_plain;h=8a46da32805e477144e0404531edeae4df554d7d debug: Set backends from logging parameter in smb.conf Fallback to the settings of 'syslog' and 'syslog only' if logging has not been set. Signed-off-by: Christof Schmitt Reviewed-by: Amitay Isaacs --- diff --git a/lib/param/loadparm.c b/lib/param/loadparm.c index c619ad2a3a8..e2b0ca29acc 100644 --- a/lib/param/loadparm.c +++ b/lib/param/loadparm.c @@ -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 */ diff --git a/lib/util/debug.c b/lib/util/debug.c index 35deb79dcd1..412333b4fbe 100644 --- a/lib/util/debug.c +++ b/lib/util/debug.c @@ -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 } /*************************************************************************** diff --git a/lib/util/debug.h b/lib/util/debug.h index 8063ace4510..9a3accc0c99 100644 --- a/lib/util/debug.h +++ b/lib/util/debug.h @@ -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 ); diff --git a/lib/util/debug_s3.c b/lib/util/debug_s3.c index ccf577f7b56..160e2ef230f 100644 --- a/lib/util/debug_s3.c +++ b/lib/util/debug_s3.c @@ -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(); }