summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorNalin Dahyabhai <nalin.dahyabhai@pobox.com>2008-06-10 11:49:08 -0400
committerNalin Dahyabhai <nalin.dahyabhai@pobox.com>2008-06-10 11:49:08 -0400
commitb6f6ae3255c861f71917d1c166bdb4b411256c1d (patch)
treed3a7408514b9627a238480535d2dfa97b0aa8819 /src
parente73bd523f2618be5566a93c4b51d633029d70fa5 (diff)
downloadslapi-nis-b6f6ae3255c861f71917d1c166bdb4b411256c1d.tar.gz
slapi-nis-b6f6ae3255c861f71917d1c166bdb4b411256c1d.tar.xz
slapi-nis-b6f6ae3255c861f71917d1c166bdb4b411256c1d.zip
- read a map's "secure" flag from the configuration, and set it
Diffstat (limited to 'src')
-rw-r--r--src/backend.c60
-rw-r--r--src/backend.h2
2 files changed, 44 insertions, 18 deletions
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