#include "lutil.h"
#include "lutil_ldap.h"
#include "lload-config.h"
+#include "../slapd/slap-cfglog.h"
#ifdef _WIN32
#define LUTIL_ATOULX lutil_atoullx
static ConfigDriver config_tcp_buffer;
#endif /* LDAP_TCP_BUFFER */
static ConfigDriver config_restrict;
-static ConfigDriver config_loglevel;
static ConfigDriver config_include;
static ConfigDriver config_feature;
#ifdef HAVE_TLS
CFG_TLS_SHARE_CTX,
CFG_CONCUR,
CFG_THREADS,
- CFG_LOGFILE,
- CFG_LOGFILE_ONLY,
- CFG_LOGFILE_ROTATE,
CFG_MIRRORMODE,
CFG_IOTHREADS,
CFG_MAXBUF_CLIENT,
#endif /* BALANCER_MODULE */
{ "logfile", "file", 2, 2, 0,
ARG_STRING|ARG_MAGIC|CFG_LOGFILE,
- &config_generic,
+ &config_logging,
NULL, NULL, NULL
},
{ "logfile-only", "on|off", 2, 2, 0,
ARG_ON_OFF|ARG_MAGIC|CFG_LOGFILE_ONLY,
- &config_generic,
+ &config_logging,
NULL, NULL, NULL
},
{ "logfile-rotate", "max> <Mbyte> <hours", 4, 4, 0,
ARG_MAGIC|CFG_LOGFILE_ROTATE,
- &config_generic,
+ &config_logging,
NULL, NULL, NULL
},
{ "loglevel", "level", 2, 0, 0,
- ARG_MAGIC,
- &config_loglevel,
+ ARG_MAGIC|CFG_LOGLEVEL,
+ &config_logging,
NULL, NULL, NULL
},
{ "pidfile", "file", 2, 2, 0,
}
} break;
- case CFG_LOGFILE: {
- int rc = logfile_open( c->value_string );
- ch_free( c->value_string );
- return rc;
- } 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;
- }
- logfile_only = c->value_int;
- break;
-
- case CFG_LOGFILE_ROTATE: {
- unsigned lf_max, lf_mbyte, lf_hour;
- if ( lutil_atoux( &lf_max, c->argv[1], 0 ) != 0 ) {
- snprintf( c->cr_msg, sizeof( c->cr_msg ), "<%s> "
- "invalid max value \"%s\"",
- c->argv[0], c->argv[1] );
- goto fail;
- }
- if ( !lf_max || lf_max > 99 ) {
- snprintf( c->cr_msg, sizeof( c->cr_msg ), "<%s> "
- "invalid max value \"%s\" must be 1-99",
- c->argv[0], c->argv[1] );
- goto fail;
- }
- if ( lutil_atoux( &lf_mbyte, c->argv[2], 0 ) != 0 ) {
- snprintf( c->cr_msg, sizeof( c->cr_msg ), "<%s> "
- "invalid Mbyte value \"%s\"",
- c->argv[0], c->argv[2] );
- goto fail;
- }
- if ( lutil_atoux( &lf_hour, c->argv[3], 0 ) != 0 ) {
- snprintf( c->cr_msg, sizeof( c->cr_msg ), "<%s> "
- "invalid hours value \"%s\"",
- c->argv[0], c->argv[3] );
- goto fail;
- }
- if ( !lf_mbyte && !lf_hour ) {
- snprintf( c->cr_msg, sizeof( c->cr_msg ), "<%s> "
- "Mbyte and hours cannot both be zero",
- c->argv[0] );
- goto fail;
- }
- logfile_max = lf_max;
- logfile_fslimit = lf_mbyte * 1048576; /* Megabytes to bytes */
- logfile_age = lf_hour * 3600; /* hours to seconds */
- } break;
-
case CFG_RESCOUNT:
lload_conn_max_pdus_per_cycle = c->value_uint;
break;
return 0;
}
-static slap_verbmasks *loglevel_ops;
-
-static int
-loglevel_init( void )
-{
- slap_verbmasks lo[] = {
- { BER_BVC("Any"), (slap_mask_t)LDAP_DEBUG_ANY },
- { BER_BVC("Trace"), LDAP_DEBUG_TRACE },
- { BER_BVC("Packets"), LDAP_DEBUG_PACKETS },
- { BER_BVC("Args"), LDAP_DEBUG_ARGS },
- { BER_BVC("Conns"), LDAP_DEBUG_CONNS },
- { BER_BVC("BER"), LDAP_DEBUG_BER },
- { BER_BVC("Filter"), LDAP_DEBUG_FILTER },
- { BER_BVC("Config"), LDAP_DEBUG_CONFIG },
- { BER_BVC("ACL"), LDAP_DEBUG_ACL },
- { BER_BVC("Stats"), LDAP_DEBUG_STATS },
- { BER_BVC("Stats2"), LDAP_DEBUG_STATS2 },
- { BER_BVC("Shell"), LDAP_DEBUG_SHELL },
- { BER_BVC("Parse"), LDAP_DEBUG_PARSE },
- { BER_BVC("Sync"), LDAP_DEBUG_SYNC },
- { BER_BVC("None"), LDAP_DEBUG_NONE },
- { BER_BVNULL, 0 }
- };
-
- return slap_verbmasks_init( &loglevel_ops, lo );
-}
-
-static void
-loglevel_destroy( void )
-{
- if ( loglevel_ops ) {
- (void)slap_verbmasks_destroy( loglevel_ops );
- }
- loglevel_ops = NULL;
-}
-
-int
-str2loglevel( const char *s, int *l )
-{
- int i;
-
- if ( loglevel_ops == NULL ) {
- loglevel_init();
- }
-
- i = verb_to_mask( s, loglevel_ops );
-
- if ( BER_BVISNULL( &loglevel_ops[i].word ) ) {
- return -1;
- }
-
- *l = loglevel_ops[i].mask;
-
- return 0;
-}
-
-int
-loglevel2bvarray( int l, BerVarray *bva )
-{
- if ( loglevel_ops == NULL ) {
- loglevel_init();
- }
-
- if ( l == 0 ) {
- struct berval bv = BER_BVC("0");
- return value_add_one( bva, &bv );
- }
-
- return mask_to_verbs( loglevel_ops, l, bva );
-}
-
-int
-loglevel_print( FILE *out )
-{
- int i;
-
- if ( loglevel_ops == NULL ) {
- loglevel_init();
- }
-
- fprintf( out, "Installed log subsystems:\n\n" );
- for ( i = 0; !BER_BVISNULL( &loglevel_ops[i].word ); i++ ) {
- unsigned mask = loglevel_ops[i].mask & 0xffffffffUL;
- fprintf( out,
- ( mask == ( (slap_mask_t)-1 & 0xffffffffUL ) ?
- "\t%-30s (-1, 0xffffffff)\n" :
- "\t%-30s (%u, 0x%x)\n" ),
- loglevel_ops[i].word.bv_val, mask, mask );
- }
-
- return 0;
-}
-
-static int
-config_loglevel( ConfigArgs *c )
-{
- int i;
-
- if ( loglevel_ops == NULL ) {
- loglevel_init();
- }
-
- for ( i = 1; i < c->argc; i++ ) {
- int level;
-
- if ( isdigit( (unsigned char)c->argv[i][0] ) || c->argv[i][0] == '-' ) {
- if ( lutil_atoix( &level, c->argv[i], 0 ) != 0 ) {
- snprintf( c->cr_msg, sizeof(c->cr_msg),
- "<%s> unable to parse level",
- c->argv[0] );
- Debug( LDAP_DEBUG_ANY, "%s: %s \"%s\"\n",
- c->log, c->cr_msg, c->argv[i] );
- return 1;
- }
- } else {
- if ( str2loglevel( c->argv[i], &level ) ) {
- snprintf( c->cr_msg, sizeof(c->cr_msg), "<%s> unknown level",
- c->argv[0] );
- Debug( LDAP_DEBUG_ANY, "%s: %s \"%s\"\n",
- c->log, c->cr_msg, c->argv[i] );
- return 1;
- }
- }
- /* Explicitly setting a zero clears all the levels */
- if ( level )
- config_syslog |= level;
- else
- config_syslog = 0;
- }
- if ( slapMode & SLAP_SERVER_MODE ) {
- if ( logfile_only ) {
- slap_debug = slap_debug_orig | config_syslog;
- ldap_syslog = 0;
- } else {
- ldap_syslog = config_syslog;
- }
- }
- return 0;
-}
-
static int
config_include( ConfigArgs *c )
{
free( line );
if ( slapd_args_file ) free( slapd_args_file );
if ( slapd_pid_file ) free( slapd_pid_file );
- loglevel_destroy();
+ slap_loglevel_destroy();
}
/* See if the given URL (in plain and parsed form) matches
{
BerVarray bva = NULL;
- if ( loglevel2bvarray( ldap_syslog, &bva ) == 0 && bva != NULL ) {
+ if ( loglevel2bvarray( slap_syslog_get(), &bva ) == 0 && bva != NULL ) {
monitor_info_t *mi;
Entry *e;
{
monitor_info_t *mi = ( monitor_info_t * )op->o_bd->be_private;
int rc = LDAP_OTHER;
- int newlevel = ldap_syslog;
+ int newlevel = slap_syslog_get();
Attribute *save_attrs;
Modifications *modlist = op->orm_modlist;
Modifications *ml;
/*
* Do we need to protect this with a mutex?
*/
- ldap_syslog = newlevel;
+ slap_syslog_set( newlevel );
#if 0 /* debug rather than log */
slap_debug = newlevel;
#include <lutil.h>
#include "slap-config.h"
+#include "slap-cfglog.h"
#define CONFIG_RDN "cn=config"
#define SCHEMA_RDN "cn=schema"
static ConfigDriver config_requires;
static ConfigDriver config_security;
static ConfigDriver config_referral;
-static ConfigDriver config_loglevel;
static ConfigDriver config_updatedn;
static ConfigDriver config_updateref;
static ConfigDriver config_extra_attrs;
CFG_ATTR,
CFG_ATOPT,
CFG_ROOTDSE,
- CFG_LOGFILE,
CFG_PLUGIN,
CFG_MODLOAD,
CFG_MODPATH,
CFG_TLS_CACERT,
CFG_TLS_CERT,
CFG_TLS_KEY,
- CFG_LOGFILE_ROTATE,
- CFG_LOGFILE_ONLY,
CFG_LAST
};
"SYNTAX OMsInteger SINGLE-VALUE )", NULL,
{ .v_int = LDAP_PVT_SASL_LOCAL_SSF } },
{ "logfile", "file", 2, 2, 0, ARG_STRING|ARG_MAGIC|CFG_LOGFILE,
- &config_generic, "( OLcfgGlAt:27 NAME 'olcLogFile' "
+ &config_logging, "( OLcfgGlAt:27 NAME 'olcLogFile' "
"EQUALITY caseExactMatch "
"SYNTAX OMsDirectoryString SINGLE-VALUE )", NULL, NULL },
{ "logfile-only", "on|off", 2, 2, 0, ARG_ON_OFF|ARG_MAGIC|CFG_LOGFILE_ONLY,
- &config_generic, "( OLcfgGlAt:102 NAME 'olcLogFileOnly' "
+ &config_logging, "( 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,
- &config_generic, "( OLcfgGlAt:103 NAME 'olcLogFileRotate' "
+ &config_logging, "( OLcfgGlAt:103 NAME 'olcLogFileRotate' "
"EQUALITY caseIgnoreMatch "
"SYNTAX OMsDirectoryString SINGLE-VALUE )", NULL, NULL },
- { "loglevel", "level", 2, 0, 0, ARG_MAGIC,
- &config_loglevel, "( OLcfgGlAt:28 NAME 'olcLogLevel' "
+ { "loglevel", "level", 2, 0, 0, ARG_MAGIC|CFG_LOGLEVEL,
+ &config_logging, "( OLcfgGlAt:28 NAME 'olcLogLevel' "
"EQUALITY caseIgnoreMatch "
"SYNTAX OMsDirectoryString )", NULL, NULL },
{ "maxDerefDepth", "depth", 2, 2, 0, ARG_DB|ARG_INT|ARG_MAGIC|CFG_DEPTH,
static int new_daemon_threads;
-static int config_syslog;
-
static int
config_resize_lthreads(ConfigArgs *c)
{
rc = 1;
}
break;
- case CFG_LOGFILE: {
- const char *logfileName = logfile_name();
- if ( logfileName && *logfileName )
- c->value_string = ch_strdup( logfileName );
- else
- rc = 1;
- }
- break;
- case CFG_LOGFILE_ONLY:
- c->value_int = logfile_only;
- break;
- case CFG_LOGFILE_ROTATE:
- rc = 1;
- if ( logfile_max ) {
- char buf[64];
- struct berval bv;
- bv.bv_len = snprintf( buf, sizeof(buf), "%d %ld %ld", logfile_max,
- (long) logfile_fslimit / 1048576, (long) logfile_age / 3600 );
- if ( bv.bv_len > 0 && bv.bv_len < sizeof(buf) ) {
- bv.bv_val = buf;
- value_add_one( &c->rvalue_vals, &bv );
- rc = 0;
- }
- }
- break;
case CFG_LASTMOD:
c->value_int = (SLAP_NOLASTMOD(c->be) == 0);
break;
passwd_salt = NULL;
break;
- case CFG_LOGFILE:
- 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;
-
case CFG_SERVERID: {
ServerID *si, **sip;
ldap_free_urldesc( lud );
}
break;
- case CFG_LOGFILE: {
- int rc = logfile_open( c->value_string );
- ch_free( c->value_string );
- return rc;
- }
- 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;
- }
- logfile_only = c->value_int;
- break;
-
- case CFG_LOGFILE_ROTATE: {
- unsigned lf_max, lf_mbyte, lf_hour;
- if ( lutil_atoux( &lf_max, c->argv[1], 0 ) != 0 ) {
- snprintf( c->cr_msg, sizeof( c->cr_msg ), "<%s> "
- "invalid max value \"%s\"", c->argv[0], c->argv[1] );
- Debug( LDAP_DEBUG_ANY, "%s: %s.\n",
- c->log, c->cr_msg );
- return 1;
- }
- if ( !lf_max || lf_max > 99 ) {
- snprintf( c->cr_msg, sizeof( c->cr_msg ), "<%s> "
- "invalid max value \"%s\" must be 1-99", c->argv[0], c->argv[1] );
- Debug( LDAP_DEBUG_ANY, "%s: %s.\n",
- c->log, c->cr_msg );
- return 1;
- }
- if ( lutil_atoux( &lf_mbyte, c->argv[2], 0 ) != 0 ) {
- snprintf( c->cr_msg, sizeof( c->cr_msg ), "<%s> "
- "invalid Mbyte value \"%s\"", c->argv[0], c->argv[2] );
- Debug( LDAP_DEBUG_ANY, "%s: %s.\n",
- c->log, c->cr_msg );
- return 1;
- }
- if ( lutil_atoux( &lf_hour, c->argv[3], 0 ) != 0 ) {
- snprintf( c->cr_msg, sizeof( c->cr_msg ), "<%s> "
- "invalid hours value \"%s\"", c->argv[0], c->argv[3] );
- Debug( LDAP_DEBUG_ANY, "%s: %s.\n",
- c->log, c->cr_msg );
- return 1;
- }
- if ( !lf_mbyte && !lf_hour ) {
- snprintf( c->cr_msg, sizeof( c->cr_msg ), "<%s> "
- "Mbyte and hours cannot both be zero", c->argv[0] );
- Debug( LDAP_DEBUG_ANY, "%s: %s.\n",
- c->log, c->cr_msg );
- return 1;
- }
- logfile_max = lf_max;
- logfile_fslimit = lf_mbyte * 1048576; /* Megabytes to bytes */
- logfile_age = lf_hour * 3600; /* hours to seconds */
- }
- break;
case CFG_LASTMOD:
if(SLAP_NOLASTMODCMD(c->be)) {
return 0;
}
-static slap_verbmasks *loglevel_ops;
-
-static int
-loglevel_init( void )
-{
- slap_verbmasks lo[] = {
- { BER_BVC("Any"), (slap_mask_t) LDAP_DEBUG_ANY },
- { BER_BVC("Trace"), LDAP_DEBUG_TRACE },
- { BER_BVC("Packets"), LDAP_DEBUG_PACKETS },
- { BER_BVC("Args"), LDAP_DEBUG_ARGS },
- { BER_BVC("Conns"), LDAP_DEBUG_CONNS },
- { BER_BVC("BER"), LDAP_DEBUG_BER },
- { BER_BVC("Filter"), LDAP_DEBUG_FILTER },
- { BER_BVC("Config"), LDAP_DEBUG_CONFIG },
- { BER_BVC("ACL"), LDAP_DEBUG_ACL },
- { BER_BVC("Stats"), LDAP_DEBUG_STATS },
- { BER_BVC("Stats2"), LDAP_DEBUG_STATS2 },
- { BER_BVC("Shell"), LDAP_DEBUG_SHELL },
- { BER_BVC("Parse"), LDAP_DEBUG_PARSE },
-#if 0 /* no longer used (nor supported) */
- { BER_BVC("Cache"), LDAP_DEBUG_CACHE },
- { BER_BVC("Index"), LDAP_DEBUG_INDEX },
-#endif
- { BER_BVC("Sync"), LDAP_DEBUG_SYNC },
- { BER_BVC("None"), LDAP_DEBUG_NONE },
- { BER_BVNULL, 0 }
- };
-
- return slap_verbmasks_init( &loglevel_ops, lo );
-}
-
-static void
-loglevel_destroy( void )
-{
- if ( loglevel_ops ) {
- (void)slap_verbmasks_destroy( loglevel_ops );
- }
- loglevel_ops = NULL;
-}
-
-static slap_mask_t loglevel_ignore[] = { -1, 0 };
-
-int
-slap_loglevel_register( slap_mask_t m, struct berval *s )
-{
- int rc;
-
- if ( loglevel_ops == NULL ) {
- loglevel_init();
- }
-
- rc = slap_verbmasks_append( &loglevel_ops, m, s, loglevel_ignore );
-
- if ( rc != 0 ) {
- Debug( LDAP_DEBUG_ANY, "slap_loglevel_register(%lu, \"%s\") failed\n",
- m, s->bv_val );
- }
-
- return rc;
-}
-
-int
-slap_loglevel_get( struct berval *s, int *l )
-{
- int rc;
- slap_mask_t m, i;
-
- if ( loglevel_ops == NULL ) {
- loglevel_init();
- }
-
- for ( m = 0, i = 1; !BER_BVISNULL( &loglevel_ops[ i ].word ); i++ ) {
- m |= loglevel_ops[ i ].mask;
- }
-
- for ( i = 1; m & i; i <<= 1 )
- ;
-
- if ( i == 0 ) {
- return -1;
- }
-
- rc = slap_verbmasks_append( &loglevel_ops, i, s, loglevel_ignore );
-
- if ( rc != 0 ) {
- Debug( LDAP_DEBUG_ANY, "slap_loglevel_get(%lu, \"%s\") failed\n",
- i, s->bv_val );
-
- } else {
- *l = i;
- slap_check_unknown_level( s->bv_val, i );
- }
-
- return rc;
-}
-
-int
-str2loglevel( const char *s, int *l )
-{
- int i;
-
- if ( loglevel_ops == NULL ) {
- loglevel_init();
- }
-
- i = verb_to_mask( s, loglevel_ops );
-
- if ( BER_BVISNULL( &loglevel_ops[ i ].word ) ) {
- return -1;
- }
-
- *l = loglevel_ops[ i ].mask;
-
- return 0;
-}
-
-const char *
-loglevel2str( int l )
-{
- struct berval bv = BER_BVNULL;
-
- loglevel2bv( l, &bv );
-
- return bv.bv_val;
-}
-
-int
-loglevel2bv( int l, struct berval *bv )
-{
- if ( loglevel_ops == NULL ) {
- loglevel_init();
- }
-
- BER_BVZERO( bv );
-
- return enum_to_verb( loglevel_ops, l, bv ) == -1;
-}
-
-int
-loglevel2bvarray( int l, BerVarray *bva )
-{
- if ( loglevel_ops == NULL ) {
- loglevel_init();
- }
-
- if ( l == 0 ) {
- struct berval bv = BER_BVC("0");
- return value_add_one( bva, &bv );
- }
-
- return mask_to_verbs( loglevel_ops, l, bva );
-}
-
-int
-loglevel_print( FILE *out )
-{
- int i;
-
- if ( loglevel_ops == NULL ) {
- loglevel_init();
- }
-
- fprintf( out, "Installed log subsystems:\n\n" );
- for ( i = 0; !BER_BVISNULL( &loglevel_ops[ i ].word ); i++ ) {
- unsigned mask = loglevel_ops[ i ].mask & 0xffffffffUL;
- fprintf( out,
- (mask == ((slap_mask_t) -1 & 0xffffffffUL)
- ? "\t%-30s (-1, 0xffffffff)\n" : "\t%-30s (%u, 0x%x)\n"),
- loglevel_ops[ i ].word.bv_val, mask, mask );
- }
-
- fprintf( out, "\nNOTE: custom log subsystems may be later installed "
- "by specific code\n\n" );
-
- return 0;
-}
-
-static int
-config_loglevel(ConfigArgs *c) {
- int i;
-
- if ( loglevel_ops == NULL ) {
- loglevel_init();
- }
-
- if (c->op == SLAP_CONFIG_EMIT) {
- /* Get default or commandline slapd setting */
- if ( ldap_syslog && !config_syslog )
- config_syslog = ldap_syslog;
- return loglevel2bvarray( config_syslog, &c->rvalue_vals );
-
- } else if ( c->op == LDAP_MOD_DELETE ) {
- if ( !c->line ) {
- config_syslog = 0;
- } else {
- i = verb_to_mask( c->line, loglevel_ops );
- config_syslog &= ~loglevel_ops[i].mask;
- }
- goto reset;
- }
-
- for( i=1; i < c->argc; i++ ) {
- int level;
-
- if ( isdigit((unsigned char)c->argv[i][0]) || c->argv[i][0] == '-' ) {
- if( lutil_atoix( &level, c->argv[i], 0 ) != 0 ) {
- snprintf( c->cr_msg, sizeof( c->cr_msg ), "<%s> unable to parse level", c->argv[0] );
- Debug( LDAP_DEBUG_ANY, "%s: %s \"%s\"\n",
- c->log, c->cr_msg, c->argv[i]);
- return( 1 );
- }
- } else {
- if ( str2loglevel( c->argv[i], &level ) ) {
- snprintf( c->cr_msg, sizeof( c->cr_msg ), "<%s> unknown level", c->argv[0] );
- Debug( LDAP_DEBUG_ANY, "%s: %s \"%s\"\n",
- c->log, c->cr_msg, c->argv[i]);
- return( 1 );
- }
- }
- /* Explicitly setting a zero clears all the levels */
- if ( level )
- config_syslog |= level;
- else
- config_syslog = 0;
- }
-
-reset:
- if ( slapMode & SLAP_SERVER_MODE ) {
- if ( logfile_only ) {
- slap_debug = slap_debug_orig | config_syslog;
- ldap_syslog = 0;
- } else {
- ldap_syslog = config_syslog;
- }
- }
- return(0);
-}
-
static int
config_referral(ConfigArgs *c) {
struct berval val;
backend_destroy_one( &cfb->cb_db, 0 );
}
- loglevel_destroy();
+ slap_loglevel_destroy();
return 0;
}
#include <ac/string.h>
#include <ac/time.h>
#include <ac/unistd.h>
+#include <ac/ctype.h>
#include <sys/stat.h>
#include <sys/uio.h>
#include "slap.h"
+#include "slap-config.h"
+#include "slap-cfglog.h"
+
+static int config_syslog, active_syslog;
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;
+static char logfile_path[MAXPATHLEN - sizeof(logfile_suffix) -1];
+static long logfile_fslimit;
+static int logfile_age, logfile_only, logfile_max;
+
int slap_debug_orig;
ldap_pvt_thread_mutex_t logfile_mutex;
iov[1].iov_base = (void *)data;
iov[1].iov_len = strlen( data );
if ( !logfile_only )
- writev( 2, iov, 2 );
+ (void)!writev( 2, iov, 2 );
if ( logfile_fd >= 0 ) {
int len = iov[0].iov_len + iov[1].iov_len;
if ( logfile_fslimit || logfile_age ) {
{
return logfile_path[0] ? logfile_path : NULL;
}
+
+#if defined(LDAP_DEBUG) && defined(LDAP_SYSLOG)
+#ifdef LOG_LOCAL4
+int
+slap_parse_syslog_user( const char *arg, int *syslogUser )
+{
+ static slap_verbmasks syslogUsers[] = {
+ { BER_BVC( "LOCAL0" ), LOG_LOCAL0 },
+ { BER_BVC( "LOCAL1" ), LOG_LOCAL1 },
+ { BER_BVC( "LOCAL2" ), LOG_LOCAL2 },
+ { BER_BVC( "LOCAL3" ), LOG_LOCAL3 },
+ { BER_BVC( "LOCAL4" ), LOG_LOCAL4 },
+ { BER_BVC( "LOCAL5" ), LOG_LOCAL5 },
+ { BER_BVC( "LOCAL6" ), LOG_LOCAL6 },
+ { BER_BVC( "LOCAL7" ), LOG_LOCAL7 },
+#ifdef LOG_USER
+ { BER_BVC( "USER" ), LOG_USER },
+#endif /* LOG_USER */
+#ifdef LOG_DAEMON
+ { BER_BVC( "DAEMON" ), LOG_DAEMON },
+#endif /* LOG_DAEMON */
+ { BER_BVNULL, 0 }
+ };
+ int i = verb_to_mask( arg, syslogUsers );
+
+ if ( BER_BVISNULL( &syslogUsers[ i ].word ) ) {
+ Debug( LDAP_DEBUG_ANY,
+ "unrecognized syslog user \"%s\".\n",
+ arg );
+ return 1;
+ }
+
+ *syslogUser = syslogUsers[ i ].mask;
+
+ return 0;
+}
+#endif /* LOG_LOCAL4 */
+
+int
+slap_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 );
+ return 1;
+ }
+
+ *levelp = str2syslog_level[ i ].mask;
+
+ return 0;
+}
+#endif /* LDAP_DEBUG && LDAP_SYSLOG */
+
+static char **debug_unknowns;
+static char **syslog_unknowns;
+
+static int
+parse_debug_unknowns( char **unknowns, int *levelp )
+{
+ int i, level, rc = 0;
+
+ for ( i = 0; unknowns[ i ] != NULL; i++ ) {
+ level = 0;
+ if ( str2loglevel( unknowns[ i ], &level )) {
+ fprintf( stderr,
+ "unrecognized log level \"%s\"\n", unknowns[ i ] );
+ rc = 1;
+ } else {
+ *levelp |= level;
+ }
+ }
+ return rc;
+}
+
+int
+slap_parse_debug_level( const char *arg, int *levelp, int which )
+{
+ int level;
+
+ if ( arg && arg[ 0 ] != '-' && !isdigit( (unsigned char) arg[ 0 ] ) )
+ {
+ int i;
+ char **levels;
+ char ***unknowns = which ? &syslog_unknowns : &debug_unknowns;
+
+ levels = ldap_str2charray( arg, "," );
+
+ for ( i = 0; levels[ i ] != NULL; i++ ) {
+ level = 0;
+
+ if ( str2loglevel( levels[ i ], &level ) ) {
+ /* remember this for later */
+ ldap_charray_add( unknowns, levels[ i ] );
+ fprintf( stderr,
+ "unrecognized log level \"%s\" (deferred)\n",
+ levels[ i ] );
+ } else {
+ *levelp |= level;
+ }
+ }
+
+ ldap_charray_free( levels );
+
+ } else {
+ int rc;
+
+ if ( arg[0] == '-' ) {
+ rc = lutil_atoix( &level, arg, 0 );
+ } else {
+ unsigned ulevel;
+
+ rc = lutil_atoux( &ulevel, arg, 0 );
+ level = (int)ulevel;
+ }
+
+ if ( rc ) {
+ fprintf( stderr,
+ "unrecognized log level "
+ "\"%s\"\n", arg );
+ return 1;
+ }
+
+ if ( level == 0 ) {
+ *levelp = 0;
+
+ } else {
+ *levelp |= level;
+ }
+ }
+
+ return 0;
+}
+
+int
+slap_parse_debug_unknowns() {
+ int rc = 0;
+ if ( debug_unknowns ) {
+ rc = parse_debug_unknowns( debug_unknowns, &slap_debug );
+ ldap_charray_free( debug_unknowns );
+ debug_unknowns = NULL;
+ if ( rc )
+ goto leave;
+ ber_set_option( NULL, LBER_OPT_DEBUG_LEVEL, &slap_debug );
+ ldap_set_option( NULL, LDAP_OPT_DEBUG_LEVEL, &slap_debug );
+ }
+ if ( syslog_unknowns ) {
+ rc = parse_debug_unknowns( syslog_unknowns, &ldap_syslog );
+ ldap_charray_free( syslog_unknowns );
+ syslog_unknowns = NULL;
+ }
+leave:
+ return rc;
+}
+
+void slap_check_unknown_level( char *levelstr, int level )
+{
+ int i;
+
+ if ( debug_unknowns ) {
+ for ( i = 0; debug_unknowns[ i ]; i++ ) {
+ if ( !strcasecmp( debug_unknowns[ i ], levelstr )) {
+ slap_debug |= level;
+ break;
+ }
+ }
+ }
+
+ if ( syslog_unknowns ) {
+ for ( i = 0; syslog_unknowns[ i ]; i++ ) {
+ if ( !strcasecmp( syslog_unknowns[ i ], levelstr )) {
+ ldap_syslog |= level;
+ break;
+ }
+ }
+ }
+}
+
+static slap_verbmasks *loglevel_ops;
+
+static int
+loglevel_init( void )
+{
+ slap_verbmasks lo[] = {
+ { BER_BVC("Any"), (slap_mask_t) LDAP_DEBUG_ANY },
+ { BER_BVC("Trace"), LDAP_DEBUG_TRACE },
+ { BER_BVC("Packets"), LDAP_DEBUG_PACKETS },
+ { BER_BVC("Args"), LDAP_DEBUG_ARGS },
+ { BER_BVC("Conns"), LDAP_DEBUG_CONNS },
+ { BER_BVC("BER"), LDAP_DEBUG_BER },
+ { BER_BVC("Filter"), LDAP_DEBUG_FILTER },
+ { BER_BVC("Config"), LDAP_DEBUG_CONFIG },
+ { BER_BVC("ACL"), LDAP_DEBUG_ACL },
+ { BER_BVC("Stats"), LDAP_DEBUG_STATS },
+ { BER_BVC("Stats2"), LDAP_DEBUG_STATS2 },
+ { BER_BVC("Shell"), LDAP_DEBUG_SHELL },
+ { BER_BVC("Parse"), LDAP_DEBUG_PARSE },
+#if 0 /* no longer used (nor supported) */
+ { BER_BVC("Cache"), LDAP_DEBUG_CACHE },
+ { BER_BVC("Index"), LDAP_DEBUG_INDEX },
+#endif
+ { BER_BVC("Sync"), LDAP_DEBUG_SYNC },
+ { BER_BVC("None"), LDAP_DEBUG_NONE },
+ { BER_BVNULL, 0 }
+ };
+
+ return slap_verbmasks_init( &loglevel_ops, lo );
+}
+
+void
+slap_loglevel_destroy( void )
+{
+ if ( loglevel_ops ) {
+ (void)slap_verbmasks_destroy( loglevel_ops );
+ }
+ loglevel_ops = NULL;
+}
+
+static slap_mask_t loglevel_ignore[] = { -1, 0 };
+
+int
+slap_loglevel_get( struct berval *s, int *l )
+{
+ int rc;
+ slap_mask_t m, i;
+
+ if ( loglevel_ops == NULL ) {
+ loglevel_init();
+ }
+
+ for ( m = 0, i = 1; !BER_BVISNULL( &loglevel_ops[ i ].word ); i++ ) {
+ m |= loglevel_ops[ i ].mask;
+ }
+
+ for ( i = 1; m & i; i <<= 1 )
+ ;
+
+ if ( i == 0 ) {
+ return -1;
+ }
+
+ rc = slap_verbmasks_append( &loglevel_ops, i, s, loglevel_ignore );
+
+ if ( rc != 0 ) {
+ Debug( LDAP_DEBUG_ANY, "slap_loglevel_get(%lu, \"%s\") failed\n",
+ i, s->bv_val );
+
+ } else {
+ *l = i;
+ slap_check_unknown_level( s->bv_val, i );
+ }
+
+ return rc;
+}
+
+int
+slap_syslog_get()
+{
+ return active_syslog;
+}
+
+void
+slap_syslog_set( int l )
+{
+ active_syslog = l;
+ if ( logfile_only ) {
+ slap_debug |= active_syslog;
+ ldap_syslog = 0;
+ } else {
+ ldap_syslog = active_syslog;
+ }
+}
+
+int
+str2loglevel( const char *s, int *l )
+{
+ int i;
+
+ if ( loglevel_ops == NULL ) {
+ loglevel_init();
+ }
+
+ i = verb_to_mask( s, loglevel_ops );
+
+ if ( BER_BVISNULL( &loglevel_ops[ i ].word ) ) {
+ return -1;
+ }
+
+ *l = loglevel_ops[ i ].mask;
+
+ return 0;
+}
+
+const char *
+loglevel2str( int l )
+{
+ struct berval bv = BER_BVNULL;
+
+ loglevel2bv( l, &bv );
+
+ return bv.bv_val;
+}
+
+int
+loglevel2bv( int l, struct berval *bv )
+{
+ if ( loglevel_ops == NULL ) {
+ loglevel_init();
+ }
+
+ BER_BVZERO( bv );
+
+ return enum_to_verb( loglevel_ops, l, bv ) == -1;
+}
+
+int
+loglevel2bvarray( int l, BerVarray *bva )
+{
+ if ( loglevel_ops == NULL ) {
+ loglevel_init();
+ }
+
+ if ( l == 0 ) {
+ struct berval bv = BER_BVC("0");
+ return value_add_one( bva, &bv );
+ }
+
+ return mask_to_verbs( loglevel_ops, l, bva );
+}
+
+int
+loglevel_print( FILE *out )
+{
+ int i;
+
+ if ( loglevel_ops == NULL ) {
+ loglevel_init();
+ }
+
+ fprintf( out, "Installed log subsystems:\n\n" );
+ for ( i = 0; !BER_BVISNULL( &loglevel_ops[ i ].word ); i++ ) {
+ unsigned mask = loglevel_ops[ i ].mask & 0xffffffffUL;
+ fprintf( out,
+ (mask == ((slap_mask_t) -1 & 0xffffffffUL)
+ ? "\t%-30s (-1, 0xffffffff)\n" : "\t%-30s (%u, 0x%x)\n"),
+ loglevel_ops[ i ].word.bv_val, mask, mask );
+ }
+
+ fprintf( out, "\nNOTE: custom log subsystems may be later installed "
+ "by specific code\n\n" );
+
+ return 0;
+}
+
+int
+config_logging(ConfigArgs *c) {
+ int i, rc;
+
+ if ( loglevel_ops == NULL ) {
+ loglevel_init();
+ }
+
+ if (c->op == SLAP_CONFIG_EMIT) {
+ switch(c->type) {
+ case CFG_LOGLEVEL:
+ /* Get default or commandline slapd setting */
+ if ( ldap_syslog && !config_syslog )
+ config_syslog = ldap_syslog;
+ rc = loglevel2bvarray( config_syslog, &c->rvalue_vals );
+ break;
+
+ case CFG_LOGFILE: {
+ const char *logfileName = logfile_name();
+ if ( logfileName && *logfileName )
+ c->value_string = ch_strdup( logfileName );
+ else
+ rc = 1;
+ }
+ break;
+ case CFG_LOGFILE_ONLY:
+ c->value_int = logfile_only;
+ break;
+ case CFG_LOGFILE_ROTATE:
+ rc = 1;
+ if ( logfile_max ) {
+ char buf[64];
+ struct berval bv;
+ bv.bv_len = snprintf( buf, sizeof(buf), "%d %ld %ld", logfile_max,
+ (long) logfile_fslimit / 1048576, (long) logfile_age / 3600 );
+ if ( bv.bv_len > 0 && bv.bv_len < sizeof(buf) ) {
+ bv.bv_val = buf;
+ value_add_one( &c->rvalue_vals, &bv );
+ rc = 0;
+ }
+ }
+ break;
+ default:
+ rc = 1;
+ }
+ return rc;
+ } else if ( c->op == LDAP_MOD_DELETE ) {
+ switch(c->type) {
+ case CFG_LOGLEVEL:
+ if ( !c->line ) {
+ config_syslog = 0;
+ } else {
+ i = verb_to_mask( c->line, loglevel_ops );
+ config_syslog &= ~loglevel_ops[i].mask;
+ }
+ goto reset;
+
+ case CFG_LOGFILE:
+ 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;
+ default:
+ rc = 1;
+ }
+ return rc;
+ }
+
+ switch(c->type) {
+ case CFG_LOGLEVEL:
+ for( i=1; i < c->argc; i++ ) {
+ int level;
+
+ if ( isdigit((unsigned char)c->argv[i][0]) || c->argv[i][0] == '-' ) {
+ if( lutil_atoix( &level, c->argv[i], 0 ) != 0 ) {
+ snprintf( c->cr_msg, sizeof( c->cr_msg ), "<%s> unable to parse level", c->argv[0] );
+ Debug( LDAP_DEBUG_ANY, "%s: %s \"%s\"\n",
+ c->log, c->cr_msg, c->argv[i]);
+ return( 1 );
+ }
+ } else {
+ if ( str2loglevel( c->argv[i], &level ) ) {
+ snprintf( c->cr_msg, sizeof( c->cr_msg ), "<%s> unknown level", c->argv[0] );
+ Debug( LDAP_DEBUG_ANY, "%s: %s \"%s\"\n",
+ c->log, c->cr_msg, c->argv[i]);
+ return( 1 );
+ }
+ }
+ /* Explicitly setting a zero clears all the levels */
+ if ( level )
+ config_syslog |= level;
+ else
+ config_syslog = 0;
+ }
+
+reset:
+ slap_debug = slap_debug_orig;
+ active_syslog = config_syslog;
+ if ( logfile_only ) {
+ slap_debug |= config_syslog;
+ ldap_syslog = 0;
+ } else {
+ ldap_syslog = config_syslog;
+ }
+ rc = 0;
+ break;
+
+ case CFG_LOGFILE:
+ rc = logfile_open( c->value_string );
+ ch_free( c->value_string );
+ break;
+
+ case CFG_LOGFILE_ONLY:
+ logfile_only = c->value_int;
+ goto reset;
+
+ case CFG_LOGFILE_ROTATE: {
+ unsigned lf_max, lf_mbyte, lf_hour;
+ if ( lutil_atoux( &lf_max, c->argv[1], 0 ) != 0 ) {
+ snprintf( c->cr_msg, sizeof( c->cr_msg ), "<%s> "
+ "invalid max value \"%s\"", c->argv[0], c->argv[1] );
+ Debug( LDAP_DEBUG_ANY, "%s: %s.\n",
+ c->log, c->cr_msg );
+ return 1;
+ }
+ if ( !lf_max || lf_max > 99 ) {
+ snprintf( c->cr_msg, sizeof( c->cr_msg ), "<%s> "
+ "invalid max value \"%s\" must be 1-99", c->argv[0], c->argv[1] );
+ Debug( LDAP_DEBUG_ANY, "%s: %s.\n",
+ c->log, c->cr_msg );
+ return 1;
+ }
+ if ( lutil_atoux( &lf_mbyte, c->argv[2], 0 ) != 0 ) {
+ snprintf( c->cr_msg, sizeof( c->cr_msg ), "<%s> "
+ "invalid Mbyte value \"%s\"", c->argv[0], c->argv[2] );
+ Debug( LDAP_DEBUG_ANY, "%s: %s.\n",
+ c->log, c->cr_msg );
+ return 1;
+ }
+ if ( lutil_atoux( &lf_hour, c->argv[3], 0 ) != 0 ) {
+ snprintf( c->cr_msg, sizeof( c->cr_msg ), "<%s> "
+ "invalid hours value \"%s\"", c->argv[0], c->argv[3] );
+ Debug( LDAP_DEBUG_ANY, "%s: %s.\n",
+ c->log, c->cr_msg );
+ return 1;
+ }
+ if ( !lf_mbyte && !lf_hour ) {
+ snprintf( c->cr_msg, sizeof( c->cr_msg ), "<%s> "
+ "Mbyte and hours cannot both be zero", c->argv[0] );
+ Debug( LDAP_DEBUG_ANY, "%s: %s.\n",
+ c->log, c->cr_msg );
+ return 1;
+ }
+ logfile_max = lf_max;
+ logfile_fslimit = lf_mbyte * 1048576; /* Megabytes to bytes */
+ logfile_age = lf_hour * 3600; /* hours to seconds */
+ }
+ break;
+ default:
+ rc = 1;
+ }
+ return rc;
+}
{ BER_BVNULL, 0, NULL, NULL }
};
-#if defined(LDAP_DEBUG) && defined(LDAP_SYSLOG)
-#ifdef LOG_LOCAL4
-int
-parse_syslog_user( const char *arg, int *syslogUser )
-{
- static slap_verbmasks syslogUsers[] = {
- { BER_BVC( "LOCAL0" ), LOG_LOCAL0 },
- { BER_BVC( "LOCAL1" ), LOG_LOCAL1 },
- { BER_BVC( "LOCAL2" ), LOG_LOCAL2 },
- { BER_BVC( "LOCAL3" ), LOG_LOCAL3 },
- { BER_BVC( "LOCAL4" ), LOG_LOCAL4 },
- { BER_BVC( "LOCAL5" ), LOG_LOCAL5 },
- { BER_BVC( "LOCAL6" ), LOG_LOCAL6 },
- { BER_BVC( "LOCAL7" ), LOG_LOCAL7 },
-#ifdef LOG_USER
- { BER_BVC( "USER" ), LOG_USER },
-#endif /* LOG_USER */
-#ifdef LOG_DAEMON
- { BER_BVC( "DAEMON" ), LOG_DAEMON },
-#endif /* LOG_DAEMON */
- { BER_BVNULL, 0 }
- };
- int i = verb_to_mask( arg, syslogUsers );
-
- if ( BER_BVISNULL( &syslogUsers[ i ].word ) ) {
- Debug( LDAP_DEBUG_ANY,
- "unrecognized syslog user \"%s\".\n",
- arg );
- return 1;
- }
-
- *syslogUser = syslogUsers[ i ].mask;
-
- return 0;
-}
-#endif /* LOG_LOCAL4 */
-
-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 );
- return 1;
- }
-
- *levelp = str2syslog_level[ i ].mask;
-
- return 0;
-}
-#endif /* LDAP_DEBUG && LDAP_SYSLOG */
-
-static char **debug_unknowns;
-static char **syslog_unknowns;
-
-int
-parse_debug_unknowns( char **unknowns, int *levelp )
-{
- int i, level, rc = 0;
-
- for ( i = 0; unknowns[ i ] != NULL; i++ ) {
- level = 0;
- if ( str2loglevel( unknowns[ i ], &level )) {
- fprintf( stderr,
- "unrecognized log level \"%s\"\n", unknowns[ i ] );
- rc = 1;
- } else {
- *levelp |= level;
- }
- }
- return rc;
-}
-
-int
-parse_debug_level( const char *arg, int *levelp, char ***unknowns )
-{
- int level;
-
- if ( arg && arg[ 0 ] != '-' && !isdigit( (unsigned char) arg[ 0 ] ) )
- {
- int i;
- char **levels;
-
- levels = ldap_str2charray( arg, "," );
-
- for ( i = 0; levels[ i ] != NULL; i++ ) {
- level = 0;
-
- if ( str2loglevel( levels[ i ], &level ) ) {
- /* remember this for later */
- ldap_charray_add( unknowns, levels[ i ] );
- fprintf( stderr,
- "unrecognized log level \"%s\" (deferred)\n",
- levels[ i ] );
- } else {
- *levelp |= level;
- }
- }
-
- ldap_charray_free( levels );
-
- } else {
- int rc;
-
- if ( arg[0] == '-' ) {
- rc = lutil_atoix( &level, arg, 0 );
- } else {
- unsigned ulevel;
-
- rc = lutil_atoux( &ulevel, arg, 0 );
- level = (int)ulevel;
- }
-
- if ( rc ) {
- fprintf( stderr,
- "unrecognized log level "
- "\"%s\"\n", arg );
- return 1;
- }
-
- if ( level == 0 ) {
- *levelp = 0;
-
- } else {
- *levelp |= level;
- }
- }
-
- return 0;
-}
-
-void slap_check_unknown_level( char *levelstr, int level )
-{
- int i;
-
- if ( debug_unknowns ) {
- for ( i = 0; debug_unknowns[ i ]; i++ ) {
- if ( !strcasecmp( debug_unknowns[ i ], levelstr )) {
- slap_debug |= level;
- break;
- }
- }
- }
-
- if ( syslog_unknowns ) {
- for ( i = 0; syslog_unknowns[ i ]; i++ ) {
- if ( !strcasecmp( syslog_unknowns[ i ], levelstr )) {
- ldap_syslog |= level;
- break;
- }
- }
- }
-}
-
static void
usage( char *name )
{
}
no_detach = 1;
- if ( parse_debug_level( optarg, &level, &debug_unknowns ) ) {
+ if ( slap_parse_debug_level( optarg, &level, 0 ) ) {
goto destroy;
}
#ifdef LDAP_DEBUG
break;
}
- if ( parse_debug_level( optarg, &ldap_syslog, &syslog_unknowns ) ) {
+ if ( slap_parse_debug_level( optarg, &ldap_syslog, 1 ) ) {
goto destroy;
}
break;
#if defined(LDAP_DEBUG) && defined(LDAP_SYSLOG)
case 'S':
- if ( parse_syslog_level( optarg, &ldap_syslog_level ) ) {
+ if ( slap_parse_syslog_level( optarg, &ldap_syslog_level ) ) {
goto destroy;
}
break;
#ifdef LOG_LOCAL4
case 'l': /* set syslog local user */
- if ( parse_syslog_user( optarg, &syslogUser ) ) {
+ if ( slap_parse_syslog_user( optarg, &syslogUser ) ) {
goto destroy;
}
break;
goto destroy;
}
- if ( debug_unknowns ) {
- rc = parse_debug_unknowns( debug_unknowns, &slap_debug );
- ldap_charray_free( debug_unknowns );
- debug_unknowns = NULL;
- if ( rc )
- goto destroy;
- ber_set_option( NULL, LBER_OPT_DEBUG_LEVEL, &slap_debug );
- ldap_set_option( NULL, LDAP_OPT_DEBUG_LEVEL, &slap_debug );
- }
- if ( syslog_unknowns ) {
- rc = parse_debug_unknowns( syslog_unknowns, &ldap_syslog );
- ldap_charray_free( syslog_unknowns );
- syslog_unknowns = NULL;
- if ( rc )
- goto destroy;
- }
+ rc = slap_parse_debug_unknowns();
+ if ( rc )
+ goto destroy;
if ( check & CHECK_LOGLEVEL ) {
rc = 0;
/*
* bconfig.c
*/
-LDAP_SLAPD_F (int) slap_loglevel_register LDAP_P (( slap_mask_t m, struct berval *s ));
-LDAP_SLAPD_F (int) slap_loglevel_get LDAP_P(( struct berval *s, int *l ));
-LDAP_SLAPD_F (int) str2loglevel LDAP_P(( const char *s, int *l ));
-LDAP_SLAPD_F (int) loglevel2bvarray LDAP_P(( int l, BerVarray *bva ));
-LDAP_SLAPD_F (const char *) loglevel2str LDAP_P(( int l ));
-LDAP_SLAPD_F (int) loglevel2bv LDAP_P(( int l, struct berval *bv ));
-LDAP_SLAPD_F (int) loglevel_print LDAP_P(( FILE *out ));
LDAP_SLAPD_F (int) slap_cf_aux_table_parse LDAP_P(( const char *word, void *bc, slap_cf_aux_table *tab0, LDAP_CONST char *tabmsg ));
LDAP_SLAPD_F (int) slap_cf_aux_table_unparse LDAP_P(( void *bc, struct berval *bv, slap_cf_aux_table *tab0 ));
/*
* logging.c
*/
+LDAP_SLAPD_F (int) slap_loglevel_get LDAP_P(( struct berval *s, int *l ));
+LDAP_SLAPD_F (void) slap_loglevel_destroy LDAP_P(( void ));
+LDAP_SLAPD_F (int) str2loglevel LDAP_P(( const char *s, int *l ));
+LDAP_SLAPD_F (int) loglevel2bvarray LDAP_P(( int l, BerVarray *bva ));
+LDAP_SLAPD_F (const char *) loglevel2str LDAP_P(( int l ));
+LDAP_SLAPD_F (int) loglevel2bv LDAP_P(( int l, struct berval *bv ));
+LDAP_SLAPD_F (int) loglevel_print LDAP_P(( FILE *out ));
LDAP_SLAPD_F (void) slap_debug_print LDAP_P(( const char *data ));
LDAP_SLAPD_F (int) logfile_open LDAP_P(( const char *path ));
LDAP_SLAPD_F (void) logfile_close LDAP_P(( void ));
+LDAP_SLAPD_F (void) slap_syslog_set LDAP_P(( int l ));
+LDAP_SLAPD_F (int) slap_syslog_get LDAP_P(( void ));
LDAP_SLAPD_F (const char *) logfile_name LDAP_P(( void ));
-LDAP_SLAPD_V(ldap_pvt_thread_mutex_t) logfile_mutex;
-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
- */
LDAP_SLAPD_F (int)
-parse_debug_level LDAP_P(( const char *arg, int *levelp, char ***unknowns ));
+slap_parse_syslog_level LDAP_P(( const char *arg, int *levelp ));
LDAP_SLAPD_F (int)
-parse_syslog_level LDAP_P(( const char *arg, int *levelp ));
+slap_parse_syslog_user LDAP_P(( const char *arg, int *syslogUser ));
LDAP_SLAPD_F (int)
-parse_syslog_user LDAP_P(( const char *arg, int *syslogUser ));
+slap_parse_debug_level LDAP_P(( const char *arg, int *levelp, int which ));
LDAP_SLAPD_F (int)
-parse_debug_unknowns LDAP_P(( char **unknowns, int *levelp ));
+slap_parse_debug_unknowns LDAP_P(( void ));
LDAP_SLAPD_F (void)
slap_check_unknown_level LDAP_P(( char *levelstr, int level ));
+LDAP_SLAPD_V(ldap_pvt_thread_mutex_t) logfile_mutex;
+LDAP_SLAPD_V(int) slap_debug_orig;
+
+/*
+ * main.c
+ */
/*
* matchedValues.c
--- /dev/null
+/* slap-cfglog.h - logging configuration */
+/* $OpenLDAP$ */
+/* This work is part of OpenLDAP Software <http://www.openldap.org/>.
+ *
+ * Copyright 1998-2021 The OpenLDAP Foundation.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted only as authorized by the OpenLDAP
+ * Public License.
+ *
+ * A copy of this license is available in the file LICENSE in the
+ * top-level directory of the distribution or, alternatively, at
+ * <http://www.OpenLDAP.org/license.html>.
+ */
+
+#ifndef CFGLOG_H
+#define CFGLOG_H
+
+enum {
+ CFG_LOGLEVEL = 1,
+ CFG_LOGFILE,
+ CFG_LOGFILE_ROTATE,
+ CFG_LOGFILE_ONLY
+};
+
+extern ConfigDriver config_logging;
+
+#endif /* CFGLOG_H */
#if defined(LDAP_SYSLOG) && defined(LDAP_DEBUG)
int start_syslog;
-static char **syslog_unknowns;
#ifdef LOG_LOCAL4
static int syslogUser = SLAP_DEFAULT_SYSLOG_USER;
#endif /* LOG_LOCAL4 */
#if defined(LDAP_SYSLOG) && defined(LDAP_DEBUG)
} else if ( strncasecmp( optarg, "syslog", len ) == 0 ) {
- if ( parse_debug_level( p, &ldap_syslog, &syslog_unknowns ) ) {
+ if ( slap_parse_debug_level( p, &ldap_syslog, 1 ) ) {
return -1;
}
start_syslog = 1;
} else if ( strncasecmp( optarg, "syslog-level", len ) == 0 ) {
- if ( parse_syslog_level( p, &ldap_syslog_level ) ) {
+ if ( slap_parse_syslog_level( p, &ldap_syslog_level ) ) {
return -1;
}
start_syslog = 1;
#ifdef LOG_LOCAL4
} else if ( strncasecmp( optarg, "syslog-user", len ) == 0 ) {
- if ( parse_syslog_user( p, &syslogUser ) ) {
+ if ( slap_parse_syslog_user( p, &syslogUser ) ) {
return -1;
}
start_syslog = 1;
char *filterstr = NULL;
char *subtree = NULL;
char *ldiffile = NULL;
- char **debug_unknowns = NULL;
int rc, i;
int mode = SLAP_TOOL_MODE;
int truncatemode = 0;
case 'd': { /* turn on debugging */
int level = 0;
- if ( parse_debug_level( optarg, &level, &debug_unknowns ) ) {
+ if ( slap_parse_debug_level( optarg, &level, 0 ) ) {
usage( tool, progname );
}
#ifdef LDAP_DEBUG
exit( EXIT_FAILURE );
}
- if ( debug_unknowns ) {
- rc = parse_debug_unknowns( debug_unknowns, &slap_debug );
- ldap_charray_free( debug_unknowns );
- debug_unknowns = NULL;
- if ( rc )
- exit( EXIT_FAILURE );
- }
-
-#if defined(LDAP_SYSLOG) && defined(LDAP_DEBUG)
- if ( syslog_unknowns ) {
- rc = parse_debug_unknowns( syslog_unknowns, &ldap_syslog );
- ldap_charray_free( syslog_unknowns );
- syslog_unknowns = NULL;
- if ( rc )
- exit( EXIT_FAILURE );
- }
-#endif
+ rc = slap_parse_debug_unknowns();
+ if ( rc )
+ exit( EXIT_FAILURE );
at_oc_cache = 1;