[Fedora-directory-commits] ldapserver/ldap/servers/slapd auth.c, 1.6, 1.7 config.c, 1.6, 1.7 dse.c, 1.5, 1.6 fedse.c, 1.7, 1.8 libglobs.c, 1.9, 1.10 main.c, 1.11, 1.12 proto-slap.h, 1.20, 1.21 schema.c, 1.8, 1.9 slap.h, 1.14, 1.15

Noriko Hosoi (nhosoi) fedora-directory-commits at redhat.com
Wed Sep 27 23:40:53 UTC 2006


Author: nhosoi

Update of /cvs/dirsec/ldapserver/ldap/servers/slapd
In directory cvs-int.fedora.redhat.com:/tmp/cvs-serv16463/ldap/servers/slapd

Modified Files:
	auth.c config.c dse.c fedse.c libglobs.c main.c proto-slap.h 
	schema.c slap.h 
Log Message:
[207427] parameterizing the hardcoded paths (Comment #15)
phase 1. parameterizing config, schema and ldif directory



Index: auth.c
===================================================================
RCS file: /cvs/dirsec/ldapserver/ldap/servers/slapd/auth.c,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -r1.6 -r1.7
--- auth.c	11 Apr 2006 02:14:44 -0000	1.6
+++ auth.c	27 Sep 2006 23:40:51 -0000	1.7
@@ -272,41 +272,27 @@
 client_auth_init ()
 {
     char *instancedir;
-    int len = 0;
-    char *val = NULL;
-    char* filename;
-    char netsite_root[MAXPATHLEN];
     int err;
     if (client_auth_config_file == NULL) {
-	client_auth_config_file = "shared/config/certmap.conf";
-    }
-
-    /* calculate the server_root from instance dir */
-    instancedir = config_get_instancedir();
-    /* make sure path does not end in the path separator character */
-    len = strlen(instancedir);
-    if (instancedir[len-1] == '/' || instancedir[len-1] == '\\') {
-	instancedir[len-1] = '\0';
-    }
-
-    /* get the server root from the path */
-    val = strrchr(instancedir, '/');
-    if (!val) {
-	val = strrchr(instancedir, '\\');
+	char *confdir = config_get_configdir();
+	if (NULL == confdir) {
+	    LDAPDebug (LDAP_DEBUG_ANY,
+		"client_auth_init: failed to get configdir\n",
+		0, 0, 0);
+	    return;
+	}
+	client_auth_config_file = PR_smprintf("%s/certmap.conf", confdir);
+	if (NULL == client_auth_config_file) {
+	    LDAPDebug (LDAP_DEBUG_ANY,
+		"client_auth_init: failed to duplicate \"%s/certmap\"\n",
+		confdir, 0, 0);
+	    return;
+	}
     }
-    if (val) {
-    	val++;
-    	*val = '\0';
-    } 
-
-    PL_strncpyz(netsite_root, instancedir, MAXPATHLEN);
-    slapi_ch_free_string(&instancedir);
-    filename = PR_smprintf("%s%s", netsite_root, client_auth_config_file);
-
-    err = ldaputil_init (filename, "", netsite_root, "slapd", NULL);
+    err = ldaputil_init (client_auth_config_file, "", NULL, "slapd", NULL);
     if (err != LDAPU_SUCCESS) {
 	LDAPDebug (LDAP_DEBUG_TRACE, "ldaputil_init(%s,...) %i\n",
-		filename, err, 0);
+		client_auth_config_file, err, 0);
     } else {
 	LDAPUVTable_t vtable = {
 	    NULL /* ssl_init */,
@@ -329,9 +315,6 @@
 	    slapu_value_free_len};
 	ldapu_VTable_set (&vtable);
     }
-    PR_smprintf_free (filename);
-    /* why do we define these strings if we never use them? */
-    if (ldapu_strings != NULL);
 
     /* Generate a component id for cert-based authentication */
     generate_id();


Index: config.c
===================================================================
RCS file: /cvs/dirsec/ldapserver/ldap/servers/slapd/config.c,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -r1.6 -r1.7
--- config.c	24 Nov 2005 01:39:44 -0000	1.6
+++ config.c	27 Sep 2006 23:40:51 -0000	1.7
@@ -160,30 +160,40 @@
 	char *buf = 0;
 	char *lastp = 0;
 	char *entrystr = 0;
+	char *instancedir = NULL;
 
+	if (NULL == configdir) {
+		slapi_log_error(SLAPI_LOG_FATAL,
+						"startup", "Passed null config directory\n");
+		return rc; /* Fail */
+	}
 	PR_snprintf(configfile, sizeof(configfile), "%s/%s", configdir,
-			CONFIG_FILENAME);
+				CONFIG_FILENAME);
 	if ( (rc = PR_GetFileInfo( configfile, &prfinfo )) != PR_SUCCESS )
 	{
 		/* the "real" file does not exist; see if there is a tmpfile */
 		char tmpfile[MAXPATHLEN+1];
+		slapi_log_error(SLAPI_LOG_FATAL, "config",
+					"The configuration file %s does not exist\n", configfile);
 		PR_snprintf(tmpfile, sizeof(tmpfile), "%s/%s.tmp", configdir,
-				CONFIG_FILENAME);
+					CONFIG_FILENAME);
 		if ( PR_GetFileInfo( tmpfile, &prfinfo ) == PR_SUCCESS ) {
 			rc = PR_Rename(tmpfile, configfile);
 			if (rc == PR_SUCCESS) {
 				slapi_log_error(SLAPI_LOG_FATAL, "config",
 								"The configuration file %s was restored from backup %s\n",
 								configfile, tmpfile);
-				rc = 1;
 			} else {
 				slapi_log_error(SLAPI_LOG_FATAL, "config",
 								"The configuration file %s was not restored from backup %s, error %d\n",
 								configfile, tmpfile, rc);
-				rc = 0;
+				return rc; /* Fail */
 			}
 		} else {
-			rc = 0; /* fail */
+			slapi_log_error(SLAPI_LOG_FATAL, "config",
+				"The backup configuration file %s does not exist, either.\n",
+				tmpfile);
+			return rc; /* Fail */
 		}
 	}
 	if ( (rc = PR_GetFileInfo( configfile, &prfinfo )) != PR_SUCCESS )
@@ -191,7 +201,7 @@
 		PRErrorCode prerr = PR_GetError();
 		slapi_log_error(SLAPI_LOG_FATAL, "config", "The given config file %s could not be accessed, " SLAPI_COMPONENT_NAME_NSPR " error %d (%s)\n",
 						configfile, prerr, slapd_pr_strerror(prerr));
-		rc = 0; /* Fail */
+		return rc;
 	}
 	else if (( prfd = PR_Open( configfile, PR_RDONLY,
 							   SLAPD_DEFAULT_FILE_MODE )) == NULL )
@@ -199,7 +209,7 @@
 		PRErrorCode prerr = PR_GetError();
 		slapi_log_error(SLAPI_LOG_FATAL, "config", "The given config file %s could not be opened for reading, " SLAPI_COMPONENT_NAME_NSPR " error %d (%s)\n",
 						configfile, prerr, slapd_pr_strerror(prerr));
