Пример #1
0
/** Test tor_addr_port_parse(). */
static void
test_addr_parse(void)
{
  int r;
  tor_addr_t addr;
  char buf[TOR_ADDR_BUF_LEN];
  uint16_t port = 0;

  /* Correct call. */
  r= tor_addr_port_parse(LOG_DEBUG,
                         "192.0.2.1:1234",
                         &addr, &port);
  test_assert(r == 0);
  tor_addr_to_str(buf, &addr, sizeof(buf), 0);
  test_streq(buf, "192.0.2.1");
  test_eq(port, 1234);

  /* Domain name. */
  r= tor_addr_port_parse(LOG_DEBUG,
                         "torproject.org:1234",
                         &addr, &port);
  test_assert(r == -1);

  /* Only IP. */
  r= tor_addr_port_parse(LOG_DEBUG,
                         "192.0.2.2",
                         &addr, &port);
  test_assert(r == -1);

  /* Bad port. */
  r= tor_addr_port_parse(LOG_DEBUG,
                         "192.0.2.2:66666",
                         &addr, &port);
  test_assert(r == -1);

  /* Only domain name */
  r= tor_addr_port_parse(LOG_DEBUG,
                         "torproject.org",
                         &addr, &port);
  test_assert(r == -1);

  /* Bad IP address */
  r= tor_addr_port_parse(LOG_DEBUG,
                         "192.0.2:1234",
                         &addr, &port);
  test_assert(r == -1);

 done:
  ;
}
Пример #2
0
/** Test tor_addr_parse() and tor_addr_port_parse(). */
static void
test_addr_parse(void *arg)
{
  int r;
  tor_addr_t addr;
  char buf[TOR_ADDR_BUF_LEN];
  uint16_t port = 0;

  /* Correct call. */
  (void)arg;
  r= tor_addr_parse(&addr, "192.0.2.1");
  tt_int_op(r,OP_EQ, AF_INET);
  tor_addr_to_str(buf, &addr, sizeof(buf), 0);
  tt_str_op(buf,OP_EQ, "192.0.2.1");

  r= tor_addr_parse(&addr, "11:22::33:44");
  tt_int_op(r,OP_EQ, AF_INET6);
  tor_addr_to_str(buf, &addr, sizeof(buf), 0);
  tt_str_op(buf,OP_EQ, "11:22::33:44");

  r= tor_addr_parse(&addr, "[11:22::33:44]");
  tt_int_op(r,OP_EQ, AF_INET6);
  tor_addr_to_str(buf, &addr, sizeof(buf), 0);
  tt_str_op(buf,OP_EQ, "11:22::33:44");

  r= tor_addr_parse(&addr, "11:22:33:44:55:66:1.2.3.4");
  tt_int_op(r,OP_EQ, AF_INET6);
  tor_addr_to_str(buf, &addr, sizeof(buf), 0);
  tt_str_op(buf,OP_EQ, "11:22:33:44:55:66:102:304");

  r= tor_addr_parse(&addr, "11:22::33:44:1.2.3.4");
  tt_int_op(r,OP_EQ, AF_INET6);
  tor_addr_to_str(buf, &addr, sizeof(buf), 0);
  tt_str_op(buf,OP_EQ, "11:22::33:44:102:304");

  /* Empty string. */
  r= tor_addr_parse(&addr, "");
  tt_int_op(r,OP_EQ, -1);

  /* Square brackets around IPv4 address. */
  r= tor_addr_parse(&addr, "[192.0.2.1]");
  tt_int_op(r,OP_EQ, -1);

  /* Only left square bracket. */
  r= tor_addr_parse(&addr, "[11:22::33:44");
  tt_int_op(r,OP_EQ, -1);

  /* Only right square bracket. */
  r= tor_addr_parse(&addr, "11:22::33:44]");
  tt_int_op(r,OP_EQ, -1);

  /* Leading colon. */
  r= tor_addr_parse(&addr, ":11:22::33:44");
  tt_int_op(r,OP_EQ, -1);

  /* Trailing colon. */
  r= tor_addr_parse(&addr, "11:22::33:44:");
  tt_int_op(r,OP_EQ, -1);

  /* Too many hex words in IPv4-mapped IPv6 address. */
  r= tor_addr_parse(&addr, "11:22:33:44:55:66:77:88:1.2.3.4");
  tt_int_op(r,OP_EQ, -1);

  /* Correct call. */
  r= tor_addr_port_parse(LOG_DEBUG,
                         "192.0.2.1:1234",
                         &addr, &port, -1);
  tt_int_op(r, OP_EQ, 0);
  tor_addr_to_str(buf, &addr, sizeof(buf), 0);
  tt_str_op(buf,OP_EQ, "192.0.2.1");
  tt_int_op(port,OP_EQ, 1234);

  r= tor_addr_port_parse(LOG_DEBUG,
                         "[::1]:1234",
                         &addr, &port, -1);
  tt_int_op(r, OP_EQ, 0);
  tor_addr_to_str(buf, &addr, sizeof(buf), 0);
  tt_str_op(buf,OP_EQ, "::1");
  tt_int_op(port,OP_EQ, 1234);

  /* Domain name. */
  r= tor_addr_port_parse(LOG_DEBUG,
                         "torproject.org:1234",
                         &addr, &port, -1);
  tt_int_op(r, OP_EQ, -1);

  /* Only IP. */
  r= tor_addr_port_parse(LOG_DEBUG,
                         "192.0.2.2",
                         &addr, &port, -1);
  tt_int_op(r, OP_EQ, -1);

  r= tor_addr_port_parse(LOG_DEBUG,
                         "192.0.2.2",
                         &addr, &port, 200);
  tt_int_op(r, OP_EQ, 0);
  tt_int_op(port,OP_EQ,200);

  r= tor_addr_port_parse(LOG_DEBUG,
                         "[::1]",
                         &addr, &port, -1);
  tt_int_op(r, OP_EQ, -1);

  r= tor_addr_port_parse(LOG_DEBUG,
                         "[::1]",
                         &addr, &port, 400);
  tt_int_op(r, OP_EQ, 0);
  tt_int_op(port,OP_EQ,400);

  /* Bad port. */
  r= tor_addr_port_parse(LOG_DEBUG,
                         "192.0.2.2:66666",
                         &addr, &port, -1);
  tt_int_op(r, OP_EQ, -1);
  r= tor_addr_port_parse(LOG_DEBUG,
                         "192.0.2.2:66666",
                         &addr, &port, 200);
  tt_int_op(r, OP_EQ, -1);

  /* Only domain name */
  r= tor_addr_port_parse(LOG_DEBUG,
                         "torproject.org",
                         &addr, &port, -1);
  tt_int_op(r, OP_EQ, -1);
  r= tor_addr_port_parse(LOG_DEBUG,
                         "torproject.org",
                         &addr, &port, 200);
  tt_int_op(r, OP_EQ, -1);

  /* Bad IP address */
  r= tor_addr_port_parse(LOG_DEBUG,
                         "192.0.2:1234",
                         &addr, &port, -1);
  tt_int_op(r, OP_EQ, -1);

  /* Make sure that the default port has lower priority than the real
     one */
  r= tor_addr_port_parse(LOG_DEBUG,
                         "192.0.2.2:1337",
                         &addr, &port, 200);
  tt_int_op(r, OP_EQ, 0);
  tt_int_op(port,OP_EQ,1337);

  r= tor_addr_port_parse(LOG_DEBUG,
                         "[::1]:1369",
                         &addr, &port, 200);
  tt_int_op(r, OP_EQ, 0);
  tt_int_op(port,OP_EQ,1369);

 done:
  ;
}