From 71d7ca07aa27bc7932f839ed51ff60e8710eb32d Mon Sep 17 00:00:00 2001 From: Mark Reynolds Date: Aug 08 2019 12:02:49 +0000 Subject: 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!) --- diff --git a/ldap/servers/slapd/log.c b/ldap/servers/slapd/log.c index a8204fe..bfcf574 100644 --- a/ldap/servers/slapd/log.c +++ b/ldap/servers/slapd/log.c @@ -2071,11 +2071,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; @@ -2104,9 +2104,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) { @@ -2120,9 +2120,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 b7e82c8..c25a11d 100644 --- a/ldap/servers/slapd/proto-slap.h +++ b/ldap/servers/slapd/proto-slap.h @@ -791,7 +791,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); diff --git a/src/cockpit/389-console/src/servers.html b/src/cockpit/389-console/src/servers.html index 0261895..e8171c0 100644 --- a/src/cockpit/389-console/src/servers.html +++ b/src/cockpit/389-console/src/servers.html @@ -521,7 +521,7 @@