summaryrefslogtreecommitdiffstats
path: root/ldap
diff options
context:
space:
mode:
Diffstat (limited to 'ldap')
-rw-r--r--ldap/servers/slapd/log.c48
1 files changed, 38 insertions, 10 deletions
diff --git a/ldap/servers/slapd/log.c b/ldap/servers/slapd/log.c
index 33c57f46..6470c066 100644
--- a/ldap/servers/slapd/log.c
+++ b/ldap/servers/slapd/log.c
@@ -661,6 +661,7 @@ int
log_set_mode (const char *attrname, char *value, int logtype, char *errorbuf, int apply)
{
int v = 0;
+ int retval = LDAP_SUCCESS;
slapdFrontendConfig_t *fe_cfg = getFrontendConfig();
if ( NULL == value ) {
@@ -680,27 +681,54 @@ log_set_mode (const char *attrname, char *value, int logtype, char *errorbuf, in
switch (logtype) {
case SLAPD_ACCESS_LOG:
LOG_ACCESS_LOCK_WRITE( );
- slapi_ch_free ( (void **) &fe_cfg->accesslog_mode );
- fe_cfg->accesslog_mode = slapi_ch_strdup (value);
- loginfo.log_access_mode = v;
+ if (loginfo.log_access_file &&
+ ( chmod( loginfo.log_access_file, v ) != 0) ) {
+ int oserr = errno;
+ PR_snprintf( errorbuf, SLAPI_DSE_RETURNTEXT_SIZE,
+ "%s: Failed to chmod access log file to %s: errno %d (%s)",
+ attrname, value, oserr, slapd_system_strerror(oserr) );
+ retval = LDAP_UNWILLING_TO_PERFORM;
+ } else { /* only apply the changes if no file or if successful */
+ slapi_ch_free ( (void **) &fe_cfg->accesslog_mode );
+ fe_cfg->accesslog_mode = slapi_ch_strdup (value);
+ loginfo.log_access_mode = v;
+ }
LOG_ACCESS_UNLOCK_WRITE();
break;
case SLAPD_ERROR_LOG:
LOG_ERROR_LOCK_WRITE( );
- slapi_ch_free ( (void **) &fe_cfg->errorlog_mode );
- fe_cfg->errorlog_mode = slapi_ch_strdup (value);
- loginfo.log_error_mode = v;
+ if (loginfo.log_error_file &&
+ ( chmod( loginfo.log_error_file, v ) != 0) ) {
+ int oserr = errno;
+ PR_snprintf( errorbuf, SLAPI_DSE_RETURNTEXT_SIZE,
+ "%s: Failed to chmod error log file to %s: errno %d (%s)",
+ attrname, value, oserr, slapd_system_strerror(oserr) );
+ retval = LDAP_UNWILLING_TO_PERFORM;
+ } else { /* only apply the changes if no file or if successful */
+ slapi_ch_free ( (void **) &fe_cfg->errorlog_mode );
+ fe_cfg->errorlog_mode = slapi_ch_strdup (value);
+ loginfo.log_error_mode = v;
+ }
LOG_ERROR_UNLOCK_WRITE();
break;
case SLAPD_AUDIT_LOG:
LOG_AUDIT_LOCK_WRITE( );
- slapi_ch_free ( (void **) &fe_cfg->auditlog_mode );
- fe_cfg->auditlog_mode = slapi_ch_strdup (value);
- loginfo.log_audit_mode = v;
+ if (loginfo.log_audit_file &&
+ ( chmod( loginfo.log_audit_file, v ) != 0) ) {
+ int oserr = errno;
+ PR_snprintf( errorbuf, SLAPI_DSE_RETURNTEXT_SIZE,
+ "%s: Failed to chmod audit log file to %s: errno %d (%s)",
+ attrname, value, oserr, slapd_system_strerror(oserr) );
+ retval = LDAP_UNWILLING_TO_PERFORM;
+ } else { /* only apply the changes if no file or if successful */
+ slapi_ch_free ( (void **) &fe_cfg->auditlog_mode );
+ fe_cfg->auditlog_mode = slapi_ch_strdup (value);
+ loginfo.log_audit_mode = v;
+ }
LOG_AUDIT_UNLOCK_WRITE();
break;
}
- return LDAP_SUCCESS;
+ return retval;
}
/******************************************************************************