]> git.sur5r.net Git - openldap/blobdiff - servers/slapd/main.c
ITS#4310 seems to affect also back-ldbm
[openldap] / servers / slapd / main.c
index 088a590bfef1d93e01a1fe3c1db9cbfe12ed2c25..38348533d4d698249e23701ab9672dbb75df384f 100644 (file)
@@ -1,7 +1,7 @@
 /* $OpenLDAP$ */
 /* This work is part of OpenLDAP Software <http://www.openldap.org/>.
  *
- * Copyright 1998-2005 The OpenLDAP Foundation.
+ * Copyright 1998-2006 The OpenLDAP Foundation.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -182,7 +182,9 @@ parse_syslog_user( const char *arg, int *syslogUser )
        int i = verb_to_mask( optarg, syslogUsers );
 
        if ( BER_BVISNULL( &syslogUsers[ i ].word ) ) {
-               Debug( LDAP_DEBUG_ANY, "unrecognized syslog user \"%s\".\n", optarg, 0, 0 );
+               Debug( LDAP_DEBUG_ANY,
+                       "unrecognized syslog user \"%s\".\n",
+                       optarg, 0, 0 );
                return 1;
        }
 
@@ -192,6 +194,33 @@ parse_syslog_user( const char *arg, int *syslogUser )
 }
 #endif /* LOG_LOCAL4 */
 
+static int
+parse_syslog_level( const char *arg, int *levelp )
+{
+       static slap_verbmasks   str2syslog_level[] = {
+               { BER_BVC( "EMERG" ),   LOG_EMERG },
+               { BER_BVC( "ALERT" ),   LOG_ALERT },
+               { BER_BVC( "CRIT" ),    LOG_CRIT },
+               { BER_BVC( "ERR" ),     LOG_ERR },
+               { BER_BVC( "WARNING" ), LOG_WARNING },
+               { BER_BVC( "NOTICE" ),  LOG_NOTICE },
+               { BER_BVC( "INFO" ),    LOG_INFO },
+               { BER_BVC( "DEBUG" ),   LOG_DEBUG },
+               { BER_BVNULL, 0 }
+       };
+       int i = verb_to_mask( arg, str2syslog_level );
+       if ( BER_BVISNULL( &str2syslog_level[ i ].word ) ) {
+               Debug( LDAP_DEBUG_ANY,
+                       "unknown syslog level \"%s\".\n",
+                       arg, 0, 0 );
+               return 1;
+       }
+       
+       *levelp = str2syslog_level[ i ].mask;
+
+       return 0;
+}
+
 int
 parse_debug_level( const char *arg, int *levelp )
 {
@@ -400,11 +429,14 @@ int main( int argc, char **argv )
 #ifdef HAVE_CHROOT
                                "r:"
 #endif
+#ifdef LDAP_SYSLOG
+                               "S:"
+#endif
 #ifdef LOG_LOCAL4
-                            "l:"
+                               "l:"
 #endif
 #if defined(HAVE_SETUID) && defined(HAVE_SETGID)
-                            "u:g:"
+                               "u:g:"
 #endif
                             )) != EOF ) {
                switch ( i ) {
@@ -514,6 +546,14 @@ int main( int argc, char **argv )
                        }
                        break;
 
+#if defined(LDAP_DEBUG) && defined(LDAP_SYSLOG)
+               case 'S':
+                       if ( parse_syslog_level( optarg, &ldap_syslog_level ) ) {
+                               goto destroy;
+                       }
+                       break;
+#endif /* LDAP_DEBUG && LDAP_SYSLOG */
+
 #ifdef LOG_LOCAL4
                case 'l':       /* set syslog local user */
                        if ( parse_syslog_user( optarg, &syslogUser ) ) {
@@ -859,6 +899,7 @@ destroy:
        extops_kill();
 
        supported_feature_destroy();
+       entry_info_destroy();
 
 stop:
 #ifdef HAVE_NT_EVENT_LOG