From: Jonathan Matthew Subject: Re: ypwhich: replace inet_aton To: tech@openbsd.org Date: Mon, 19 Aug 2024 13:47:24 +1000 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. >