From b3c2a4b810bfe31dc544648de8fe98dbb84ec320 Mon Sep 17 00:00:00 2001 From: Ludwig Krispenz Date: Jun 11 2015 11:58:02 +0000 Subject: make sure the agremment rdn match the rdn used in the segment Reviewed-By: Thierry Bordaz --- diff --git a/daemons/ipa-slapi-plugins/topology/topology_util.c b/daemons/ipa-slapi-plugins/topology/topology_util.c index 67014a0..cd97827 100644 --- a/daemons/ipa-slapi-plugins/topology/topology_util.c +++ b/daemons/ipa-slapi-plugins/topology/topology_util.c @@ -292,9 +292,9 @@ ipa_topo_util_agmt_from_entry(Slapi_Entry *entry, char *replRoot, char *fromHost char *toHost, char *direction) { TopoReplicaAgmt *agmt = NULL; - char **mattrs; - char *mattr; - char *mval; + char **mattrs = NULL; + char *mattr = NULL; + char *mval = NULL; int i; agmt = (TopoReplicaAgmt *) slapi_ch_calloc(1,sizeof(TopoReplicaAgmt)); @@ -302,18 +302,8 @@ ipa_topo_util_agmt_from_entry(Slapi_Entry *entry, char *replRoot, char *fromHost agmt->target = slapi_ch_strdup(toHost); agmt->repl_root = slapi_ch_strdup(replRoot); - mattr = slapi_ch_smprintf("ipaReplTopoSegmentGenerated;%s",direction); - mval = slapi_entry_attr_get_charptr(entry,mattr); - if (mval == 0) { - mval = slapi_entry_attr_get_charptr(entry,"ipaReplTopoSegmentGenerated"); - } - if (mval) { - agmt->rdn = ipa_topo_agmt_gen_rdn(fromHost,toHost); - } else { - agmt->rdn = ipa_topo_agmt_std_rdn(toHost); - } - slapi_ch_free_string(&mattr); - slapi_ch_free_string(&mval); + /* use std agmt rdn, it may be updated when matching real agmt is found */ + agmt->rdn = ipa_topo_agmt_std_rdn(toHost); mattrs = ipa_topo_get_plugin_managed_attrs(); for (i=0; mattrs[i]; i++) { @@ -520,9 +510,20 @@ ipa_topo_util_update_agmt_list(TopoReplica *conf, TopoReplicaSegmentList *repl_s ipa_topo_get_plugin_hostname(), targetHost); if (topo_agmt) { - /* if segment found update agreement params */ - char * segm_attr_val; - char * agmt_attr_val; + /* compare rdns, use rdn of existing agreement */ + const Slapi_DN *agmt_dn = slapi_entry_get_sdn_const(repl_agmt); + Slapi_RDN *agmt_rdn = slapi_rdn_new(); + slapi_sdn_get_rdn(agmt_dn, agmt_rdn); + const char *agmt_rdn_str = slapi_rdn_get_rdn(agmt_rdn); + if (strcasecmp(agmt_rdn_str, topo_agmt->rdn)) { + slapi_ch_free_string(&topo_agmt->rdn); + topo_agmt->rdn = slapi_ch_strdup(agmt_rdn_str); + } + slapi_rdn_free(&agmt_rdn); + + /* update agreement params which are different in the segment*/ + char *segm_attr_val; + char *agmt_attr_val; Slapi_Mods *smods = slapi_mods_new(); char **mattrs = ipa_topo_get_plugin_managed_attrs(); for (i=0; mattrs[i]; i++) {