summaryrefslogtreecommitdiffstats
path: root/ldap/servers/slapd/libglobs.c
diff options
context:
space:
mode:
Diffstat (limited to 'ldap/servers/slapd/libglobs.c')
-rw-r--r--ldap/servers/slapd/libglobs.c38
1 files changed, 34 insertions, 4 deletions
diff --git a/ldap/servers/slapd/libglobs.c b/ldap/servers/slapd/libglobs.c
index 3726dfd7..efbda9ce 100644
--- a/ldap/servers/slapd/libglobs.c
+++ b/ldap/servers/slapd/libglobs.c
@@ -564,7 +564,8 @@ static struct config_get_and_set {
NULL, 0, NULL, CONFIG_ON_OFF, (ConfigGetFunc)config_get_hash_filters},
/* instance dir; used by admin tasks */
{CONFIG_INSTDIR_ATTRIBUTE, config_set_instancedir,
- NULL, 0, NULL, CONFIG_STRING, NULL},
+ NULL, 0,
+ (void**)&global_slapdFrontendConfig.instancedir, CONFIG_STRING, NULL},
/* parameterizing schema dir */
{CONFIG_SCHEMADIR_ATTRIBUTE, config_set_schemadir,
NULL, 0,
@@ -4860,11 +4861,40 @@ config_set_configdir(const char *attrname, char *value, char *errorbuf, int appl
return retVal;
}
-/* W/o the setter, "config_set: the attribute nsslapd-instancedir is read only" is printed out. */
-int
+char *
+config_get_instancedir()
+{
+ slapdFrontendConfig_t *slapdFrontendConfig = getFrontendConfig();
+ char *retVal;
+
+ CFG_LOCK_READ(slapdFrontendConfig);
+ retVal = config_copy_strval(slapdFrontendConfig->instancedir);
+ CFG_UNLOCK_READ(slapdFrontendConfig);
+
+ return retVal;
+}
+
config_set_instancedir(const char *attrname, char *value, char *errorbuf, int apply)
{
- return LDAP_SUCCESS;
+ 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);
+ /* We don't want to allow users to modify instance dir.
+ * Set it once when the server starts. */
+ if (NULL == slapdFrontendConfig->instancedir) {
+ slapdFrontendConfig->instancedir = slapi_ch_strdup(value);
+ }
+ CFG_UNLOCK_WRITE(slapdFrontendConfig);
+ return retVal;
}
char *