]> git.ipfire.org Git - thirdparty/openldap.git/commitdiff
ITS#6949 honor specified loglevel, not just debuglevel
authorHoward Chu <hyc@openldap.org>
Mon, 20 Sep 2021 17:09:22 +0000 (18:09 +0100)
committerQuanah Gibson-Mount <quanah@openldap.org>
Mon, 27 Sep 2021 16:54:24 +0000 (16:54 +0000)
But skip calls to syslog() if logfile_only is set.

servers/slapd/bconfig.c
servers/slapd/logging.c
servers/slapd/main.c
servers/slapd/proto-slap.h

index c554b02ed1be5b224d41baf72fac15b25573e329..b7e417ed644135dc7186c30184b44a58fdb9be16 100644 (file)
@@ -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> <Mbyte> <hours", 4, 4, 0, ARG_MAGIC|CFG_LOGFILE_ROTATE,
@@ -1088,6 +1089,8 @@ static ADlist *sortVals;
 
 static int new_daemon_threads;
 
+static int config_syslog;
+
 static int
 config_resize_lthreads(ConfigArgs *c)
 {
@@ -1388,6 +1391,9 @@ config_generic(ConfigArgs *c) {
                                rc = 1;
                        }
                        break;
+               case CFG_LOGFILE_ONLY:
+                       c->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);
 }
index 403ec27f83644106836608dbce4b3fc8c1a0a2c2..cb0fe6f9747249f0d2b6516d8a9a687e9f57e52f 100644 (file)
@@ -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;
 
index a854426a3b3e76959fd79cd1bb6166baa547fcbb..657f86c4bc4d518afd43cd28b3e2a45527aeee60 100644 (file)
@@ -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 );
index 44a4a0c3636ebe72d49c659b21549523b283324b..b93f309a1f093d5e5a5d5440064aa7adcc02f604 100644 (file)
@@ -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