aboutsummaryrefslogtreecommitdiff
path: root/crypto/openssh/sshconnect.c
diff options
context:
space:
mode:
Diffstat (limited to 'crypto/openssh/sshconnect.c')
-rw-r--r--crypto/openssh/sshconnect.c9
1 files changed, 9 insertions, 0 deletions
diff --git a/crypto/openssh/sshconnect.c b/crypto/openssh/sshconnect.c
index c86182d13673..24da9aed0007 100644
--- a/crypto/openssh/sshconnect.c
+++ b/crypto/openssh/sshconnect.c
@@ -458,6 +458,8 @@ ssh_connect_direct(struct ssh *ssh, const char *host, struct addrinfo *aitop,
memset(ntop, 0, sizeof(ntop));
memset(strport, 0, sizeof(strport));
+ int inet_supported = feature_present("inet");
+ int inet6_supported = feature_present("inet6");
for (attempt = 0; attempt < connection_attempts; attempt++) {
if (attempt > 0) {
/* Sleep a moment before retrying. */
@@ -482,6 +484,13 @@ ssh_connect_direct(struct ssh *ssh, const char *host, struct addrinfo *aitop,
errno = oerrno;
continue;
}
+ if ((ai->ai_family == AF_INET && !inet_supported) ||
+ (ai->ai_family == AF_INET6 && !inet6_supported)) {
+ debug2_f("skipping address [%s]:%s: "
+ "unsupported address family", ntop, strport);
+ errno = EAFNOSUPPORT;
+ continue;
+ }
if (options.address_family != AF_UNSPEC &&
ai->ai_family != options.address_family) {
debug2_f("skipping address [%s]:%s: "