-		rc = 0; /* Fail */
+		return rc; /* Fail */
 	}
 	else
 	{
@@ -218,7 +228,7 @@
 
 		if(!done)
 		{
-			char errorlog[MAXPATHLEN+1];
+			char workpath[MAXPATHLEN+1];
 			char loglevel[BUFSIZ];
 			char maxdescriptors[BUFSIZ];
 			char val[BUFSIZ];
@@ -227,7 +237,7 @@
 			char schemacheck[BUFSIZ];
 			Slapi_DN plug_dn;
 
-			errorlog[0] = loglevel[0] = maxdescriptors[0] = '\0';
+			workpath[0] = loglevel[0] = maxdescriptors[0] = '\0';
 			val[0] = logenabled[0] = schemacheck[0] = '\0';
 			_localuser[0] = '\0';
 
@@ -252,6 +262,28 @@
 					continue;
 				}
 
+				/* if instancedir is not set, set it first */
+				{
+					instancedir = config_get_instancedir();
+					if (NULL == instancedir) {
+						workpath[0] = '\0';
+						if (entry_has_attr_and_value(e,
+												CONFIG_INSTANCEDIR_ATTRIBUTE,
+												workpath, sizeof(workpath))) {
+							if (config_set_instancedir(
+											CONFIG_INSTANCEDIR_ATTRIBUTE,
+											workpath, errorbuf, CONFIG_APPLY)
+								!= LDAP_SUCCESS) {
+								LDAPDebug(LDAP_DEBUG_ANY, "%s: %s: %s\n",
+									configfile, CONFIG_INSTANCEDIR_ATTRIBUTE,
+									errorbuf);
+							}
+						}
+					} else {
+						slapi_ch_free((void **)&instancedir);
+					}
+				}
+
 				/* increase file descriptors */
 #if !defined(_WIN32) && !defined(AIX)
 				if (!maxdescriptors[0] &&
@@ -301,12 +333,13 @@
 #endif
 				
 				/* set the log file name */
-				if (!errorlog[0] &&
+				workpath[0] = '\0';
+				if (!workpath[0] &&
 					entry_has_attr_and_value(e, CONFIG_ERRORLOG_ATTRIBUTE,
-								errorlog, sizeof(errorlog)))
+								workpath, sizeof(workpath)))
 				{
 					if (config_set_errorlog(CONFIG_ERRORLOG_ATTRIBUTE,
-						errorlog, errorbuf, CONFIG_APPLY) != LDAP_SUCCESS)
+						workpath, errorbuf, CONFIG_APPLY) != LDAP_SUCCESS)
 					{
 						LDAPDebug(LDAP_DEBUG_ANY, "%s: %s: %s. \n", configfile,
 								  CONFIG_ERRORLOG_ATTRIBUTE, errorbuf);
@@ -485,6 +518,18 @@
 					slapi_entry_free(e);
 			}
 
+			/* 
+			 * check if the instance dir is set.
+			 */
+			if ( NULL == ( instancedir = config_get_instancedir() )) {
+				slapi_log_error(SLAPI_LOG_FATAL, "startup",
+								"Instance directory is not specifiled in the file %s. It is mandatory.\n",
+								configfile);
+				exit (1);
+			} else {
+				slapi_ch_free((void **)&instancedir);
+			}
+			
 			/* kexcoff: initialize rootpwstoragescheme and pw_storagescheme
 			 *			if not explicilty set in the config file
 			 */


Index: dse.c
===================================================================
RCS file: /cvs/dirsec/ldapserver/ldap/servers/slapd/dse.c,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -r1.5 -r1.6
--- dse.c	19 Apr 2005 22:07:36 -0000	1.5
+++ dse.c	27 Sep 2006 23:40:51 -0000	1.6
@@ -38,10 +38,9 @@
 /*
  * dse.c - DSE (DSA-Specific Entry) persistent storage.
  *
- * The DSE store is an LDIF file contained in the file
- * INSTANCEDIR/config/XXX.ldif, where INSTANCEDIR is
- * the directory of the server instance, and XXX is
- * dfined by the caller of dse_new.
+ * The DSE store is an LDIF file contained in the file dse.ldif.
+ * The file is located in the directory specified with '-D' 
+ * when staring the server.
  *
  * In core, the DSEs are stored in an AVL tree, keyed on
  * DN.  Whenever a modification is made to a DSE, the
@@ -354,14 +353,15 @@
 dse_new( char *filename, char *tmpfilename, char *backfilename, char *startokfilename, const char *configdir)
 {
     struct dse *pdse= NULL;
-    const char *config_sub_dir = "config";
-    char *id = 	config_get_instancedir();
     char *realconfigdir = NULL;
 
-    if (configdir!=NULL) {
-		realconfigdir = slapi_ch_strdup(configdir);
-    } else if (id!=NULL) {
-		realconfigdir = slapi_ch_smprintf("%s/%s", id, config_sub_dir);
+    if (configdir!=NULL)
+    {
+        realconfigdir = slapi_ch_strdup(configdir);
+    }
+    else
+    {
+        realconfigdir = config_get_configdir();
     }
     if(realconfigdir!=NULL)
     {
@@ -412,7 +412,6 @@
         }
 		slapi_ch_free( (void **) &realconfigdir );
     }
-    slapi_ch_free( (void **) &id );
     return pdse;
 }
 


Index: fedse.c
===================================================================
RCS file: /cvs/dirsec/ldapserver/ldap/servers/slapd/fedse.c,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -r1.7 -r1.8
--- fedse.c	19 Apr 2005 22:07:36 -0000	1.7
+++ fedse.c	27 Sep 2006 23:40:51 -0000	1.8
@@ -38,9 +38,9 @@
 /*
  * fedse.c - Front End DSE (DSA-Specific Entry) persistent storage.
  *
- * The DSE store is an LDIF file contained in the file
- * INSTANCEDIR/config/dse.ldif, where INSTANCEDIR is
- * the directory of the server instance.
+ * The DSE store is an LDIF file contained in the file dse.ldif.
+ * The file is located in the directory specified with '-D' 
+ * when staring the server.
  *
  * In core, the DSEs are stored in an AVL tree, keyed on
  * DN.  Whenever a modification is made to a DSE, the
@@ -1866,48 +1866,54 @@
 
 int fedse_create_startOK(char *filename,  char *startokfilename, const char *configdir)
 {
-    const char *config_sub_dir = "config";
-    char *id =  config_get_instancedir();
     char *realconfigdir = NULL;
-	char *dse_filename = NULL;
-	char *dse_filestartOK = NULL;
-	int rc = -1;
+    char *dse_filename = NULL;
+    char *dse_filestartOK = NULL;
+    int rc = -1;
 
-    if (configdir!=NULL) {
+    if (configdir!=NULL)
+    {
         realconfigdir = slapi_ch_strdup(configdir);
-    } else if (id!=NULL) {
-        realconfigdir = slapi_ch_smprintf("%s/%s", id, config_sub_dir);
     }
-	slapi_ch_free_string(&id);
+    else
+    {
+        realconfigdir = config_get_configdir();
+    }
     if(realconfigdir!=NULL)
     {
-		/* Set the full path name for the config DSE entry */
-		if (!strstr(filename, realconfigdir))
-		{
-			dse_filename = slapi_ch_smprintf("%s/%s", realconfigdir, filename );
-		}
-		else
-			dse_filename = slapi_ch_strdup(filename);
+        /* Set the full path name for the config DSE entry */
+        if (!strstr(filename, realconfigdir))
+        {
+            dse_filename = slapi_ch_smprintf("%s/%s", realconfigdir, filename);
+        }
+        else
+        {
+            dse_filename = slapi_ch_strdup(filename);
+        }
 
