gresolv: Do not update successful status with unsuccessful one
authorGrant Erickson <marathon96@gmail.com>
Mon, 16 Jul 2012 16:48:09 +0000 (09:48 -0700)
committerDaniel Wagner <daniel.wagner@bmw-carit.de>
Tue, 17 Jul 2012 08:14:45 +0000 (10:14 +0200)
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.

gweb/gresolv.c

index caa30ee..d96f345 100644 (file)
@@ -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);