summaryrefslogtreecommitdiffstats
path: root/src/back-sch.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/back-sch.c')
-rw-r--r--src/back-sch.c169
1 files changed, 58 insertions, 111 deletions
diff --git a/src/back-sch.c b/src/back-sch.c
index 0459f8c..e7e582b 100644
--- a/src/back-sch.c
+++ b/src/back-sch.c
@@ -50,17 +50,12 @@
#include "plugin.h"
#include "map.h"
-#define SCH_CONTAINER_CONFIGURATION_FILTER "(&(objectClass=*)(" SCH_CONTAINER_CONFIGURATION_BASE_ATTR "=*)(" SCH_CONTAINER_CONFIGURATION_GROUP_ATTR "=*)(" SCH_CONTAINER_CONFIGURATION_FILTER_ATTR "=*)(" SCH_CONTAINER_CONFIGURATION_ENTRY_FORMAT_ATTR "=*))"
+#define SCH_CONTAINER_CONFIGURATION_FILTER "(&(objectClass=*)(" SCH_CONTAINER_CONFIGURATION_GROUP_ATTR "=*)(" SCH_CONTAINER_CONFIGURATION_CONTAINER_ATTR "=*)(" SCH_CONTAINER_CONFIGURATION_BASE_ATTR "=*)(" SCH_CONTAINER_CONFIGURATION_FILTER_ATTR "=*)(" SCH_CONTAINER_CONFIGURATION_RDN_ATTR "=*)(" SCH_CONTAINER_CONFIGURATION_ATTR_ATTR "=*))"
/* The data we ask the map cache to keep, for us, for each set. */
struct backend_set_data {
- /* Common data. */
- struct plugin_state *state;
- char *group, *container, **bases, *entry_filter;
- char **ref_attrs;
- struct format_inref_attr **inref_attrs;
+ struct backend_shr_set_data common;
/* Schema compatibility-specific data. */
- char *entry_format;
};
/* Read the name of the NIS master. A dummy function for the schema
@@ -78,62 +73,26 @@ backend_read_master_name(struct plugin_state *state, char **master)
}
/* Manipulate a backend map configuration. */
-struct plugin_state *
-backend_set_config_get_state(struct backend_set_data *set_data)
-{
- return set_data->state;
-}
-char **
-backend_set_config_get_bases(struct backend_set_data *set_data)
-{
- return set_data->bases;
-}
-char *
-backend_set_config_get_filter(struct backend_set_data *set_data)
-{
- return set_data->entry_filter;
-}
-char *
-backend_set_config_get_group(struct backend_set_data *set_data)
-{
- return set_data->group;
-}
-char *
-backend_set_config_get_set(struct backend_set_data *set_data)
-{
- return set_data->container;
-}
-struct format_inref_attr **
-backend_set_config_get_inref_attrs(struct backend_set_data *set_data)
-{
- return set_data->inref_attrs;
-}
-char **
-backend_set_config_get_ref_attrs(struct backend_set_data *set_data)
-{
- return set_data->ref_attrs;
-}
static void
backend_set_config_free_config_contents(void *data)
{
struct backend_set_data *set_data = data;
if (set_data != NULL) {
- free(set_data->group);
- free(set_data->container);
- free(set_data->bases);
- format_free_attr_list(set_data->ref_attrs);
- format_free_inref_attrs(set_data->inref_attrs);
- free(set_data->entry_filter);
- free(set_data->entry_format);
+ free(set_data->common.group);
+ free(set_data->common.set);
+ free(set_data->common.bases);
+ format_free_attr_list(set_data->common.ref_attrs);
+ format_free_inref_attrs(set_data->common.inref_attrs);
+ free(set_data->common.entry_filter);
}
}
void
-backend_set_config_free_config(struct backend_set_data *data)
+backend_set_config_free_config(struct backend_shr_set_data *data)
{
- backend_set_config_free_config_contents(data);
+ backend_set_config_free_config_contents(data->self);
free(data);
}
-static struct backend_set_data *
+static struct backend_shr_set_data *
backend_copy_set_config(const struct backend_set_data *data)
{
struct backend_set_data *ret;
@@ -141,27 +100,26 @@ backend_copy_set_config(const struct backend_set_data *data)
if (ret == NULL) {
return NULL;
}
- ret->state = data->state;
- ret->group = strdup(data->group);
- ret->container = strdup(data->container);
- ret->bases = backend_shr_dup_strlist(data->bases);
- ret->ref_attrs = data->ref_attrs ?
- format_dup_attr_list(data->ref_attrs) :
- NULL;
- ret->inref_attrs = data->inref_attrs ?
- format_dup_inref_attrs(data->inref_attrs) :
- NULL;
- ret->entry_filter = strdup(data->entry_filter);
- ret->entry_format = strdup(data->entry_format);
- if ((ret->group == NULL) ||
- (ret->container == NULL) ||
- (ret->bases == NULL) ||
- (ret->entry_filter == NULL) ||
- (ret->entry_format == NULL)) {
- backend_set_config_free_config(ret);
+ ret->common.self = ret;
+ ret->common.state = data->common.state;
+ ret->common.group = strdup(data->common.group);
+ ret->common.set = strdup(data->common.set);
+ ret->common.bases = backend_shr_dup_strlist(data->common.bases);
+ ret->common.ref_attrs = data->common.ref_attrs ?
+ format_dup_attr_list(data->common.ref_attrs) :
+ NULL;
+ ret->common.inref_attrs = data->common.inref_attrs ?
+ format_dup_inref_attrs(data->common.inref_attrs) :
+ NULL;
+ ret->common.entry_filter = strdup(data->common.entry_filter);
+ if ((ret->common.group == NULL) ||
+ (ret->common.set == NULL) ||
+ (ret->common.bases == NULL) ||
+ (ret->common.entry_filter == NULL)) {
+ backend_set_config_free_config(&ret->common);
return NULL;
}
- return ret;
+ return &ret->common;
}
/* Given a configuration entry, read the map configuration for the given group
@@ -169,9 +127,9 @@ backend_copy_set_config(const struct backend_set_data *data)
void
backend_set_config_read_config(struct plugin_state *state, Slapi_Entry *e,
const char *group, const char *container,
- bool_t *flag, struct backend_set_data **pret)
+ bool_t *flag, struct backend_shr_set_data **pret)
{
- char **bases, *entry_filter, *entry_format;
+ char **bases, *entry_filter;
char *actual_attr;
const char *cvalue;
int i, j, disposition, buffer_flags, count;
@@ -224,38 +182,24 @@ backend_set_config_read_config(struct plugin_state *state, Slapi_Entry *e,
}
slapi_vattr_values_free(&values, &actual_attr, buffer_flags);
}
- entry_format = NULL;
- if (slapi_vattr_values_get(e, SCH_CONTAINER_CONFIGURATION_ENTRY_FORMAT_ATTR,
- &values,
- &disposition, &actual_attr,
- 0, &buffer_flags) == 0) {
- i = slapi_valueset_first_value(values, &value);
- if (i != -1) {
- cvalue = slapi_value_get_string(value);
- entry_format = strdup(cvalue);
- }
- slapi_vattr_values_free(&values, &actual_attr, buffer_flags);
- }
/* Populate the returned structure. */
- ret.state = state;
- ret.group = strdup(group);
- ret.container = strdup(container);
- ret.bases = bases;
- ret.entry_filter = entry_filter;
- ret.entry_format = entry_format;
- ret.ref_attrs = NULL;
- ret.inref_attrs = NULL;
+ ret.common.state = state;
+ ret.common.group = strdup(group);
+ ret.common.set = strdup(container);
+ ret.common.bases = bases;
+ ret.common.entry_filter = entry_filter;
+ ret.common.ref_attrs = NULL;
+ ret.common.inref_attrs = NULL;
*pret = backend_copy_set_config(&ret);
- free(ret.group);
- free(ret.container);
- if (ret.bases != NULL) {
- for (i = 0; ret.bases[i] != NULL; i++) {
- free(ret.bases[i]);
+ free(ret.common.group);
+ free(ret.common.set);
+ if (ret.common.bases != NULL) {
+ for (i = 0; ret.common.bases[i] != NULL; i++) {
+ free(ret.common.bases[i]);
}
- free(ret.bases);
+ free(ret.common.bases);
}
- free(ret.entry_filter);
- free(ret.entry_format);
+ free(ret.common.entry_filter);
}
/* Given a map-entry directory entry, determine a key, a value, and extra data
@@ -264,33 +208,36 @@ void
backend_set_entry_one(Slapi_Entry *e, struct backend_set_data *data)
{
char *ldif, *ndn, *plugin_id, *ndns[2];
- plugin_id = data->state->plugin_desc->spd_id;
+ plugin_id = data->common.state->plugin_desc->spd_id;
/* Pull out the NDN of this entry. */
ndn = slapi_entry_get_ndn(e);
ndns[0] = ndn;
ndns[1] = NULL;
/* Generate the LDIF for the entry. */
- ldif = format_get_data(data->state, e, data->group, data->container,
- data->entry_format, NULL,
- &data->ref_attrs, &data->inref_attrs);
+ ldif = format_get_data(data->common.state, e,
+ data->common.group, data->common.set,
+ "", NULL,
+ &data->common.ref_attrs,
+ &data->common.inref_attrs);
/* If we actually generated a new entry for this entry, then set it,
* otherwise clear it in case there was one set before. */
if (ldif == NULL) {
slapi_log_error(SLAPI_LOG_PLUGIN, plugin_id,
"setting group/container/key/value "
"\"%s\"/\"%s\"/\"%s\"(\"%s\")=\"%s\"\n",
- data->group, data->container, ndn, ndn, ldif);
- map_data_set_entry(data->state,
- data->group, data->container, ndn,
+ data->common.group, data->common.set,
+ ndn, ndn, ldif);
+ map_data_set_entry(data->common.state,
+ data->common.group, data->common.set, ndn,
NULL, ndns, -1, ldif,
NULL, NULL);
} else {
slapi_log_error(SLAPI_LOG_PLUGIN, plugin_id,
"no value for %s, unsetting domain/map/id"
"\"%s\"/\"%s\"/(\"%s\")\n",
- ndn, data->group, data->container, ndn);
- map_data_unset_entry_id(data->state,
- data->group, data->container,
+ ndn, data->common.group, data->common.set, ndn);
+ map_data_unset_entry_id(data->common.state,
+ data->common.group, data->common.set,
ndn);
}
format_free_data(ldif);