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
