1
0
mirror of https://github.com/samba-team/samba.git synced 2024-12-23 17:34:34 +03:00

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>
This commit is contained in:
David Disseldorp 2019-02-06 12:39:03 +01:00
parent 61670169d5
commit c824240cd4

View File

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