> I will commit this version in a bit (once rpki-client finished its run).
I like this approach a lot better. ok
One small comment below.
> --
> :wq Claudio
>
> Index: parser.c
> ===================================================================
> RCS file: /cvs/src/usr.sbin/rpki-client/parser.c,v
> retrieving revision 1.43
> diff -u -p -r1.43 parser.c
> --- parser.c 18 Jan 2022 16:36:49 -0000 1.43
> +++ parser.c 18 Jan 2022 18:03:37 -0000
> @@ -204,15 +204,15 @@ verify_cb(int ok, X509_STORE_CTX *store_
> * Returns 1 for valid certificates, returns 0 if there is a verify error
> */
> static int
> -valid_x509(char *file, X509 *x509, struct auth *a, struct crl *crl)
> +valid_x509(char *file, X509 *x509, struct auth *a, struct crl *crl,
> + unsigned long flags)
> {
> STACK_OF(X509) *chain;
> STACK_OF(X509_CRL) *crls = NULL;
> int c;
>
> build_chain(a, &chain);
> - if (crl != NULL)
> - build_crls(crl, &crls);
> + build_crls(crl, &crls);
>
> assert(x509 != NULL);
> if (!X509_STORE_CTX_init(ctx, NULL, x509, NULL))
> @@ -221,12 +221,11 @@ valid_x509(char *file, X509 *x509, struc
> X509_STORE_CTX_set_verify_cb(ctx, verify_cb);
> if (!X509_STORE_CTX_set_app_data(ctx, file))
> cryptoerrx("X509_STORE_CTX_set_app_data");
> - if (crl != NULL)
> - X509_STORE_CTX_set_flags(ctx, X509_V_FLAG_CRL_CHECK);
> + if (flags != 0)
> + X509_STORE_CTX_set_flags(ctx, flags);
Feel free to leave it, but you could now drop the if (flags != 0) check.
> X509_STORE_CTX_set_depth(ctx, MAX_CERT_DEPTH);
> X509_STORE_CTX_set0_trusted_stack(ctx, chain);
> - if (crl != NULL)
> - X509_STORE_CTX_set0_crls(ctx, crls);
> + X509_STORE_CTX_set0_crls(ctx, crls);
>
> if (X509_verify_cert(ctx) <= 0) {
> c = X509_STORE_CTX_get_error(ctx);
> @@ -262,7 +261,7 @@ proc_parser_roa(char *file, const unsign
> a = valid_ski_aki(file, &auths, roa->ski, roa->aki);
> crl = get_crl(a);
>
> - if (!valid_x509(file, x509, a, crl)) {
> + if (!valid_x509(file, x509, a, crl, X509_V_FLAG_CRL_CHECK)) {
> X509_free(x509);
> roa_free(roa);
> return NULL;
> @@ -361,7 +360,8 @@ proc_parser_mft(char *file, const unsign
>
> a = valid_ski_aki(file, &auths, mft->ski, mft->aki);
>
> - if (!valid_x509(file, x509, a, NULL)) {
> + /* CRL checks disabled here because CRL is referenced from mft */
> + if (!valid_x509(file, x509, a, NULL, 0)) {
> mft_free(mft);
> X509_free(x509);
> return NULL;
> @@ -405,7 +405,7 @@ proc_parser_cert(char *file, const unsig
> a = valid_ski_aki(file, &auths, cert->ski, cert->aki);
> crl = get_crl(a);
>
> - if (!valid_x509(file, cert->x509, a, crl)) {
> + if (!valid_x509(file, cert->x509, a, crl, X509_V_FLAG_CRL_CHECK)) {
> cert_free(cert);
> return NULL;
> }
> @@ -569,7 +569,7 @@ proc_parser_gbr(char *file, const unsign
> crl = get_crl(a);
>
> /* return value can be ignored since nothing happens here */
> - valid_x509(file, x509, a, crl);
> + valid_x509(file, x509, a, crl, X509_V_FLAG_CRL_CHECK);
>
> X509_free(x509);
> gbr_free(gbr);