|
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 |
|