summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorNalin Dahyabhai <nalin.dahyabhai@pobox.com>2008-06-04 18:45:47 -0400
committerNalin Dahyabhai <nalin.dahyabhai@pobox.com>2008-06-04 18:45:47 -0400
commita06ce5142484aa3b37a5d26d0e7b76b8bc5e5342 (patch)
tree5294f3b20e4997f3bba8b7b03d906ac12827a9c3 /src
parentf8b5f76692a763fd7a1f58538616a7f3ca4bbf91 (diff)
- add a function for reading the set of search bases and filter for a map
- handle format_get_data taking a domain and map now
Diffstat (limited to 'src')
-rw-r--r--src/backend.c42
-rw-r--r--src/backend.h3
2 files changed, 43 insertions, 2 deletions
diff --git a/src/backend.c b/src/backend.c
index c68b323..fd830af 100644
--- a/src/backend.c
+++ b/src/backend.c
@@ -213,9 +213,9 @@ backend_map_config_entry_add_one_cb(Slapi_Entry *e, void *callback_data)
data = callback_data;
/* Pull out the key and value for the entry. */
visited_dn_list = NULL;
- key = format_get_data(data->state, NULL, e,
+ key = format_get_data(data->state, NULL, e, data->domain, data->map,
data->key_format, &visited_dn_list);
- value = format_get_data(data->state, NULL, e,
+ value = format_get_data(data->state, NULL, e, data->domain, data->map,
data->value_format, &visited_dn_list);
/* Pull out the NDN of this entry. */
ndn = slapi_entry_get_ndn(e);
@@ -628,6 +628,44 @@ backend_map_config_entry_delete_cb(Slapi_Entry *e, void *callback_data)
return 0;
}
+struct backend_get_map_config_cb {
+ const char *domain, *map;
+ struct backend_map_data *map_data;
+};
+
+static bool_t
+backend_get_map_config_cb(const char *domain, const char *map,
+ void *backend_data, void *callback_data)
+{
+ struct backend_get_map_config_cb *cbdata;
+ cbdata = callback_data;
+ if ((strcmp(domain, cbdata->domain) == 0) &&
+ (strcmp(map, cbdata->map) == 0)) {
+ cbdata->map_data = backend_data;
+ return FALSE;
+ }
+ return TRUE;
+}
+
+void
+backend_get_map_config(struct plugin_state *state,
+ const char *domain, const char *map,
+ const char ***bases, const char **entry_filter)
+{
+ struct backend_get_map_config_cb cbdata;
+ cbdata.domain = domain;
+ cbdata.map = map;
+ cbdata.map_data = NULL;
+ map_data_foreach_map(state, NULL, backend_get_map_config_cb, &cbdata);
+ if (cbdata.map_data != NULL) {
+ *bases = (const char **) cbdata.map_data->bases;
+ *entry_filter = cbdata.map_data->entry_filter;
+ } else {
+ *bases = NULL;
+ *entry_filter = NULL;
+ }
+}
+
/* Our postoperation callbacks. */
/* Given a map configuration, return true if the entry is supposed to be in the
diff --git a/src/backend.h b/src/backend.h
index eca1869..8fc4526 100644
--- a/src/backend.h
+++ b/src/backend.h
@@ -27,4 +27,7 @@ int backend_read_master_name(struct plugin_state *state, char **master);
void backend_free_master_name(struct plugin_state *state, char *master);
void backend_startup(struct plugin_state *state);
void backend_init(struct slapi_pblock *pb, struct plugin_state *state);
+void backend_get_map_config(struct plugin_state *state,
+ const char *domain, const char *map,
+ const char ***bases, const char **entry_filter);
#endif