Deleted Added
full compact
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 ---