summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--source3/include/debug.h1
-rw-r--r--source3/lib/debug.c5
-rw-r--r--source3/libsmb/libsmb_context.c8
-rw-r--r--source3/libsmb/libsmb_setget.c12
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)
{