diff options
author | Arjun Shankar <arjun@redhat.com> | 2023-10-02 14:55:27 +0200 |
---|---|---|
committer | Arjun Shankar <arjun@redhat.com> | 2023-10-24 12:31:00 +0200 |
commit | 7f602256ab5b85db1dbfb5f40bd109c4b37b68c8 (patch) | |
tree | 88cf9fb3bc04eae6ae9ca3816fac75d78f691740 /posix | |
parent | 1d74d2f042a405982661267394e16126db70dc5f (diff) | |
download | glibc-7f602256ab5b85db1dbfb5f40bd109c4b37b68c8.zip glibc-7f602256ab5b85db1dbfb5f40bd109c4b37b68c8.tar.gz glibc-7f602256ab5b85db1dbfb5f40bd109c4b37b68c8.tar.bz2 |
Move getaddrinfo from 'posix' into 'nss'
getaddrinfo is an entry point for nss functionality. This commit moves
it from 'sysdeps/posix' to 'nss', gets rid of the stub in 'posix', and
moves all associated tests as well.
Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org>
Diffstat (limited to 'posix')
-rw-r--r-- | posix/Makefile | 10 | ||||
-rw-r--r-- | posix/Versions | 2 | ||||
-rw-r--r-- | posix/getaddrinfo.c | 38 | ||||
-rw-r--r-- | posix/tst-getaddrinfo.c | 68 | ||||
-rw-r--r-- | posix/tst-getaddrinfo2.c | 78 | ||||
-rw-r--r-- | posix/tst-getaddrinfo3.c | 151 | ||||
-rw-r--r-- | posix/tst-getaddrinfo4.c | 67 | ||||
-rw-r--r-- | posix/tst-getaddrinfo5.c | 69 | ||||
-rw-r--r-- | posix/tst-rfc3484-2.c | 189 | ||||
-rw-r--r-- | posix/tst-rfc3484-3.c | 161 | ||||
-rw-r--r-- | posix/tst-rfc3484.c | 153 |
11 files changed, 1 insertions, 985 deletions
diff --git a/posix/Makefile b/posix/Makefile index be7d319..3ab124d 100644 --- a/posix/Makefile +++ b/posix/Makefile @@ -88,7 +88,6 @@ routines := \ fpathconf \ gai_strerror \ get_child_max \ - getaddrinfo \ getegid \ geteuid \ getgid \ @@ -287,9 +286,6 @@ tests := \ tst-fnmatch7 \ tst-fork \ tst-gai_strerror \ - tst-getaddrinfo \ - tst-getaddrinfo2 \ - tst-getaddrinfo3 \ tst-getopt_long1 \ tst-glob-tilde \ tst-glob_symlinks \ @@ -351,9 +347,6 @@ tests-internal := \ bug-regex5 \ bug-regex20 \ bug-regex33 \ - tst-rfc3484 \ - tst-rfc3484-2 \ - tst-rfc3484-3 \ # tests-internal tests-container := \ @@ -368,8 +361,6 @@ tests-time64 := \ # tests-time64 xtests := \ - tst-getaddrinfo4 \ - tst-getaddrinfo5 \ tst-sched_rr_get_interval \ # xtests @@ -556,7 +547,6 @@ $(objpfx)config-name.h: $(..)scripts/config-uname.sh $(common-objpfx)config.make '$(config-machine)-$(config-vendor)' > $@.new mv -f $@.new $@ -CFLAGS-getaddrinfo.c += -fexceptions CFLAGS-pause.c += -fexceptions -fasynchronous-unwind-tables CFLAGS-pread.c += -fexceptions -fasynchronous-unwind-tables CFLAGS-pread64.c += -fexceptions -fasynchronous-unwind-tables $(config-cflags-wno-ignored-attributes) diff --git a/posix/Versions b/posix/Versions index 2eedbc3..b24c7c8 100644 --- a/posix/Versions +++ b/posix/Versions @@ -34,7 +34,7 @@ libc { fnmatch; fork; fpathconf; freeaddrinfo; # g* - getaddrinfo; getdtablesize; getegid; geteuid; getgid; getopt; getopt_long; + getdtablesize; getegid; geteuid; getgid; getopt; getopt_long; getopt_long_only; getpgid; getpgrp; getpid; getppid; getsid; getuid; glob; glob_pattern_p; globfree; group_member; diff --git a/posix/getaddrinfo.c b/posix/getaddrinfo.c deleted file mode 100644 index 0e36a45..0000000 --- a/posix/getaddrinfo.c +++ /dev/null @@ -1,38 +0,0 @@ -/* Stub version of getaddrinfo function. - Copyright (C) 1996-2023 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - <https://www.gnu.org/licenses/>. */ - -#include <errno.h> -#include <netdb.h> - -int -getaddrinfo (const char *name, const char *service, const struct addrinfo *req, - struct addrinfo **pai) -{ - __set_errno (ENOSYS); - return EAI_SYSTEM; -} -stub_warning (getaddrinfo) -libc_hidden_def (getaddrinfo) - -void -freeaddrinfo (struct addrinfo *ai) -{ - /* Nothing. */ -} -stub_warning (freeaddrinfo) -libc_hidden_def (freeaddrinfo) diff --git a/posix/tst-getaddrinfo.c b/posix/tst-getaddrinfo.c deleted file mode 100644 index eff92a7..0000000 --- a/posix/tst-getaddrinfo.c +++ /dev/null @@ -1,68 +0,0 @@ -/* Copyright (C) 1999-2023 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - <https://www.gnu.org/licenses/>. */ - -#include <stdio.h> -#include <string.h> -#include <sys/types.h> -#include <sys/socket.h> -#include <netinet/in.h> -#include <netdb.h> - -static int -do_test (void) -{ - const int family[2] = { AF_INET, AF_INET6 }; - int result = 0; - int gaierr; - size_t index; - struct addrinfo hints, *ai, *aitop; - - for (index = 0; index < sizeof (family) / sizeof (family[0]); ++index) - { - memset (&hints, '\0', sizeof (hints)); - hints.ai_family = family[index]; - hints.ai_socktype = SOCK_STREAM; - - gaierr = getaddrinfo (NULL, "54321", &hints, &aitop); - if (gaierr != 0) - { - gai_strerror (gaierr); - result = 1; - } - else - { - for (ai = aitop; ai != NULL; ai = ai->ai_next) - { - printf ("Should return family: %d. Returned: %d\n", - family[index], ai->ai_family); - result |= family[index] != ai->ai_family; - } - - while (aitop != NULL) - { - ai = aitop; - aitop = aitop->ai_next; - freeaddrinfo (ai); - } - } - } - - return result; -} -#define TEST_FUNCTION do_test () - -#include "../test-skeleton.c" diff --git a/posix/tst-getaddrinfo2.c b/posix/tst-getaddrinfo2.c deleted file mode 100644 index d8be4a8..0000000 --- a/posix/tst-getaddrinfo2.c +++ /dev/null @@ -1,78 +0,0 @@ -/* Test by David L Stevens <dlstevens@us.ibm.com> [BZ #358] */ -#include <errno.h> -#include <netdb.h> -#include <unistd.h> -#include <stdio.h> -#include <stdlib.h> -#include <string.h> -#include <sys/socket.h> - -static int -do_test (void) -{ - const char portstr[] = "583"; - int port = atoi (portstr); - struct addrinfo hints, *aires, *pai; - int rv; - int res = 1; - - memset (&hints, 0, sizeof (hints)); - hints.ai_family = AF_INET; - rv = getaddrinfo (NULL, portstr, &hints, &aires); - if (rv == 0) - { - struct sockaddr_in *psin = 0; - int got_tcp, got_udp; - int err = 0; - - got_tcp = got_udp = 0; - for (pai = aires; pai; pai = pai->ai_next) - { - printf ("ai_family=%d, ai_addrlen=%d, ai_socktype=%d", - (int) pai->ai_family, (int) pai->ai_addrlen, - (int) pai->ai_socktype); - if (pai->ai_family == AF_INET) - printf (", port=%d", - ntohs (((struct sockaddr_in *) pai->ai_addr)->sin_port)); - puts (""); - - err |= pai->ai_family != AF_INET; - err |= pai->ai_addrlen != sizeof (struct sockaddr_in); - err |= pai->ai_addr == 0; - if (pai->ai_family == AF_INET) - err |= - ntohs (((struct sockaddr_in *) pai->ai_addr)->sin_port) != port; - got_tcp |= pai->ai_socktype == SOCK_STREAM; - got_udp |= pai->ai_socktype == SOCK_DGRAM; - if (err) - break; - } - if (err) - { - printf ("FAIL getaddrinfo IPv4 socktype 0,513: " - "fam %d alen %d addr %p addr/fam %d " - "addr/port %d H[%d]\n", - pai->ai_family, pai->ai_addrlen, psin, - psin ? psin->sin_family : 0, - psin ? psin->sin_port : 0, - psin ? htons (psin->sin_port) : 0); - } - else if (got_tcp && got_udp) - { - printf ("SUCCESS getaddrinfo IPv4 socktype 0,513\n"); - res = 0; - } - else - printf ("FAIL getaddrinfo IPv4 socktype 0,513 TCP %d" - " UDP %d\n", got_tcp, got_udp); - freeaddrinfo (aires); - } - else - printf ("FAIL getaddrinfo IPv4 socktype 0,513 returns %d " - "(\"%s\")\n", rv, gai_strerror (rv)); - - return res; -} - -#define TEST_FUNCTION do_test () -#include "../test-skeleton.c" diff --git a/posix/tst-getaddrinfo3.c b/posix/tst-getaddrinfo3.c deleted file mode 100644 index 5077f31..0000000 --- a/posix/tst-getaddrinfo3.c +++ /dev/null @@ -1,151 +0,0 @@ -#include <mcheck.h> -#include <netdb.h> -#include <stdio.h> -#include <string.h> -#include <arpa/inet.h> -#include <arpa/nameser.h> - - -static int -do_test (void) -{ - mtrace (); - - int result = 0; - struct addrinfo hints; - struct addrinfo *ai_res; - int s; - -#define T(no, fail, addr, fam, coraddr) \ - s = getaddrinfo (addr, NULL, &hints, &ai_res); \ - if (s != 0) \ - { \ - if (s != fail) \ - { \ - printf ("getaddrinfo test %d failed: %s\n", no, gai_strerror (s)); \ - result = 1; \ - } \ - ai_res = NULL; \ - } \ - else if (fail) \ - { \ - printf ("getaddrinfo test %d should have failed but did not\n", no); \ - result = 1; \ - } \ - else if (ai_res->ai_family != fam) \ - { \ - printf ("\ -getaddrinfo test %d return address of family %d, expected %d\n", \ - no, ai_res->ai_family, fam); \ - result = 1; \ - } \ - else if (fam == AF_INET) \ - { \ - if (ai_res->ai_addrlen != sizeof (struct sockaddr_in)) \ - { \ - printf ("getaddrinfo test %d: address size %zu, expected %zu\n", \ - no, (size_t) ai_res->ai_addrlen, \ - sizeof (struct sockaddr_in)); \ - result = 1; \ - } \ - else if (strcmp (coraddr, \ - inet_ntoa (((struct sockaddr_in *) ai_res->ai_addr)->sin_addr))\ - != 0) \ - { \ - printf ("getaddrinfo test %d: got value %s, expected %s\n", \ - no, \ - inet_ntoa (((struct sockaddr_in *) ai_res->ai_addr)->sin_addr), \ - coraddr); \ - result = 1; \ - } \ - } \ - else \ - { \ - char buf[100]; \ - \ - if (ai_res->ai_addrlen != sizeof (struct sockaddr_in6)) \ - { \ - printf ("getaddrinfo test %d: address size %zu, expected %zu\n", \ - no, (size_t) ai_res->ai_addrlen, \ - sizeof (struct sockaddr_in6)); \ - result = 1; \ - } \ - else if (strcmp (coraddr, \ - inet_ntop (AF_INET6, \ - &((struct sockaddr_in6 *) ai_res->ai_addr)->sin6_addr,\ - buf, sizeof (buf))) \ - != 0) \ - { \ - printf ("getaddrinfo test %d: got value %s, expected %s\n", \ - no, \ - inet_ntop (AF_INET6, \ - & ((struct sockaddr_in6 *) ai_res->ai_addr)->sin6_addr, \ - buf, sizeof (buf)), \ - coraddr); \ - result = 1; \ - } \ - } \ - if (ai_res != NULL && ai_res->ai_next != NULL) \ - { \ - puts ("expected only one result"); \ - result = 1; \ - } \ - freeaddrinfo (ai_res) - - - memset (&hints, '\0', sizeof (hints)); - hints.ai_family = AF_UNSPEC; - hints.ai_socktype = SOCK_STREAM; - T (1, 0, "127.0.0.1", AF_INET, "127.0.0.1"); - - memset (&hints, '\0', sizeof (hints)); - hints.ai_family = AF_INET; - hints.ai_socktype = SOCK_STREAM; - T (2, 0, "127.0.0.1", AF_INET, "127.0.0.1"); - - memset (&hints, '\0', sizeof (hints)); - hints.ai_family = AF_INET6; - hints.ai_socktype = SOCK_STREAM; - hints.ai_flags = AI_V4MAPPED; - T (3, 0, "127.0.0.1", AF_INET6, "::ffff:127.0.0.1"); - - memset (&hints, '\0', sizeof (hints)); - hints.ai_family = AF_INET6; - hints.ai_socktype = SOCK_STREAM; - T (4, EAI_ADDRFAMILY, "127.0.0.1", AF_INET6, ""); - - memset (&hints, '\0', sizeof (hints)); - hints.ai_family = AF_UNSPEC; - hints.ai_socktype = SOCK_STREAM; - T (5, 0, "::1", AF_INET6, "::1"); - - memset (&hints, '\0', sizeof (hints)); - hints.ai_family = AF_INET; - hints.ai_socktype = SOCK_STREAM; - T (6, EAI_ADDRFAMILY, "::1", AF_INET6, ""); - - memset (&hints, '\0', sizeof (hints)); - hints.ai_family = AF_INET6; - hints.ai_socktype = SOCK_STREAM; - T (7, 0, "::1", AF_INET6, "::1"); - - memset (&hints, '\0', sizeof (hints)); - hints.ai_family = AF_UNSPEC; - hints.ai_socktype = SOCK_STREAM; - T (8, 0, "::ffff:127.0.0.1", AF_INET6, "::ffff:127.0.0.1"); - - memset (&hints, '\0', sizeof (hints)); - hints.ai_family = AF_INET; - hints.ai_socktype = SOCK_STREAM; - T (9, 0, "::ffff:127.0.0.1", AF_INET, "127.0.0.1"); - - memset (&hints, '\0', sizeof (hints)); - hints.ai_family = AF_INET6; - hints.ai_socktype = SOCK_STREAM; - T (10, 0, "::ffff:127.0.0.1", AF_INET6, "::ffff:127.0.0.1"); - - return result; -} - -#define TEST_FUNCTION do_test () -#include "../test-skeleton.c" diff --git a/posix/tst-getaddrinfo4.c b/posix/tst-getaddrinfo4.c deleted file mode 100644 index a5f1f62..0000000 --- a/posix/tst-getaddrinfo4.c +++ /dev/null @@ -1,67 +0,0 @@ -/* Test getaddrinfo return value, [BZ #15339]. - Copyright (C) 2013-2023 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - <https://www.gnu.org/licenses/>. */ - -#include <string.h> -#include <stdio.h> -#include <errno.h> -#include <netdb.h> - -static int -try (const char *service, int family, int flags) -{ - struct addrinfo hints, *h, *ai; - int res; - - memset (&hints, 0, sizeof hints); - hints.ai_family = family; - hints.ai_flags = flags; - - errno = 0; - h = (family || flags) ? &hints : NULL; - res = getaddrinfo ("example.net", service, h, &ai); - switch (res) - { - case 0: - case EAI_AGAIN: - case EAI_NONAME: - printf ("SUCCESS getaddrinfo(service=%s, family=%d, flags=%d): %s: %m\n", - service ?: "NULL", family, flags, gai_strerror (res)); - return 0; - } - printf ("FAIL getaddrinfo(service=%s, family=%d, flags=%d): %s: %m\n", - service ?: "NULL", family, flags, gai_strerror (res)); - return 1; -} - -static int -do_test (void) -{ - int err = 0; - err |= try (NULL, 0, 0); - err |= try (NULL, AF_UNSPEC, AI_ADDRCONFIG); - err |= try (NULL, AF_INET, 0); - err |= try (NULL, AF_INET6, 0); - err |= try ("http", 0, 0); - err |= try ("http", AF_UNSPEC, AI_ADDRCONFIG); - err |= try ("http", AF_INET, 0); - err |= try ("http", AF_INET6, 0); - return err; -} - -#define TEST_FUNCTION do_test () -#include "../test-skeleton.c" diff --git a/posix/tst-getaddrinfo5.c b/posix/tst-getaddrinfo5.c deleted file mode 100644 index 26a1643..0000000 --- a/posix/tst-getaddrinfo5.c +++ /dev/null @@ -1,69 +0,0 @@ -/* Test host lookup with double dots at the end, [BZ #16469]. - Copyright (C) 2014-2023 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - <https://www.gnu.org/licenses/>. */ - -#include <sys/types.h> -#include <sys/socket.h> -#include <netdb.h> -#include <stdio.h> -#include <string.h> - -static int -test (void) -{ - static char host1[] = "localhost.."; - static char host2[] = "www.gnu.org.."; - static char *hosts[] = { host1, host2 }; - int i; - int pass = 0; - - for (i = 0; i < sizeof (hosts) / sizeof (*hosts); i++) - { - char *host = hosts[i]; - size_t len = strlen (host); - struct addrinfo *ai; - - /* If the name doesn't resolve with a single dot at the - end, skip it. */ - host[len-1] = 0; - if (getaddrinfo (host, NULL, NULL, &ai) != 0) - { - printf ("resolving \"%s\" failed, skipping this hostname\n", host); - continue; - } - printf ("resolving \"%s\" worked, proceeding to test\n", host); - freeaddrinfo (ai); - - /* If it resolved with a single dot, check that it doesn't with - a second trailing dot. */ - host[len-1] = '.'; - if (getaddrinfo (host, NULL, NULL, &ai) == 0) - { - printf ("resolving \"%s\" worked, test failed\n", host); - return 1; - } - printf ("resolving \"%s\" failed, test passed\n", host); - pass = 1; - } - - /* We want at least one successful name resolution for the test to - succeed. */ - return pass ? 0 : 2; -} - -#define TEST_FUNCTION test () -#include "../test-skeleton.c" diff --git a/posix/tst-rfc3484-2.c b/posix/tst-rfc3484-2.c deleted file mode 100644 index ce8ccd5..0000000 --- a/posix/tst-rfc3484-2.c +++ /dev/null @@ -1,189 +0,0 @@ -#include <stdbool.h> -#include <stdio.h> -#include <ifaddrs.h> -#include <stdint.h> - -/* Internal definitions used in the libc code. */ -#define __getservbyname_r getservbyname_r -#define __socket socket -#define __getsockname getsockname -#define __inet_aton inet_aton -#define __gethostbyaddr_r gethostbyaddr_r -#define __gethostbyname2_r gethostbyname2_r -#define __qsort_r qsort_r -#define __stat64 stat64 - -void -attribute_hidden -__check_pf (bool *p1, bool *p2, struct in6addrinfo **in6ai, size_t *in6ailen) -{ - *p1 = *p2 = true; - *in6ai = NULL; - *in6ailen = 0; -} - -void -attribute_hidden -__free_in6ai (struct in6addrinfo *ai) -{ -} - -void -attribute_hidden -__check_native (uint32_t a1_index, int *a1_native, - uint32_t a2_index, int *a2_native) -{ -} - -int -attribute_hidden -__idna_to_ascii_lz (const char *input, char **output, int flags) -{ - return 0; -} - -int -attribute_hidden -__idna_to_unicode_lzlz (const char *input, char **output, int flags) -{ - *output = NULL; - return 0; -} - -void -attribute_hidden -_res_hconf_init (void) -{ -} - -#undef USE_NSCD -#include "../sysdeps/posix/getaddrinfo.c" - -nss_action_list __nss_hosts_database attribute_hidden; - -/* This is the beginning of the real test code. The above defines - (among other things) the function rfc3484_sort. */ - - -#if __BYTE_ORDER == __BIG_ENDIAN -# define h(n) n -#else -# define h(n) __bswap_constant_32 (n) -#endif - - -ssize_t -__getline (char **lineptr, size_t *n, FILE *s) -{ - *lineptr = NULL; - *n = 0; - return 0; -} - - -static int -do_test (void) -{ - labels = default_labels; - precedence = default_precedence; - scopes = default_scopes; - - struct sockaddr_in so1; - so1.sin_family = AF_INET; - so1.sin_addr.s_addr = h (0xc0a85f19); - /* Clear the rest of the structure to avoid warnings. */ - memset (so1.sin_zero, '\0', sizeof (so1.sin_zero)); - - struct sockaddr_in sa1; - sa1.sin_family = AF_INET; - sa1.sin_addr.s_addr = h (0xe0a85f19); - - struct addrinfo ai1; - ai1.ai_family = AF_INET; - ai1.ai_addr = (struct sockaddr *) &sa1; - - struct sockaddr_in6 so2; - so2.sin6_family = AF_INET6; - so2.sin6_addr.s6_addr32[0] = h (0xfec01234); - so2.sin6_addr.s6_addr32[1] = 1; - so2.sin6_addr.s6_addr32[2] = 1; - so2.sin6_addr.s6_addr32[3] = 1; - - struct sockaddr_in6 sa2; - sa2.sin6_family = AF_INET6; - sa2.sin6_addr.s6_addr32[0] = h (0x07d10001); - sa2.sin6_addr.s6_addr32[1] = 1; - sa2.sin6_addr.s6_addr32[2] = 1; - sa2.sin6_addr.s6_addr32[3] = 1; - - struct addrinfo ai2; - ai2.ai_family = AF_INET6; - ai2.ai_addr = (struct sockaddr *) &sa2; - - - struct sort_result results[2]; - size_t order[2]; - - results[0].dest_addr = &ai1; - results[0].got_source_addr = true; - results[0].source_addr_len = sizeof (so1); - results[0].source_addr_flags = 0; - results[0].prefixlen = 16; - results[0].index = 0; - memcpy (&results[0].source_addr, &so1, sizeof (so1)); - order[0] = 0; - - results[1].dest_addr = &ai2; - results[1].got_source_addr = true; - results[1].source_addr_len = sizeof (so2); - results[1].source_addr_flags = 0; - results[1].prefixlen = 16; - results[1].index = 0; - memcpy (&results[1].source_addr, &so2, sizeof (so2)); - order[1] = 1; - - - struct sort_result_combo combo = { .results = results, .nresults = 2 }; - qsort_r (order, 2, sizeof (order[0]), rfc3484_sort, &combo); - - int result = 0; - if (results[order[0]].dest_addr->ai_family == AF_INET6) - { - puts ("wrong order in first test"); - result |= 1; - } - - - /* And again, this time with the reverse starting order. */ - results[1].dest_addr = &ai1; - results[1].got_source_addr = true; - results[1].source_addr_len = sizeof (so1); - results[1].source_addr_flags = 0; - results[1].prefixlen = 16; - results[1].index = 0; - memcpy (&results[1].source_addr, &so1, sizeof (so1)); - order[1] = 1; - - results[0].dest_addr = &ai2; - results[0].got_source_addr = true; - results[0].source_addr_len = sizeof (so2); - results[0].source_addr_flags = 0; - results[0].prefixlen = 16; - results[0].index = 0; - memcpy (&results[0].source_addr, &so2, sizeof (so2)); - order[0] = 0; - - - qsort_r (order, 2, sizeof (order[0]), rfc3484_sort, &combo); - - if (results[order[0]].dest_addr->ai_family == AF_INET6) - { - puts ("wrong order in second test"); - result |= 1; - } - - return result; -} - -#define TEST_FUNCTION do_test () -#include "../test-skeleton.c" diff --git a/posix/tst-rfc3484-3.c b/posix/tst-rfc3484-3.c deleted file mode 100644 index ecb1639..0000000 --- a/posix/tst-rfc3484-3.c +++ /dev/null @@ -1,161 +0,0 @@ -#include <stdbool.h> -#include <stdio.h> -#include <ifaddrs.h> -#include <stdint.h> - -/* Internal definitions used in the libc code. */ -#define __getservbyname_r getservbyname_r -#define __socket socket -#define __getsockname getsockname -#define __inet_aton inet_aton -#define __gethostbyaddr_r gethostbyaddr_r -#define __gethostbyname2_r gethostbyname2_r -#define __qsort_r qsort_r -#define __stat64 stat64 - -void -attribute_hidden -__check_pf (bool *p1, bool *p2, struct in6addrinfo **in6ai, size_t *in6ailen) -{ - *p1 = *p2 = true; - *in6ai = NULL; - *in6ailen = 0; -} - -void -attribute_hidden -__free_in6ai (struct in6addrinfo *ai) -{ -} - -void -attribute_hidden -__check_native (uint32_t a1_index, int *a1_native, - uint32_t a2_index, int *a2_native) -{ -} - -int -attribute_hidden -__idna_to_ascii_lz (const char *input, char **output, int flags) -{ - return 0; -} - -int -attribute_hidden -__idna_to_unicode_lzlz (const char *input, char **output, int flags) -{ - *output = NULL; - return 0; -} - -void -attribute_hidden -_res_hconf_init (void) -{ -} - -#undef USE_NSCD -#include "../sysdeps/posix/getaddrinfo.c" - -nss_action_list __nss_hosts_database attribute_hidden; - -/* This is the beginning of the real test code. The above defines - (among other things) the function rfc3484_sort. */ - - -#if __BYTE_ORDER == __BIG_ENDIAN -# define h(n) n -#else -# define h(n) __bswap_constant_32 (n) -#endif - -struct sockaddr_in addrs[] = -{ - { .sin_family = AF_INET, .sin_addr = { h (0xa0a86d1d) } }, - { .sin_family = AF_INET, .sin_addr = { h (0xa0a85d03) } }, - { .sin_family = AF_INET, .sin_addr = { h (0xa0a82c3d) } }, - { .sin_family = AF_INET, .sin_addr = { h (0xa0a86002) } }, - { .sin_family = AF_INET, .sin_addr = { h (0xa0a802f3) } }, - { .sin_family = AF_INET, .sin_addr = { h (0xa0a80810) } }, - { .sin_family = AF_INET, .sin_addr = { h (0xa0a85e02) } }, - { .sin_family = AF_INET, .sin_addr = { h (0xac162311) } }, - { .sin_family = AF_INET, .sin_addr = { h (0x0a324572) } } -}; -#define naddrs (sizeof (addrs) / sizeof (addrs[0])) -static struct addrinfo ais[naddrs]; -static struct sort_result results[naddrs]; -static size_t order[naddrs]; - -static const int expected[naddrs] = - { - 8, 0, 1, 2, 3, 4, 5, 6, 7 - }; - -static const struct scopeentry new_scopes[] = - { - { { { 169, 254, 0, 0 } }, h (0xffff0000), 2 }, - { { { 127, 0, 0, 0 } }, h (0xff000000), 2 }, - { { { 10, 0, 0, 0 } }, h (0xff000000), 5 }, - { { { 192, 168, 0, 0 } }, h(0xffff0000), 5 }, - { { { 0, 0, 0, 0 } }, h (0x00000000), 14 } - }; - - -ssize_t -__getline (char **lineptr, size_t *n, FILE *s) -{ - *lineptr = NULL; - *n = 0; - return 0; -} - - -static int -do_test (void) -{ - labels = default_labels; - precedence = default_precedence; - scopes= new_scopes; - - struct sockaddr_in so; - so.sin_family = AF_INET; - so.sin_addr.s_addr = h (0x0aa85f19); - /* Clear the rest of the structure to avoid warnings. */ - memset (so.sin_zero, '\0', sizeof (so.sin_zero)); - - for (int i = 0; i < naddrs; ++i) - { - ais[i].ai_family = AF_INET; - ais[i].ai_addr = (struct sockaddr *) &addrs[i]; - results[i].dest_addr = &ais[i]; - results[i].got_source_addr = true; - memcpy(&results[i].source_addr, &so, sizeof (so)); - results[i].source_addr_len = sizeof (so); - results[i].source_addr_flags = 0; - results[i].prefixlen = 8; - results[i].index = 0; - - order[i] = i; - } - - struct sort_result_combo combo = { .results = results, .nresults = naddrs }; - qsort_r (order, naddrs, sizeof (order[0]), rfc3484_sort, &combo); - - int result = 0; - for (int i = 0; i < naddrs; ++i) - { - struct in_addr addr = ((struct sockaddr_in *) (results[order[i]].dest_addr->ai_addr))->sin_addr; - - int here = memcmp (&addr, &addrs[expected[i]].sin_addr, - sizeof (struct in_addr)); - printf ("[%d] = %s: %s\n", i, inet_ntoa (addr), here ? "FAIL" : "OK"); - result |= here; - } - - return result; -} - -#define TEST_FUNCTION do_test () -#include "../test-skeleton.c" diff --git a/posix/tst-rfc3484.c b/posix/tst-rfc3484.c deleted file mode 100644 index 3b2052e..0000000 --- a/posix/tst-rfc3484.c +++ /dev/null @@ -1,153 +0,0 @@ -#include <stdbool.h> -#include <stdio.h> -#include <ifaddrs.h> -#include <stdint.h> - -/* Internal definitions used in the libc code. */ -#define __getservbyname_r getservbyname_r -#define __socket socket -#define __getsockname getsockname -#define __inet_aton inet_aton -#define __gethostbyaddr_r gethostbyaddr_r -#define __gethostbyname2_r gethostbyname2_r -#define __qsort_r qsort_r -#define __stat64 stat64 - -void -attribute_hidden -__check_pf (bool *p1, bool *p2, struct in6addrinfo **in6ai, size_t *in6ailen) -{ - *p1 = *p2 = true; - *in6ai = NULL; - *in6ailen = 0; -} - -void -attribute_hidden -__free_in6ai (struct in6addrinfo *ai) -{ -} - -void -attribute_hidden -__check_native (uint32_t a1_index, int *a1_native, - uint32_t a2_index, int *a2_native) -{ -} - -int -attribute_hidden -__idna_to_ascii_lz (const char *input, char **output, int flags) -{ - return 0; -} - -int -attribute_hidden -__idna_to_unicode_lzlz (const char *input, char **output, int flags) -{ - *output = NULL; - return 0; -} - -void -attribute_hidden -_res_hconf_init (void) -{ -} - -#undef USE_NSCD -#include "../sysdeps/posix/getaddrinfo.c" - -nss_action_list __nss_hosts_database attribute_hidden; - -/* This is the beginning of the real test code. The above defines - (among other things) the function rfc3484_sort. */ - - -#if __BYTE_ORDER == __BIG_ENDIAN -# define h(n) n -#else -# define h(n) __bswap_constant_32 (n) -#endif - -struct sockaddr_in addrs[] = -{ - { .sin_family = AF_INET, .sin_addr = { h (0x0aa85f19) } }, - { .sin_family = AF_INET, .sin_addr = { h (0xac105f19) } }, - { .sin_family = AF_INET, .sin_addr = { h (0xc0000219) } }, - { .sin_family = AF_INET, .sin_addr = { h (0xc0a86d1d) } }, - { .sin_family = AF_INET, .sin_addr = { h (0xc0a85d03) } }, - { .sin_family = AF_INET, .sin_addr = { h (0xc0a82c3d) } }, - { .sin_family = AF_INET, .sin_addr = { h (0xc0a86002) } }, - { .sin_family = AF_INET, .sin_addr = { h (0xc0a802f3) } }, - { .sin_family = AF_INET, .sin_addr = { h (0xc0a80810) } }, - { .sin_family = AF_INET, .sin_addr = { h (0xc0a85e02) } } -}; -#define naddrs (sizeof (addrs) / sizeof (addrs[0])) -static struct addrinfo ais[naddrs]; -static struct sort_result results[naddrs]; -static size_t order[naddrs]; - -static int expected[naddrs] = - { - 9, 4, 3, 6, 5, 7, 8, 2, 0, 1 - }; - - -ssize_t -__getline (char **lineptr, size_t *n, FILE *s) -{ - *lineptr = NULL; - *n = 0; - return 0; -} - - -static int -do_test (void) -{ - labels = default_labels; - precedence = default_precedence; - scopes= default_scopes; - - struct sockaddr_in so; - so.sin_family = AF_INET; - so.sin_addr.s_addr = h (0xc0a85f19); - /* Clear the rest of the structure to avoid warnings. */ - memset (so.sin_zero, '\0', sizeof (so.sin_zero)); - - for (int i = 0; i < naddrs; ++i) - { - ais[i].ai_family = AF_INET; - ais[i].ai_addr = (struct sockaddr *) &addrs[i]; - results[i].dest_addr = &ais[i]; - results[i].got_source_addr = true; - memcpy(&results[i].source_addr, &so, sizeof (so)); - results[i].source_addr_len = sizeof (so); - results[i].source_addr_flags = 0; - results[i].prefixlen = 8; - results[i].index = 0; - - order[i] = i; - } - - struct sort_result_combo combo = { .results = results, .nresults = naddrs }; - qsort_r (order, naddrs, sizeof (order[0]), rfc3484_sort, &combo); - - int result = 0; - for (int i = 0; i < naddrs; ++i) - { - struct in_addr addr = ((struct sockaddr_in *) (results[order[i]].dest_addr->ai_addr))->sin_addr; - - int here = memcmp (&addr, &addrs[expected[i]].sin_addr, - sizeof (struct in_addr)); - printf ("[%d] = %s: %s\n", i, inet_ntoa (addr), here ? "FAIL" : "OK"); - result |= here; - } - - return result; -} - -#define TEST_FUNCTION do_test () -#include "../test-skeleton.c" |