diff options
author | Nalin Dahyabhai <nalin.dahyabhai@pobox.com> | 2008-07-01 11:41:52 -0400 |
---|---|---|
committer | Nalin Dahyabhai <nalin.dahyabhai@pobox.com> | 2008-07-01 11:41:52 -0400 |
commit | aecb9050e5d95383fea2622090691fe63f99697c (patch) | |
tree | ad17ed6e3c9f5d3b32940e3f3e0f370728431747 /src/back-nis.c | |
parent | 7272bca2238d75b7b4cf61ae457ffb31dee2ee8f (diff) | |
download | slapi-nis-aecb9050e5d95383fea2622090691fe63f99697c.tar.gz slapi-nis-aecb9050e5d95383fea2622090691fe63f99697c.tar.xz slapi-nis-aecb9050e5d95383fea2622090691fe63f99697c.zip |
- make the shared parts of the configuration actually shared so that we can
drop accessors for reading the shared parts
Diffstat (limited to 'src/back-nis.c')
-rw-r--r-- | src/back-nis.c | 166 |
1 files changed, 67 insertions, 99 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); |