Fabiano Fidêncio c45dd65
From 288c9c42534f0ae24af51ad4b439cdd2656266f9 Mon Sep 17 00:00:00 2001
Fabiano Fidêncio c45dd65
From: Jakub Hrozek <jhrozek@redhat.com>
Fabiano Fidêncio c45dd65
Date: Mon, 30 Apr 2018 11:18:49 +0200
Fabiano Fidêncio c45dd65
Subject: [PATCH] DYNDNS: Retry also on timeouts
Fabiano Fidêncio c45dd65
MIME-Version: 1.0
Fabiano Fidêncio c45dd65
Content-Type: text/plain; charset=UTF-8
Fabiano Fidêncio c45dd65
Content-Transfer-Encoding: 8bit
Fabiano Fidêncio c45dd65
Fabiano Fidêncio c45dd65
There is the dyndns_server option that is supposed to make it possible
Fabiano Fidêncio c45dd65
for the admin to select a server to update DNS with if the server
Fabiano Fidêncio c45dd65
detected by nsupdate does not work. The fallback works OK for the case
Fabiano Fidêncio c45dd65
where nsupdate fails with a non-zero return code, but doesn't work
Fabiano Fidêncio c45dd65
for the case where nsupdate times out.
Fabiano Fidêncio c45dd65
Fabiano Fidêncio c45dd65
This patch extends the retry condition to also fallback to the
Fabiano Fidêncio c45dd65
dyndns_server directive if nsupdate return ERR_DYNDNS_TIMEOUT.
Fabiano Fidêncio c45dd65
Fabiano Fidêncio c45dd65
Resolves:
Fabiano Fidêncio c45dd65
https://pagure.io/SSSD/sssd/issue/3725
Fabiano Fidêncio c45dd65
Fabiano Fidêncio c45dd65
Reviewed-by: Fabiano FidĂȘncio <fidencio@redhat.com>
Fabiano Fidêncio c45dd65
(cherry picked from commit b57dfac8a047494162395422447ed5675806cfdc)
Fabiano Fidêncio c45dd65
---
Fabiano Fidêncio c45dd65
 src/providers/ldap/sdap_dyndns.c | 10 +++++-----
Fabiano Fidêncio c45dd65
 1 file changed, 5 insertions(+), 5 deletions(-)
Fabiano Fidêncio c45dd65
Fabiano Fidêncio c45dd65
diff --git a/src/providers/ldap/sdap_dyndns.c b/src/providers/ldap/sdap_dyndns.c
Fabiano Fidêncio c45dd65
index f791ba9f3..20d97ca41 100644
Fabiano Fidêncio c45dd65
--- a/src/providers/ldap/sdap_dyndns.c
Fabiano Fidêncio c45dd65
+++ b/src/providers/ldap/sdap_dyndns.c
Fabiano Fidêncio c45dd65
@@ -79,10 +79,10 @@ static struct sss_iface_addr*
Fabiano Fidêncio c45dd65
 sdap_get_address_to_delete(struct sss_iface_addr *address_it,
Fabiano Fidêncio c45dd65
                            uint8_t remove_af);
Fabiano Fidêncio c45dd65
 
Fabiano Fidêncio c45dd65
-static bool should_retry(int child_status)
Fabiano Fidêncio c45dd65
+static bool should_retry(int nsupdate_ret, int child_status)
Fabiano Fidêncio c45dd65
 {
Fabiano Fidêncio c45dd65
-    if (WIFEXITED(child_status)
Fabiano Fidêncio c45dd65
-            && WEXITSTATUS(child_status) != 0) {
Fabiano Fidêncio c45dd65
+    if ((WIFEXITED(child_status) && WEXITSTATUS(child_status) != 0)
Fabiano Fidêncio c45dd65
+         || nsupdate_ret == ERR_DYNDNS_TIMEOUT) {
Fabiano Fidêncio c45dd65
         return true;
Fabiano Fidêncio c45dd65
     }
Fabiano Fidêncio c45dd65
 
Fabiano Fidêncio c45dd65
@@ -381,7 +381,7 @@ sdap_dyndns_update_done(struct tevent_req *subreq)
Fabiano Fidêncio c45dd65
     if (ret != EOK) {
Fabiano Fidêncio c45dd65
         /* If the update didn't succeed, we can retry using the server name */
Fabiano Fidêncio c45dd65
         if (state->fallback_mode == false
Fabiano Fidêncio c45dd65
-                && should_retry(child_status)) {
Fabiano Fidêncio c45dd65
+                && should_retry(ret, child_status)) {
Fabiano Fidêncio c45dd65
             state->fallback_mode = true;
Fabiano Fidêncio c45dd65
             DEBUG(SSSDBG_MINOR_FAILURE,
Fabiano Fidêncio c45dd65
                   "nsupdate failed, retrying.\n");
Fabiano Fidêncio c45dd65
@@ -523,7 +523,7 @@ sdap_dyndns_update_ptr_done(struct tevent_req *subreq)
Fabiano Fidêncio c45dd65
     if (ret != EOK) {
Fabiano Fidêncio c45dd65
         /* If the update didn't succeed, we can retry using the server name */
Fabiano Fidêncio c45dd65
         if (state->fallback_mode == false
Fabiano Fidêncio c45dd65
-                && should_retry(child_status)) {
Fabiano Fidêncio c45dd65
+                && should_retry(ret, child_status)) {
Fabiano Fidêncio c45dd65
             state->fallback_mode = true;
Fabiano Fidêncio c45dd65
             DEBUG(SSSDBG_MINOR_FAILURE, "nsupdate failed, retrying\n");
Fabiano Fidêncio c45dd65
             ret = sdap_dyndns_update_ptr_step(req);
Fabiano Fidêncio c45dd65
-- 
Fabiano Fidêncio c45dd65
2.17.0
Fabiano Fidêncio c45dd65