-		if (!strstr(startokfilename, realconfigdir)) {
-			dse_filestartOK = slapi_ch_smprintf("%s/%s", realconfigdir, startokfilename );
-		}
-		else
-			dse_filestartOK = slapi_ch_strdup(startokfilename);
+        if (!strstr(startokfilename, realconfigdir))
+        {
+            dse_filestartOK = slapi_ch_smprintf("%s/%s",
+                                                realconfigdir, startokfilename);
+        }
+        else
+        {
+            dse_filestartOK = slapi_ch_strdup(startokfilename);
+        }
 
-		rc = slapi_copy(dse_filename, dse_filestartOK);
-		if ( rc != 0 )
-		{
-			slapi_log_error( SLAPI_LOG_FATAL, "dse", "Cannot copy"
-					" DSE file \"%s\" to \"%s\" OS error %d (%s)\n",
-					dse_filename, dse_filestartOK,
-					rc, slapd_system_strerror(rc) );
-		}
-		
-		slapi_ch_free_string(&dse_filename);
-		slapi_ch_free_string(&dse_filestartOK);
-		slapi_ch_free_string(&realconfigdir);
-	}
+        rc = slapi_copy(dse_filename, dse_filestartOK);
+        if ( rc != 0 )
+        {
+            slapi_log_error( SLAPI_LOG_FATAL, "dse", "Cannot copy"
+                    " DSE file \"%s\" to \"%s\" OS error %d (%s)\n",
+                    dse_filename, dse_filestartOK,
+                    rc, slapd_system_strerror(rc) );
+        }
+        
+        slapi_ch_free_string(&dse_filename);
+        slapi_ch_free_string(&dse_filestartOK);
+        slapi_ch_free_string(&realconfigdir);
+    }
 
-	return rc;
+    return rc;
 }


Index: libglobs.c
===================================================================
RCS file: /cvs/dirsec/ldapserver/ldap/servers/slapd/libglobs.c,v
retrieving revision 1.9
retrieving revision 1.10
diff -u -r1.9 -r1.10
--- libglobs.c	31 Aug 2006 22:52:07 -0000	1.9
+++ libglobs.c	27 Sep 2006 23:40:51 -0000	1.10
@@ -513,9 +513,16 @@
 		CONFIG_CONSTANT_STRING, NULL},
 	{CONFIG_HASH_FILTERS_ATTRIBUTE, config_set_hash_filters,
 		NULL, 0, NULL, CONFIG_ON_OFF, (ConfigGetFunc)config_get_hash_filters},
-	{CONFIG_INSTANCEDIR_ATTRIBUTE, NULL /* read only */,
+	{CONFIG_INSTANCEDIR_ATTRIBUTE, config_set_instancedir,
 		NULL, 0,
 		(void**)&global_slapdFrontendConfig.instancedir, CONFIG_STRING, NULL},
+	/* parameterizing schema dir */
+	{CONFIG_SCHEMADIR_ATTRIBUTE, config_set_schemadir,
+		NULL, 0,
+		(void**)&global_slapdFrontendConfig.schemadir, CONFIG_STRING, NULL},
+	/* parameterizing ldif dir */
+	{CONFIG_LDIFDIR_ATTRIBUTE, config_set_ldifdir,
+		NULL, 0, NULL, CONFIG_STRING, NULL},
 	{CONFIG_REWRITE_RFC1274_ATTRIBUTE, config_set_rewrite_rfc1274,
 		NULL, 0,
 		(void**)&global_slapdFrontendConfig.rewrite_rfc1274, CONFIG_ON_OFF, NULL},
@@ -2344,7 +2351,7 @@
 	/* Set the slapd type also */
 	config_set_slapd_type ();
 
-	/* Set the configdir if not set */
+	/* Set the configdir if not set (it must be set since 7.2) */
 	if (!slapdFrontendConfig->configdir)
 	{
 		char newdir[MAXPATHLEN+1];
@@ -4220,6 +4227,49 @@
 	return retVal;
 }
 
+char *
+config_get_schemadir()
+{
+	slapdFrontendConfig_t *slapdFrontendConfig = getFrontendConfig();
+	char *retVal;
+
+	CFG_LOCK_READ(slapdFrontendConfig);
+	retVal = config_copy_strval(slapdFrontendConfig->schemadir);
+	CFG_UNLOCK_READ(slapdFrontendConfig);
+
+	return retVal; 
+}
+
+int
+config_set_schemadir(const char *attrname, char *value, char *errorbuf, int apply)
+{
+	int retVal = LDAP_SUCCESS;
+	slapdFrontendConfig_t *slapdFrontendConfig = getFrontendConfig();
+  
+	if ( config_value_is_null( attrname, value, errorbuf, 0 )) {
+		return LDAP_OPERATIONS_ERROR;
+	}
+  
+	if (!apply) {
+		return retVal;
+	}
+
+	CFG_LOCK_WRITE(slapdFrontendConfig);
+	slapi_ch_free((void **)&slapdFrontendConfig->schemadir);
+
+	slapdFrontendConfig->schemadir = slapi_ch_strdup(value);
+  
+	CFG_UNLOCK_WRITE(slapdFrontendConfig);
+	return retVal;
+}
+
+int
+config_set_ldifdir(const char *attrname, char *value, char *errorbuf, int apply)
+{
+	/* noop */
+	return LDAP_SUCCESS;
+}
+
 char **
 config_get_errorlog_list()
 {


Index: main.c
===================================================================
RCS file: /cvs/dirsec/ldapserver/ldap/servers/slapd/main.c,v
retrieving revision 1.11
retrieving revision 1.12
diff -u -r1.11 -r1.12
--- main.c	23 Nov 2005 17:58:01 -0000	1.11
+++ main.c	27 Sep 2006 23:40:51 -0000	1.12
@@ -255,7 +255,7 @@
 }
 
 /* Changes the owner of the files in the logs and
- * config directorys to the user that the server runs as. 
+ * config directory to the user that the server runs as. 
 */
 
 static void
@@ -276,13 +276,26 @@
 	}
 
 	/* The instance directory needs to be owned by the local user */
