From 35627435cea0c00e682b524ae3d0fa1d711ad4ab Mon Sep 17 00:00:00 2001 From: Nalin Dahyabhai Date: Mon, 22 Nov 2010 16:54:05 -0500 Subject: - handle a group with no explicitly-named container by treating the entries as direct subordinates of the group entry --- src/back-sch.c | 72 +++++++++++++++++++++++++++++++++++++++++++--------------- src/back-shr.c | 2 +- 2 files changed, 55 insertions(+), 19 deletions(-) (limited to 'src') diff --git a/src/back-sch.c b/src/back-sch.c index 6fc9c30..b22c44f 100644 --- a/src/back-sch.c +++ b/src/back-sch.c @@ -1,5 +1,5 @@ /* - * Copyright 2008,2009 Red Hat, Inc. + * Copyright 2008,2009,2010 Red Hat, Inc. * * This Program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -51,7 +51,7 @@ #include "plugin.h" #include "map.h" -#define SCH_CONTAINER_CONFIGURATION_FILTER "(&(" SCH_CONTAINER_CONFIGURATION_GROUP_ATTR "=*)(" SCH_CONTAINER_CONFIGURATION_CONTAINER_ATTR "=*)(" SCH_CONTAINER_CONFIGURATION_BASE_ATTR "=*)(" SCH_CONTAINER_CONFIGURATION_FILTER_ATTR "=*)(" SCH_CONTAINER_CONFIGURATION_RDN_ATTR "=*))" +#define SCH_CONTAINER_CONFIGURATION_FILTER "(&(" SCH_CONTAINER_CONFIGURATION_GROUP_ATTR "=*)(" SCH_CONTAINER_CONFIGURATION_BASE_ATTR "=*)(" SCH_CONTAINER_CONFIGURATION_FILTER_ATTR "=*)(" SCH_CONTAINER_CONFIGURATION_RDN_ATTR "=*))" /* The data we ask the map cache to keep, for us, for each set. */ struct backend_set_data { @@ -173,14 +173,20 @@ backend_set_config_read_config(struct plugin_state *state, Slapi_Entry *e, /* Populate the returned structure. */ ret.common.state = state; ret.common.group = slapi_dn_normalize(strdup(group)); - ret.common.set = slapi_dn_normalize(strdup(container)); + ret.common.set = strlen(container) ? + slapi_dn_normalize(strdup(container)) : + strdup(container); ret.common.bases = bases; ret.common.entry_filter = entry_filter; ret.common.ref_attrs = NULL; ret.common.inref_attrs = NULL; ret.common.ref_attr_list = NULL; ret.common.inref_attr_list = NULL; - dn = slapi_dn_plus_rdn(ret.common.group, ret.common.set); + if (strlen(ret.common.set) > 0) { + dn = slapi_dn_plus_rdn(ret.common.group, ret.common.set); + } else { + dn = strdup(ret.common.group); + } ret.container_sdn = slapi_sdn_new_dn_passin(dn); ret.rdn_format = rdn_format; ret.attribute_format = attributes; @@ -417,6 +423,7 @@ backend_set_config_entry_add_cb(Slapi_Entry *e, void *callback_data) containers = backend_shr_get_vattr_strlist(state, e, SCH_CONTAINER_CONFIGURATION_CONTAINER_ATTR); for (i = 0; (groups != NULL) && (groups[i] != NULL); i++) { + /* If this is a multiple-container group, walk the list. */ for (j = 0; (containers != NULL) && (containers[j] != NULL); j++) { @@ -424,6 +431,12 @@ backend_set_config_entry_add_cb(Slapi_Entry *e, void *callback_data) groups[i], containers[j]); } + /* If there are no containers, add one with an empty name. */ + if (containers == NULL) { + ret = backend_shr_set_config_entry_add(state, e, + groups[i], + ""); + } } backend_shr_free_strlist(containers); backend_shr_free_strlist(groups); @@ -469,7 +482,7 @@ backend_get_set_config_entry_if_matching_cb(Slapi_Entry *e, void *callback_data) cbdata = callback_data; groups = backend_shr_get_vattr_strlist(cbdata->state, e, SCH_CONTAINER_CONFIGURATION_GROUP_ATTR); sets = backend_shr_get_vattr_strlist(cbdata->state, e, SCH_CONTAINER_CONFIGURATION_CONTAINER_ATTR); - if ((groups == NULL) || (sets == NULL)) { + if (groups == NULL) { backend_shr_free_strlist(groups); backend_shr_free_strlist(sets); return TRUE; @@ -490,6 +503,18 @@ backend_get_set_config_entry_if_matching_cb(Slapi_Entry *e, void *callback_data) SCH_CONTAINER_CONFIGURATION_FILTER_ATTR); } } + if (sets == NULL) { + if (slapi_sdn_compare(cbdata->groupdn, cbdata->search_groupdn) == 0) { + slapi_log_error(SLAPI_LOG_PLUGIN, + cbdata->state->plugin_desc->spd_id, + "reading container configuration from \"%s\"\n", + slapi_entry_get_ndn(e)); + cbdata->bases = backend_shr_get_vattr_strlist(cbdata->state, e, + SCH_CONTAINER_CONFIGURATION_BASE_ATTR); + cbdata->entry_filter = backend_shr_get_vattr_filter(cbdata->state, e, + SCH_CONTAINER_CONFIGURATION_FILTER_ATTR); + } + } } backend_shr_free_strlist(groups); backend_shr_free_strlist(sets); @@ -517,18 +542,25 @@ backend_get_set_config(struct plugin_state *state, "\"%s\"/\"%s\"!\n", group, container); return; } - setrdn = slapi_sdn_new_dn_byval(container); - if (setrdn == NULL) { - slapi_sdn_free(&groupdn); - slapi_log_error(SLAPI_LOG_PLUGIN, - state->plugin_desc->spd_id, - "out of memory reading configuration for " - "\"%s\"/\"%s\"!\n", group, container); - return; + if (strlen(container) > 0) { + setrdn = slapi_sdn_new_dn_byval(container); + if (setrdn == NULL) { + slapi_sdn_free(&groupdn); + slapi_log_error(SLAPI_LOG_PLUGIN, + state->plugin_desc->spd_id, + "out of memory reading configuration " + "for \"%s\"/\"%s\"!\n", + group, container); + return; + } + } else { + setrdn = NULL; } cbdata.groupdn = slapi_sdn_new(); if (cbdata.groupdn == NULL) { - slapi_sdn_free(&setrdn); + if (setrdn != NULL) { + slapi_sdn_free(&setrdn); + } slapi_sdn_free(&groupdn); slapi_log_error(SLAPI_LOG_PLUGIN, state->plugin_desc->spd_id, @@ -539,7 +571,9 @@ backend_get_set_config(struct plugin_state *state, cbdata.setrdn = slapi_sdn_new(); if (cbdata.setrdn == NULL) { slapi_sdn_free(&cbdata.groupdn); - slapi_sdn_free(&setrdn); + if (setrdn != NULL) { + slapi_sdn_free(&setrdn); + } slapi_sdn_free(&groupdn); slapi_log_error(SLAPI_LOG_PLUGIN, state->plugin_desc->spd_id, @@ -580,7 +614,9 @@ backend_get_set_config(struct plugin_state *state, /* Clean up. */ slapi_sdn_free(&cbdata.setrdn); slapi_sdn_free(&cbdata.groupdn); - slapi_sdn_free(&setrdn); + if (setrdn != NULL) { + slapi_sdn_free(&setrdn); + } slapi_sdn_free(&groupdn); slapi_pblock_destroy(pb); } @@ -1161,8 +1197,8 @@ backend_check_empty(struct plugin_state *state, &first_id, &first_key_index)) { slapi_log_error(SLAPI_LOG_FATAL, state->plugin_desc->spd_id, - "warning: no entries set up under %s,%s\n", - set, group); + "warning: no entries set up under %s%s%s\n", + set, set ? ", " : "",group); } } diff --git a/src/back-shr.c b/src/back-shr.c index 25bb14c..ef58d68 100644 --- a/src/back-shr.c +++ b/src/back-shr.c @@ -358,7 +358,7 @@ backend_shr_set_config_entry_add(struct plugin_state *state, Slapi_Entry *e, } slapi_log_error(SLAPI_LOG_PLUGIN, state->plugin_desc->spd_id, - "initializing %s in %s, flag=%s (2)\n", + "initializing \"%s\" in %s, flag=%s (2)\n", set_data->set, set_data->group, flag ? "yes" : "no"); map_data_set_map(state, set_data->group, set_data->set, flag, set_data, &backend_shr_set_config_free_config); -- cgit