Download raw body.
yppoll / ypset: convert to getaddrinfo
On 2024-08-22 18:22 +02, Florian Obser <florian@openbsd.org> wrote:
> pretty straight forward, untested for lack of YP...
> Tests, OKs?
>
Anyone?
diff --git yppoll.c yppoll.c
index 266f88b60cc..78c89e4c085 100644
--- yppoll.c
+++ yppoll.c
@@ -65,7 +65,7 @@ get_remote_info(char *indomain, char *inmap, char *server, int *outorder,
struct sockaddr_in rsrv_sin;
int rsrv_sock;
CLIENT *client;
- struct hostent *h;
+ struct addrinfo hints, *res;
int r;
bzero((char *)&rsrv_sin, sizeof rsrv_sin);
@@ -73,14 +73,15 @@ get_remote_info(char *indomain, char *inmap, char *server, int *outorder,
rsrv_sin.sin_family = AF_INET;
rsrv_sock = RPC_ANYSOCK;
- h = gethostbyname(server);
- if (h == NULL) {
- if (inet_aton(server, &rsrv_sin.sin_addr) == 0) {
- fprintf(stderr, "unknown host %s\n", server);
- exit(1);
- }
- } else
- rsrv_sin.sin_addr.s_addr = *(u_int32_t *)h->h_addr;
+ memset(&hints, 0, sizeof(hints));
+ hints.ai_family = AF_INET;
+
+ if (getaddrinfo(server, NULL, &hints, &res) != 0) {
+ fprintf(stderr, "unknown host %s\n", server);
+ exit(1);
+ }
+ rsrv_sin.sin_addr = ((struct sockaddr_in *)res->ai_addr)->sin_addr;
+ freeaddrinfo(res);
tv.tv_sec = 10;
tv.tv_usec = 0;
diff --git ypset.c ypset.c
index ebd86597fa1..103b8235861 100644
--- ypset.c
+++ ypset.c
@@ -54,7 +54,7 @@ bind_tohost(struct sockaddr_in *sin, char *dom, char *server)
{
struct ypbind_setdom ypsd;
struct in_addr iaddr;
- struct hostent *hp;
+ struct addrinfo hints, *res;
struct timeval tv;
CLIENT *client;
int sock, port, r;
@@ -66,12 +66,14 @@ bind_tohost(struct sockaddr_in *sin, char *dom, char *server)
memset(&ypsd, 0, sizeof ypsd);
- if (inet_aton(server, &iaddr) == 0) {
- hp = gethostbyname(server);
- if (hp == NULL)
- errx(1, "can't find address for %s", server);
- memmove(&iaddr.s_addr, hp->h_addr, sizeof(iaddr.s_addr));
- }
+ memset(&hints, 0, sizeof(hints));
+ hints.ai_family = AF_INET;
+
+ if (getaddrinfo(server, NULL, &hints, &res) != 0)
+ errx(1, "can't find address for %s", server);
+ iaddr = ((struct sockaddr_in *)res->ai_addr)->sin_addr;
+ freeaddrinfo(res);
+
ypsd.ypsetdom_domain = dom;
bcopy(&iaddr.s_addr, &ypsd.ypsetdom_binding.ypbind_binding_addr,
sizeof(ypsd.ypsetdom_binding.ypbind_binding_addr));
@@ -105,7 +107,7 @@ int
main(int argc, char *argv[])
{
struct sockaddr_in sin;
- struct hostent *hent;
+ struct addrinfo hints, *res;
extern char *optarg;
extern int optind;
char *domainname;
@@ -123,13 +125,15 @@ main(int argc, char *argv[])
domainname = optarg;
break;
case 'h':
- if (inet_aton(optarg, &sin.sin_addr) == 0) {
- hent = gethostbyname(optarg);
- if (hent == NULL)
- errx(1, "host %s unknown\n", optarg);
- bcopy(hent->h_addr, &sin.sin_addr,
- sizeof(sin.sin_addr));
- }
+ memset(&hints, 0, sizeof(hints));
+ hints.ai_family = AF_INET;
+
+ if (getaddrinfo(optarg, NULL, &hints, &res) != 0)
+ errx(1, "host %s unknown\n", optarg);
+
+ sin.sin_addr =
+ ((struct sockaddr_in *)res->ai_addr)->sin_addr;
+ freeaddrinfo(res);
break;
default:
usage();
--
In my defence, I have been left unsupervised.
yppoll / ypset: convert to getaddrinfo