/* $OpenLDAP$ */
/* This work is part of OpenLDAP Software <http://www.openldap.org/>.
*
- * Copyright 1998-2006 The OpenLDAP Foundation.
+ * Copyright 1998-2007 The OpenLDAP Foundation.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
OPENLDAP_PACKAGE " " OPENLDAP_VERSION " Standalone LDAP Server (slapd)";
#endif
-#define CHECK_NONE 0x00
-#define CHECK_CONFIG 0x01
+#define CHECK_NONE 0x00
+#define CHECK_CONFIG 0x01
+#define CHECK_LOGLEVEL 0x02
static int check = CHECK_NONE;
static int version = 0;
"\t-g group\tGroup (id or name) to run as\n"
#endif
"\t-h URLs\t\tList of URLs to serve\n"
-#ifdef LOG_LOCAL4
+#ifdef SLAP_DEFAULT_SYSLOG_USER
"\t-l facility\tSyslog facility (default: LOCAL4)\n"
#endif
"\t-n serverName\tService name\n"
#if defined(HAVE_CHROOT)
char *sandbox = NULL;
#endif
-#ifdef LOG_LOCAL4
+#ifdef SLAP_DEFAULT_SYSLOG_USER
int syslogUser = SLAP_DEFAULT_SYSLOG_USER;
#endif
size_t l;
int slapd_pid_file_unlink = 0, slapd_args_file_unlink = 0;
+ int firstopt = 1;
#ifdef CSRIMALLOC
FILE *leakfile;
#ifdef HAVE_NT_SERVICE_MANAGER
{
- int *i;
+ int *ip;
char *newConfigFile;
char *newConfigDir;
char *newUrls;
regService = serverName;
}
- i = (int*)lutil_getRegParam( regService, "DebugLevel" );
- if ( i != NULL ) {
- slap_debug = *i;
+ ip = (int*)lutil_getRegParam( regService, "DebugLevel" );
+ if ( ip != NULL ) {
+ slap_debug = *ip;
Debug( LDAP_DEBUG_ANY,
"new debug level from registry is: %d\n", slap_debug, 0, 0 );
}
while ( (i = getopt( argc, argv,
"c:d:f:F:h:n:o:s:tT:V"
-#if LDAP_PF_INET6
+#ifdef LDAP_PF_INET6
"46"
#endif
#ifdef HAVE_CHROOT
int level = 0;
if ( strcmp( optarg, "?" ) == 0 ) {
- rc = loglevel_print( stdout );
- goto destroy;
+ check |= CHECK_LOGLEVEL;
+ break;
}
no_detach = 1;
case 'o': {
char *val = strchr( optarg, '=' );
struct berval opt;
- int i;
opt.bv_val = optarg;
case 's': /* set syslog level */
if ( strcmp( optarg, "?" ) == 0 ) {
- rc = loglevel_print( stdout );
- goto destroy;
+ check |= CHECK_LOGLEVEL;
+ break;
}
if ( parse_debug_level( optarg, &ldap_syslog, &syslog_unknowns ) ) {
break;
case 'T':
+ if ( firstopt == 0 ) {
+ fprintf( stderr, "warning: \"-T %s\" "
+ "should be the first option.\n",
+ optarg );
+ }
+
/* try full option string first */
for ( i = 0; tools[i].name; i++ ) {
if ( strcmp( optarg, &tools[i].name[4] ) == 0 ) {
SERVICE_EXIT( ERROR_SERVICE_SPECIFIC_ERROR, 15 );
goto stop;
}
+
+ if ( firstopt ) {
+ firstopt = 0;
+ }
}
ber_set_option(NULL, LBER_OPT_DEBUG_LEVEL, &slap_debug);
if ( version > 1 ) goto stop;
}
+#if defined(LDAP_DEBUG) && defined(LDAP_SYSLOG)
{
char *logName;
#ifdef HAVE_EBCDIC
#ifdef LOG_LOCAL4
openlog( logName, OPENLOG_OPTIONS, syslogUser );
-#elif LOG_DEBUG
+#elif defined LOG_DEBUG
openlog( logName, OPENLOG_OPTIONS );
#endif
#ifdef HAVE_EBCDIC
free( logName );
#endif
}
+#endif /* LDAP_DEBUG && LDAP_SYSLOG */
Debug( LDAP_DEBUG_ANY, "%s", Versionstr, 0, 0 );
+ global_host = ldap_pvt_get_fqdn( NULL );
+
if( check == CHECK_NONE && slapd_daemon_init( urls ) != 0 ) {
rc = 1;
SERVICE_EXIT( ERROR_SERVICE_SPECIFIC_ERROR, 16 );
extops_init();
lutil_passwd_init();
- slap_op_init();
#ifdef HAVE_TLS
rc = ldap_create( &slap_tls_ld );
syslog_unknowns = NULL;
if ( rc )
goto destroy;
+ }
+
+ if ( check & CHECK_LOGLEVEL ) {
+ rc = 0;
+ goto destroy;
}
if ( check & CHECK_CONFIG ) {
rc |= slap_shutdown( NULL );
destroy:
+ if ( check & CHECK_LOGLEVEL ) {
+ (void)loglevel_print( stdout );
+ }
/* remember an error during destroy */
rc |= slap_destroy();
module_kill();
#endif
- slap_op_destroy();
-
extops_kill();
supported_feature_destroy();
#ifdef HAVE_TLS
if ( slap_tls_ld ) {
- SSL_CTX_free( slap_tls_ctx );
+ ldap_pvt_tls_ctx_free( slap_tls_ctx );
ldap_unbind_ext( slap_tls_ld, NULL, NULL );
}
ldap_pvt_tls_destroy();