summaryrefslogtreecommitdiffstats
path: root/src/backend.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/backend.c')
-rw-r--r--src/backend.c39
1 files changed, 32 insertions, 7 deletions
diff --git a/src/backend.c b/src/backend.c
index e3e12b8..a40241a 100644
--- a/src/backend.c
+++ b/src/backend.c
@@ -58,6 +58,7 @@ struct backend_map_data {
char *domain, *map, **bases, *entry_filter, **key_formats;
char *value_format;
int n_key_formats;
+ char *disallowed_chars;
char **ref_attrs;
struct format_inref_attr **inref_attrs;
};
@@ -175,6 +176,7 @@ backend_free_map_data_contents(void *data)
free(map_data->domain);
free(map_data->map);
free(map_data->bases);
+ free(map_data->disallowed_chars);
format_free_attr_list(map_data->ref_attrs);
format_free_inref_attrs(map_data->inref_attrs);
free(map_data->entry_filter);
@@ -201,6 +203,8 @@ backend_copy_cb_data(const struct backend_map_data *data)
ret->domain = strdup(data->domain);
ret->map = strdup(data->map);
ret->bases = backend_dup_strlist(data->bases);
+ ret->disallowed_chars = data->disallowed_chars ?
+ strdup(data->disallowed_chars) : NULL;
ret->ref_attrs = data->ref_attrs ?
format_dup_attr_list(data->ref_attrs) :
NULL;
@@ -214,6 +218,7 @@ backend_copy_cb_data(const struct backend_map_data *data)
if ((ret->domain == NULL) ||
(ret->map == NULL) ||
(ret->bases == NULL) ||
+ (ret->disallowed_chars == NULL) ||
(ret->entry_filter == NULL) ||
(ret->key_formats == NULL) ||
(ret->value_format == NULL)) {
@@ -232,13 +237,14 @@ backend_map_config_entry_add_one_cb(Slapi_Entry *e, void *callback_data)
char **keys, *value, *ndn;
int i, j;
data = callback_data;
- /* Pull out the key and value for the entry. */
+ /* Pull out the keys and value for the entry. */
keys = malloc((data->n_key_formats + 1) * sizeof(char *));
if (keys != NULL) {
for (i = 0; i < data->n_key_formats; i++) {
keys[i] = format_get_data(data->state, NULL, e,
data->domain, data->map,
data->key_formats[i],
+ data->disallowed_chars,
&data->ref_attrs,
&data->inref_attrs);
}
@@ -247,7 +253,7 @@ backend_map_config_entry_add_one_cb(Slapi_Entry *e, void *callback_data)
return 0;
}
value = format_get_data(data->state, NULL, e, data->domain, data->map,
- data->value_format,
+ data->value_format, data->disallowed_chars,
&data->ref_attrs, &data->inref_attrs);
/* Pull out the NDN of this entry. */
ndn = slapi_entry_get_ndn(e);
@@ -400,19 +406,20 @@ backend_map_config_read_config(struct plugin_state *state, Slapi_Entry *e,
bool_t *secure, struct backend_map_data *ret)
{
const char *default_filter, **default_key_formats;
- const char *default_value_format;
+ const char *default_value_format, *default_disallowed_chars;
char **bases, *entry_filter, **key_formats, *value_format, *actual_attr;
- char **ref_attrs;
+ char **ref_attrs, *disallowed_chars;
struct format_inref_attr **inref_attrs;
char **use_bases, *use_entry_filter, **use_key_formats;
- char *use_value_format;
+ char *use_value_format, *use_disallowed_chars;
const char *cvalue;
int i, j, disposition, buffer_flags, count;
Slapi_ValueSet *values;
Slapi_Value *value;
/* Read the hard-coded defaults for a map with this name. */
defaults_get_map_config(map, secure, &default_filter,
- &default_key_formats, &default_value_format);
+ &default_key_formats, &default_value_format,
+ &default_disallowed_chars);
/* Read the values from the configuration entry. */
bases = NULL;
if (slapi_vattr_values_get(e, MAP_CONFIGURATION_BASE_ATTR, &values,
@@ -473,6 +480,17 @@ backend_map_config_read_config(struct plugin_state *state, Slapi_Entry *e,
}
slapi_vattr_values_free(&values, &actual_attr, buffer_flags);
}
+ disallowed_chars = NULL;
+ if (slapi_vattr_values_get(e, MAP_CONFIGURATION_DISALLOWED_CHARS_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);
+ disallowed_chars = strdup(cvalue);
+ }
+ 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,
@@ -506,6 +524,11 @@ backend_map_config_read_config(struct plugin_state *state, Slapi_Entry *e,
strdup(value_format) :
strdup(default_value_format);
use_bases = backend_dup_strlist(bases);
+ use_disallowed_chars = disallowed_chars ?
+ disallowed_chars :
+ (default_disallowed_chars ?
+ strdup(default_disallowed_chars) :
+ NULL);
/* Free the values we read from the entry. */
free(value_format);
backend_free_strlist(key_formats);
@@ -516,6 +539,7 @@ backend_map_config_read_config(struct plugin_state *state, Slapi_Entry *e,
ret->domain = strdup(domain);
ret->map = strdup(map);
ret->bases = use_bases;
+ ret->disallowed_chars = use_disallowed_chars;
ret->entry_filter = use_entry_filter;
ret->key_formats = use_key_formats;
ret->value_format = use_value_format;
@@ -951,7 +975,8 @@ backend_get_map_config(struct plugin_state *state,
cbdata.bases = NULL;
cbdata.state = state;
map_secure = FALSE;
- defaults_get_map_config(map, &map_secure, &default_filter, NULL, NULL);
+ defaults_get_map_config(map, &map_secure, &default_filter,
+ NULL, NULL, NULL);
cbdata.entry_filter = strdup(default_filter);
slapi_search_internal_callback_pb(pb, &cbdata,
NULL,