Blob Blame Raw
From 177faf2c7080d3476798d305451e8ee19ea47f8d Mon Sep 17 00:00:00 2001
From: Mark Reynolds <mreynolds@redhat.com>
Date: Wed, 7 Aug 2019 16:57:17 -0400
Subject: [PATCH] Issue 50536 - Audit log heading written to log after every
 update

Bug Description:  Once the audit log is rotated the log "title" is incorrectly
                  written to the log after every single update.  This happened
                  becuase when we udpated the state of the log it was applied
                  to a local variable, and not the log info structure itself.

Fix Description:  After writting the "title", update the state of the log using
                  a pointer to the log info structure.

relates: https://pagure.io/389-ds-base/issue/50536

Reviewed by: lkrispenz(Thanks!)
---
 ldap/servers/slapd/log.c        | 14 +++++++-------
 ldap/servers/slapd/proto-slap.h |  2 +-
 2 files changed, 8 insertions(+), 8 deletions(-)

diff --git a/ldap/servers/slapd/log.c b/ldap/servers/slapd/log.c
index 2456abf1e..f308a4813 100644
--- a/ldap/servers/slapd/log.c
+++ b/ldap/servers/slapd/log.c
@@ -2073,11 +2073,11 @@ slapd_log_audit(
     int retval = LDAP_SUCCESS;
     int lbackend = loginfo.log_backend; /* We copy this to make these next checks atomic */
 
-    int state = 0;
+    int *state;
     if (sourcelog == SLAPD_AUDIT_LOG) {
-        state = loginfo.log_audit_state;
+        state = &loginfo.log_audit_state;
     } else if (sourcelog == SLAPD_AUDITFAIL_LOG) {
-        state = loginfo.log_auditfail_state;
+        state = &loginfo.log_auditfail_state;
     } else {
         /* How did we even get here! */
         return 1;
@@ -2106,9 +2106,9 @@ int
 slapd_log_audit_internal(
     char *buffer,
     int buf_len,
-    int state)
+    int *state)
 {
-    if ((state & LOGGING_ENABLED) && (loginfo.log_audit_file != NULL)) {
+    if ((*state & LOGGING_ENABLED) && (loginfo.log_audit_file != NULL)) {
         LOG_AUDIT_LOCK_WRITE();
         if (log__needrotation(loginfo.log_audit_fdes,
                               SLAPD_AUDIT_LOG) == LOG_ROTATE) {
@@ -2122,9 +2122,9 @@ slapd_log_audit_internal(
                 loginfo.log_audit_rotationsyncclock += PR_ABS(loginfo.log_audit_rotationtime_secs);
             }
         }
-        if (state & LOGGING_NEED_TITLE) {
+        if (*state & LOGGING_NEED_TITLE) {
             log_write_title(loginfo.log_audit_fdes);
-            state &= ~LOGGING_NEED_TITLE;
+            *state &= ~LOGGING_NEED_TITLE;
         }
         LOG_WRITE_NOW_NO_ERR(loginfo.log_audit_fdes, buffer, buf_len, 0);
         LOG_AUDIT_UNLOCK_WRITE();
diff --git a/ldap/servers/slapd/proto-slap.h b/ldap/servers/slapd/proto-slap.h
index a0648ca3c..e37f702ea 100644
--- a/ldap/servers/slapd/proto-slap.h
+++ b/ldap/servers/slapd/proto-slap.h
@@ -777,7 +777,7 @@ int slapi_log_access(int level, char *fmt, ...)
     ;
 #endif
 int slapd_log_audit(char *buffer, int buf_len, int sourcelog);
-int slapd_log_audit_internal(char *buffer, int buf_len, int state);
+int slapd_log_audit_internal(char *buffer, int buf_len, int *state);
 int slapd_log_auditfail(char *buffer, int buf_len);
 int slapd_log_auditfail_internal(char *buffer, int buf_len);
 void log_access_flush(void);
-- 
2.21.0