Index | Thread | Search

From:
Jonathan Matthew <jonathan@d14n.org>
Subject:
Re: ypwhich: replace inet_aton
To:
tech@openbsd.org
Date:
Mon, 19 Aug 2024 13:47:24 +1000

Download raw body.

Thread
On Sun, Aug 18, 2024 at 04:41:20PM +0200, Florian Obser wrote:
> No need to accept hex / oct / truncated IP addresses.
> Untested due to lack of YP, pretty sure this is correct though.
> 
> Tests, OKs?

works for me, ok jmatthew@

> 
> diff --git ypwhich.c ypwhich.c
> index 798fc066f4e..b71fa73bfd1 100644
> --- ypwhich.c
> +++ ypwhich.c
> @@ -137,7 +137,7 @@ main(int argc, char *argv[])
>  	int notrans = 0, mode = 0, c, r, i;
>  	struct ypmaplist *ypml, *y;
>  	struct sockaddr_in sin;
> -	struct hostent *hent;
> +	struct addrinfo hints, *res;
>  	CLIENT *client = NULL;
>  
>  	yp_get_default_domain(&domain);
> @@ -181,17 +181,17 @@ main(int argc, char *argv[])
>  			break;
>  		case 1:
>  			bzero(&sin, sizeof sin);
> +			memset(&hints, 0, sizeof(hints));
> +			hints.ai_family = AF_INET;
>  			sin.sin_family = AF_INET;
> -			if (inet_aton(argv[0], &sin.sin_addr) == 0) {
> -				hent = gethostbyname(argv[0]);
> -				if (!hent) {
> -					fprintf(stderr, "ypwhich: host %s unknown\n",
> -					    argv[0]);
> -					exit(1);
> -				}
> -				bcopy(hent->h_addr, &sin.sin_addr,
> -				    sizeof sin.sin_addr);
> +			if (getaddrinfo(argv[0], NULL, &hints, &res) != 0) {
> +				fprintf(stderr, "ypwhich: host %s unknown\n",
> +				    argv[0]);
> +				exit(1);
>  			}
> +			sin.sin_addr =
> +			    ((struct sockaddr_in *)res->ai_addr)->sin_addr;
> +			freeaddrinfo(res);
>  			if (bind_host(domain, &sin))
>  				exit(1);
>  			break;
> 
> -- 
> In my defence, I have been left unsupervised.
>