-	slapd_chown_if_not_owner( slapdFrontendConfig->instancedir, pw->pw_uid, -1 );
-	PR_snprintf(dirname,sizeof(dirname),"%s/config",slapdFrontendConfig->instancedir);
-	chown_dir_files(dirname, pw, PR_FALSE); /* config directory */
-	chown_dir_files(slapdFrontendConfig->accesslog, pw, PR_TRUE); /* do access log directory */
-	chown_dir_files(slapdFrontendConfig->auditlog, pw, PR_TRUE);  /* do audit log directory */
-	chown_dir_files(slapdFrontendConfig->errorlog, pw, PR_TRUE);  /* do error log directory */
-
+	if (slapdFrontendConfig->instancedir) {
+		slapd_chown_if_not_owner(slapdFrontendConfig->instancedir,
+								 pw->pw_uid, -1);
+	}
+	/* config directory */
+	if (slapdFrontendConfig->configdir) {
+		chown_dir_files(slapdFrontendConfig->configdir, pw, PR_FALSE);
+	}
+	/* do access log file, if any */
+	if (slapdFrontendConfig->accesslog) {
+		chown_dir_files(slapdFrontendConfig->accesslog, pw, PR_TRUE);
+	}
+	/* do audit log file, if any */
+	if (slapdFrontendConfig->auditlog) {
+		chown_dir_files(slapdFrontendConfig->auditlog, pw, PR_TRUE); 
+	}
+	/* do error log file, if any */
+	if (slapdFrontendConfig->errorlog) {
+		chown_dir_files(slapdFrontendConfig->errorlog, pw, PR_TRUE); 
+	}
 }
 #endif  
 
@@ -365,7 +378,7 @@
 	}
 #endif
 	else if ( exit_if_unknown ) {
-		fprintf( stderr, "usage: %s -D instancedir "
+		fprintf( stderr, "usage: %s -D configdir "
 				 "[ldif2db | db2ldif | archive2db "
 				 "| db2archive | db2index | refer | suffix2instance"
 #if defined(UPGRADEDB)
@@ -397,46 +410,46 @@
 	
     switch( slapd_exemode ) {
     case SLAPD_EXEMODE_DB2LDIF:
-	usagestr = "usage: %s %s%s-D instancedir [-n backend-instance-name] [-d debuglevel] "
+	usagestr = "usage: %s %s%s-D configdir [-n backend-instance-name] [-d debuglevel] "
 		"[-N] [-a outputfile] [-r] [-C] [{-s includesuffix}*] "
 		"[{-x excludesuffix}*] [-u] [-U] [-m] [-M] [-E]\n"
 		"Note: either \"-n backend_instance_name\" or \"-s includesuffix\" is required.\n";
 	break;
     case SLAPD_EXEMODE_LDIF2DB:
-	usagestr = "usage: %s %s%s-D instancedir [-d debuglevel] "
+	usagestr = "usage: %s %s%s-D configdir [-d debuglevel] "
 		"[-n backend_instance_name] [-O] [-g uniqueid_type] [--namespaceid uniqueID]"
 		"[{-s includesuffix}*] [{-x excludesuffix}*]  [-E] {-i ldif-file}*\n"
 		"Note: either \"-n backend_instance_name\" or \"-s includesuffix\" is required.\n";
 	break;
     case SLAPD_EXEMODE_DB2ARCHIVE:
-	usagestr = "usage: %s %s%s-D instancedir [-d debuglevel] -a archivedir\n";
+	usagestr = "usage: %s %s%s-D configdir [-d debuglevel] -a archivedir\n";
 	break;
     case SLAPD_EXEMODE_ARCHIVE2DB:
-	usagestr = "usage: %s %s%s-D instancedir [-d debuglevel] -a archivedir\n";
+	usagestr = "usage: %s %s%s-D configdir [-d debuglevel] -a archivedir\n";
 	break;
     case SLAPD_EXEMODE_DB2INDEX:
-	usagestr = "usage: %s %s%s-D instancedir -n backend-instance-name "
+	usagestr = "usage: %s %s%s-D configdir -n backend-instance-name "
 		"[-d debuglevel] {-t attributetype}* {-T VLV Search Name}*\n";
 	/* JCM should say 'Address Book' or something instead of VLV */
 	break;
     case SLAPD_EXEMODE_REFERRAL:
-	usagestr = "usage: %s %s%s-D instancedir -r referral-url [-p port]\n";
+	usagestr = "usage: %s %s%s-D configdir -r referral-url [-p port]\n";
 	break;
     case SLAPD_EXEMODE_DBTEST:
-	usagestr = "usage: %s %s%s-D instancedir -n backend-instance-name "
+	usagestr = "usage: %s %s%s-D configdir -n backend-instance-name "
 		"[-d debuglevel] [-S] [-v]\n";
 	break;
     case SLAPD_EXEMODE_SUFFIX2INSTANCE:
-	usagestr = "usage: %s %s%s -D instancedir {-s suffix}*\n";
+	usagestr = "usage: %s %s%s -D configdir {-s suffix}*\n";
 	break;
 #if defined(UPGRADEDB)
     case SLAPD_EXEMODE_UPGRADEDB:
-	usagestr = "usage: %s %s%s-D instancedir [-d debuglevel] [-f] -a archivedir\n";
+	usagestr = "usage: %s %s%s-D configdir [-d debuglevel] [-f] -a archivedir\n";
 	break;
 #endif
 
     default:	/* SLAPD_EXEMODE_SLAPD */
-	usagestr = "usage: %s %s%s-D instancedir [-d debuglevel] "
+	usagestr = "usage: %s %s%s-D configdir [-d debuglevel] "
 		"[-i pidlogfile] [-v] [-V]\n";
     }
 
@@ -683,9 +696,9 @@
 	}
 #endif
 
-    process_command_line(argc,argv,myname,&extraname);
+	process_command_line(argc,argv,myname,&extraname);
 
-	if (!slapdFrontendConfig->instancedir ||
+	if (!slapdFrontendConfig->instancedir &&
 		!slapdFrontendConfig->configdir) {
 		usage( myname, extraname );
 		exit( 1 );
@@ -698,7 +711,7 @@
 	}
 
 #ifndef LDAP_DONT_USE_SMARTHEAP
-        MemRegisterTask();
+	MemRegisterTask();
 #endif
 
 	slapd_init();
@@ -706,39 +719,52 @@
 	vattr_init();
 
 	if (slapd_exemode == SLAPD_EXEMODE_REFERRAL) {
-	    /* make up the config stuff */
-	    referral_set_defaults();
-	    n_port = config_get_port();
-	    s_port = config_get_secureport();
+		slapdFrontendConfig_t *slapdFrontendConfig = getFrontendConfig();
+		/* make up the config stuff */
+		referral_set_defaults();
+		/*
+		 * Process the config files.
+		 */
+		if (0 == slapd_bootstrap_config(slapdFrontendConfig->configdir)) {
+			slapi_log_error(SLAPI_LOG_FATAL, "startup",
+							"The configuration files in directory %s could not be read or were not found.  Please refer to the error log or output for more information.\n",
+							slapdFrontendConfig->configdir);
+			exit(1);
+		}
+
+		n_port = config_get_port();
+		s_port = config_get_secureport();
    		register_objects();
 
 	} else {
-    	slapdFrontendConfig_t *slapdFrontendConfig = getFrontendConfig();
-	/* The 2 calls below have been moved to this place to make sure that they
-	 * are called before setup_internal_backends to avoid bug 524439 */
-	/*
-	 * The 2 calls below where being sometimes called AFTER ldapi_register_extended_op
-	 * (such fact was being stated and reproducible for some optimized installations
-	 * at startup (bug 524439)... Such bad call was happening in the context of
-	 * setup_internal_backends -> dse_read_file -> load_plugin_entry ->
-	 * plugin_setup -> replication_multimaster_plugin_init ->
-	 * slapi_register_plugin -> plugin_setup -> multimaster_start_extop_init ->
-	 * slapi_pblock_set -> ldapi_register_extended_op... Unfortunately, the server
-	 * design is such that it is assumed that ldapi_init_extended_ops is always
-	 * called first.
-	 * THE FIX: Move the two calls below before a call to setup_internal_backends
-	 * (down in this same function)
-	 */
-	init_saslmechanisms();
-	ldapi_init_extended_ops();
+		slapdFrontendConfig_t *slapdFrontendConfig = getFrontendConfig();
+		/* The 2 calls below have been moved to this place to make sure that
+		 * they are called before setup_internal_backends to avoid bug 524439 */
+		/*
+		 * The 2 calls below where being sometimes called AFTER 
+		 * ldapi_register_extended_op (such fact was being stated and 
+		 * reproducible for some optimized installations at startup (bug 
+		 * 524439)... Such bad call was happening in the context of
+		 * setup_internal_backends -> dse_read_file -> load_plugin_entry ->
+		 * plugin_setup -> replication_multimaster_plugin_init ->
+		 * slapi_register_plugin -> plugin_setup -> 
+		 * multimaster_start_extop_init -> * slapi_pblock_set ->
+		 * ldapi_register_extended_op... Unfortunately, the server
+		 * design is such that it is assumed that ldapi_init_extended_ops is 
+		 * always called first.
+		 * THE FIX: Move the two calls below before a call to 
+		 * setup_internal_backends (down in this same function)
+		 */
+		init_saslmechanisms();
+		ldapi_init_extended_ops();
 
 		
-	    /*
-	     * Initialize the default backend.  This should be done before we
-	     * process the config. files
-	     */
-	    defbackend_init();
-	    
+		/*
+		 * Initialize the default backend.  This should be done before we
+		 * process the config. files
+		 */
+		defbackend_init();
+		
 		/*
 		 * Register the extensible objects with the factory.
 		 */
@@ -746,12 +772,12 @@
 		/* 
 		 * Register the controls that we support.
 		 */
-    	init_controls();
+		init_controls();
 
-	    /*
-	     * Process the config files.
-	     */
-	    if (0 == slapd_bootstrap_config(slapdFrontendConfig->configdir)) {
+		/*
+		 * Process the config files.
+		 */
+		if (0 == slapd_bootstrap_config(slapdFrontendConfig->configdir)) {
 			slapi_log_error(SLAPI_LOG_FATAL, "startup",
 							"The configuration files in directory %s could not be read or were not found.  Please refer to the error log or output for more information.\n",
 							slapdFrontendConfig->configdir);
@@ -759,7 +785,7 @@
 		}
 
 		/* -sduloutre: must be done before any internal search */
-        /* do it before splitting off to other modes too -robey */
+		/* do it before splitting off to other modes too -robey */
 		/* -richm: must be done before reading config files */
 		if (0 != (return_value = compute_init())) {
 			LDAPDebug(LDAP_DEBUG_ANY, "Initialization Failed 0 %d\n",return_value,0,0);
@@ -774,8 +800,8 @@
 			exit(1);
 		}
 
-	    n_port = config_get_port();
-	    s_port = config_get_secureport();
+		n_port = config_get_port();
+		s_port = config_get_secureport();
 	}
 
 	raise_process_limits();	/* should be done ASAP once config file read */
@@ -792,22 +818,22 @@
 	set_entry_points();
 
 #if defined( XP_WIN32 )
-    if (slapd_exemode == SLAPD_EXEMODE_SLAPD) {
-        /* Register with the NT EventLog */
-        hSlapdEventSource = RegisterEventSource(NULL, pszServerName );
-        if( !hSlapdEventSource  ) {
-            char szMessage[256];
-            PR_snprintf( szMessage, sizeof(szMessage), "Directory Server %s is terminating. Failed "
-                         "to set the EventLog source.", pszServerName);
-            MessageBox(GetDesktopWindow(), szMessage, " ", 
-                       MB_ICONEXCLAMATION | MB_OK);
-            exit( 1 );
-        }
+	if (slapd_exemode == SLAPD_EXEMODE_SLAPD) {
+		/* Register with the NT EventLog */
+		hSlapdEventSource = RegisterEventSource(NULL, pszServerName );
+		if( !hSlapdEventSource  ) {
+			char szMessage[256];
+			PR_snprintf( szMessage, sizeof(szMessage), "Directory Server %s is terminating. Failed "
+						 "to set the EventLog source.", pszServerName);
+			MessageBox(GetDesktopWindow(), szMessage, " ", 
+					   MB_ICONEXCLAMATION | MB_OK);
+			exit( 1 );
+		}
 
-        /* Check to ensure there isn't a copy of this server already running. */
-        if( MultipleInstances() ) 
-            exit( 1 );
-    }
+		/* Check to ensure there isn't a copy of this server already running. */
+		if( MultipleInstances() ) 
+			exit( 1 );
+	}
 #endif
 
 	/*
@@ -826,8 +852,8 @@
 	 * we need to be root in order to open them. 
 	 */
 
-    if ((slapd_exemode == SLAPD_EXEMODE_SLAPD) ||
-        (slapd_exemode == SLAPD_EXEMODE_REFERRAL)) {
+	if ((slapd_exemode == SLAPD_EXEMODE_SLAPD) ||
+		(slapd_exemode == SLAPD_EXEMODE_REFERRAL)) {
 		ports_info.n_port = (unsigned short)n_port;
 		if ( slapd_listenhost2addr( config_get_listenhost(),
 				&ports_info.n_listenaddr ) != 0 ) {
@@ -842,9 +868,9 @@
 
 		return_value = daemon_pre_setuid_init(&ports_info);
 		if (0 != return_value) {
-		    LDAPDebug( LDAP_DEBUG_ANY, "Failed to init daemon\n",
-			       0, 0, 0 );
-		    exit(1);
+			LDAPDebug( LDAP_DEBUG_ANY, "Failed to init daemon\n",
+				   0, 0, 0 );
+			exit(1);
 		}
 	}
 
@@ -853,9 +879,9 @@
 #ifndef _WIN32
 	return_value = main_setuid(slapdFrontendConfig->localuser);
 	if (0 != return_value) {
-	    LDAPDebug( LDAP_DEBUG_ANY, "Failed to change user and group identity to that of %s\n",
+		LDAPDebug( LDAP_DEBUG_ANY, "Failed to change user and group identity to that of %s\n",
 				   slapdFrontendConfig->localuser, 0, 0 );
-	    exit(1);
+		exit(1);
 	}
 #endif
 
@@ -870,7 +896,7 @@
 				&& (0 != s_port) && (s_port <= LDAP_PORT_MAX);
 	/* As of DS 6.1, always do a full initialization so that other
 	 * modules can assume NSS is available
-     */
+	 */
 	if ( slapd_nss_init((slapd_exemode == SLAPD_EXEMODE_SLAPD),
 			(slapd_exemode != SLAPD_EXEMODE_REFERRAL) /* have config? */ )) {
 		 LDAPDebug(LDAP_DEBUG_ANY,
@@ -888,14 +914,14 @@
 		exit( 1 );
 	}
 
-    if ((slapd_exemode == SLAPD_EXEMODE_SLAPD) ||
-        (slapd_exemode == SLAPD_EXEMODE_REFERRAL)) {
-        if ( init_ssl && ( 0 != slapd_ssl_init2(&ports_info.s_socket, 0) ) ) {
-            LDAPDebug(LDAP_DEBUG_ANY,
-                      "ERROR: SSL Initialization phase 2 Failed.\n", 0, 0, 0 );
-            exit( 1 );
-        }
-    }
+	if ((slapd_exemode == SLAPD_EXEMODE_SLAPD) ||
+		(slapd_exemode == SLAPD_EXEMODE_REFERRAL)) {
+		if ( init_ssl && ( 0 != slapd_ssl_init2(&ports_info.s_socket, 0) ) ) {
+			LDAPDebug(LDAP_DEBUG_ANY,
+					  "ERROR: SSL Initialization phase 2 Failed.\n", 0, 0, 0 );
+			exit( 1 );
+		}
+	}
 
 	/*
 	 * if we were called upon to do special database stuff, do it and be
@@ -903,52 +929,52 @@
 	 */
 	switch ( slapd_exemode ) {
 	case SLAPD_EXEMODE_LDIF2DB:
-	    return slapd_exemode_ldif2db();
+		return slapd_exemode_ldif2db();
 
 	case SLAPD_EXEMODE_DB2LDIF:
-	    return slapd_exemode_db2ldif(argc,argv);
+		return slapd_exemode_db2ldif(argc,argv);
 
 	case SLAPD_EXEMODE_DB2INDEX:
-	    return slapd_exemode_db2index();
+		return slapd_exemode_db2index();
 
 	case SLAPD_EXEMODE_ARCHIVE2DB:
-	    return slapd_exemode_archive2db();
+		return slapd_exemode_archive2db();
 
 	case SLAPD_EXEMODE_DB2ARCHIVE:
-	    return slapd_exemode_db2archive();
+		return slapd_exemode_db2archive();
 
 	case SLAPD_EXEMODE_DBTEST:
-	    return slapd_exemode_dbtest();
+		return slapd_exemode_dbtest();
 		
 	case SLAPD_EXEMODE_REFERRAL:
 		/* check that all the necessary info was given, then go on */
-        if (! config_check_referral_mode()) {
-		    LDAPDebug(LDAP_DEBUG_ANY,
-			      "ERROR: No referral URL supplied\n", 0, 0, 0);
+		if (! config_check_referral_mode()) {
+			LDAPDebug(LDAP_DEBUG_ANY,
+				  "ERROR: No referral URL supplied\n", 0, 0, 0);
 			usage( myname, extraname );
-		    exit(1);
+			exit(1);
 		}
 		break;
 
 	case SLAPD_EXEMODE_SUFFIX2INSTANCE:
-	    return slapd_exemode_suffix2instance();
+		return slapd_exemode_suffix2instance();
 
 #if defined(UPGRADEDB)
 	case SLAPD_EXEMODE_UPGRADEDB:
-	    return slapd_exemode_upgradedb();
+		return slapd_exemode_upgradedb();
 #endif
 
 	case SLAPD_EXEMODE_PRINTVERSION:
-	    slapd_print_version(1);
-	    exit(1);
+		slapd_print_version(1);
+		exit(1);
 	}
 
 	/*
 	 * Detach ourselves from the terminal (unless running in debug mode).
 	 * We must detach before we start any threads since detach forks() on
 	 * UNIX.
-     * Have to detach after ssl_init - the user may be prompted for the PIN
-     * on the terminal, so it must be open.
+	 * Have to detach after ssl_init - the user may be prompted for the PIN
+	 * on the terminal, so it must be open.
 	 */
 	detach();
 
@@ -969,8 +995,8 @@
  	 * slapd processes that are currently running
  	 */
 	if ((slapd_exemode != SLAPD_EXEMODE_REFERRAL) &&
-	    ( add_new_slapd_process(slapd_exemode, db2ldif_dump_replica,
-				    skip_db_protect_check) == -1 ))  {
+		( add_new_slapd_process(slapd_exemode, db2ldif_dump_replica,
+					skip_db_protect_check) == -1 ))  {
  		LDAPDebug( LDAP_DEBUG_ANY, 
 				"Shutting down due to possible conflicts with other slapd processes\n",
 				0, 0, 0 );
@@ -988,7 +1014,7 @@
 	  char *versionstring = config_get_versionstring();
 	  char *buildnum = config_get_buildnum();
 	  LDAPDebug( LDAP_DEBUG_ANY, "%s B%s starting up\n",
-		     versionstring, buildnum, 0 );
+			 versionstring, buildnum, 0 );
 	  slapi_ch_free((void **)&buildnum);
 	  slapi_ch_free((void **)&versionstring);
 	}
@@ -1003,8 +1029,8 @@
 				slapdFrontendConfig->configdir);
 
 		eq_init();					/* must be done before plugins started */
-	    snmp_collator_start();
-	    ps_init_psearch_system();   /* must come before plugin_startall() */
+		snmp_collator_start();
+		ps_init_psearch_system();   /* must come before plugin_startall() */
 
 		/* Initailize the mapping tree */
 
@@ -1012,12 +1038,12 @@
 		{
 			LDAPDebug( LDAP_DEBUG_ANY, "Failed to init mapping tree\n",
 				0, 0, 0 );
-        	exit(1);
+			exit(1);
 		}
 
 
 		/* initialize UniqueID generator - must be done once backends are started
-           and event queue is initialized but before plugins are started */
+		   and event queue is initialized but before plugins are started */
 		sdn = slapi_sdn_new_dn_byval ("cn=uniqueid generator,cn=config");
 		rc = uniqueIDGenInit (NULL, sdn, slapd_exemode == SLAPD_EXEMODE_SLAPD);
 		slapi_sdn_free (&sdn);
@@ -1025,7 +1051,7 @@
 		{
 			LDAPDebug( LDAP_DEBUG_ANY,
 				"Fatal Error---Failed to initialize uniqueid generator; error = %d. "
-                "Exiting now.\n", rc, 0, 0 );
+				"Exiting now.\n", rc, 0, 0 );
 			exit( 1 );
 		}
 
@@ -1034,17 +1060,17 @@
 		if ( slapd_security_library_is_initialized() != 0 ) {
 	
 		
-		         start_tls_register_plugin();
+				 start_tls_register_plugin();
 			 LDAPDebug( LDAP_DEBUG_PLUGIN, 
-				    "Start TLS plugin registered.\n",
-				    0, 0, 0 );
+					"Start TLS plugin registered.\n",
+					0, 0, 0 );
 		} 
 #endif
-	    passwd_modify_register_plugin();
-	    LDAPDebug( LDAP_DEBUG_PLUGIN, 
-				    "Password Modify plugin registered.\n", 0, 0, 0 );
+		passwd_modify_register_plugin();
+		LDAPDebug( LDAP_DEBUG_PLUGIN, 
+					"Password Modify plugin registered.\n", 0, 0, 0 );
 
-	    plugin_startall(argc, argv, 1 /* Start Backends */, 1 /* Start Globals */); 
+		plugin_startall(argc, argv, 1 /* Start Backends */, 1 /* Start Globals */); 
 		if (housekeeping_start((time_t)0, NULL) == NULL) {
 			exit (1);
 		}
@@ -1052,50 +1078,50 @@
 		eq_start();					/* must be done after plugins started */
 
 #ifdef HPUX10
-	    /* HPUX linker voodoo */
-	    if (collation_init == NULL) {
+		/* HPUX linker voodoo */
+		if (collation_init == NULL) {
 		exit (1);
-	    }
-	    
+		}
+		
 #endif /* HPUX */
 
-	    normalize_oc();
+		normalize_oc();
 
-	    if (n_port) {
+		if (n_port) {
 #if defined(NET_SSL)
-	    } else if ( config_get_security()) {
+		} else if ( config_get_security()) {
 #endif
-	    } else {
+		} else {
 #ifdef _WIN32	
-    		if( SlapdIsAService() )
-    		{
-    			LDAPServerStatus.dwCurrentState = SERVICE_STOPPED;
-    			LDAPServerStatus.dwCheckPoint = 0;
-    			LDAPServerStatus.dwWaitHint = 0;
-    			LDAPServerStatus.dwWin32ExitCode = 1;
-    			LDAPServerStatus.dwServiceSpecificExitCode = 1;
-
-    			SetServiceStatus(hLDAPServerServiceStatus, &LDAPServerStatus);
-
-    			/* Log this event */
-    			ReportSlapdEvent(EVENTLOG_INFORMATION_TYPE, MSG_SERVER_START_FAILED, 1, 
-    				"Check server port specification");
-    		}
-    		else
-    		{
-    			char szMessage[256];
-    			PR_snprintf( szMessage, sizeof(szMessage), "The Directory Server %s is terminating due to an error. Check server port specification", pszServerName);
-    			MessageBox(GetDesktopWindow(), szMessage,	" ", MB_ICONEXCLAMATION | MB_OK);
-    		}
+			if( SlapdIsAService() )
+			{
+				LDAPServerStatus.dwCurrentState = SERVICE_STOPPED;
+				LDAPServerStatus.dwCheckPoint = 0;
+				LDAPServerStatus.dwWaitHint = 0;
+				LDAPServerStatus.dwWin32ExitCode = 1;
+				LDAPServerStatus.dwServiceSpecificExitCode = 1;
+
+				SetServiceStatus(hLDAPServerServiceStatus, &LDAPServerStatus);
+
+				/* Log this event */
+				ReportSlapdEvent(EVENTLOG_INFORMATION_TYPE, MSG_SERVER_START_FAILED, 1, 
+					"Check server port specification");
+			}
+			else
+			{
+				char szMessage[256];
+				PR_snprintf( szMessage, sizeof(szMessage), "The Directory Server %s is terminating due to an error. Check server port specification", pszServerName);
+				MessageBox(GetDesktopWindow(), szMessage,	" ", MB_ICONEXCLAMATION | MB_OK);
+			}
 #endif
-    		exit(1);
-	    }
+			exit(1);
+		}
 	}
 
-    {
-    	Slapi_PBlock pb;
-    	memset( &pb, '\0', sizeof(pb) );
-    	pb.pb_backend = be;
+	{
+		Slapi_PBlock pb;
+		memset( &pb, '\0', sizeof(pb) );
+		pb.pb_backend = be;
 	}
 
 	if (slapd_exemode != SLAPD_EXEMODE_REFERRAL) {
@@ -1224,7 +1250,7 @@
 		{"debug",ArgRequired,'d'},
 		{"backend",ArgRequired,'n'},
 		{"allowMultipleProcesses",ArgNone,'S'},
-		{"instanceDir",ArgRequired,'D'},
+		{"configDir",ArgRequired,'D'},
 		{0,0,0}};
 	
 	
@@ -1240,7 +1266,7 @@
 		/*{"whatshouldwecallthis",ArgNone,'C'},*/
 		{"allowMultipleProcesses",ArgNone,'S'},
 		{"noUniqueIds",ArgNone,'u'},
-		{"instanceDir",ArgRequired,'D'},
+		{"configDir",ArgRequired,'D'},
 		{"encrypt",ArgOptional,'E'},
 		{"nowrap",ArgNone,'U'},
 		{"minimalEncode",ArgNone,'m'},
@@ -1264,7 +1290,7 @@
 		{"allowMultipleProcesses",ArgNone,'S'},
 		{"namespaceid", ArgRequired, 'G'},
 		{"nostate",ArgNone,'Z'},
-		{"instanceDir",ArgRequired,'D'},
+		{"configDir",ArgRequired,'D'},
 		{"encrypt",ArgOptional,'E'},
 		{0,0,0}};
 
@@ -1276,7 +1302,7 @@
 		{"archive",ArgRequired,'a'},
 		{"backEndInstName",ArgRequired,'n'},
 		{"allowMultipleProcesses",ArgNone,'S'},		
-		{"instanceDir",ArgRequired,'D'},
+		{"configDir",ArgRequired,'D'},
 		{0,0,0}};
 
 
@@ -1287,7 +1313,7 @@
 		{"pidfile",ArgRequired,'i'},
 		{"archive",ArgRequired,'a'},
 		{"allowMultipleProcesses",ArgNone,'S'},		
-		{"instanceDir",ArgRequired,'D'},
+		{"configDir",ArgRequired,'D'},
 		{0,0,0}};
 
 	char *opts_db2index = "vd:a:t:T:SD:n:s:x:"; 
@@ -1299,7 +1325,7 @@
 		{"indexAttribute",ArgRequired,'t'},
 		{"vlvIndex",ArgRequired,'T'},
 		{"allowMultipleProcesses",ArgNone,'S'},		
-		{"instanceDir",ArgRequired,'D'},
+		{"configDir",ArgRequired,'D'},
 		{"include",ArgRequired,'s'},
 		{"exclude",ArgRequired,'x'},
 		{0,0,0}};
@@ -1311,7 +1337,7 @@
 		{"debug",ArgRequired,'d'},
 		{"force",ArgNone,'f'},
 		{"archive",ArgRequired,'a'},
-		{"instanceDir",ArgRequired,'D'},
+		{"configDir",ArgRequired,'D'},
 		{0,0,0}};
 #endif
 
@@ -1322,7 +1348,7 @@
 		{"port",ArgRequired,'p'},
 		{"referralMode",ArgRequired,'r'},
 		{"allowMultipleProcesses",ArgNone,'S'},		
-		{"instanceDir",ArgRequired,'D'},
+		{"configDir",ArgRequired,'D'},
 		{0,0,0}};
 
 	char *opts_suffix2instance = "s:D:";
@@ -1338,7 +1364,7 @@
 		{"debug",ArgRequired,'d'},
 		{"pidfile",ArgRequired,'i'},
 		{"allowMultipleProcesses",ArgNone,'S'},		
-		{"instanceDir",ArgRequired,'D'},
+		{"configDir",ArgRequired,'D'},
 		{"startpidfile",ArgRequired,'w'},
 		{0,0,0}};
 
@@ -1420,7 +1446,7 @@
 
 	while ( (i = getopt_ext( argc, argv, opts,
 							 long_opts, &longopt_index)) != EOF ) {
-		char *instancedir = 0;
+		char *configdir = 0;
 		switch ( i ) {
 #ifdef LDAP_DEBUG
 		case 'd':	/* turn on debugging */
@@ -1446,11 +1472,11 @@
 #endif
 
 		case 'D':	/* config dir */
-			instancedir = rel2abspath( optarg_ext );
+			configdir = rel2abspath( optarg_ext );
 
 #if defined( XP_WIN32 )
 			pszServerName = slapi_ch_malloc( MAX_SERVICE_NAME );
-			if( !SlapdGetServerNameFromCmdline(pszServerName, instancedir, 1) )
+			if( !SlapdGetServerNameFromCmdline(pszServerName, configdir, 1) )
 			{
 				MessageBox(GetDesktopWindow(), "Failed to get the Directory"
 					" Server name from the command-line argument.",
@@ -1458,13 +1484,13 @@
 				exit( 1 );
 			}  
 #endif
-			if ( config_set_instancedir( "instancedir (-D)",
-					instancedir, errorbuf, 1) != LDAP_SUCCESS ) {
+			if ( config_set_configdir( "configdir (-D)",
+					configdir, errorbuf, 1) != LDAP_SUCCESS ) {
 				fprintf( stderr, "%s: aborting now\n", errorbuf );
 			    usage( myname, *extraname );
 			    exit( 1 );
 			}
-			slapi_ch_free((void **)&instancedir);
+			slapi_ch_free((void **)&configdir);
 
 			break;
 


Index: proto-slap.h
===================================================================
RCS file: /cvs/dirsec/ldapserver/ldap/servers/slapd/proto-slap.h,v
retrieving revision 1.20
retrieving revision 1.21
diff -u -r1.20 -r1.21
--- proto-slap.h	1 Sep 2006 21:25:08 -0000	1.20
+++ proto-slap.h	27 Sep 2006 23:40:51 -0000	1.21
@@ -301,6 +301,8 @@
 int config_set_enquote_sup_oc(const char *attrname,  char *value, char *errorbuf, int apply );
 int config_set_basedn( const char *attrname, char *value, char *errorbuf, int apply );
 int config_set_configdir( const char *attrname, char *value, char *errorbuf, int apply );
+int config_set_schemadir( const char *attrname, char *value, char *errorbuf, int apply );
+int config_set_ldifdir( const char *attrname, char *value, char *errorbuf, int apply );
 int config_set_attrname_exceptions( const char *attrname, char *value, char *errorbuf, int apply );
 int config_set_hash_filters( const char *attrname, char *value, char *errorbuf, int apply );
 int config_set_rewrite_rfc1274( const char *attrname, char *value, char *errorbuf, int apply );
@@ -398,6 +400,7 @@
 int config_get_enquote_sup_oc();
 char *config_get_basedn();
 char *config_get_configdir();
+char *config_get_schemadir();
 char **config_get_errorlog_list();
 char **config_get_accesslog_list();
 char **config_get_auditlog_list();


Index: schema.c
===================================================================
RCS file: /cvs/dirsec/ldapserver/ldap/servers/slapd/schema.c,v
retrieving revision 1.8
retrieving revision 1.9
diff -u -r1.8 -r1.9
--- schema.c	11 Apr 2006 02:14:44 -0000	1.8
+++ schema.c	27 Sep 2006 23:40:51 -0000	1.9
@@ -4014,7 +4014,11 @@
 
 	slapi_sdn_init_dn_byref(&schema,"cn=schema");
 
-	schemadir = slapi_ch_smprintf("%s/%s", configdir, SCHEMA_SUBDIR_NAME);
+	schemadir = config_get_schemadir();
+	if (NULL == schemadir) {
+		/* schemadir info is not configured, let's use the default place */
+		schemadir = slapi_ch_smprintf("%s/%s", configdir, SCHEMA_SUBDIR_NAME);
+	}
 
 	filelist = get_priority_filelist(schemadir, ".*ldif$");
 	if (!filelist || !*filelist)


Index: slap.h
===================================================================
RCS file: /cvs/dirsec/ldapserver/ldap/servers/slapd/slap.h,v
retrieving revision 1.14
retrieving revision 1.15
diff -u -r1.14 -r1.15
--- slap.h	31 Aug 2006 22:52:07 -0000	1.14
+++ slap.h	27 Sep 2006 23:40:51 -0000	1.15
@@ -1708,6 +1708,8 @@
 #define CONFIG_REWRITE_RFC1274_ATTRIBUTE "nsslapd-rewrite-rfc1274"
 
 #define CONFIG_CONFIG_ATTRIBUTE "nsslapd-config"
+#define CONFIG_SCHEMADIR_ATTRIBUTE "nsslapd-schemadir"
+#define CONFIG_LDIFDIR_ATTRIBUTE "nsslapd-ldifdir"
 #define CONFIG_SSLCLIENTAUTH_ATTRIBUTE "nsslapd-SSLclientAuth"
 #define CONFIG_SSL_CHECK_HOSTNAME_ATTRIBUTE "nsslapd-ssl-check-hostname"
 #define CONFIG_HASH_FILTERS_ATTRIBUTE "nsslapd-hash-filters"
@@ -1882,6 +1884,7 @@
 
   char *workingdir;	/* full path of directory before detach */
   char *configdir; /* full path name of directory containing configuration files */
+  char *schemadir; /* full path name of directory containing schema files */
   int attrname_exceptions; /* if true, allow questionable attribute names */
   int rewrite_rfc1274;		/* return attrs for both v2 and v3 names */
   char *schemareplace;		/* see CONFIG_SCHEMAREPLACE_* #defines below */




More information about the Fedora-directory-commits mailing list