コード例 #1
0
ファイル: connect.c プロジェクト: chrisdew/node-libssh
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);
}
コード例 #2
0
/*
 * 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);
}