gethostby_test.c (302408) | gethostby_test.c (319299) |
---|---|
1/*- 2 * Copyright (c) 2006 Michael Bushkov <bushman@freebsd.org> 3 * All rights reserved. 4 * 5 * Redistribution and use in source and binary forms, with or without 6 * modification, are permitted provided that the following conditions 7 * are met: 8 * 1. Redistributions of source code must retain the above copyright --- 12 unchanged lines hidden (view full) --- 21 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 22 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 23 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 24 * SUCH DAMAGE. 25 * 26 */ 27 28#include <sys/cdefs.h> | 1/*- 2 * Copyright (c) 2006 Michael Bushkov <bushman@freebsd.org> 3 * All rights reserved. 4 * 5 * Redistribution and use in source and binary forms, with or without 6 * modification, are permitted provided that the following conditions 7 * are met: 8 * 1. Redistributions of source code must retain the above copyright --- 12 unchanged lines hidden (view full) --- 21 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 22 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 23 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 24 * SUCH DAMAGE. 25 * 26 */ 27 28#include <sys/cdefs.h> |
29__FBSDID("$FreeBSD: stable/11/lib/libc/tests/nss/gethostby_test.c 299502 2016-05-12 02:32:23Z cem $"); | 29__FBSDID("$FreeBSD: stable/11/lib/libc/tests/nss/gethostby_test.c 319299 2017-05-31 08:32:05Z ngie $"); |
30 31#include <sys/param.h> 32#include <sys/socket.h> 33#include <arpa/inet.h> 34#include <netinet/in.h> 35#include <errno.h> 36#include <netdb.h> 37#include <resolv.h> --- 44 unchanged lines hidden (view full) --- 82static int hostent_read_snapshot_addr(char *, unsigned char *, size_t); 83static int hostent_read_snapshot_func(struct hostent *, char *); 84 85static int hostent_test_correctness(struct hostent *, void *); 86static int hostent_test_gethostbyaddr(struct hostent *, void *); 87static int hostent_test_getaddrinfo_eq(struct hostent *, void *); 88static int hostent_test_getnameinfo_eq(struct hostent *, void *); 89 | 30 31#include <sys/param.h> 32#include <sys/socket.h> 33#include <arpa/inet.h> 34#include <netinet/in.h> 35#include <errno.h> 36#include <netdb.h> 37#include <resolv.h> --- 44 unchanged lines hidden (view full) --- 82static int hostent_read_snapshot_addr(char *, unsigned char *, size_t); 83static int hostent_read_snapshot_func(struct hostent *, char *); 84 85static int hostent_test_correctness(struct hostent *, void *); 86static int hostent_test_gethostbyaddr(struct hostent *, void *); 87static int hostent_test_getaddrinfo_eq(struct hostent *, void *); 88static int hostent_test_getnameinfo_eq(struct hostent *, void *); 89 |
90static void usage(void) __attribute__((__noreturn__)); 91 | |
92IMPLEMENT_TEST_DATA(hostent) 93IMPLEMENT_TEST_FILE_SNAPSHOT(hostent) 94IMPLEMENT_1PASS_TEST(hostent) 95IMPLEMENT_2PASS_TEST(hostent) 96 97static struct hostent * 98__gethostbyname2(const char *name, int af) 99{ --- 58 unchanged lines hidden (view full) --- 158 dest->h_addrtype = src->h_addrtype; 159 dest->h_length = src->h_length; 160 161 if (src->h_aliases != NULL) { 162 aliases_num = 0; 163 for (cp = src->h_aliases; *cp; ++cp) 164 ++aliases_num; 165 | 90IMPLEMENT_TEST_DATA(hostent) 91IMPLEMENT_TEST_FILE_SNAPSHOT(hostent) 92IMPLEMENT_1PASS_TEST(hostent) 93IMPLEMENT_2PASS_TEST(hostent) 94 95static struct hostent * 96__gethostbyname2(const char *name, int af) 97{ --- 58 unchanged lines hidden (view full) --- 156 dest->h_addrtype = src->h_addrtype; 157 dest->h_length = src->h_length; 158 159 if (src->h_aliases != NULL) { 160 aliases_num = 0; 161 for (cp = src->h_aliases; *cp; ++cp) 162 ++aliases_num; 163 |
166 dest->h_aliases = calloc(1, (aliases_num + 1) * 167 sizeof(char *)); | 164 dest->h_aliases = calloc(aliases_num + 1, sizeof(char *)); |
168 ATF_REQUIRE(dest->h_aliases != NULL); 169 170 for (cp = src->h_aliases; *cp; ++cp) { 171 dest->h_aliases[cp - src->h_aliases] = strdup(*cp); 172 ATF_REQUIRE(dest->h_aliases[cp - src->h_aliases] != NULL); 173 } 174 } 175 176 if (src->h_addr_list != NULL) { 177 addrs_num = 0; 178 for (cp = src->h_addr_list; *cp; ++cp) 179 ++addrs_num; 180 | 165 ATF_REQUIRE(dest->h_aliases != NULL); 166 167 for (cp = src->h_aliases; *cp; ++cp) { 168 dest->h_aliases[cp - src->h_aliases] = strdup(*cp); 169 ATF_REQUIRE(dest->h_aliases[cp - src->h_aliases] != NULL); 170 } 171 } 172 173 if (src->h_addr_list != NULL) { 174 addrs_num = 0; 175 for (cp = src->h_addr_list; *cp; ++cp) 176 ++addrs_num; 177 |
181 dest->h_addr_list = calloc(1, (addrs_num + 1) * sizeof(char *)); | 178 dest->h_addr_list = calloc(addrs_num + 1, sizeof(char *)); |
182 ATF_REQUIRE(dest->h_addr_list != NULL); 183 184 for (cp = src->h_addr_list; *cp; ++cp) { 185 offset = cp - src->h_addr_list; 186 dest->h_addr_list[offset] = malloc(src->h_length); 187 ATF_REQUIRE(dest->h_addr_list[offset] != NULL); 188 memcpy(dest->h_addr_list[offset], 189 src->h_addr_list[offset], src->h_length); --- 218 unchanged lines hidden (view full) --- 408{ 409 char **cp; 410 size_t i; 411 int written; 412 413 written = snprintf(buffer, buflen, "%s %d %d", 414 ht->h_name, ht->h_addrtype, ht->h_length); 415 buffer += written; | 179 ATF_REQUIRE(dest->h_addr_list != NULL); 180 181 for (cp = src->h_addr_list; *cp; ++cp) { 182 offset = cp - src->h_addr_list; 183 dest->h_addr_list[offset] = malloc(src->h_length); 184 ATF_REQUIRE(dest->h_addr_list[offset] != NULL); 185 memcpy(dest->h_addr_list[offset], 186 src->h_addr_list[offset], src->h_length); --- 218 unchanged lines hidden (view full) --- 405{ 406 char **cp; 407 size_t i; 408 int written; 409 410 written = snprintf(buffer, buflen, "%s %d %d", 411 ht->h_name, ht->h_addrtype, ht->h_length); 412 buffer += written; |
416 if (written > buflen) | 413 if (written > (int)buflen) |
417 return; 418 buflen -= written; 419 420 if (ht->h_aliases != NULL) { 421 if (*(ht->h_aliases) != NULL) { 422 for (cp = ht->h_aliases; *cp; ++cp) { 423 written = snprintf(buffer, buflen, " %s",*cp); 424 buffer += written; | 414 return; 415 buflen -= written; 416 417 if (ht->h_aliases != NULL) { 418 if (*(ht->h_aliases) != NULL) { 419 for (cp = ht->h_aliases; *cp; ++cp) { 420 written = snprintf(buffer, buflen, " %s",*cp); 421 buffer += written; |
425 if (written > buflen) | 422 if (written > (int)buflen) |
426 return; 427 buflen -= written; 428 429 if (buflen == 0) 430 return; 431 } 432 } else { 433 written = snprintf(buffer, buflen, " noaliases"); 434 buffer += written; | 423 return; 424 buflen -= written; 425 426 if (buflen == 0) 427 return; 428 } 429 } else { 430 written = snprintf(buffer, buflen, " noaliases"); 431 buffer += written; |
435 if (written > buflen) | 432 if (written > (int)buflen) |
436 return; 437 buflen -= written; 438 } 439 } else { 440 written = snprintf(buffer, buflen, " (null)"); 441 buffer += written; | 433 return; 434 buflen -= written; 435 } 436 } else { 437 written = snprintf(buffer, buflen, " (null)"); 438 buffer += written; |
442 if (written > buflen) | 439 if (written > (int)buflen) |
443 return; 444 buflen -= written; 445 } 446 447 written = snprintf(buffer, buflen, " : "); 448 buffer += written; | 440 return; 441 buflen -= written; 442 } 443 444 written = snprintf(buffer, buflen, " : "); 445 buffer += written; |
449 if (written > buflen) | 446 if (written > (int)buflen) |
450 return; 451 buflen -= written; 452 453 if (ht->h_addr_list != NULL) { 454 if (*(ht->h_addr_list) != NULL) { 455 for (cp = ht->h_addr_list; *cp; ++cp) { | 447 return; 448 buflen -= written; 449 450 if (ht->h_addr_list != NULL) { 451 if (*(ht->h_addr_list) != NULL) { 452 for (cp = ht->h_addr_list; *cp; ++cp) { |
456 for (i = 0; i < ht->h_length; ++i ) { 457 written = snprintf(buffer, buflen, 458 i + 1 != ht->h_length ? "%d." : "%d", 459 (unsigned char)(*cp)[i]); 460 buffer += written; 461 if (written > buflen) 462 return; 463 buflen -= written; | 453 for (i = 0; i < (size_t)ht->h_length; ++i) { 454 written = snprintf(buffer, buflen, 455 i + 1 != (size_t)ht->h_length ? 456 "%d." : "%d", 457 (unsigned char)(*cp)[i]); 458 buffer += written; 459 if (written > (int)buflen) 460 return; 461 buflen -= written; |
464 | 462 |
465 if (buflen == 0) 466 return; 467 } | 463 if (buflen == 0) 464 return; 465 } |
468 | 466 |
469 if (*(cp + 1) ) { 470 written = snprintf(buffer, buflen, " "); 471 buffer += written; 472 if (written > buflen) 473 return; 474 buflen -= written; 475 } | 467 if (*(cp + 1)) { 468 written = snprintf(buffer, buflen, 469 " "); 470 buffer += written; 471 if (written > (int)buflen) 472 return; 473 buflen -= written; 474 } |
476 } 477 } else { 478 written = snprintf(buffer, buflen, " noaddrs"); 479 buffer += written; | 475 } 476 } else { 477 written = snprintf(buffer, buflen, " noaddrs"); 478 buffer += written; |
480 if (written > buflen) | 479 if (written > (int)buflen) |
481 return; 482 buflen -= written; 483 } 484 } else { 485 written = snprintf(buffer, buflen, " (null)"); 486 buffer += written; | 480 return; 481 buflen -= written; 482 } 483 } else { 484 written = snprintf(buffer, buflen, " (null)"); 485 buffer += written; |
487 if (written > buflen) | 486 if (written > (int)buflen) |
488 return; 489 buflen -= written; 490 } 491} 492 493static int 494hostent_read_hostlist_func(struct hostent *he, char *line) 495{ --- 175 unchanged lines hidden (view full) --- 671 char buffer[1024]; 672 sdump_hostent(result, buffer, sizeof(buffer)); 673 printf("%s\n", buffer); 674 } else 675 printf("(null)\n"); 676} 677 678static int | 487 return; 488 buflen -= written; 489 } 490} 491 492static int 493hostent_read_hostlist_func(struct hostent *he, char *line) 494{ --- 175 unchanged lines hidden (view full) --- 670 char buffer[1024]; 671 sdump_hostent(result, buffer, sizeof(buffer)); 672 printf("%s\n", buffer); 673 } else 674 printf("(null)\n"); 675} 676 677static int |
679hostent_test_correctness(struct hostent *ht, void *mdata) | 678hostent_test_correctness(struct hostent *ht, void *mdata __unused) |
680{ 681 682#ifdef DEBUG 683 printf("testing correctness with the following data:\n"); 684 dump_hostent(ht); 685#endif 686 687 if (ht == NULL) --- 66 unchanged lines hidden (view full) --- 754 __freehostent(result); 755 } 756 } 757 758 return (0); 759} 760 761static int | 679{ 680 681#ifdef DEBUG 682 printf("testing correctness with the following data:\n"); 683 dump_hostent(ht); 684#endif 685 686 if (ht == NULL) --- 66 unchanged lines hidden (view full) --- 753 __freehostent(result); 754 } 755 } 756 757 return (0); 758} 759 760static int |
762hostent_test_getaddrinfo_eq(struct hostent *he, void *mdata) | 761hostent_test_getaddrinfo_eq(struct hostent *he, void *mdata __unused) |
763{ 764 struct addrinfo *ai, hints; 765 int rv; 766 767 ai = NULL; 768 memset(&hints, 0, sizeof(struct addrinfo)); 769 hints.ai_family = af_type; 770 hints.ai_flags = AI_CANONNAME; --- 22 unchanged lines hidden (view full) --- 793 } 794 795 } 796 797 return (0); 798} 799 800static int | 762{ 763 struct addrinfo *ai, hints; 764 int rv; 765 766 ai = NULL; 767 memset(&hints, 0, sizeof(struct addrinfo)); 768 hints.ai_family = af_type; 769 hints.ai_flags = AI_CANONNAME; --- 22 unchanged lines hidden (view full) --- 792 } 793 794 } 795 796 return (0); 797} 798 799static int |
801hostent_test_getnameinfo_eq(struct hostent *he, void *mdata) | 800hostent_test_getnameinfo_eq(struct hostent *he, void *mdata __unused) |
802{ 803 char **cp; 804 char buffer[NI_MAXHOST]; 805 struct sockaddr_in sin; 806 struct sockaddr_in6 sin6; 807 struct sockaddr *saddr; 808 struct hostent *result; 809 int i, rv; --- 106 unchanged lines hidden (view full) --- 916 "equal for %s\n", he->h_name); 917 return (-1); 918 } 919 } 920 921 return (0); 922} 923 | 801{ 802 char **cp; 803 char buffer[NI_MAXHOST]; 804 struct sockaddr_in sin; 805 struct sockaddr_in6 sin6; 806 struct sockaddr *saddr; 807 struct hostent *result; 808 int i, rv; --- 106 unchanged lines hidden (view full) --- 915 "equal for %s\n", he->h_name); 916 return (-1); 917 } 918 } 919 920 return (0); 921} 922 |
924int 925run_tests(const char *hostlist_file, const char *snapshot_file, int af_type, | 923static int 924run_tests(const char *hostlist_file, const char *snapshot_file, int _af_type, |
926 enum test_methods method, bool use_ipv6_mapping) 927{ 928 struct hostent_test_data td, td_addr, td_snap; 929 res_state statp; 930 int rv = -2; 931 | 925 enum test_methods method, bool use_ipv6_mapping) 926{ 927 struct hostent_test_data td, td_addr, td_snap; 928 res_state statp; 929 int rv = -2; 930 |
932 switch (af_type) { | 931 switch (_af_type) { |
933 case AF_INET: 934 ATF_REQUIRE_FEATURE("inet"); 935 ATF_REQUIRE(!use_ipv6_mapping); 936 break; 937 case AF_INET6: 938 ATF_REQUIRE_FEATURE("inet6"); 939 break; 940 default: | 932 case AF_INET: 933 ATF_REQUIRE_FEATURE("inet"); 934 ATF_REQUIRE(!use_ipv6_mapping); 935 break; 936 case AF_INET6: 937 ATF_REQUIRE_FEATURE("inet6"); 938 break; 939 default: |
941 atf_tc_fail("unhandled address family: %d", af_type); | 940 atf_tc_fail("unhandled address family: %d", _af_type); |
942 break; 943 } 944 945 if (!use_ipnode_functions) { 946 statp = __res_state(); 947 if (statp == NULL || ((statp->options & RES_INIT) == 0 && 948 res_ninit(statp) == -1)) { 949 printf("error: can't init res_state\n"); --- 557 unchanged lines hidden --- | 941 break; 942 } 943 944 if (!use_ipnode_functions) { 945 statp = __res_state(); 946 if (statp == NULL || ((statp->options & RES_INIT) == 0 && 947 res_ninit(statp) == -1)) { 948 printf("error: can't init res_state\n"); --- 557 unchanged lines hidden --- |