aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGrant Erickson <marathon96@gmail.com>2012-07-16 09:48:09 -0700
committerMarcel Holtmann <marcel@holtmann.org>2012-09-11 14:46:46 +0200
commitfe8153e0e59fb2c08123f718a931eb4b0781a77f (patch)
tree2ff9434b9f9f0e8bc8172cdc5413b070f182da52
parent7846605ef79e49e638569d1dfb470ef04cf51f51 (diff)
downloadmmsd-fe8153e0e59fb2c08123f718a931eb4b0781a77f.tar.gz
gresolv: Do not update successful status with unsuccessful one
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.
-rw-r--r--gweb/gresolv.c12
1 files 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);