static int getai(const char *host, int port, struct addrinfo **ai) { const char *service = NULL; struct addrinfo hints; char s_port[10]; ZERO_STRUCT(hints); hints.ai_protocol = IPPROTO_TCP; hints.ai_family = PF_UNSPEC; hints.ai_socktype = SOCK_STREAM; if (port == 0) { hints.ai_flags = AI_PASSIVE; } else { snprintf(s_port, sizeof(s_port), "%hu", (unsigned short)port); service = s_port; #ifdef AI_NUMERICSERV hints.ai_flags=AI_NUMERICSERV; #endif } if (ssh_is_ipaddr(host)) { /* this is an IP address */ SSH_LOG(SSH_LOG_PACKET,"host %s matches an IP address",host); hints.ai_flags |= AI_NUMERICHOST; } return getaddrinfo(host, service, &hints, ai); }
/* * Test the behavior of ssh_is_ipaddr() */ static void torture_ssh_is_ipaddr(void **state) { (void)state; assert_int_equal(ssh_is_ipaddr("127.0.0.1"),1); assert_int_equal(ssh_is_ipaddr("0.0.0.0"),1); assert_int_equal(ssh_is_ipaddr("1.1.1.1"),1); assert_int_equal(ssh_is_ipaddr("255.255.255.255"),1); assert_int_equal(ssh_is_ipaddr("128.128.128.128"),1); assert_int_equal(ssh_is_ipaddr("1.10.100.1"),1); assert_int_equal(ssh_is_ipaddr("0.1.10.100"),1); assert_int_equal(ssh_is_ipaddr("2001:0db8:85a3:0000:0000:8a2e:0370:7334"),1); assert_int_equal(ssh_is_ipaddr("fe80:0000:0000:0000:0202:b3ff:fe1e:8329"),1); assert_int_equal(ssh_is_ipaddr("fe80:0:0:0:202:b3ff:fe1e:8329"),1); assert_int_equal(ssh_is_ipaddr("fe80::202:b3ff:fe1e:8329"),1); assert_int_equal(ssh_is_ipaddr("::1"),1); assert_int_equal(ssh_is_ipaddr("::ffff:192.0.2.128"),1); assert_int_equal(ssh_is_ipaddr("0.0.0.0.0"),0); assert_int_equal(ssh_is_ipaddr("0.0.0.0.a"),0); assert_int_equal(ssh_is_ipaddr("a.0.0.0"),0); assert_int_equal(ssh_is_ipaddr("0a.0.0.0.0"),0); assert_int_equal(ssh_is_ipaddr(""),0); assert_int_equal(ssh_is_ipaddr("0.0.0."),0); assert_int_equal(ssh_is_ipaddr("0.0"),0); assert_int_equal(ssh_is_ipaddr("0"),0); assert_int_equal(ssh_is_ipaddr("2001:0db8:85a3:0000:0000:8a2e:0370:7334:1002"), 0); assert_int_equal(ssh_is_ipaddr("fe80:x:202:b3ff:fe1e:8329"), 0); assert_int_equal(ssh_is_ipaddr("fe80:x:202:b3ff:fe1e:8329"), 0); assert_int_equal(ssh_is_ipaddr(":1"), 0); }