]>
Commit | Line | Data |
---|---|---|
108bc404 | 1 | /* Test name resolution behavior with trailing characters. |
6d7e8eda | 2 | Copyright (C) 2019-2023 Free Software Foundation, Inc. |
108bc404 FW |
3 | This file is part of the GNU C Library. |
4 | ||
5 | The GNU C Library is free software; you can redistribute it and/or | |
6 | modify it under the terms of the GNU Lesser General Public | |
7 | License as published by the Free Software Foundation; either | |
8 | version 2.1 of the License, or (at your option) any later version. | |
9 | ||
10 | The GNU C Library is distributed in the hope that it will be useful, | |
11 | but WITHOUT ANY WARRANTY; without even the implied warranty of | |
12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |
13 | Lesser General Public License for more details. | |
14 | ||
15 | You should have received a copy of the GNU Lesser General Public | |
16 | License along with the GNU C Library; if not, see | |
5a82c748 | 17 | <https://www.gnu.org/licenses/>. */ |
108bc404 FW |
18 | |
19 | #include <array_length.h> | |
20 | #include <netdb.h> | |
21 | #include <support/check.h> | |
22 | #include <support/check_nss.h> | |
23 | #include <support/resolv_test.h> | |
24 | #include <support/support.h> | |
25 | ||
26 | static void | |
27 | response (const struct resolv_response_context *ctx, | |
28 | struct resolv_response_builder *b, | |
29 | const char *qname, uint16_t qclass, uint16_t qtype) | |
30 | { | |
31 | /* The tests are not supposed send any DNS queries. */ | |
32 | FAIL_EXIT1 ("unexpected DNS query for %s/%d/%d", qname, qclass, qtype); | |
33 | } | |
34 | ||
35 | static int | |
36 | do_test (void) | |
37 | { | |
38 | struct resolv_test *aux = resolv_test_start | |
39 | ((struct resolv_redirect_config) | |
40 | { | |
41 | .response_callback = response, | |
42 | }); | |
43 | ||
44 | static const char *const queries[] = | |
45 | { | |
46 | "192.0.2.1 ", | |
47 | "192.0.2.2\t", | |
48 | "192.0.2.3\n", | |
49 | "192.0.2.4 X", | |
50 | "192.0.2.5\tY", | |
51 | "192.0.2.6\nZ", | |
52 | "192.0.2. ", | |
53 | "192.0.2.\t", | |
54 | "192.0.2.\n", | |
55 | "192.0.2. X", | |
56 | "192.0.2.\tY", | |
57 | "192.0.2.\nZ", | |
58 | "2001:db8::1 ", | |
59 | "2001:db8::2\t", | |
60 | "2001:db8::3\n", | |
61 | "2001:db8::4 X", | |
62 | "2001:db8::5\tY", | |
63 | "2001:db8::6\nZ", | |
64 | }; | |
65 | for (size_t query_idx = 0; query_idx < array_length (queries); ++query_idx) | |
66 | { | |
67 | const char *query = queries[query_idx]; | |
68 | struct hostent storage; | |
69 | char buf[4096]; | |
70 | struct hostent *e; | |
71 | ||
72 | h_errno = 0; | |
73 | TEST_VERIFY (gethostbyname (query) == NULL); | |
74 | TEST_COMPARE (h_errno, HOST_NOT_FOUND); | |
75 | ||
76 | h_errno = 0; | |
77 | e = NULL; | |
78 | TEST_COMPARE (gethostbyname_r (query, &storage, buf, sizeof (buf), | |
79 | &e, &h_errno), 0); | |
80 | TEST_VERIFY (e == NULL); | |
81 | TEST_COMPARE (h_errno, HOST_NOT_FOUND); | |
82 | ||
83 | h_errno = 0; | |
84 | TEST_VERIFY (gethostbyname2 (query, AF_INET) == NULL); | |
85 | TEST_COMPARE (h_errno, HOST_NOT_FOUND); | |
86 | ||
87 | h_errno = 0; | |
88 | e = NULL; | |
89 | TEST_COMPARE (gethostbyname2_r (query, AF_INET, | |
90 | &storage, buf, sizeof (buf), | |
91 | &e, &h_errno), 0); | |
92 | TEST_VERIFY (e == NULL); | |
93 | TEST_COMPARE (h_errno, HOST_NOT_FOUND); | |
94 | ||
95 | h_errno = 0; | |
96 | TEST_VERIFY (gethostbyname2 (query, AF_INET6) == NULL); | |
97 | TEST_COMPARE (h_errno, HOST_NOT_FOUND); | |
98 | ||
99 | h_errno = 0; | |
100 | e = NULL; | |
101 | TEST_COMPARE (gethostbyname2_r (query, AF_INET6, | |
102 | &storage, buf, sizeof (buf), | |
103 | &e, &h_errno), 0); | |
104 | TEST_VERIFY (e == NULL); | |
105 | TEST_COMPARE (h_errno, HOST_NOT_FOUND); | |
106 | ||
107 | static const int gai_flags[] = | |
108 | { | |
109 | 0, | |
110 | AI_ADDRCONFIG, | |
111 | AI_NUMERICHOST, | |
112 | AI_IDN, | |
113 | AI_IDN | AI_NUMERICHOST, | |
114 | AI_V4MAPPED, | |
115 | AI_V4MAPPED | AI_NUMERICHOST, | |
116 | }; | |
2fe31688 | 117 | for (size_t gai_flags_idx = 0; gai_flags_idx < array_length (gai_flags); |
108bc404 FW |
118 | ++gai_flags_idx) |
119 | { | |
120 | struct addrinfo hints = { .ai_flags = gai_flags[gai_flags_idx], }; | |
121 | struct addrinfo *ai; | |
122 | hints.ai_family = AF_INET; | |
123 | TEST_COMPARE (getaddrinfo (query, "80", &hints, &ai), EAI_NONAME); | |
124 | hints.ai_family = AF_INET6; | |
125 | TEST_COMPARE (getaddrinfo (query, "80", &hints, &ai), EAI_NONAME); | |
126 | hints.ai_family = AF_UNSPEC; | |
127 | TEST_COMPARE (getaddrinfo (query, "80", &hints, &ai), EAI_NONAME); | |
128 | } | |
129 | }; | |
130 | ||
131 | resolv_test_end (aux); | |
132 | ||
133 | return 0; | |
134 | } | |
135 | ||
136 | #include <support/test-driver.c> |