diff options
| author | Nalin Dahyabhai <nalin.dahyabhai@pobox.com> | 2008-07-02 14:28:11 -0400 |
|---|---|---|
| committer | Nalin Dahyabhai <nalin.dahyabhai@pobox.com> | 2008-07-02 14:28:11 -0400 |
| commit | cf371e39181a3c6be8f697b2573d568313d450b1 (patch) | |
| tree | 111871bd20eec79471ccc41f3a143e681515334a /src | |
| parent | e5ebc03da2468fb9ddba1c291edc0528b5d01fc6 (diff) | |
| download | slapi-nis-cf371e39181a3c6be8f697b2573d568313d450b1.tar.gz slapi-nis-cf371e39181a3c6be8f697b2573d568313d450b1.tar.xz slapi-nis-cf371e39181a3c6be8f697b2573d568313d450b1.zip | |
- add rdn values to group and set entries
- send the result ourselves when the search is confined to one of our groups
- recreate the entry from the ldif created using the entry so that it's
well-formed
Diffstat (limited to 'src')
| -rw-r--r-- | src/back-sch.c | 33 |
1 files changed, 26 insertions, 7 deletions
diff --git a/src/back-sch.c b/src/back-sch.c index 4eb1873..92ff82e 100644 --- a/src/back-sch.c +++ b/src/back-sch.c @@ -359,8 +359,16 @@ backend_set_entry_one(Slapi_Entry *e, struct backend_set_data *data) slapi_entry_add_string(entry, "objectClass", "extensibleObject"); } - /* Produce some LDIF. */ + /* Clean up some LDIF. */ ldif = slapi_entry2str(entry, &len); + /* Recreate the entry. */ + slapi_entry_free(entry); + entry = slapi_str2entry(ldif, + SLAPI_STR2ENTRY_REMOVEDUPVALS | + SLAPI_STR2ENTRY_ADDRDNVALS | + SLAPI_STR2ENTRY_EXPAND_OBJECTCLASSES | + SLAPI_STR2ENTRY_NOT_WELL_FORMED_LDIF); + slapi_ch_free((void **) &ldif); /* 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) { @@ -370,17 +378,17 @@ backend_set_entry_one(Slapi_Entry *e, struct backend_set_data *data) } /* 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 ((rdnstr != NULL) && (ldif != NULL)) { + if ((rdnstr != NULL) && (slapi_entry_get_ndn(entry) != 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); + rdn, ndn, slapi_entry_get_ndn(entry)); keys[0] = (char *) rdnstr; keys[1] = NULL; map_data_set_entry(data->common.state, data->common.group, data->common.set, ndn, - NULL, keys, len, ldif, + NULL, keys, len, slapi_entry_get_ndn(entry), backend_entry_make_entry_data(entry), backend_entry_free_entry_data); } else { @@ -393,7 +401,6 @@ backend_set_entry_one(Slapi_Entry *e, struct backend_set_data *data) slapi_entry_free(entry); } slapi_rdn_free(&srdn); - slapi_ch_free((void **) &ldif); format_free_data(rdn); } @@ -726,6 +733,9 @@ backend_search_set_cb(const char *group, const char *set, bool_t flag, slapi_entry_add_string(set_entry, "objectClass", "extensibleObject"); slapi_entry_set_sdn(set_entry, set_data->container_sdn); + if (!slapi_entry_rdn_values_present(set_entry)) { + slapi_entry_add_rdn_values(set_entry); + } ndn = slapi_sdn_get_ndn(set_data->container_sdn); result = slapi_filter_test(cbdata->pb, set_entry, cbdata->filter, @@ -809,6 +819,9 @@ backend_search_group_cb(const char *group, void *cb_data) slapi_entry_add_string(group_entry, "objectClass", "extensibleObject"); slapi_entry_set_sdn(group_entry, group_dn); + if (!slapi_entry_rdn_values_present(group_entry)) { + slapi_entry_add_rdn_values(group_entry); + } result = slapi_filter_test(cbdata->pb, group_entry, cbdata->filter, cbdata->check_access); @@ -840,10 +853,15 @@ backend_search_group_cb(const char *group, void *cb_data) } slapi_entry_free(group_entry); } - slapi_sdn_free(&group_dn); /* Now check the group's sets and their contents. */ map_data_foreach_map(cbdata->state, group, backend_search_set_cb, cbdata); + /* If the search is confined to this group, we need to send the result + * ourselves. */ + if (slapi_sdn_scope_test(cbdata->target_dn, group_dn, LDAP_SCOPE_SUB)) { + cbdata->answer = TRUE; + } + slapi_sdn_free(&group_dn); return TRUE; } @@ -881,7 +899,7 @@ backend_search_cb(Slapi_PBlock *pb) return cbdata.answer ? -1 : 0; } -/* Populate our data. */ +/* Populate our data cache. */ void backend_startup(struct plugin_state *state) { @@ -899,6 +917,7 @@ backend_init_preop(Slapi_PBlock *pb, struct plugin_state *state) "error hooking up search callback\n"); } } + void backend_init_postop(Slapi_PBlock *pb, struct plugin_state *state) { |
