From aecb9050e5d95383fea2622090691fe63f99697c Mon Sep 17 00:00:00 2001 From: Nalin Dahyabhai Date: Tue, 1 Jul 2008 11:41:52 -0400 Subject: - make the shared parts of the configuration actually shared so that we can drop accessors for reading the shared parts --- src/back-nis.c | 166 +++++++++++++++++++++++--------------------------------- src/back-sch.c | 169 ++++++++++++++++++++------------------------------------- src/back-shr.c | 65 +++++++++++----------- src/backend.h | 22 ++++---- 4 files changed, 167 insertions(+), 255 deletions(-) diff --git a/src/back-nis.c b/src/back-nis.c index 67606f9..ced47db 100644 --- a/src/back-nis.c +++ b/src/back-nis.c @@ -55,11 +55,7 @@ /* The data we ask the map cache to keep, for us, for each map. */ struct backend_set_data { - /* Common data. */ - struct plugin_state *state; - char *domain, *map, **bases, *entry_filter; - char **ref_attrs; - struct format_inref_attr **inref_attrs; + struct backend_shr_set_data common; /* NIS-specific data. */ char **key_formats, **keys_formats, *value_format; int n_key_formats, n_keys_formats; @@ -80,65 +76,30 @@ backend_read_master_name(struct plugin_state *state, char **master) } /* Manipulate map configuration data. */ -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->domain; -} -char * -backend_set_config_get_set(struct backend_set_data *set_data) -{ - return set_data->map; -} -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_free_set_data_contents(void *data) { struct backend_set_data *set_data = data; if (set_data != NULL) { - free(set_data->domain); - free(set_data->map); - free(set_data->bases); + 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); free(set_data->disallowed_chars); - format_free_attr_list(set_data->ref_attrs); - format_free_inref_attrs(set_data->inref_attrs); - free(set_data->entry_filter); backend_shr_free_strlist(set_data->key_formats); backend_shr_free_strlist(set_data->keys_formats); free(set_data->value_format); } } void -backend_set_config_free_config(struct backend_set_data *data) +backend_set_config_free_config(struct backend_shr_set_data *data) { - backend_free_set_data_contents(data); + backend_free_set_data_contents(data->self); free(data); } -static struct backend_set_data * +static struct backend_shr_set_data * backend_copy_set_data(const struct backend_set_data *data) { struct backend_set_data *ret; @@ -146,34 +107,35 @@ backend_copy_set_data(const struct backend_set_data *data) if (ret == NULL) { return NULL; } - ret->state = data->state; - ret->domain = strdup(data->domain); - ret->map = strdup(data->map); - ret->bases = backend_shr_dup_strlist(data->bases); + 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); ret->disallowed_chars = data->disallowed_chars ? strdup(data->disallowed_chars) : NULL; - 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->key_formats = backend_shr_dup_strlist(data->key_formats); ret->keys_formats = backend_shr_dup_strlist(data->keys_formats); ret->n_key_formats = data->n_key_formats; ret->n_keys_formats = data->n_keys_formats; ret->value_format = strdup(data->value_format); - if ((ret->domain == NULL) || - (ret->map == NULL) || - (ret->bases == NULL) || - (ret->entry_filter == NULL) || + if ((ret->common.group == NULL) || + (ret->common.set == NULL) || + (ret->common.bases == NULL) || + (ret->common.entry_filter == NULL) || ((ret->key_formats == NULL) && (ret->keys_formats == NULL)) || (ret->value_format == NULL)) { - backend_set_config_free_config(ret); + backend_set_config_free_config(&ret->common); return NULL; } - return ret; + return &ret->common; } /* Given a map-entry directory entry, determine which keys it should have, @@ -184,7 +146,7 @@ backend_set_entry_one(Slapi_Entry *e, struct backend_set_data *data) { char **keys, ***key_sets, **all_keys, *value, *ndn, *plugin_id; int i, j, k, n_key_sets; - 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); /* Pull out the keys and value for the entry. */ @@ -195,12 +157,13 @@ backend_set_entry_one(Slapi_Entry *e, struct backend_set_data *data) } if (keys != NULL) { for (i = 0, j = 0; i < data->n_key_formats; i++) { - keys[j] = format_get_data(data->state, e, - data->domain, data->map, + keys[j] = format_get_data(data->common.state, e, + data->common.group, + data->common.set, data->key_formats[i], data->disallowed_chars, - &data->ref_attrs, - &data->inref_attrs); + &data->common.ref_attrs, + &data->common.inref_attrs); if (keys[j] != NULL) { j++; } else { @@ -209,9 +172,11 @@ backend_set_entry_one(Slapi_Entry *e, struct backend_set_data *data) "unsetting domain/map/id" "\"%s\"/\"%s\"/(\"%s\")\n", data->key_formats[i], - data->domain, data->map, ndn); - map_data_unset_entry_id(data->state, - data->domain, data->map, + data->common.group, + data->common.set, ndn); + map_data_unset_entry_id(data->common.state, + data->common.group, + data->common.set, ndn); for (k = 0; k < j; k++) { format_free_data(keys[k]); @@ -230,13 +195,13 @@ backend_set_entry_one(Slapi_Entry *e, struct backend_set_data *data) n_key_sets = 0; if (key_sets != NULL) { for (i = 0, j = 0; i < data->n_keys_formats; i++) { - key_sets[j] = format_get_data_set(data->state, e, - data->domain, - data->map, + key_sets[j] = format_get_data_set(data->common.state, e, + data->common.group, + data->common.set, data->keys_formats[i], data->disallowed_chars, - &data->ref_attrs, - &data->inref_attrs); + &data->common.ref_attrs, + &data->common.inref_attrs); if (key_sets[j] != NULL) { j++; } @@ -244,9 +209,11 @@ backend_set_entry_one(Slapi_Entry *e, struct backend_set_data *data) key_sets[j] = NULL; n_key_sets = j; } - value = format_get_data(data->state, e, data->domain, data->map, + value = format_get_data(data->common.state, e, + data->common.group, data->common.set, data->value_format, data->disallowed_chars, - &data->ref_attrs, &data->inref_attrs); + &data->common.ref_attrs, + &data->common.inref_attrs); /* Build one big list of all of the keys and key sets. */ k = 0; if (keys != NULL) { @@ -293,18 +260,19 @@ backend_set_entry_one(Slapi_Entry *e, struct backend_set_data *data) slapi_log_error(SLAPI_LOG_PLUGIN, plugin_id, "setting domain/map/key/value " "\"%s\"/\"%s\"/\"%s\"(\"%s\")=\"%s\"\n", - data->domain, data->map, + data->common.group, data->common.set, all_keys[i], ndn, value); } - map_data_set_entry(data->state, data->domain, data->map, ndn, + map_data_set_entry(data->common.state, + data->common.group, data->common.set, ndn, NULL, all_keys, -1, value, 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->domain, data->map, ndn); - map_data_unset_entry_id(data->state, - data->domain, data->map, + 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(value); @@ -394,7 +362,8 @@ backend_map_config_filter(const char *format, void backend_set_config_read_config(struct plugin_state *state, Slapi_Entry *e, const char *domain, const char *map, - bool_t *secure, struct backend_set_data **pret) + bool_t *secure, + struct backend_shr_set_data **pret) { struct backend_set_data ret; const char *default_filter, *default_key_format, *default_keys_format; @@ -572,20 +541,19 @@ backend_set_config_read_config(struct plugin_state *state, Slapi_Entry *e, free(entry_filter); backend_shr_free_strlist(bases); /* Populate the returned structure. */ - ret.state = state; - ret.domain = strdup(domain); - ret.map = strdup(map); - ret.bases = use_bases; + ret.common.state = state; + ret.common.group = strdup(domain); + ret.common.set = strdup(map); + ret.common.bases = use_bases; + ret.common.entry_filter = use_entry_filter; + ret.common.ref_attrs = NULL; + ret.common.inref_attrs = NULL; ret.disallowed_chars = use_disallowed_chars; - ret.entry_filter = use_entry_filter; ret.key_formats = use_key_formats; ret.n_key_formats = 0; ret.keys_formats = use_keys_formats; ret.n_keys_formats = 0; ret.value_format = use_value_format; - ret.ref_attrs = NULL; - ret.inref_attrs = NULL; - ret.n_key_formats = 0; for (i = 0; (use_key_formats != NULL) && (use_key_formats[i] != NULL); i++) { @@ -615,11 +583,11 @@ backend_set_config_read_config(struct plugin_state *state, Slapi_Entry *e, ret.n_keys_formats++; } *pret = backend_copy_set_data(&ret); - free(ret.domain); - free(ret.map); - backend_shr_free_strlist(ret.bases); + free(ret.common.group); + free(ret.common.set); + backend_shr_free_strlist(ret.common.bases); free(ret.disallowed_chars); - free(ret.entry_filter); + free(ret.common.entry_filter); backend_shr_free_strlist(ret.key_formats); backend_shr_free_strlist(ret.keys_formats); free(ret.value_format); 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); diff --git a/src/back-shr.c b/src/back-shr.c index bbae623..4b6701c 100644 --- a/src/back-shr.c +++ b/src/back-shr.c @@ -293,7 +293,7 @@ backend_shr_entry_matches(Slapi_PBlock *pb, Slapi_Entry *e, static void backend_shr_set_config_free_config(void *cb_data) { - struct backend_set_data *set_data; + struct backend_shr_set_data *set_data; set_data = cb_data; backend_set_config_free_config(set_data); @@ -305,15 +305,15 @@ backend_shr_set_config_entry_add_one(struct plugin_state *state, Slapi_Entry *e, Slapi_PBlock *pb; int i; bool_t flag; - struct backend_set_data *set_data; + struct backend_shr_set_data *set_data; char **set_bases; char *set_entry_filter; pb = slapi_pblock_new(); flag = FALSE; backend_set_config_read_config(state, e, group, set, &flag, &set_data); - set_bases = backend_set_config_get_bases(set_data); - set_entry_filter = backend_set_config_get_filter(set_data); + set_bases = set_data->bases; + set_entry_filter = set_data->entry_filter; if (set_data == NULL) { slapi_log_error(SLAPI_LOG_PLUGIN, state->plugin_desc->spd_id, @@ -486,14 +486,14 @@ backend_shr_get_set_config_entry_cb(Slapi_Entry *e, void *callback_data, /* Given a map configuration, return true if the entry is supposed to be in the * map. */ bool_t -backend_shr_entry_matches_set(struct backend_set_data *set_data, +backend_shr_entry_matches_set(struct backend_shr_set_data *set_data, Slapi_PBlock *pb, Slapi_Entry *e) { char **set_bases; char *set_filter; int i; - set_bases = backend_set_config_get_bases(set_data); - set_filter = backend_set_config_get_filter(set_data); + set_bases = set_data->bases; + set_filter = set_data->entry_filter; if (set_bases != NULL) { for (i = 0; set_bases[i] != NULL; i++) { if (backend_shr_entry_matches(pb, e, @@ -531,7 +531,7 @@ backend_shr_update_references_cb(const char *group, const char *set, void *backend_data, void *cbdata_ptr) { struct plugin_state *state; - struct backend_set_data *set_data; + struct backend_shr_set_data *set_data; struct backend_shr_update_references_cbdata *cbdata; Slapi_DN *referred_to_sdn; Slapi_ValueSet *values; @@ -543,20 +543,20 @@ backend_shr_update_references_cb(const char *group, const char *set, set_data = backend_data; cbdata = cbdata_ptr; - state = backend_set_config_get_state(set_data); + state = set_data->state; /* For every entry in this set which refers to this entry using * a DN stored in an attribute, update that entry. */ /* Build a filter with all of these attributes and this entry's DN. */ - ref_attrs = backend_set_config_get_ref_attrs(set_data); + ref_attrs = set_data->ref_attrs; for (i = 0; (ref_attrs != NULL) && (ref_attrs[i] != NULL); i++) { continue; } n_ref_attrs = i; if (n_ref_attrs > 0) { filter_size = strlen("(&(|))") + - strlen(backend_set_config_get_filter(set_data)) + + strlen(set_data->entry_filter) + 1; ndn = slapi_entry_get_ndn(cbdata->e); tndn = format_escape_for_filter(ndn); @@ -583,8 +583,7 @@ backend_shr_update_references_cb(const char *group, const char *set, free(tndn); return TRUE; } - sprintf(filter, "(&%s(|", - backend_set_config_get_filter(set_data)); + sprintf(filter, "(&%s(|", set_data->entry_filter); for (i = 0; (ref_attrs != NULL) && (ref_attrs[i] != NULL); i++) { @@ -597,7 +596,7 @@ backend_shr_update_references_cb(const char *group, const char *set, filter); free(tndn); /* Update any matching entry. */ - set_bases = backend_set_config_get_bases(set_data); + set_bases = set_data->bases; for (i = 0; (set_bases != NULL) && (set_bases[i] != NULL); i++) { @@ -630,7 +629,7 @@ backend_shr_update_references_cb(const char *group, const char *set, /* For every directory entry to which this directory entry refers and * which also has a corresponding entry in this map, update it. */ - inref_attrs = backend_set_config_get_inref_attrs(set_data); + inref_attrs = set_data->inref_attrs; for (i = 0; (inref_attrs != NULL) && (inref_attrs[i] != NULL); i++) { /* We're only processing inref attributes for this map. */ if ((strcmp(inref_attrs[i]->group, group) != 0) || @@ -664,7 +663,7 @@ backend_shr_update_references_cb(const char *group, const char *set, /* ...update it. */ backend_shr_set_config_entry_set_one_dn(state, ndn, - set_data); + set_data->self); } } slapi_vattr_values_free(&values, &actual_attr, @@ -704,7 +703,7 @@ static bool_t backend_shr_add_entry_cb(const char *group, const char *set, bool_t secure, void *backend_data, void *cbdata_ptr) { - struct backend_set_data *set_data; + struct backend_shr_set_data *set_data; struct backend_add_entry_cbdata *cbdata; set_data = backend_data; @@ -722,7 +721,7 @@ backend_shr_add_entry_cb(const char *group, const char *set, bool_t secure, /* Set the entry in the map which corresponds to this entry, or clear * any that might if this entry doesn't have a key and value. */ - backend_set_entry_one(cbdata->e, set_data); + backend_set_entry_one(cbdata->e, set_data->self); return TRUE; } @@ -791,7 +790,7 @@ static bool_t backend_shr_modify_entry_cb(const char *group, const char *set, bool_t flag, void *backend_data, void *cbdata_ptr) { - struct backend_set_data *set_data; + struct backend_shr_set_data *set_data; struct backend_shr_modify_entry_cbdata *cbdata; set_data = backend_data; @@ -804,12 +803,12 @@ backend_shr_modify_entry_cb(const char *group, const char *set, bool_t flag, cbdata->state->plugin_desc->spd_id, "clearing group/set/id " "\"%s\"/\"%s\"/(\"%s\")\n", - backend_set_config_get_group(set_data), - backend_set_config_get_set(set_data), + set_data->group, + set_data->set, cbdata->ndn); map_data_unset_entry_id(cbdata->state, - backend_set_config_get_group(set_data), - backend_set_config_get_set(set_data), + set_data->group, + set_data->set, cbdata->ndn); } /* If the entry now matches the map, add it (or re-add it). */ @@ -818,7 +817,7 @@ backend_shr_modify_entry_cb(const char *group, const char *set, bool_t flag, /* Set the entry in the set which corresponds to this entry, or * remove any that might if this entry doesn't produce a useful * value. */ - backend_shr_set_entry_one(cbdata->e_post, set_data); + backend_shr_set_entry_one(cbdata->e_post, set_data->self); } return TRUE; } @@ -907,7 +906,7 @@ static bool_t backend_shr_modrdn_entry_cb(const char *group, const char *set, bool_t secure, void *backend_data, void *cbdata_ptr) { - struct backend_set_data *set_data; + struct backend_shr_set_data *set_data; struct backend_shr_modrdn_entry_cbdata *cbdata; bool_t matched_pre, matched_post; @@ -924,12 +923,12 @@ backend_shr_modrdn_entry_cb(const char *group, const char *set, bool_t secure, cbdata->state->plugin_desc->spd_id, "clearing group/set/id " "\"%s\"/\"%s\"/(\"%s\")\n", - backend_set_config_get_group(set_data), - backend_set_config_get_set(set_data), + set_data->group, + set_data->set, cbdata->ndn_pre); map_data_unset_entry_id(cbdata->state, - backend_set_config_get_group(set_data), - backend_set_config_get_set(set_data), + set_data->group, + set_data->set, cbdata->ndn_pre); } /* Set the entry in the map which corresponds to this entry, or clear @@ -938,7 +937,7 @@ backend_shr_modrdn_entry_cb(const char *group, const char *set, bool_t secure, cbdata->pb, cbdata->e_post); if (matched_post) { - backend_set_entry_one(cbdata->e_post, set_data); + backend_set_entry_one(cbdata->e_post, set_data->self); } return TRUE; } @@ -1012,7 +1011,7 @@ static bool_t backend_shr_delete_entry_cb(const char *group, const char *set, bool_t flag, void *backend_data, void *cbdata_ptr) { - struct backend_set_data *set_data; + struct backend_shr_set_data *set_data; struct backend_shr_delete_entry_cbdata *cbdata; set_data = backend_data; cbdata = cbdata_ptr; @@ -1023,9 +1022,7 @@ backend_shr_delete_entry_cb(const char *group, const char *set, bool_t flag, cbdata->state->plugin_desc->spd_id, "unsetting group/set/id" "\"%s\"/\"%s\"=\"%s\"/\"%s\"/(\"%s\")\n", - group, set, - backend_set_config_get_group(set_data), - backend_set_config_get_set(set_data), + group, set, set_data->group, set_data->set, cbdata->ndn); map_data_unset_entry_id(cbdata->state, group, set, cbdata->ndn); } diff --git a/src/backend.h b/src/backend.h index 2afbaae..a216f2d 100644 --- a/src/backend.h +++ b/src/backend.h @@ -4,6 +4,15 @@ struct backend_set_data; struct plugin_state; struct inref_attr; +/* Common data. */ +struct backend_shr_set_data { + struct plugin_state *state; + char *group, *set, **bases, *entry_filter; + char **ref_attrs; + struct format_inref_attr **inref_attrs; + struct backend_set_data *self; +}; + /* Startup/initialization functions called through the map. */ void backend_startup(struct plugin_state *state); void backend_init(struct slapi_pblock *pb, struct plugin_state *state); @@ -19,15 +28,6 @@ void backend_get_set_config(struct plugin_state *state, char ***bases, char **entry_filter); void backend_free_set_config(char **bases, char *entry_filter); -/* Read configuration from a set configuration. */ -struct plugin_state *backend_set_config_get_state(struct backend_set_data *); -char **backend_set_config_get_bases(struct backend_set_data *set_data); -char *backend_set_config_get_filter(struct backend_set_data *set_data); -char *backend_set_config_get_group(struct backend_set_data *set_data); -char *backend_set_config_get_set(struct backend_set_data *set_data); -struct format_inref_attr **backend_set_config_get_inref_attrs(struct backend_set_data *set_data); -char **backend_set_config_get_ref_attrs(struct backend_set_data *set_data); - /* Check if an entry is a set configuration, and add or remove one. */ bool_t backend_entry_is_a_set(struct plugin_state *state, Slapi_PBlock *pb, Slapi_Entry *e); @@ -42,8 +42,8 @@ void backend_set_config_read_config(struct plugin_state *state, Slapi_Entry *e, const char *group, const char *set, bool_t *flag, - struct backend_set_data **set_data); -void backend_set_config_free_config(struct backend_set_data *set_data); + struct backend_shr_set_data **set_data); +void backend_set_config_free_config(struct backend_shr_set_data *set_data); /* Re-read any plugin configuration data which can be modified without * requiring a restart. */ -- cgit