diff options
author | David Disseldorp <ddiss@samba.org> | 2019-02-06 12:39:03 +0100 |
---|---|---|
committer | David Disseldorp <ddiss@samba.org> | 2019-02-07 17:23:18 +0100 |
commit | c824240cd48aea9e0655287c98c8de7c3ffd5f94 (patch) | |
tree | 874832359de0f2e2f5fc7a30de387ea41da9fcbd /lib | |
parent | 61670169d5241f742bc80bec37b02800af8c8517 (diff) | |
download | samba-c824240cd48aea9e0655287c98c8de7c3ffd5f94.tar.gz |
lib/debug: retain full string in state.prog_name global
setup_logging() retains a global pointer to the provided const string in
state.prog_name, which is later used in the debug_backend->reload()
callback.
Some setup_logging() callers, such as popt_common_callback(),
incorrectly assume that a dynamic buffer is safe to provide as a
prog_name parameter. Fix this by copying the entire string in
setup_logging().
Signed-off-by: David Disseldorp <ddiss@samba.org>
Reviewed-by: Andreas Schneider <asn@samba.org>
Diffstat (limited to 'lib')
-rw-r--r-- | lib/util/debug.c | 12 |
1 files changed, 8 insertions, 4 deletions
diff --git a/lib/util/debug.c b/lib/util/debug.c index 30e5a28a233..e6a1ba4f96f 100644 --- a/lib/util/debug.c +++ b/lib/util/debug.c @@ -87,7 +87,7 @@ static struct { bool initialized; enum debug_logtype logtype; /* The type of logging we are doing: eg stdout, file, stderr */ - const char *prog_name; + char prog_name[255]; bool reopening_logs; bool schedule_reopen_logs; @@ -227,11 +227,15 @@ static void debug_syslog_reload(bool enabled, bool previously_enabled, const char *prog_name, char *option) { if (enabled && !previously_enabled) { + const char *ident = NULL; + if ((prog_name != NULL) && (prog_name[0] != '\0')) { + ident = prog_name; + } #ifdef LOG_DAEMON - openlog(prog_name, LOG_PID, SYSLOG_FACILITY); + openlog(ident, LOG_PID, SYSLOG_FACILITY); #else /* for old systems that have no facility codes. */ - openlog(prog_name, LOG_PID ); + openlog(ident, LOG_PID); #endif return; } @@ -1001,7 +1005,7 @@ void setup_logging(const char *prog_name, enum debug_logtype new_logtype) prog_name = p + 1; } - state.prog_name = prog_name; + strlcpy(state.prog_name, prog_name, sizeof(state.prog_name)); } reopen_logs_internal(); } |