summaryrefslogtreecommitdiff
path: root/src/regress/lib/libcrypto/x509/constraints.c
diff options
context:
space:
mode:
authorbeck <>2023-09-29 15:53:59 +0000
committerbeck <>2023-09-29 15:53:59 +0000
commit266a46fc156d909c580ce8946cc574da9a2ee5b4 (patch)
tree9289b67644f1ef47e15e9b80e3105d2ff11da1d2 /src/regress/lib/libcrypto/x509/constraints.c
parentf4f0e4daf1dec6165cb0996274d1ce8cd63b6dc6 (diff)
downloadopenbsd-266a46fc156d909c580ce8946cc574da9a2ee5b4.tar.gz
openbsd-266a46fc156d909c580ce8946cc574da9a2ee5b4.tar.bz2
openbsd-266a46fc156d909c580ce8946cc574da9a2ee5b4.zip
Allow IP addresses to be specified in a URI.
Our checking here was a bit too aggressive, and did not permit an IP address in a URI. IP's in a URI are allowed for things like CRLdp's AIA, SAN URI's etc.). The check for this was also slightly flawed as we would permit an IP if memory allocation failed while checking for an IP. Correct both issues. ok tb@
Diffstat (limited to 'src/regress/lib/libcrypto/x509/constraints.c')
-rw-r--r--src/regress/lib/libcrypto/x509/constraints.c54
1 files changed, 50 insertions, 4 deletions
diff --git a/src/regress/lib/libcrypto/x509/constraints.c b/src/regress/lib/libcrypto/x509/constraints.c
index 8771367bd6..90b7ffbaeb 100644
--- a/src/regress/lib/libcrypto/x509/constraints.c
+++ b/src/regress/lib/libcrypto/x509/constraints.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: constraints.c,v 1.15 2022/11/28 07:24:03 tb Exp $ */ 1/* $OpenBSD: constraints.c,v 1.16 2023/09/29 15:53:59 beck Exp $ */
2/* 2/*
3 * Copyright (c) 2020 Bob Beck <beck@openbsd.org> 3 * Copyright (c) 2020 Bob Beck <beck@openbsd.org>
4 * 4 *
@@ -154,6 +154,12 @@ unsigned char *invaliduri[] = {
154 "https://.www.openbsd.org/", 154 "https://.www.openbsd.org/",
155 "https://www.ope|nbsd.org%", 155 "https://www.ope|nbsd.org%",
156 "https://www.openbsd.org.#", 156 "https://www.openbsd.org.#",
157 "https://192.168.1.1./",
158 "https://192.168.1.1|/",
159 "https://.192.168.1.1/",
160 "https://192.168..1.1/",
161 "https://.2001:0DB8:AC10:FE01::/",
162 "https://.2001:0DB8:AC10:FE01::|/",
157 "///", 163 "///",
158 "//", 164 "//",
159 "/", 165 "/",
@@ -161,6 +167,15 @@ unsigned char *invaliduri[] = {
161 NULL, 167 NULL,
162}; 168};
163 169
170unsigned char *validuri[] = {
171 "https://www.openbsd.org/meep/meep/meep/",
172 "https://192.168.1.1/",
173 "https://2001:0DB8:AC10:FE01::/",
174 "https://192.168.1/", /* Not an IP, but valid component */
175 "https://999.999.999.999/", /* Not an IP, but valid component */
176 NULL,
177};
178
164static int 179static int
165test_valid_hostnames(void) 180test_valid_hostnames(void)
166{ 181{
@@ -169,7 +184,7 @@ test_valid_hostnames(void)
169 for (i = 0; valid_hostnames[i] != NULL; i++) { 184 for (i = 0; valid_hostnames[i] != NULL; i++) {
170 CBS cbs; 185 CBS cbs;
171 CBS_init(&cbs, valid_hostnames[i], strlen(valid_hostnames[i])); 186 CBS_init(&cbs, valid_hostnames[i], strlen(valid_hostnames[i]));
172 if (!x509_constraints_valid_host(&cbs)) { 187 if (!x509_constraints_valid_host(&cbs, 0)) {
173 FAIL("Valid hostname '%s' rejected\n", 188 FAIL("Valid hostname '%s' rejected\n",
174 valid_hostnames[i]); 189 valid_hostnames[i]);
175 failure = 1; 190 failure = 1;
@@ -183,6 +198,7 @@ test_valid_hostnames(void)
183 goto done; 198 goto done;
184 } 199 }
185 } 200 }
201
186 done: 202 done:
187 return failure; 203 return failure;
188} 204}
@@ -202,6 +218,7 @@ test_valid_sandns_names(void)
202 goto done; 218 goto done;
203 } 219 }
204 } 220 }
221
205 done: 222 done:
206 return failure; 223 return failure;
207} 224}
@@ -221,6 +238,7 @@ test_valid_domain_constraints(void)
221 goto done; 238 goto done;
222 } 239 }
223 } 240 }
241
224 done: 242 done:
225 return failure; 243 return failure;
226} 244}
@@ -245,6 +263,7 @@ test_valid_mbox_names(void)
245 free(name.local); 263 free(name.local);
246 name.local = NULL; 264 name.local = NULL;
247 } 265 }
266
248 done: 267 done:
249 return failure; 268 return failure;
250} 269}
@@ -259,7 +278,7 @@ test_invalid_hostnames(void)
259 for (i = 0; invalid_hostnames[i] != NULL; i++) { 278 for (i = 0; invalid_hostnames[i] != NULL; i++) {
260 CBS_init(&cbs, invalid_hostnames[i], 279 CBS_init(&cbs, invalid_hostnames[i],
261 strlen(invalid_hostnames[i])); 280 strlen(invalid_hostnames[i]));
262 if (x509_constraints_valid_host(&cbs)) { 281 if (x509_constraints_valid_host(&cbs, 0)) {
263 FAIL("Invalid hostname '%s' accepted\n", 282 FAIL("Invalid hostname '%s' accepted\n",
264 invalid_hostnames[i]); 283 invalid_hostnames[i]);
265 failure = 1; 284 failure = 1;
@@ -267,7 +286,7 @@ test_invalid_hostnames(void)
267 } 286 }
268 } 287 }
269 CBS_init(&cbs, nulhost, strlen(nulhost) + 1); 288 CBS_init(&cbs, nulhost, strlen(nulhost) + 1);
270 if (x509_constraints_valid_host(&cbs)) { 289 if (x509_constraints_valid_host(&cbs, 0)) {
271 FAIL("hostname with NUL byte accepted\n"); 290 FAIL("hostname with NUL byte accepted\n");
272 failure = 1; 291 failure = 1;
273 goto done; 292 goto done;
@@ -278,6 +297,7 @@ test_invalid_hostnames(void)
278 failure = 1; 297 failure = 1;
279 goto done; 298 goto done;
280 } 299 }
300
281 done: 301 done:
282 return failure; 302 return failure;
283} 303}
@@ -297,6 +317,7 @@ test_invalid_sandns_names(void)
297 goto done; 317 goto done;
298 } 318 }
299 } 319 }
320
300 done: 321 done:
301 return failure; 322 return failure;
302} 323}
@@ -321,6 +342,7 @@ test_invalid_mbox_names(void)
321 free(name.local); 342 free(name.local);
322 name.local = NULL; 343 name.local = NULL;
323 } 344 }
345
324 done: 346 done:
325 return failure; 347 return failure;
326} 348}
@@ -340,6 +362,7 @@ test_invalid_domain_constraints(void)
340 goto done; 362 goto done;
341 } 363 }
342 } 364 }
365
343 done: 366 done:
344 return failure; 367 return failure;
345} 368}
@@ -365,6 +388,27 @@ test_invalid_uri(void)
365 done: 388 done:
366 return failure; 389 return failure;
367} 390}
391static int
392test_valid_uri(void)
393{
394 int j, failure = 0;
395 char *hostpart = NULL;
396
397 for (j = 0; validuri[j] != NULL; j++) {
398 if (x509_constraints_uri_host(validuri[j],
399 strlen(invaliduri[j]), &hostpart) == 0) {
400 FAIL("Valid URI '%s' NOT accepted\n",
401 validuri[j]);
402 failure = 1;
403 goto done;
404 }
405 free(hostpart);
406 hostpart = NULL;
407 }
408
409 done:
410 return failure;
411}
368 412
369static int 413static int
370test_constraints1(void) 414test_constraints1(void)
@@ -513,6 +557,7 @@ test_constraints1(void)
513 failure = 1; 557 failure = 1;
514 goto done; 558 goto done;
515 } 559 }
560
516 done: 561 done:
517 return failure; 562 return failure;
518} 563}
@@ -531,6 +576,7 @@ main(int argc, char **argv)
531 failed |= test_valid_domain_constraints(); 576 failed |= test_valid_domain_constraints();
532 failed |= test_invalid_domain_constraints(); 577 failed |= test_invalid_domain_constraints();
533 failed |= test_invalid_uri(); 578 failed |= test_invalid_uri();
579 failed |= test_valid_uri();
534 failed |= test_constraints1(); 580 failed |= test_constraints1();
535 581
536 return (failed); 582 return (failed);