?? lwtest.c
字號:
if (name == NULL && h_errno == HOST_NOT_FOUND) return; else if (h_errno != HOST_NOT_FOUND) { printf("I:gethostbyaddr(%s) failed: %s\n", address, hstrerror(h_errno)); fails++; return; } else { printf("I:gethostbyaddr(%s) returned not found\n", address); fails++; return; } } else { if (strcmp(hp->h_name, name) != 0) { printf("I:gethostbyname(%s) returned %s, " "expected %s\n", address, hp->h_name, name); fails++; return; } }}static voidtest_getipnodebyaddr(const char *address, int af, const char *name) { struct hostent *hp; char addrbuf[16]; int len, ret; int error_num; if (af == AF_INET) len = 4; else len = 16; ret = inet_pton(af, address, addrbuf); assert(ret == 1); hp = getipnodebyaddr(addrbuf, len, af, &error_num); if (hp == NULL) { if (name == NULL && error_num == HOST_NOT_FOUND) return; else if (error_num != HOST_NOT_FOUND) { printf("I:gethostbyaddr(%s) failed: %d\n", address, error_num); fails++; return; } else { printf("I:gethostbyaddr(%s) returned not found\n", address); fails++; return; } } else { if (strcmp(hp->h_name, name) != 0) { printf("I:gethostbyname(%s) returned %s, " "expected %s\n", address, hp->h_name, name); fails++; return; } freehostent(hp); }}static voidtest_getaddrinfo(const char *name, int af, int v4ok, int v6ok, const char *address){ unsigned int len; int ret; struct addrinfo *ai; struct addrinfo hint; unsigned char addrbuf[16]; if (v4ok == 1 && v6ok== 1) { ret = getaddrinfo(name, NULL, NULL, &ai); } else { memset(&hint, 0, sizeof(hint)); if (v4ok) hint.ai_family = AF_INET; else hint.ai_family = AF_INET6; ret = getaddrinfo(name, NULL, &hint, &ai); } if (ret != 0) { if (address == NULL && ret == EAI_NODATA) return; else if (ret != EAI_NODATA) { printf("I:getaddrinfo(%s,%d,%d) failed: %s\n", name, v4ok, v6ok, gai_strerror(ret)); fails++; return; } else { printf("I:getaddrinfo(%s,%d,%d) returned not found\n", name, v4ok, v6ok); fails++; return; } } else { if (af == AF_INET) len = sizeof(struct sockaddr_in); else len = sizeof(struct sockaddr_in6); ret = inet_pton(af, address, addrbuf); assert(ret == 1); if (ai->ai_family != af) { printf("I:getaddrinfo(%s) returned wrong family\n", name); fails++; freeaddrinfo(ai); return; } if (len != (unsigned int) ai->ai_addrlen) { char outbuf[16]; (void)inet_ntop(af, ai->ai_addr, outbuf, sizeof(outbuf)); printf("I:getaddrinfo(%s) returned %lub, " "expected %ub\n", name, (unsigned long)ai->ai_addrlen, len); fails++; freeaddrinfo(ai); return; } else if (af == AF_INET) { struct sockaddr_in *sin; sin = (struct sockaddr_in *) ai->ai_addr; if (memcmp(&sin->sin_addr.s_addr, addrbuf, 4) != 0) { char outbuf[16]; (void)inet_ntop(af, &sin->sin_addr.s_addr, outbuf, sizeof(outbuf)); printf("I:getaddrinfo(%s) returned %s, " "expected %s\n", name, outbuf, address); fails++; freeaddrinfo(ai); return; } } else { struct sockaddr_in6 *sin6; sin6 = (struct sockaddr_in6 *) ai->ai_addr; if (memcmp(sin6->sin6_addr.s6_addr, addrbuf, 16) != 0) { char outbuf[16]; (void)inet_ntop(af, &sin6->sin6_addr.s6_addr, outbuf, sizeof(outbuf)); printf("I:getaddrinfo(%s) returned %s, " "expected %s\n", name, outbuf, address); fails++; freeaddrinfo(ai); return; } } freeaddrinfo(ai); }}static voidtest_getnameinfo(const char *address, int af, const char *name) { int ret; struct sockaddr_in sin; struct sockaddr_in6 sin6; struct sockaddr *sa; int salen; char host[1025]; if (af == AF_INET) { memset(&sin, 0, sizeof(sin)); ret = inet_pton(AF_INET, address, &sin.sin_addr.s_addr); assert(ret == 1); sin.sin_family = AF_INET;#ifdef LWRES_PLATFORM_HAVESALEN sin.sin_len = sizeof(sin);#endif sa = (struct sockaddr *) &sin; salen = sizeof(sin); } else { memset(&sin6, 0, sizeof(sin6)); ret = inet_pton(AF_INET6, address, sin6.sin6_addr.s6_addr); assert(ret == 1); sin6.sin6_family = AF_INET6;#ifdef LWRES_PLATFORM_HAVESALEN sin6.sin6_len = sizeof(sin6);#endif sa = (struct sockaddr *) &sin6; salen = sizeof(sin6); } sa->sa_family = af; ret = getnameinfo(sa, salen, host, sizeof(host), NULL, 0, NI_NAMEREQD); if (ret != 0) { if (name == NULL && ret == ENI_NOHOSTNAME) return; else if (ret != ENI_NOHOSTNAME) { printf("I:getnameinfo(%s) failed: %d\n", address, ret); fails++; return; } else { printf("I:getnameinfo(%s) returned not found\n", address); fails++; return; } } else { if (name == NULL) { printf("I:getaddrinfo(%s) returned %s, " "expected NULL\n", address, host); fails++; return; } else if (strcmp(host, name) != 0) { printf("I:getaddrinfo(%s) returned %s, expected %s\n", address, host, name); fails++; return; } }}static voidtest_getrrsetbyname(const char *name, int rdclass, int rdtype, unsigned int nrdatas, unsigned int nsigs, int should_pass){ int ret; struct rrsetinfo *rrinfo = NULL; ret = getrrsetbyname(name, rdclass, rdtype, 0, &rrinfo); if (ret != 0 && should_pass == 1) { printf("I:getrrsetbyname(%s, %d) failed\n", name, rdtype); fails++; return; } else if (ret == 0 && should_pass == 0) { printf("I:getrrsetbyname(%s, %d) unexpectedly succeeded\n", name, rdtype); fails++; freerrset(rrinfo); return; } else if (ret != 0) return; if (rrinfo->rri_nrdatas != nrdatas) { printf("I:getrrsetbyname(%s, %d): got %d rr, expected %d\n", name, rdtype, rrinfo->rri_nrdatas, nrdatas); fails++; } if (rrinfo->rri_nsigs != nsigs) { printf("I:getrrsetbyname(%s, %d): got %d sig, expected %d\n", name, rdtype, rrinfo->rri_nsigs, nsigs); fails++; } freerrset(rrinfo); return;}intmain(void) { lwres_result_t ret; lwres_udp_port = 9210; lwres_resolv_conf = "resolv.conf"; ret = lwres_context_create(&ctx, NULL, NULL, NULL, 0); CHECK(ret, "lwres_context_create"); ret = lwres_conf_parse(ctx, "resolv.conf"); CHECK(ret, "lwres_conf_parse"); test_noop(); test_gabn("a.example1", LWRES_R_SUCCESS, "10.0.1.1", LWRES_ADDRTYPE_V4); test_gabn("a.example1.", LWRES_R_SUCCESS, "10.0.1.1", LWRES_ADDRTYPE_V4); test_gabn("a.example2", LWRES_R_SUCCESS, "10.0.2.1", LWRES_ADDRTYPE_V4); test_gabn("a.example2.", LWRES_R_SUCCESS, "10.0.2.1", LWRES_ADDRTYPE_V4); test_gabn("a.example3", LWRES_R_NOTFOUND, NULL, LWRES_ADDRTYPE_V4); test_gabn("a.example3.", LWRES_R_NOTFOUND, NULL, LWRES_ADDRTYPE_V4); test_gabn("a", LWRES_R_SUCCESS, "10.0.1.1", LWRES_ADDRTYPE_V4); test_gabn("a.", LWRES_R_NOTFOUND, NULL, LWRES_ADDRTYPE_V4); test_gabn("a2", LWRES_R_SUCCESS, "10.0.1.1", LWRES_ADDRTYPE_V4); test_gabn("a3", LWRES_R_NOTFOUND, NULL, LWRES_ADDRTYPE_V4); test_gabn("b.example1", LWRES_R_SUCCESS, "eeee:eeee:eeee:eeee:ffff:ffff:ffff:ffff", LWRES_ADDRTYPE_V6); test_gabn("b.example1.", LWRES_R_SUCCESS, "eeee:eeee:eeee:eeee:ffff:ffff:ffff:ffff", LWRES_ADDRTYPE_V6); test_gabn("b.example2", LWRES_R_SUCCESS, "eeee:eeee:eeee:eeee:ffff:ffff:ffff:ffff", LWRES_ADDRTYPE_V6); test_gabn("b.example2.", LWRES_R_SUCCESS, "eeee:eeee:eeee:eeee:ffff:ffff:ffff:ffff", LWRES_ADDRTYPE_V6); test_gabn("b.example3", LWRES_R_NOTFOUND, NULL, LWRES_ADDRTYPE_V6); test_gabn("b.example3.", LWRES_R_NOTFOUND, NULL, LWRES_ADDRTYPE_V6); test_gabn("b", LWRES_R_SUCCESS, "eeee:eeee:eeee:eeee:ffff:ffff:ffff:ffff", LWRES_ADDRTYPE_V6); test_gabn("b.", LWRES_R_NOTFOUND, NULL, LWRES_ADDRTYPE_V6); test_gabn("d.example1", LWRES_R_NOTFOUND, NULL, LWRES_ADDRTYPE_V6); test_gabn("x", LWRES_R_SUCCESS, "10.1.10.1", LWRES_ADDRTYPE_V4); test_gabn("x.", LWRES_R_SUCCESS, "10.1.10.1", LWRES_ADDRTYPE_V4); test_gnba("10.10.10.1", LWRES_ADDRTYPE_V4, LWRES_R_SUCCESS, "ipv4.example"); test_gnba("10.10.10.17", LWRES_ADDRTYPE_V4, LWRES_R_NOTFOUND, NULL); test_gnba("0123:4567:89ab:cdef:0123:4567:89ab:cdef", LWRES_ADDRTYPE_V6, LWRES_R_SUCCESS, "ip6.int.example"); test_gnba("0123:4567:89ab:cdef:0123:4567:89ab:cde0", LWRES_ADDRTYPE_V6, LWRES_R_NOTFOUND, NULL); test_gnba("1123:4567:89ab:cdef:0123:4567:89ab:cdef", LWRES_ADDRTYPE_V6, LWRES_R_SUCCESS, "ip6.arpa.example"); test_gnba("1123:4567:89ab:cdef:0123:4567:89ab:cde0", LWRES_ADDRTYPE_V6, LWRES_R_NOTFOUND, NULL); test_gethostbyname("a.example1.", "10.0.1.1"); test_gethostbyname("q.example1.", NULL); test_gethostbyname2("a.example1.", "10.0.1.1", AF_INET); test_gethostbyname2("b.example1.", "eeee:eeee:eeee:eeee:ffff:ffff:ffff:ffff", AF_INET6); test_gethostbyname2("q.example1.", NULL, AF_INET); test_getipnodebyname("a.example1.", "10.0.1.1", AF_INET, 0, 0); test_getipnodebyname("b.example1.", "eeee:eeee:eeee:eeee:ffff:ffff:ffff:ffff", AF_INET6, 0, 0); test_getipnodebyname("a.example1.", "::ffff:10.0.1.1", AF_INET6, 1, 0); test_getipnodebyname("a.example1.", "::ffff:10.0.1.1", AF_INET6, 1, 1); test_getipnodebyname("b.example1.", "eeee:eeee:eeee:eeee:ffff:ffff:ffff:ffff", AF_INET6, 1, 1); test_getipnodebyname("q.example1.", NULL, AF_INET, 0, 0); test_gethostbyaddr("10.10.10.1", AF_INET, "ipv4.example"); test_gethostbyaddr("10.10.10.17", AF_INET, NULL); test_gethostbyaddr("0123:4567:89ab:cdef:0123:4567:89ab:cdef", AF_INET6, "ip6.int.example"); test_gethostbyaddr("1123:4567:89ab:cdef:0123:4567:89ab:cdef", AF_INET6, "ip6.arpa.example"); test_getipnodebyaddr("10.10.10.1", AF_INET, "ipv4.example"); test_getipnodebyaddr("10.10.10.17", AF_INET, NULL); test_getipnodebyaddr("0123:4567:89ab:cdef:0123:4567:89ab:cdef", AF_INET6, "ip6.int.example"); test_getipnodebyaddr("1123:4567:89ab:cdef:0123:4567:89ab:cdef", AF_INET6, "ip6.arpa.example"); test_getaddrinfo("a.example1.", AF_INET, 1, 1, "10.0.1.1"); test_getaddrinfo("a.example1.", AF_INET, 1, 0, "10.0.1.1"); test_getaddrinfo("a.example1.", AF_INET, 0, 1, NULL); test_getaddrinfo("b.example1.", AF_INET6, 1, 1, "eeee:eeee:eeee:eeee:ffff:ffff:ffff:ffff"); test_getaddrinfo("b.example1.", AF_INET6, 1, 0, NULL); test_getaddrinfo("b.example1.", AF_INET6, 0, 1, "eeee:eeee:eeee:eeee:ffff:ffff:ffff:ffff"); test_getnameinfo("10.10.10.1", AF_INET, "ipv4.example"); test_getnameinfo("10.10.10.17", AF_INET, NULL); test_getnameinfo("0123:4567:89ab:cdef:0123:4567:89ab:cdef", AF_INET6, "ip6.int.example"); test_getnameinfo("1123:4567:89ab:cdef:0123:4567:89ab:cdef", AF_INET6, "ip6.arpa.example"); test_getnameinfo("1122:3344:5566:7788:99aa:bbcc:ddee:ff00", AF_INET6, "dname.example1"); test_getrrsetbyname("a", 1, 1, 1, 0, 1); test_getrrsetbyname("a.example1.", 1, 1, 1, 0, 1); test_getrrsetbyname("e.example1.", 1, 1, 1, 1, 1); test_getrrsetbyname("e.example1.", 1, 255, 1, 1, 0); test_getrrsetbyname("e.example1.", 1, 46, 1, 0, 1); test_getrrsetbyname("", 1, 1, 0, 0, 0); if (fails == 0) printf("I:ok\n"); return (fails);}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -