|
|
b045b9 |
From 62fbb3423b26426e735e134134ab710945514ca6 Mon Sep 17 00:00:00 2001
|
|
|
b69e47 |
From: Ludwig Krispenz <lkrispen@redhat.com>
|
|
|
b045b9 |
Date: Tue, 26 Sep 2017 15:51:41 +0200
|
|
|
b045b9 |
Subject: [PATCH] Ticket: 49180 - errors log filled with attrlist_replace -
|
|
|
b045b9 |
attr_replace
|
|
|
b69e47 |
|
|
|
b045b9 |
Bug: If a RUV contains the same URL with different replica IDs the created referrals contain duplicates
|
|
|
b69e47 |
|
|
|
b045b9 |
Fix: check duplicate referrals
|
|
|
b69e47 |
|
|
|
b045b9 |
Reviewed by: Mark, thanks
|
|
|
b69e47 |
---
|
|
|
b69e47 |
ldap/servers/plugins/replication/repl5_ruv.c | 13 ++++++++++++-
|
|
|
b69e47 |
1 file changed, 12 insertions(+), 1 deletion(-)
|
|
|
b69e47 |
|
|
|
b69e47 |
diff --git a/ldap/servers/plugins/replication/repl5_ruv.c b/ldap/servers/plugins/replication/repl5_ruv.c
|
|
|
b045b9 |
index 40dc0928b..7bfdc3425 100644
|
|
|
b69e47 |
--- a/ldap/servers/plugins/replication/repl5_ruv.c
|
|
|
b69e47 |
+++ b/ldap/servers/plugins/replication/repl5_ruv.c
|
|
|
b045b9 |
@@ -1386,7 +1386,17 @@ ruv_replica_count(const RUV *ruv)
|
|
|
b69e47 |
* Extract all the referral URL's from the RUV (but self URL),
|
|
|
b69e47 |
* returning them in an array of strings, that
|
|
|
b69e47 |
* the caller must free.
|
|
|
b69e47 |
+ * We also check and remove duplicates (caused by unclean RUVs)
|
|
|
b69e47 |
*/
|
|
|
b69e47 |
+static int
|
|
|
b69e47 |
+ruv_referral_exists(unsigned char *purl, char **refs, int count)
|
|
|
b69e47 |
+{
|
|
|
b69e47 |
+ for (size_t j=0; j
|
|
|
b69e47 |
+ if (0 == slapi_utf8casecmp(purl, (unsigned char *)refs[j]))
|
|
|
b69e47 |
+ return 1;
|
|
|
b69e47 |
+ }
|
|
|
b69e47 |
+ return 0;
|
|
|
b69e47 |
+}
|
|
|
b69e47 |
char **
|
|
|
b69e47 |
ruv_get_referrals(const RUV *ruv)
|
|
|
b69e47 |
{
|
|
|
b045b9 |
@@ -1407,7 +1417,8 @@ ruv_get_referrals(const RUV *ruv)
|
|
|
b045b9 |
/* Add URL into referrals if doesn't match self URL */
|
|
|
b045b9 |
if ((replica->replica_purl != NULL) &&
|
|
|
b045b9 |
(slapi_utf8casecmp((unsigned char *)replica->replica_purl,
|
|
|
b045b9 |
- (unsigned char *)mypurl) != 0)) {
|
|
|
b69e47 |
+ (unsigned char *)mypurl) != 0) &&
|
|
|
b045b9 |
+ !ruv_referral_exists((unsigned char *)replica->replica_purl, r, i)) {
|
|
|
b045b9 |
r[i] = slapi_ch_strdup(replica->replica_purl);
|
|
|
b045b9 |
i++;
|
|
|
b045b9 |
}
|
|
|
b69e47 |
--
|
|
|
b045b9 |
2.13.6
|
|
|
b69e47 |
|