From b6f6ae3255c861f71917d1c166bdb4b411256c1d Mon Sep 17 00:00:00 2001 From: Nalin Dahyabhai Date: Tue, 10 Jun 2008 11:49:08 -0400 Subject: - read a map's "secure" flag from the configuration, and set it --- src/backend.c | 60 ++++++++++++++++++++++++++++++++++++++++++----------------- src/backend.h | 2 +- 2 files changed, 44 insertions(+), 18 deletions(-) (limited to 'src') diff --git a/src/backend.c b/src/backend.c index 264fe5d..3a87e46 100644 --- a/src/backend.c +++ b/src/backend.c @@ -370,7 +370,7 @@ backend_map_config_filter(const char *format, static void backend_map_config_read_config(struct plugin_state *state, Slapi_Entry *e, const char *domain, const char *map, - struct backend_map_data *ret) + bool_t *secure, struct backend_map_data *ret) { const char *default_filter, *default_key_format, *default_value_format; char **bases, *entry_filter, *key_format, *value_format, *actual_attr; @@ -382,7 +382,7 @@ backend_map_config_read_config(struct plugin_state *state, Slapi_Entry *e, Slapi_ValueSet *values; Slapi_Value *value; /* Read the hard-coded defaults for a map with this name. */ - defaults_get_map_config(map, &default_filter, + defaults_get_map_config(map, secure, &default_filter, &default_key_format, &default_value_format); /* Read the values from the configuration entry. */ bases = NULL; @@ -435,6 +435,24 @@ backend_map_config_read_config(struct plugin_state *state, Slapi_Entry *e, } slapi_vattr_values_free(&values, &actual_attr, buffer_flags); } + *secure = FALSE; + if (slapi_vattr_values_get(e, MAP_CONFIGURATION_SECURE_ATTR, &values, + &disposition, &actual_attr, + 0, &buffer_flags) == 0) { + i = slapi_valueset_first_value(values, &value); + if (i != -1) { + cvalue = slapi_value_get_string(value); + /* FIXME: use nl_langinfo(YESEXPR) here? */ + if ((strcasecmp(cvalue, "yes") == 0) || + (strcasecmp(cvalue, "on") == 0) || + (strcasecmp(cvalue, "1") == 0)) { + *secure = TRUE; + } else { + *secure = FALSE; + } + } + slapi_vattr_values_free(&values, &actual_attr, buffer_flags); + } /* Build a filter, using either the configured value or the default as * a template, we need to do this because RFC2307bis sometimes stores * the map name in each entry, so it's useful to be able to filter on @@ -488,17 +506,20 @@ backend_map_config_entry_add_one(struct plugin_state *state, Slapi_Entry *e, { Slapi_PBlock *pb; int i; + bool_t secure; struct backend_map_data cb_data, *map_cb_data; pb = slapi_pblock_new(); - backend_map_config_read_config(state, e, domain, map, &cb_data); + secure = FALSE; + backend_map_config_read_config(state, e, domain, map, &secure, + &cb_data); slapi_log_error(SLAPI_LOG_PLUGIN, state->plugin_desc->spd_id, - "initializing map %s in %s (2)\n", - map, domain); + "initializing map %s in %s, secure=%s (2)\n", + map, domain, secure ? "yes" : "no"); map_cb_data = backend_copy_cb_data(&cb_data); backend_free_map_data_contents(&cb_data); - map_data_set_map(state, domain, map, + map_data_set_map(state, domain, map, secure, map_cb_data, &backend_free_map_data); map_data_clear_map(state, domain, map); /* Search under each base in turn, adding the matching directory @@ -840,12 +861,13 @@ backend_get_map_config_entry_cb(Slapi_Entry *e, void *callback_data) void backend_get_map_config(struct plugin_state *state, const char *domain, const char *map, - char ***bases, char **entry_filter) + bool_t *secure, char ***bases, char **entry_filter) { Slapi_PBlock *pb; char *filter; char *attrs[] = {"filter", "base", NULL}; const char *default_filter; + bool_t map_secure; struct backend_get_map_config_cb cbdata; /* Build the search filter. */ @@ -881,7 +903,8 @@ backend_get_map_config(struct plugin_state *state, 0); cbdata.bases = NULL; cbdata.state = state; - defaults_get_map_config(map, &default_filter, NULL, NULL); + map_secure = FALSE; + defaults_get_map_config(map, &map_secure, &default_filter, NULL, NULL); cbdata.entry_filter = strdup(default_filter); slapi_search_internal_callback_pb(pb, &cbdata, NULL, @@ -889,6 +912,9 @@ backend_get_map_config(struct plugin_state *state, NULL); /* Return the results. */ + if (secure) { + *secure = map_secure; + } *bases = cbdata.bases; *entry_filter = backend_map_config_filter(cbdata.entry_filter, domain, map); @@ -1025,7 +1051,7 @@ struct backend_update_references_cbdata { }; static bool_t -backend_update_references_cb(const char *domain, const char *map, +backend_update_references_cb(const char *domain, const char *map, bool_t secure, void *backend_data, void *cbdata_ptr) { struct plugin_state *state; @@ -1196,8 +1222,8 @@ struct backend_add_entry_cbdata { }; static bool_t -backend_add_entry_cb(const char *domain, const char *map, void *backend_data, - void *cbdata_ptr) +backend_add_entry_cb(const char *domain, const char *map, bool_t secure, + void *backend_data, void *cbdata_ptr) { Slapi_DN *base_sdn, *entry_sdn; Slapi_Filter *filter; @@ -1284,8 +1310,8 @@ struct backend_modify_entry_cbdata { }; static bool_t -backend_modify_entry_cb(const char *domain, const char *map, void *backend_data, - void *cbdata_ptr) +backend_modify_entry_cb(const char *domain, const char *map, bool_t secure, + void *backend_data, void *cbdata_ptr) { Slapi_DN *base_sdn, *entry_sdn; Slapi_Filter *filter; @@ -1397,8 +1423,8 @@ struct backend_modrdn_entry_cbdata { }; static bool_t -backend_modrdn_entry_cb(const char *domain, const char *map, void *backend_data, - void *cbdata_ptr) +backend_modrdn_entry_cb(const char *domain, const char *map, bool_t secure, + void *backend_data, void *cbdata_ptr) { struct backend_map_data *map_data; struct backend_modrdn_entry_cbdata *cbdata; @@ -1500,8 +1526,8 @@ struct backend_delete_entry_cbdata { }; static bool_t -backend_delete_entry_cb(const char *domain, const char *map, void *backend_data, - void *cbdata_ptr) +backend_delete_entry_cb(const char *domain, const char *map, bool_t secure, + void *backend_data, void *cbdata_ptr) { struct backend_map_data *map_data; struct backend_delete_entry_cbdata *cbdata; diff --git a/src/backend.h b/src/backend.h index 2e06f12..fbedadf 100644 --- a/src/backend.h +++ b/src/backend.h @@ -29,6 +29,6 @@ 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, - char ***bases, char **entry_filter); + bool_t *secure, char ***bases, char **entry_filter); void backend_free_map_config(char **bases, char *entry_filter); #endif -- cgit