diff options
| author | Nalin Dahyabhai <nalin.dahyabhai@pobox.com> | 2008-06-04 18:45:47 -0400 |
|---|---|---|
| committer | Nalin Dahyabhai <nalin.dahyabhai@pobox.com> | 2008-06-04 18:45:47 -0400 |
| commit | a06ce5142484aa3b37a5d26d0e7b76b8bc5e5342 (patch) | |
| tree | 5294f3b20e4997f3bba8b7b03d906ac12827a9c3 /src | |
| parent | f8b5f76692a763fd7a1f58538616a7f3ca4bbf91 (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.c | 42 | ||||
| -rw-r--r-- | src/backend.h | 3 |
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 |
