|
@@ -3022,7 +3022,7 @@ inline static int dns_ip_resolve( struct dns_hash_entry** e,
|
|
|
struct ip_addr* ip,
|
|
|
int flags)
|
|
|
{
|
|
|
- int ret;
|
|
|
+ int ret, orig_ret;
|
|
|
str host;
|
|
|
struct dns_hash_entry* orig;
|
|
|
|
|
@@ -3050,10 +3050,13 @@ inline static int dns_ip_resolve( struct dns_hash_entry** e,
|
|
|
if (ret>=0) return ret;
|
|
|
if (!(flags&(DNS_IPV6_ONLY|DNS_IPV6_FIRST|DNS_IPV4_ONLY))){
|
|
|
/* not found, try with AAAA */
|
|
|
+ orig_ret=ret;
|
|
|
orig=*e;
|
|
|
*e=0;
|
|
|
*rr_no=0;
|
|
|
ret=dns_aaaa_resolve(e, rr_no, &host, ip);
|
|
|
+ if (ret==-E_DNS_NO_IP && orig_ret==-E_DNS_EOR)
|
|
|
+ ret=orig_ret;
|
|
|
/* delay original record release until we're finished with host*/
|
|
|
dns_hash_put(orig);
|
|
|
}
|
|
@@ -3067,10 +3070,13 @@ inline static int dns_ip_resolve( struct dns_hash_entry** e,
|
|
|
if (ret>=0) return ret;
|
|
|
if ((flags&DNS_IPV6_FIRST) && !(flags&DNS_IPV6_ONLY)){
|
|
|
/* not found, try with A */
|
|
|
+ orig_ret=ret;
|
|
|
orig=*e;
|
|
|
*e=0;
|
|
|
*rr_no=0;
|
|
|
ret=dns_a_resolve(e, rr_no, &host, ip);
|
|
|
+ if (ret==-E_DNS_NO_IP && orig_ret==-E_DNS_EOR)
|
|
|
+ ret=orig_ret;
|
|
|
/* delay original record release until we're finished with host*/
|
|
|
dns_hash_put(orig);
|
|
|
}
|