diff options
-rw-r--r-- | src/back-nis.c | 17 | ||||
-rw-r--r-- | src/back-sch.c | 57 | ||||
-rw-r--r-- | src/back-shr.c | 23 | ||||
-rw-r--r-- | src/back-shr.h | 11 | ||||
-rw-r--r-- | src/backend.h | 3 |
5 files changed, 55 insertions, 56 deletions
diff --git a/src/back-nis.c b/src/back-nis.c index 0435d53..32d3885 100644 --- a/src/back-nis.c +++ b/src/back-nis.c @@ -642,9 +642,9 @@ backend_set_config_entry_add_cb(Slapi_Entry *e, void *callback_data) } for (i = 0; (domains != NULL) && (domains[i] != NULL); i++) { for (j = 0; (maps != NULL) && (maps[j] != NULL); j++) { - ret = backend_shr_set_config_entry_add_one(state, e, - domains[i], - maps[j]); + ret = backend_shr_set_config_entry_add(state, e, + domains[i], + maps[j]); } } if (domains != NULL) { @@ -939,13 +939,12 @@ backend_get_set_config(struct plugin_state *state, free(filter); } -/* Given an entry, return true if it describes a NIS map. */ -bool_t -backend_entry_is_a_set(struct plugin_state *state, - Slapi_PBlock *pb, Slapi_Entry *e) +/* Given an entry, return the filter which will match a container entry beneath + * the plugin's configuration entry. */ +const char * +backend_entry_get_set_config_entry_filter(void) { - return backend_shr_entry_is_a_set(state, pb, e, - NIS_MAP_CONFIGURATION_FILTER); + return NIS_MAP_CONFIGURATION_FILTER; } /* Scan for the list of configured domains and maps. */ diff --git a/src/back-sch.c b/src/back-sch.c index a5dab35..acc71af 100644 --- a/src/back-sch.c +++ b/src/back-sch.c @@ -309,8 +309,10 @@ void backend_set_entry_one(Slapi_Entry *e, struct backend_set_data *data) { char *dn, *rdn, *ndn, *ldif, *plugin_id, *keys[2], **ava, *val; + const char *rdnstr; int len, i, j; Slapi_Entry *entry; + Slapi_RDN *srdn; plugin_id = data->common.state->plugin_desc->spd_id; ndn = slapi_entry_get_ndn(e); @@ -359,15 +361,22 @@ backend_set_entry_one(Slapi_Entry *e, struct backend_set_data *data) } /* Produce some LDIF. */ ldif = slapi_entry2str(entry, &len); + /* Normalize the RDN, so that we can use it as a key. */ + srdn = slapi_rdn_new_sdn(slapi_entry_get_sdn(entry)); + if (srdn != NULL) { + rdnstr = slapi_rdn_get_rdn(srdn); + } else { + rdnstr = NULL; + } /* If we actually generated a useful new entry for this entry, then set * it, otherwise clear it in case there was one set before. */ - if ((rdn != NULL) && (ldif != NULL)) { + if ((rdnstr != NULL) && (ldif != NULL)) { slapi_log_error(SLAPI_LOG_PLUGIN, plugin_id, "setting group/container/key/value " "\"%s\"/\"%s\"/\"%s\"(\"%s\")=\"%s\"\n", data->common.group, data->common.set, rdn, ndn, ldif); - keys[0] = rdn; + keys[0] = (char *) rdnstr; keys[1] = NULL; map_data_set_entry(data->common.state, data->common.group, data->common.set, ndn, @@ -383,6 +392,7 @@ backend_set_entry_one(Slapi_Entry *e, struct backend_set_data *data) data->common.group, data->common.set, ndn); slapi_entry_free(entry); } + slapi_rdn_free(&srdn); slapi_ch_free((void **) &ldif); format_free_data(rdn); } @@ -441,9 +451,9 @@ backend_set_config_entry_add_cb(Slapi_Entry *e, void *callback_data) for (j = 0; (containers != NULL) && (containers[j] != NULL); j++) { - ret = backend_shr_set_config_entry_add_one(state, e, - groups[i], - containers[j]); + ret = backend_shr_set_config_entry_add(state, e, + groups[i], + containers[j]); } } if (groups != NULL) { @@ -618,13 +628,12 @@ backend_get_set_config(struct plugin_state *state, slapi_pblock_destroy(pb); } -/* Given an entry, return true if it describes a compatibility container. */ -bool_t -backend_entry_is_a_set(struct plugin_state *state, - Slapi_PBlock *pb, Slapi_Entry *e) +/* Given an entry, return the filter which will match a container entry beneath + * the plugin's configuration entry. */ +const char * +backend_entry_get_set_config_entry_filter(void) { - return backend_shr_entry_is_a_set(state, pb, e, - SCH_CONTAINER_CONFIGURATION_FILTER); + return SCH_CONTAINER_CONFIGURATION_FILTER; } /* Re-read plugin-wide settings that may have changed. Nothing to do. */ @@ -652,11 +661,11 @@ struct backend_search_cbdata { }; static bool_t -backend_search_set_cb(const char *domain, const char *map, bool_t secure, - const char *key, unsigned int key_len, - const char *value, unsigned int value_len, - const char *id, int key_index, - void *backend_data, void *cb_data) +backend_search_entry_cb(const char *domain, const char *map, bool_t secure, + const char *key, unsigned int key_len, + const char *value, unsigned int value_len, + const char *id, int key_index, + void *backend_data, void *cb_data) { Slapi_DN *sdn; struct backend_search_cbdata *cbdata; @@ -666,12 +675,7 @@ backend_search_set_cb(const char *domain, const char *map, bool_t secure, cbdata = cb_data; entry_data = backend_data; sdn = slapi_entry_get_sdn(entry_data->e); - /* Scope check. */ - if (slapi_sdn_scope_test(sdn, cbdata->target_dn, cbdata->scope) == 0) { - /* No match. Return. */ - return TRUE; - } - /* Filter check. */ + /* We've already done the scope check, so just check the filter. */ result = slapi_filter_test(cbdata->pb, entry_data->e, cbdata->filter, cbdata->check_access); if (result == -1) { @@ -702,8 +706,8 @@ backend_search_set_cb(const char *domain, const char *map, bool_t secure, return TRUE; } static bool_t -backend_search_set(const char *group, const char *set, bool_t flag, - void *backend_data, void *cb_data) +backend_search_set_cb(const char *group, const char *set, bool_t flag, + void *backend_data, void *cb_data) { struct backend_search_cbdata *cbdata; struct backend_set_data *set_data; @@ -747,7 +751,7 @@ backend_search_set(const char *group, const char *set, bool_t flag, break; } map_data_foreach_entry_id(cbdata->state, group, set, NULL, - backend_search_set_cb, cbdata); + backend_search_entry_cb, cbdata); return TRUE; } @@ -774,7 +778,8 @@ backend_search_cb(Slapi_PBlock *pb) cbdata.matched = ""; cbdata.text = ""; cbdata.n_entries = 0; - map_data_foreach_map(cbdata.state, NULL, backend_search_set, &cbdata); + map_data_foreach_map(cbdata.state, NULL, + backend_search_set_cb, &cbdata); slapi_sdn_free(&cbdata.target_dn); if (cbdata.answer) { slapi_send_ldap_result(cbdata.pb, cbdata.result, diff --git a/src/back-shr.c b/src/back-shr.c index f18b76e..b3806af 100644 --- a/src/back-shr.c +++ b/src/back-shr.c @@ -299,8 +299,8 @@ backend_shr_set_config_free_config(void *cb_data) } int -backend_shr_set_config_entry_add_one(struct plugin_state *state, Slapi_Entry *e, - const char *group, const char *set) +backend_shr_set_config_entry_add(struct plugin_state *state, Slapi_Entry *e, + const char *group, const char *set) { Slapi_PBlock *pb; int i; @@ -508,14 +508,13 @@ backend_shr_entry_matches_set(struct backend_shr_set_data *set_data, } /* Given an entry, return true if it describes a set. */ -bool_t +static bool_t backend_shr_entry_is_a_set(struct plugin_state *state, - Slapi_PBlock *pb, Slapi_Entry *e, - const char *set_configuration_filter) + Slapi_PBlock *pb, Slapi_Entry *e) { return backend_shr_entry_matches(pb, e, state->plugin_base, LDAP_SCOPE_ONE, - set_configuration_filter); + backend_entry_get_set_config_entry_filter()); } /* Update any entries to which the passed-in entry in the passed-in map refers @@ -763,7 +762,7 @@ backend_shr_add_cb(Slapi_PBlock *pb) /* If it's a map configuration entry, add and populate the maps it * describes. */ - if (backend_entry_is_a_set(cbdata.state, pb, cbdata.e)) { + if (backend_shr_entry_is_a_set(cbdata.state, pb, cbdata.e)) { slapi_log_error(SLAPI_LOG_PLUGIN, cbdata.state->plugin_desc->spd_id, "new entry \"%s\" is a set\n", cbdata.ndn); @@ -866,14 +865,14 @@ backend_shr_modify_cb(Slapi_PBlock *pb) backend_shr_update_references(cbdata.state, cbdata.e_post); /* If it's a map configuration entry, reconfigure, clear, and * repopulate the map. */ - if (backend_entry_is_a_set(cbdata.state, pb, cbdata.e_pre)) { + if (backend_shr_entry_is_a_set(cbdata.state, pb, cbdata.e_pre)) { slapi_log_error(SLAPI_LOG_PLUGIN, cbdata.state->plugin_desc->spd_id, "modified entry \"%s\" was a set\n", cbdata.ndn); backend_set_config_entry_delete_cb(cbdata.e_pre, cbdata.state); } - if (backend_entry_is_a_set(cbdata.state, pb, cbdata.e_post)) { + if (backend_shr_entry_is_a_set(cbdata.state, pb, cbdata.e_post)) { slapi_log_error(SLAPI_LOG_PLUGIN, cbdata.state->plugin_desc->spd_id, "modified entry \"%s\" is now a set\n", @@ -980,14 +979,14 @@ backend_shr_modrdn_cb(Slapi_PBlock *pb) } /* If it's a set configuration entry, reconfigure, clear, and * repopulate the set. */ - if (backend_entry_is_a_set(cbdata.state, pb, cbdata.e_pre)) { + if (backend_shr_entry_is_a_set(cbdata.state, pb, cbdata.e_pre)) { slapi_log_error(SLAPI_LOG_PLUGIN, cbdata.state->plugin_desc->spd_id, "renamed entry \"%s\" was a set\n", cbdata.e_pre); backend_set_config_entry_delete_cb(cbdata.e_pre, cbdata.state); } - if (backend_entry_is_a_set(cbdata.state, pb, cbdata.e_post)) { + if (backend_shr_entry_is_a_set(cbdata.state, pb, cbdata.e_post)) { slapi_log_error(SLAPI_LOG_PLUGIN, cbdata.state->plugin_desc->spd_id, "renamed entry \"%s\" is now a set\n", @@ -1058,7 +1057,7 @@ backend_shr_delete_cb(Slapi_PBlock *pb) "\"%s\"\n", cbdata.ndn); } /* If it's a map configuration entry, remove the map. */ - if (backend_entry_is_a_set(cbdata.state, pb, cbdata.e)) { + if (backend_shr_entry_is_a_set(cbdata.state, pb, cbdata.e)) { slapi_log_error(SLAPI_LOG_PLUGIN, cbdata.state->plugin_desc->spd_id, "deleted entry \"%s\" is a set\n", cbdata.ndn); diff --git a/src/back-shr.h b/src/back-shr.h index f341b9e..f477362 100644 --- a/src/back-shr.h +++ b/src/back-shr.h @@ -35,16 +35,13 @@ void backend_shr_add_strlist(char ***strlist, const char *item); void backend_shr_startup(struct plugin_state *state, const char *set_filter); void backend_shr_postop_init(Slapi_PBlock *pb, struct plugin_state *state); -bool_t backend_shr_entry_is_a_set(struct plugin_state *state, - Slapi_PBlock *pb, Slapi_Entry *e, - const char *set_configuration_filter); bool_t backend_shr_entry_matches(Slapi_PBlock *pb, Slapi_Entry *e, const char *containing_ndn, int scope, const char *check_filter); -int backend_shr_set_config_entry_add_one(struct plugin_state *state, - Slapi_Entry *e, - const char *group_name, - const char *set_name); +int backend_shr_set_config_entry_add(struct plugin_state *state, + Slapi_Entry *e, + const char *group_name, + const char *set_name); int backend_shr_set_config_entry_delete(struct plugin_state *state, Slapi_Entry *e, const char *group_attr, diff --git a/src/backend.h b/src/backend.h index aad8f8d..fcfe652 100644 --- a/src/backend.h +++ b/src/backend.h @@ -52,8 +52,7 @@ void backend_get_set_config(struct plugin_state *state, void backend_free_set_config(char **bases, char *entry_filter); /* 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); +const char *backend_entry_get_set_config_entry_filter(void); int backend_set_config_entry_add_cb(Slapi_Entry *e, void *callback_data); int backend_set_config_entry_delete_cb(Slapi_Entry *e, void *callback_data); |