summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/back-nis.c17
-rw-r--r--src/back-sch.c57
-rw-r--r--src/back-shr.c23
-rw-r--r--src/back-shr.h11
-rw-r--r--src/backend.h3
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);