diff options
-rw-r--r-- | source3/include/debug.h | 1 | ||||
-rw-r--r-- | source3/lib/debug.c | 5 | ||||
-rw-r--r-- | source3/libsmb/libsmb_context.c | 8 | ||||
-rw-r--r-- | source3/libsmb/libsmb_setget.c | 12 |
4 files changed, 21 insertions, 5 deletions
diff --git a/source3/include/debug.h b/source3/include/debug.h index 92fa6e6145..328bfb63b9 100644 --- a/source3/include/debug.h +++ b/source3/include/debug.h @@ -274,6 +274,7 @@ void check_log_size( void ); void dbgflush( void ); bool dbghdrclass(int level, int cls, const char *location, const char *func); bool dbghdr(int level, const char *location, const char *func); +bool debug_get_output_is_stderr(void); #endif diff --git a/source3/lib/debug.c b/source3/lib/debug.c index f9f4cae000..a97c0bf923 100644 --- a/source3/lib/debug.c +++ b/source3/lib/debug.c @@ -614,6 +614,11 @@ static void debug_close_fd(int fd) } } +bool debug_get_output_is_stderr(void) +{ + return (state.logtype == DEBUG_DEFAULT_STDERR) || (state.logtype == DEBUG_STDERR); +} + /************************************************************************** reopen the log files note that we now do this unconditionally diff --git a/source3/libsmb/libsmb_context.c b/source3/libsmb/libsmb_context.c index 8e76387346..22e0a04717 100644 --- a/source3/libsmb/libsmb_context.c +++ b/source3/libsmb/libsmb_context.c @@ -557,9 +557,11 @@ smbc_init_context(SMBCCTX *context) if (context->internal->debug_stderr) { /* - * Hmmm... Do we want a unique dbf per-thread? For now, we'll just - * leave it up to the user. If any one context spefies debug to - * stderr then all will be. + * We do not have a unique per-thread debug state? For + * now, we'll just leave it up to the user. If any one + * context spefies debug to stderr then all will be (and + * will stay that way, as it is unsafe to flip back if + * stdout is in use for other things) */ setup_logging("libsmbclient", DEBUG_STDERR); } diff --git a/source3/libsmb/libsmb_setget.c b/source3/libsmb/libsmb_setget.c index f2f5aec6c4..0d260d7cf2 100644 --- a/source3/libsmb/libsmb_setget.c +++ b/source3/libsmb/libsmb_setget.c @@ -120,10 +120,18 @@ smbc_setTimeout(SMBCCTX *c, int timeout) smbc_bool smbc_getOptionDebugToStderr(SMBCCTX *c) { - return c->internal->debug_stderr; + /* Because this is a global concept, it is better to check + * what is really set, rather than what we wanted set + * (particularly as you cannot go back to stdout). */ + return debug_get_output_is_stderr(); } -/** Set whether to log to standard error instead of standard output */ +/** Set whether to log to standard error instead of standard output. + * This option is 'sticky' - once set to true, it cannot be set to + * false again, as it is global to the process, as once we have been + * told that it is not safe to safe to write to stdout, we shouldn't + * go back as we don't know it was this context that set it that way. + */ void smbc_setOptionDebugToStderr(SMBCCTX *c, smbc_bool b) { |