]> git.ipfire.org Git - thirdparty/samba.git/commitdiff
util: Avoid logging to multiple backends for stdout/stderr
authorMartin Schwenke <mschwenke@ddn.com>
Wed, 26 Jul 2023 10:43:37 +0000 (20:43 +1000)
committerMartin Schwenke <martins@samba.org>
Mon, 28 Aug 2023 01:21:07 +0000 (01:21 +0000)
Commit 83fe7a0316d3e5867a56cfdc51ec17f36ea03889 converted the
stdout/stderr logging  types to DEBUG_FILE to get a header when using
DEBUG_SYSLOG_FORMAT_ALWAYS.  However, this causes all configured
backends to be invoked.  When syslog is one of those backends then
this is almost certainly not what is intended.

Instead, call debug_file_log() directly in that special case and
revert the parts of the above commit that convert to file logging.

Most of the changes to debughdrclass() still seem necessary, since
they handle the change of debug_syslog_format from a bool to an enum.

BUG: https://bugzilla.samba.org/show_bug.cgi?id=15460

Signed-off-by: Martin Schwenke <mschwenke@ddn.com>
Reviewed-by: Douglas Bagnall <douglas.bagnall@catalyst.net.nz>
Autobuild-User(master): Martin Schwenke <martins@samba.org>
Autobuild-Date(master): Mon Aug 28 01:21:07 UTC 2023 on atb-devel-224

lib/util/debug.c

index b83075cb2392dfad6138403b24023e06f761f9ec..0e13fa564e34d277f8063c09513f26b4e72e747c 100644 (file)
@@ -1559,25 +1559,10 @@ void check_log_size( void )
 static void Debug1(const char *msg, size_t msg_len)
 {
        int old_errno = errno;
-       enum debug_logtype logtype = state.logtype;
 
        debug_count++;
 
-       if (state.settings.debug_syslog_format == DEBUG_SYSLOG_FORMAT_ALWAYS) {
-               switch(state.logtype) {
-               case DEBUG_STDOUT:
-               case DEBUG_STDERR:
-               case DEBUG_DEFAULT_STDOUT:
-               case DEBUG_DEFAULT_STDERR:
-                       /* Behave the same as logging to a file */
-                       logtype = DEBUG_FILE;
-                       break;
-               default:
-                       break;
-               }
-       }
-
-       switch(logtype) {
+       switch(state.logtype) {
        case DEBUG_CALLBACK:
                debug_callback_log(msg, msg_len, current_msg_level);
                break;
@@ -1585,13 +1570,18 @@ static void Debug1(const char *msg, size_t msg_len)
        case DEBUG_STDERR:
        case DEBUG_DEFAULT_STDOUT:
        case DEBUG_DEFAULT_STDERR:
-               if (dbgc_config[DBGC_ALL].fd > 0) {
-                       ssize_t ret;
-                       do {
-                               ret = write(dbgc_config[DBGC_ALL].fd,
-                                           msg,
-                                           msg_len);
-                       } while (ret == -1 && errno == EINTR);
+               if (state.settings.debug_syslog_format ==
+                   DEBUG_SYSLOG_FORMAT_ALWAYS) {
+                       debug_file_log(current_msg_level, msg, msg_len);
+               } else {
+                       if (dbgc_config[DBGC_ALL].fd > 0) {
+                               ssize_t ret;
+                               do {
+                                       ret = write(dbgc_config[DBGC_ALL].fd,
+                                                   msg,
+                                                   msg_len);
+                               } while (ret == -1 && errno == EINTR);
+                       }
                }
                break;
        case DEBUG_FILE: