diff options
author | Noriko Hosoi <nhosoi@redhat.com> | 2006-09-27 23:40:52 +0000 |
---|---|---|
committer | Noriko Hosoi <nhosoi@redhat.com> | 2006-09-27 23:40:52 +0000 |
commit | 1f2f6bf58dd9e6a5064960fb334e0f022baf4ff5 (patch) | |
tree | 393103031b7a818d6983446711d8986e112d08f1 /ldap/servers/slapd | |
parent | 7452be8870166cd045f7c32ac934b02aa850cb1a (diff) | |
download | ds-1f2f6bf58dd9e6a5064960fb334e0f022baf4ff5.tar.gz ds-1f2f6bf58dd9e6a5064960fb334e0f022baf4ff5.tar.xz ds-1f2f6bf58dd9e6a5064960fb334e0f022baf4ff5.zip |
[207427] parameterizing the hardcoded paths (Comment #15)
phase 1. parameterizing config, schema and ldif directory
Diffstat (limited to 'ldap/servers/slapd')
-rw-r--r-- | ldap/servers/slapd/auth.c | 49 | ||||
-rw-r--r-- | ldap/servers/slapd/config.c | 69 | ||||
-rw-r--r-- | ldap/servers/slapd/dse.c | 21 | ||||
-rw-r--r-- | ldap/servers/slapd/fedse.c | 84 | ||||
-rw-r--r-- | ldap/servers/slapd/libglobs.c | 54 | ||||
-rw-r--r-- | ldap/servers/slapd/main.c | 364 | ||||
-rw-r--r-- | ldap/servers/slapd/proto-slap.h | 3 | ||||
-rw-r--r-- | ldap/servers/slapd/schema.c | 6 | ||||
-rw-r--r-- | ldap/servers/slapd/slap.h | 3 | ||||
-rw-r--r-- | ldap/servers/slapd/test-plugins/testbind.c | 2 | ||||
-rw-r--r-- | ldap/servers/slapd/tools/pwenc.c | 10 |
11 files changed, 392 insertions, 273 deletions
diff --git a/ldap/servers/slapd/auth.c b/ldap/servers/slapd/auth.c index 56fa517e..f7bf89db 100644 --- a/ldap/servers/slapd/auth.c +++ b/ldap/servers/slapd/auth.c @@ -272,41 +272,27 @@ void 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 @@ client_auth_init () 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(); diff --git a/ldap/servers/slapd/config.c b/ldap/servers/slapd/config.c index ed012c2a..9cfdd8d4 100644 --- a/ldap/servers/slapd/config.c +++ b/ldap/servers/slapd/config.c @@ -160,30 +160,40 @@ slapd_bootstrap_config(const char *configdir) 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 @@ slapd_bootstrap_config(const char *configdir) 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 @@ slapd_bootstrap_config(const char *configdir) 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 @@ slapd_bootstrap_config(const char *configdir) if(!done) { - char errorlog[MAXPATHLEN+1]; + char workpath[MAXPATHLEN+1]; char loglevel[BUFSIZ]; char maxdescriptors[BUFSIZ]; char val[BUFSIZ]; @@ -227,7 +237,7 @@ slapd_bootstrap_config(const char *configdir) 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 @@ slapd_bootstrap_config(const char *configdir) 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 @@ slapd_bootstrap_config(const char *configdir) #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 @@ slapd_bootstrap_config(const char *configdir) 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 */ diff --git a/ldap/servers/slapd/dse.c b/ldap/servers/slapd/dse.c index c26f9fc1..2cf78577 100644 --- a/ldap/servers/slapd/dse.c +++ b/ldap/servers/slapd/dse.c @@ -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 @@ struct dse * 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 @@ dse_new( char *filename, char *tmpfilename, char *backfilename, char *startokfil } slapi_ch_free( (void **) &realconfigdir ); } - slapi_ch_free( (void **) &id ); return pdse; } diff --git a/ldap/servers/slapd/fedse.c b/ldap/servers/slapd/fedse.c index ef3034d4..9e2ef358 100644 --- a/ldap/servers/slapd/fedse.c +++ b/ldap/servers/slapd/fedse.c @@ -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 @@ setup_internal_backends(char *configdir) 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); - - 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); - } + if (!strstr(startokfilename, realconfigdir)) + { + dse_filestartOK = slapi_ch_smprintf("%s/%s", + realconfigdir, startokfilename); + } + else + { + dse_filestartOK = slapi_ch_strdup(startokfilename); + } - return rc; + 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; } diff --git a/ldap/servers/slapd/libglobs.c b/ldap/servers/slapd/libglobs.c index 0ddb5fcf..7cb039b4 100644 --- a/ldap/servers/slapd/libglobs.c +++ b/ldap/servers/slapd/libglobs.c @@ -513,9 +513,16 @@ static struct config_get_and_set { 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 @@ config_set_instancedir( const char *attrname, char *value, char *errorbuf, int a /* 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 @@ config_set_configdir(const char *attrname, char *value, char *errorbuf, int appl 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() { diff --git a/ldap/servers/slapd/main.c b/ldap/servers/slapd/main.c index e09f8862..514ce88d 100644 --- a/ldap/servers/slapd/main.c +++ b/ldap/servers/slapd/main.c @@ -255,7 +255,7 @@ chown_dir_files(char *name, struct passwd *pw, PRBool strip_fn) } /* 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 @@ fix_ownership() } /* 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 @@ name2exemode( char *progname, char *s, int exit_if_unknown ) } #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 @@ usage( char *name, char *extraname ) 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 @@ main( int argc, char **argv) } #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 @@ main( int argc, char **argv) } #ifndef LDAP_DONT_USE_SMARTHEAP - MemRegisterTask(); + MemRegisterTask(); #endif slapd_init(); @@ -706,39 +719,52 @@ main( int argc, char **argv) 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 @@ main( int argc, char **argv) /* * 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 @@ main( int argc, char **argv) } /* -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 @@ main( int argc, char **argv) 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 @@ main( int argc, char **argv) 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 @@ main( int argc, char **argv) * 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 @@ main( int argc, char **argv) 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 @@ main( int argc, char **argv) #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 @@ main( int argc, char **argv) && (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 @@ main( int argc, char **argv) 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 @@ main( int argc, char **argv) */ 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 @@ main( int argc, char **argv) * 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 @@ main( int argc, char **argv) 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 @@ main( int argc, char **argv) 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 @@ main( int argc, char **argv) { 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 @@ main( int argc, char **argv) { 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 @@ main( int argc, char **argv) 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 @@ main( int argc, char **argv) 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 @@ process_command_line(int argc, char **argv, char *myname, {"debug",ArgRequired,'d'}, {"backend",ArgRequired,'n'}, {"allowMultipleProcesses",ArgNone,'S'}, - {"instanceDir",ArgRequired,'D'}, + {"configDir",ArgRequired,'D'}, {0,0,0}}; @@ -1240,7 +1266,7 @@ process_command_line(int argc, char **argv, char *myname, /*{"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 @@ process_command_line(int argc, char **argv, char *myname, {"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 @@ process_command_line(int argc, char **argv, char *myname, {"archive",ArgRequired,'a'}, {"backEndInstName",ArgRequired,'n'}, {"allowMultipleProcesses",ArgNone,'S'}, - {"instanceDir",ArgRequired,'D'}, + {"configDir",ArgRequired,'D'}, {0,0,0}}; @@ -1287,7 +1313,7 @@ process_command_line(int argc, char **argv, char *myname, {"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 @@ process_command_line(int argc, char **argv, char *myname, {"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 @@ process_command_line(int argc, char **argv, char *myname, {"debug",ArgRequired,'d'}, {"force",ArgNone,'f'}, {"archive",ArgRequired,'a'}, - {"instanceDir",ArgRequired,'D'}, + {"configDir",ArgRequired,'D'}, {0,0,0}}; #endif @@ -1322,7 +1348,7 @@ process_command_line(int argc, char **argv, char *myname, {"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 @@ process_command_line(int argc, char **argv, char *myname, {"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 @@ process_command_line(int argc, char **argv, char *myname, 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 @@ process_command_line(int argc, char **argv, char *myname, #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 @@ process_command_line(int argc, char **argv, char *myname, 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; diff --git a/ldap/servers/slapd/proto-slap.h b/ldap/servers/slapd/proto-slap.h index 5726a5c2..54044a71 100644 --- a/ldap/servers/slapd/proto-slap.h +++ b/ldap/servers/slapd/proto-slap.h @@ -301,6 +301,8 @@ int config_set_versionstring(const char *attrname, char *versionstring, char *e 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 @@ char *config_get_buildnum(void); 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(); diff --git a/ldap/servers/slapd/schema.c b/ldap/servers/slapd/schema.c index e3ca1685..a8f35db8 100644 --- a/ldap/servers/slapd/schema.c +++ b/ldap/servers/slapd/schema.c @@ -4014,7 +4014,11 @@ init_schema_dse(const char *configdir) 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) diff --git a/ldap/servers/slapd/slap.h b/ldap/servers/slapd/slap.h index 14947bca..c6fb41f9 100644 --- a/ldap/servers/slapd/slap.h +++ b/ldap/servers/slapd/slap.h @@ -1708,6 +1708,8 @@ typedef struct _slapdEntryPoints { #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 @@ typedef struct _slapdFrontendConfig { 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 */ diff --git a/ldap/servers/slapd/test-plugins/testbind.c b/ldap/servers/slapd/test-plugins/testbind.c index f27ae48a..98811b94 100644 --- a/ldap/servers/slapd/test-plugins/testbind.c +++ b/ldap/servers/slapd/test-plugins/testbind.c @@ -49,7 +49,7 @@ as the root DN. To test this plug-in function, stop the server, edit the dse.ldif file - (in the <server_root>/slapd-<server_id>/config directory) + (in the config directory) and add the following lines before restarting the server : dn: cn=Test Bind,cn=plugins,cn=config diff --git a/ldap/servers/slapd/tools/pwenc.c b/ldap/servers/slapd/tools/pwenc.c index c87e0f64..524c6a27 100644 --- a/ldap/servers/slapd/tools/pwenc.c +++ b/ldap/servers/slapd/tools/pwenc.c @@ -82,7 +82,7 @@ static void usage( name ) char *name; { - fprintf( stderr, "usage: %s -D instance-dir [-H] [-s scheme | -c comparepwd ] password...\n", name ); + fprintf( stderr, "usage: %s -D config-dir [-H] [-s scheme | -c comparepwd ] password...\n", name ); exit( 1 ); } @@ -133,7 +133,7 @@ main( argc, argv ) slapdFrontendConfig_t *slapdFrontendConfig = NULL; char *opts = "Hs:c:D:"; - char *instancedir = NULL; + char *configdir = NULL; name = argv[ 0 ]; pwsp = cmppwsp = NULL; @@ -157,13 +157,13 @@ main( argc, argv ) /* kexcoff: quite the same as slapd_bootstrap_config */ FrontendConfig_init(); - instancedir = rel2abspath( optarg ); - if ( config_set_instancedir( "configdir (-D)", instancedir, + configdir = rel2abspath( optarg ); + if ( config_set_configdir( "configdir (-D)", configdir, errorbuf, 1) != LDAP_SUCCESS ) { fprintf( stderr, "%s\n", errorbuf ); return( 1 ); } - slapi_ch_free((void **)&instancedir); + slapi_ch_free((void **)&configdir); slapdFrontendConfig = getFrontendConfig(); |