1
0
mirror of https://github.com/samba-team/samba.git synced 2025-02-28 01:58:17 +03:00

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 <cs@samba.org>
Reviewed-by: Amitay Isaacs <amitay@gmail.com>
This commit is contained in:
Christof Schmitt 2015-01-09 14:46:32 -07:00
parent 5a3eddc7b9
commit 8a46da3280
4 changed files with 40 additions and 17 deletions

View 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 */

View 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
}
/***************************************************************************

View 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 );

View 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();
}