From: Howard Chu Date: Mon, 20 Sep 2021 17:09:22 +0000 (+0100) Subject: ITS#6949 honor specified loglevel, not just debuglevel X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=77adb192074a923f749580302a6604c027eca9f7;p=thirdparty%2Fopenldap.git ITS#6949 honor specified loglevel, not just debuglevel But skip calls to syslog() if logfile_only is set. --- diff --git a/servers/slapd/bconfig.c b/servers/slapd/bconfig.c index c554b02ed1..b7e417ed64 100644 --- a/servers/slapd/bconfig.c +++ b/servers/slapd/bconfig.c @@ -202,6 +202,7 @@ enum { CFG_TLS_CERT, CFG_TLS_KEY, CFG_LOGFILE_ROTATE, + CFG_LOGFILE_ONLY, CFG_LAST }; @@ -485,8 +486,8 @@ static ConfigTable config_back_cf_table[] = { &config_generic, "( OLcfgGlAt:27 NAME 'olcLogFile' " "EQUALITY caseExactMatch " "SYNTAX OMsDirectoryString SINGLE-VALUE )", NULL, NULL }, - { "logfile-only", "on|off", 2, 2, 0, ARG_ON_OFF, - &logfile_only, "( OLcfgGlAt:102 NAME 'olcLogFileOnly' " + { "logfile-only", "on|off", 2, 2, 0, ARG_ON_OFF|ARG_MAGIC|CFG_LOGFILE_ONLY, + &config_generic, "( OLcfgGlAt:102 NAME 'olcLogFileOnly' " "EQUALITY booleanMatch " "SYNTAX OMsBoolean SINGLE-VALUE )", NULL, NULL }, { "logfile-rotate", "max> value_int = logfile_only; + break; case CFG_LOGFILE_ROTATE: rc = 1; if ( logfile_max ) { @@ -1636,6 +1642,12 @@ config_generic(ConfigArgs *c) { logfile_close(); break; + case CFG_LOGFILE_ONLY: + /* remove loglevel from debuglevel */ + slap_debug = slap_debug_orig; + ldap_syslog = config_syslog; + break; + case CFG_LOGFILE_ROTATE: logfile_max = logfile_fslimit = logfile_age = 0; break; @@ -2420,6 +2432,16 @@ sortval_reject: } break; + case CFG_LOGFILE_ONLY: + slap_debug = slap_debug_orig; + if ( c->value_int ) { + slap_debug |= config_syslog; + ldap_syslog = 0; + } else { + ldap_syslog = config_syslog; + } + break; + case CFG_LOGFILE_ROTATE: { unsigned lf_max, lf_mbyte, lf_hour; if ( lutil_atoux( &lf_max, c->argv[1], 0 ) != 0 ) { @@ -3965,8 +3987,6 @@ loglevel_print( FILE *out ) return 0; } -static int config_syslog; - static int config_loglevel(ConfigArgs *c) { int i; @@ -3989,7 +4009,9 @@ config_loglevel(ConfigArgs *c) { config_syslog &= ~loglevel_ops[i].mask; } if ( slapMode & SLAP_SERVER_MODE ) { - ldap_syslog = config_syslog; + slap_debug = slap_debug_orig; + if ( !logfile_only ) + ldap_syslog = config_syslog; } return 0; } @@ -4019,7 +4041,12 @@ config_loglevel(ConfigArgs *c) { config_syslog = 0; } if ( slapMode & SLAP_SERVER_MODE ) { - ldap_syslog = config_syslog; + if ( logfile_only ) { + slap_debug = slap_debug_orig | config_syslog; + ldap_syslog = 0; + } else { + ldap_syslog = config_syslog; + } } return(0); } diff --git a/servers/slapd/logging.c b/servers/slapd/logging.c index 403ec27f83..cb0fe6f974 100644 --- a/servers/slapd/logging.c +++ b/servers/slapd/logging.c @@ -34,6 +34,7 @@ static char logfile_suffix[sizeof(".xx.gz")]; char logfile_path[MAXPATHLEN - sizeof(logfile_suffix) -1]; long logfile_fslimit; int logfile_age, logfile_only, logfile_max; +int slap_debug_orig; ldap_pvt_thread_mutex_t logfile_mutex; diff --git a/servers/slapd/main.c b/servers/slapd/main.c index a854426a3b..657f86c4bc 100644 --- a/servers/slapd/main.c +++ b/servers/slapd/main.c @@ -723,6 +723,7 @@ unhandled_option:; ber_set_option(NULL, LBER_OPT_DEBUG_LEVEL, &slap_debug); ldap_set_option(NULL, LDAP_OPT_DEBUG_LEVEL, &slap_debug); ldif_debug = slap_debug; + slap_debug_orig = slap_debug; if ( version ) { fprintf( stderr, "%s\n", Versionstr ); diff --git a/servers/slapd/proto-slap.h b/servers/slapd/proto-slap.h index 44a4a0c363..b93f309a1f 100644 --- a/servers/slapd/proto-slap.h +++ b/servers/slapd/proto-slap.h @@ -1253,6 +1253,7 @@ LDAP_SLAPD_V(int) logfile_age; LDAP_SLAPD_V(int) logfile_only; LDAP_SLAPD_V(int) logfile_max; LDAP_SLAPD_V(long) logfile_fslimit; +LDAP_SLAPD_V(int) slap_debug_orig; /* * main.c