summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authortb <>2020-11-03 18:39:18 +0000
committertb <>2020-11-03 18:39:18 +0000
commit4ebbe06a79dad3a34884066e8d8c340469b2289b (patch)
treea9877c8f0cd29877499cf4db676b5a630497e9f0 /src
parentd2716adb9f74470eeeb4b1db41704858437fb598 (diff)
downloadopenbsd-4ebbe06a79dad3a34884066e8d8c340469b2289b.tar.gz
openbsd-4ebbe06a79dad3a34884066e8d8c340469b2289b.tar.bz2
openbsd-4ebbe06a79dad3a34884066e8d8c340469b2289b.zip
X509_verify_cert()'s return value is not reliable if the callback
returns 1. verify.c's cb() ignores a bunch of things to display as much info as possible. Thus, check the error code on the store ctx as well, similar to OpenSSL commit d9e309a6 (old licence). This makes openssl verify error on expired certs, at least with the legacy verify code. While here, fix a number of style issues, simplify and plug a leak. ok inoguchi
Diffstat (limited to 'src')
-rw-r--r--src/usr.bin/openssl/verify.c42
1 files changed, 22 insertions, 20 deletions
diff --git a/src/usr.bin/openssl/verify.c b/src/usr.bin/openssl/verify.c
index e4443148ce..937f350a3a 100644
--- a/src/usr.bin/openssl/verify.c
+++ b/src/usr.bin/openssl/verify.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: verify.c,v 1.9 2020/10/26 11:48:39 tb Exp $ */ 1/* $OpenBSD: verify.c,v 1.10 2020/11/03 18:39:18 tb Exp $ */
2/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) 2/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
3 * All rights reserved. 3 * All rights reserved.
4 * 4 *
@@ -364,45 +364,47 @@ verify_main(int argc, char **argv)
364} 364}
365 365
366static int 366static int
367check(X509_STORE * ctx, char *file, STACK_OF(X509) * uchain, 367check(X509_STORE *ctx, char *file, STACK_OF(X509) *uchain,
368 STACK_OF(X509) * tchain, STACK_OF(X509_CRL) * crls) 368 STACK_OF(X509) *tchain, STACK_OF(X509_CRL) *crls)
369{ 369{
370 X509 *x = NULL; 370 X509 *x = NULL;
371 X509_STORE_CTX *csc = NULL;
372 const char *certfile = (file == NULL) ? "stdin" : file;
373 int verify_err;
371 int i = 0, ret = 0; 374 int i = 0, ret = 0;
372 X509_STORE_CTX *csc;
373 375
374 x = load_cert(bio_err, file, FORMAT_PEM, NULL, "certificate file"); 376 x = load_cert(bio_err, file, FORMAT_PEM, NULL, "certificate file");
375 if (x == NULL) 377 if (x == NULL)
376 goto end; 378 goto end;
377 fprintf(stdout, "%s: ", (file == NULL) ? "stdin" : file);
378 379
379 csc = X509_STORE_CTX_new(); 380 fprintf(stdout, "%s: ", certfile);
380 if (csc == NULL) { 381
381 ERR_print_errors(bio_err); 382 if ((csc = X509_STORE_CTX_new()) == NULL)
382 goto end; 383 goto end;
383 }
384 X509_STORE_set_flags(ctx, vflags); 384 X509_STORE_set_flags(ctx, vflags);
385 if (!X509_STORE_CTX_init(csc, ctx, x, uchain)) { 385 if (!X509_STORE_CTX_init(csc, ctx, x, uchain))
386 ERR_print_errors(bio_err);
387 goto end; 386 goto end;
388 }
389 if (tchain) 387 if (tchain)
390 X509_STORE_CTX_trusted_stack(csc, tchain); 388 X509_STORE_CTX_trusted_stack(csc, tchain);
391 if (crls) 389 if (crls)
392 X509_STORE_CTX_set0_crls(csc, crls); 390 X509_STORE_CTX_set0_crls(csc, crls);
393 i = X509_verify_cert(csc);
394 X509_STORE_CTX_free(csc);
395 391
396 ret = 0; 392 i = X509_verify_cert(csc);
393 verify_err = X509_STORE_CTX_get_error(csc);
397 394
398 end: 395 if (i > 0 && verify_err == X509_V_OK) {
399 if (i > 0) {
400 fprintf(stdout, "OK\n"); 396 fprintf(stdout, "OK\n");
401 ret = 1; 397 ret = 1;
402 } else 398 } else {
399 fprintf(stdout, "%s: verification failed: %d (%s)\n", certfile,
400 verify_err, X509_verify_cert_error_string(verify_err));
401 }
402
403 end:
404 if (i <= 0)
403 ERR_print_errors(bio_err); 405 ERR_print_errors(bio_err);
404 if (x != NULL) 406 X509_free(x);
405 X509_free(x); 407 X509_STORE_CTX_free(csc);
406 408
407 return (ret); 409 return (ret);
408} 410}