nss_dns: Do not call res_dnok in getnetby* implementation

Message ID 20190308204424.0744F80DD6B5@oldenburg2.str.redhat.com
State Committed
Headers

Commit Message

Florian Weimer March 8, 2019, 8:44 p.m. UTC
  The argument to res_dnok was produced by ns_name_ntop, so it
is a syntactically valid domain name which, in textual format,
only consists of printable characters.  Therefore, the res_dnok
check always passes.

2019-03-08  Florian Weimer  <fweimer@redhat.com>

	* resolv/nss_dns/dns-network.c (getanswer_r): Do not call
	res_dnok.
  

Comments

Carlos O'Donell June 4, 2020, 1:08 p.m. UTC | #1
On 3/8/19 3:44 PM, Florian Weimer wrote:
> The argument to res_dnok was produced by ns_name_ntop, so it
> is a syntactically valid domain name which, in textual format,
> only consists of printable characters.  Therefore, the res_dnok
> check always passes.
> 
> 2019-03-08  Florian Weimer  <fweimer@redhat.com>
> 
> 	* resolv/nss_dns/dns-network.c (getanswer_r): Do not call
> 	res_dnok.

LGTM.

Reviewed-by: Carlos O'Donell <carlos@redhat.com>

> diff --git a/resolv/nss_dns/dns-network.c b/resolv/nss_dns/dns-network.c
> index 4b81b1bfdc..4617b165db 100644
> --- a/resolv/nss_dns/dns-network.c
> +++ b/resolv/nss_dns/dns-network.c
> @@ -348,7 +348,7 @@ getanswer_r (const querybuf *answer, int anslen, struct netent *result,
>        if (n > 0 && bp[0] == '.')
>  	bp[0] = '\0';
>  
> -      if (n < 0 || res_dnok (bp) == 0)
> +      if (n < 0)
>  	break;
>        cp += n;
>  
> @@ -382,7 +382,7 @@ getanswer_r (const querybuf *answer, int anslen, struct netent *result,
>  	      n = -1;
>  	    }
>  
> -	  if (n < 0 || !res_hnok (bp))
> +	  if (n < 0)
>  	    {
>  	      /* XXX What does this mean?  The original form from bind
>  		 returns NULL. Incrementing cp has no effect in any case.
>
  

Patch

diff --git a/resolv/nss_dns/dns-network.c b/resolv/nss_dns/dns-network.c
index 4b81b1bfdc..4617b165db 100644
--- a/resolv/nss_dns/dns-network.c
+++ b/resolv/nss_dns/dns-network.c
@@ -348,7 +348,7 @@  getanswer_r (const querybuf *answer, int anslen, struct netent *result,
       if (n > 0 && bp[0] == '.')
 	bp[0] = '\0';
 
-      if (n < 0 || res_dnok (bp) == 0)
+      if (n < 0)
 	break;
       cp += n;
 
@@ -382,7 +382,7 @@  getanswer_r (const querybuf *answer, int anslen, struct netent *result,
 	      n = -1;
 	    }
 
-	  if (n < 0 || !res_hnok (bp))
+	  if (n < 0)
 	    {
 	      /* XXX What does this mean?  The original form from bind
 		 returns NULL. Incrementing cp has no effect in any case.