summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/backend.c78
1 files changed, 65 insertions, 13 deletions
diff --git a/src/backend.c b/src/backend.c
index a85abe8..f06ef2b 100644
--- a/src/backend.c
+++ b/src/backend.c
@@ -425,10 +425,6 @@ backend_map_config_entry_add_cb(Slapi_Entry *e, void *callback_data)
maps = slapi_entry_attr_get_charray(e, "map");
for (i = 0; (domains != NULL) && (domains[i] != NULL); i++) {
for (j = 0; (maps != NULL) && (maps[j] != NULL); j++) {
- slapi_log_error(SLAPI_LOG_PLUGIN,
- state->plugin_desc->spd_id,
- "initializing map %s in %s\n",
- maps[j], domains[i]);
ret = backend_map_config_entry_add_one(state, e,
domains[i],
maps[j]);
@@ -651,13 +647,14 @@ backend_entry_is_a_map(struct plugin_state *state,
Slapi_DN *entry_sdn, *plugin_sdn;
Slapi_Filter *filter;
bool_t ret;
+ char map_configuration_filter[] = MAP_CONFIGURATION_FILTER;
/* First, just do the scope test. */
entry_sdn = slapi_sdn_new_ndn_byref(slapi_entry_get_ndn(e));
if (entry_sdn == NULL) {
return FALSE;
} else {
- plugin_sdn = slapi_sdn_new_ndn_byref(state->plugin_base);
+ plugin_sdn = slapi_sdn_new_dn_byval(state->plugin_base);
if (plugin_sdn == NULL) {
slapi_sdn_free(&entry_sdn);
return FALSE;
@@ -665,7 +662,13 @@ backend_entry_is_a_map(struct plugin_state *state,
}
if (slapi_sdn_scope_test(entry_sdn,
plugin_sdn,
- LDAP_SCOPE_SUB) == 0) {
+ LDAP_SCOPE_ONE) == 0) {
+ /* Didn't match. */
+ slapi_log_error(SLAPI_LOG_PLUGIN,
+ state->plugin_desc->spd_id,
+ "entry \"%s\" is not a child of \"%s\"\n",
+ slapi_sdn_get_ndn(entry_sdn),
+ slapi_sdn_get_ndn(plugin_sdn));
ret = FALSE;
} else {
ret = TRUE;
@@ -675,11 +678,18 @@ backend_entry_is_a_map(struct plugin_state *state,
/* If it's actually part of our configuration tree, check if it's a
* valid entry. */
if (ret) {
- filter = slapi_str2filter(MAP_CONFIGURATION_FILTER);
+ filter = slapi_str2filter(map_configuration_filter);
if (filter != NULL) {
if (slapi_vattr_filter_test(pb, e, filter, 0) != 0) {
/* Didn't match. */
- slapi_filter_free(filter, 1);
+ slapi_log_error(SLAPI_LOG_PLUGIN,
+ state->plugin_desc->spd_id,
+ "entry \"%s\" doesn't look "
+ "like a map configuration "
+ "(didn't match filter "
+ "\"%s\")\n",
+ slapi_sdn_get_ndn(entry_sdn),
+ MAP_CONFIGURATION_FILTER);
ret = FALSE;
}
slapi_filter_free(filter, 1);
@@ -770,10 +780,19 @@ backend_add_cb(Slapi_PBlock *pb)
slapi_pblock_get(pb, SLAPI_PLUGIN_PRIVATE, &cbdata.state);
slapi_pblock_get(pb, SLAPI_ADD_TARGET, &cbdata.dn);
- slapi_pblock_get(pb, SLAPI_ADD_ENTRY, &cbdata.e);
+ slapi_pblock_get(pb, SLAPI_ENTRY_POST_OP, &cbdata.e);
cbdata.pb = pb;
slapi_log_error(SLAPI_LOG_PLUGIN, cbdata.state->plugin_desc->spd_id,
"added \"%s\"\n", cbdata.dn);
+
+ /* Check for NULL entries. */
+ if (cbdata.e == NULL) {
+ slapi_log_error(SLAPI_LOG_PLUGIN,
+ cbdata.state->plugin_desc->spd_id,
+ "added entry is NULL\n");
+ return 0;
+ }
+
/* Add map entries which corresponded to this directory server
* entry. */
map_wrlock();
@@ -888,11 +907,24 @@ backend_modify_cb(Slapi_PBlock *pb)
slapi_pblock_get(pb, SLAPI_PLUGIN_PRIVATE, &cbdata.state);
slapi_pblock_get(pb, SLAPI_MODIFY_TARGET, &cbdata.dn);
slapi_pblock_get(pb, SLAPI_MODIFY_MODS, &cbdata.mods);
- slapi_pblock_get(pb, SLAPI_MODIFY_EXISTING_ENTRY, &cbdata.e_pre);
+ slapi_pblock_get(pb, SLAPI_ENTRY_PRE_OP, &cbdata.e_pre);
slapi_pblock_get(pb, SLAPI_ENTRY_POST_OP, &cbdata.e_post);
cbdata.pb = pb;
slapi_log_error(SLAPI_LOG_PLUGIN, cbdata.state->plugin_desc->spd_id,
"modified \"%s\"\n", cbdata.dn);
+ /* Check for NULL entries. */
+ if (cbdata.e_pre == NULL) {
+ slapi_log_error(SLAPI_LOG_PLUGIN,
+ cbdata.state->plugin_desc->spd_id,
+ "pre-modify entry is NULL\n");
+ return 0;
+ }
+ if (cbdata.e_post == NULL) {
+ slapi_log_error(SLAPI_LOG_PLUGIN,
+ cbdata.state->plugin_desc->spd_id,
+ "post-modify entry is NULL\n");
+ return 0;
+ }
/* Modify map entries which corresponded to this directory server
* entry. */
map_wrlock();
@@ -917,7 +949,7 @@ backend_modify_cb(Slapi_PBlock *pb)
cbdata.state->plugin_desc->spd_id,
"modified entry \"%s\" is now a map\n",
cbdata.dn);
- backend_map_config_entry_add_cb(cbdata.e_pre, cbdata.state);
+ backend_map_config_entry_add_cb(cbdata.e_post, cbdata.state);
}
return 0;
}
@@ -1064,6 +1096,19 @@ backend_modrdn_cb(Slapi_PBlock *pb)
slapi_log_error(SLAPI_LOG_PLUGIN, cbdata.state->plugin_desc->spd_id,
"renamed \"%s\" to \"%s\"\n",
cbdata.dn_pre, cbdata.dn_post);
+ /* Check for NULL entries. */
+ if (cbdata.e_pre == NULL) {
+ slapi_log_error(SLAPI_LOG_PLUGIN,
+ cbdata.state->plugin_desc->spd_id,
+ "pre-modrdn entry is NULL\n");
+ return 0;
+ }
+ if (cbdata.e_post == NULL) {
+ slapi_log_error(SLAPI_LOG_PLUGIN,
+ cbdata.state->plugin_desc->spd_id,
+ "post-modrdn entry is NULL\n");
+ return 0;
+ }
/* Modify map entries which corresponded to this directory server
* entry. */
map_wrlock();
@@ -1088,7 +1133,7 @@ backend_modrdn_cb(Slapi_PBlock *pb)
cbdata.state->plugin_desc->spd_id,
"renamed entry \"%s\" is now a map\n",
cbdata.e_post);
- backend_map_config_entry_add_cb(cbdata.e_pre, cbdata.state);
+ backend_map_config_entry_add_cb(cbdata.e_post, cbdata.state);
}
map_unlock();
return 0;
@@ -1130,10 +1175,17 @@ backend_delete_cb(Slapi_PBlock *pb)
struct backend_delete_entry_cbdata cbdata;
slapi_pblock_get(pb, SLAPI_PLUGIN_PRIVATE, &cbdata.state);
slapi_pblock_get(pb, SLAPI_DELETE_TARGET, &cbdata.dn);
- slapi_pblock_get(pb, SLAPI_DELETE_EXISTING_ENTRY, &cbdata.e);
+ slapi_pblock_get(pb, SLAPI_ENTRY_PRE_OP, &cbdata.e);
cbdata.pb = pb;
slapi_log_error(SLAPI_LOG_PLUGIN, cbdata.state->plugin_desc->spd_id,
"deleted \"%s\"\n", cbdata.dn);
+ /* Check for NULL entries. */
+ if (cbdata.e == NULL) {
+ slapi_log_error(SLAPI_LOG_PLUGIN,
+ cbdata.state->plugin_desc->spd_id,
+ "deleted entry is NULL\n");
+ return 0;
+ }
/* Remove map entries which corresponded to this directory server
* entry. */
map_wrlock();