summaryrefslogtreecommitdiffstats
path: root/daemons
diff options
context:
space:
mode:
authorLudwig Krispenz <lkrispen@redhat.com>2015-06-03 14:22:52 +0200
committerPetr Vobornik <pvoborni@redhat.com>2015-06-10 14:32:26 +0200
commit777a9500ceba11e6adbd85306f460e8a320504cb (patch)
tree3fad646fad2f713a648fa76c031bd71067ac38ea /daemons
parent2661a860e0049c75088fffe2765d67b051c31c9b (diff)
downloadfreeipa-777a9500ceba11e6adbd85306f460e8a320504cb.tar.gz
freeipa-777a9500ceba11e6adbd85306f460e8a320504cb.tar.xz
freeipa-777a9500ceba11e6adbd85306f460e8a320504cb.zip
check for existing and self referential segments
Reviewed-By: Petr Vobornik <pvoborni@redhat.com> Reviewed-By: Simo Sorce <ssorce@redhat.com>
Diffstat (limited to 'daemons')
-rw-r--r--daemons/ipa-slapi-plugins/topology/topology_pre.c30
1 files changed, 20 insertions, 10 deletions
diff --git a/daemons/ipa-slapi-plugins/topology/topology_pre.c b/daemons/ipa-slapi-plugins/topology/topology_pre.c
index 528f72b69..0a0cd65b5 100644
--- a/daemons/ipa-slapi-plugins/topology/topology_pre.c
+++ b/daemons/ipa-slapi-plugins/topology/topology_pre.c
@@ -279,21 +279,31 @@ ipa_topo_check_connect_reject(Slapi_PBlock *pb)
if (pi && 0 == strcasecmp(pi, ipa_topo_get_plugin_id())) {
return 0;
}
- slapi_pblock_get(pb,SLAPI_DELETE_EXISTING_ENTRY,&add_entry);
+ slapi_pblock_get(pb,SLAPI_ADD_ENTRY,&add_entry);
if (TOPO_SEGMENT_ENTRY != ipa_topo_check_entry_type(add_entry)) {
return 0;
} else {
/* a new segment is added
* verify that the segment does not yet exist
*/
- TopoReplicaSegment *tsegm;
- TopoReplica *tconf = ipa_topo_util_get_conf_for_segment(add_entry);
- tsegm = ipa_topo_util_find_segment(tconf, add_entry);
- if (tsegm) {
- slapi_log_error(SLAPI_LOG_FATAL, IPA_TOPO_PLUGIN_SUBSYSTEM,
- "segment to be added does already exist\n");
- rc = 1;
+ char *leftnode = slapi_entry_attr_get_charptr(add_entry,"ipaReplTopoSegmentLeftNode");
+ char *rightnode = slapi_entry_attr_get_charptr(add_entry,"ipaReplTopoSegmentRightNode");
+ if (0 == strcasecmp(leftnode,rightnode)) {
+ slapi_log_error(SLAPI_LOG_FATAL, IPA_TOPO_PLUGIN_SUBSYSTEM,
+ "segment is self referential\n");
+ rc = 1;
+ } else {
+ TopoReplicaSegment *tsegm;
+ TopoReplica *tconf = ipa_topo_util_get_conf_for_segment(add_entry);
+ tsegm = ipa_topo_util_find_segment(tconf, add_entry);
+ if (tsegm) {
+ slapi_log_error(SLAPI_LOG_FATAL, IPA_TOPO_PLUGIN_SUBSYSTEM,
+ "segment to be added does already exist\n");
+ rc = 1;
+ }
}
+ slapi_ch_free_string(&leftnode);
+ slapi_ch_free_string(&rightnode);
}
return rc;
}
@@ -378,8 +388,8 @@ int ipa_topo_pre_add(Slapi_PBlock *pb)
} else if (ipa_topo_check_connect_reject(pb)) {
int rc = LDAP_UNWILLING_TO_PERFORM;
char *errtxt;
- errtxt = slapi_ch_smprintf("Segment already exists in topology."
- "Add rejected.\n");
+ errtxt = slapi_ch_smprintf("Segment already exists in topology or"
+ " is self referential. Add rejected.\n");
slapi_pblock_set(pb, SLAPI_PB_RESULT_TEXT, errtxt);
slapi_pblock_set(pb, SLAPI_RESULT_CODE, &rc);
result = SLAPI_PLUGIN_FAILURE;