When performing a resolver lookup from timeserver or wpad, both
perform queries with an unspecified address family. This means that
both A and AAAA record queries are issued. In cases where a valid,
successful A response comes back but where the AAAA query results in a
timeout, do not smash the successful A status with the time out AAAA
status; otherwise, the timeserver or wpad will appear to fail to them
when, in fact, the A query was successful and more than satisfies its
unspecified address family requirement.

Partial fix for BMC#25486 <https://bugs.meego.com/show_bug.cgi?id=25486>.
---
 gweb/gresolv.c |   12 +++++++++---
 1 file changed, 9 insertions(+), 3 deletions(-)

diff --git a/gweb/gresolv.c b/gweb/gresolv.c
index caa30ee..d96f345 100644
--- a/gweb/gresolv.c
+++ b/gweb/gresolv.c
@@ -486,10 +486,16 @@ static void sort_and_return_results(struct resolv_lookup 
*lookup)
 
        results[n++] = NULL;
 
-       status = lookup->ipv4_status;
-
-       if (status == G_RESOLV_RESULT_STATUS_SUCCESS)
+       if (lookup->resolv->result_family == AF_INET)
+               status = lookup->ipv4_status;
+       else if (lookup->resolv->result_family == AF_INET6)
                status = lookup->ipv6_status;
+       else {
+               if (lookup->ipv6_status == G_RESOLV_RESULT_STATUS_SUCCESS)
+                       status = lookup->ipv6_status;
+               else
+                       status = lookup->ipv4_status;
+       }
 
        lookup->result_func(status, results, lookup->result_data);
 
-- 
1.7.10

_______________________________________________
connman mailing list
[email protected]
http://lists.connman.net/listinfo/connman

Reply via email to