From b586c66baf4824d175d051b3f5b06588c9aa2bc8 Mon Sep 17 00:00:00 2001 From: Alan Somers Date: Fri, 1 Jan 2021 10:25:49 -0700 Subject: [PATCH] ping: fix ping when the kernel was built without INET6 If the kernel was built without INET6, default to ICMP. Or, if it was built without INET, default to ICMPv6. PR: 251725 Reported by: jbeich Reviewed by: jbeich Tested by: jbeich MFC with: 368045 --- sbin/ping/main.c | 22 ++++++++++++++-------- 1 file changed, 14 insertions(+), 8 deletions(-) diff --git a/sbin/ping/main.c b/sbin/ping/main.c index 5d28a2b4a5cd..01442679efff 100644 --- a/sbin/ping/main.c +++ b/sbin/ping/main.c @@ -126,15 +126,21 @@ main(int argc, char *argv[]) else if (ipv4) hints.ai_family = AF_INET; else { - struct addrinfo *res; + if (!feature_present("inet6")) + hints.ai_family = AF_INET; + else if (!feature_present("inet")) + hints.ai_family = AF_INET6; + else { + struct addrinfo *res; - memset(&hints, 0, sizeof(hints)); - hints.ai_socktype = SOCK_RAW; - hints.ai_family = AF_UNSPEC; - getaddrinfo(argv[argc - 1], NULL, &hints, &res); - if (res != NULL) { - hints.ai_family = res[0].ai_family; - freeaddrinfo(res); + memset(&hints, 0, sizeof(hints)); + hints.ai_socktype = SOCK_RAW; + hints.ai_family = AF_UNSPEC; + getaddrinfo(argv[argc - 1], NULL, &hints, &res); + if (res != NULL) { + hints.ai_family = res[0].ai_family; + freeaddrinfo(res); + } } } #elif defined(INET)