On Fri, Jan 20, 2023 at 09:13:04PM +0000, Job Snijders wrote:
> On Fri, Jan 20, 2023 at 09:35:08PM +0100, Theo Buehler wrote:
> > On Fri, Jan 20, 2023 at 08:06:00PM +0000, Job Snijders wrote:
> > > While studying why X509_check_ca() is the ugly thing it is, tb@
> > > suggested x509v3_cache_extensions() might benefit from a wrapper to
> > > avoid duplication of locking and checking the stupid EXFLAG_INVALID
> > > flag. x509v3_cache_extensions() isn't a public function anyway.
> > >
> > > Passes regress & rpki-client.
> > >
> > > OK?
> >
> > Cool, thanks. I think it's better to pull the EXFLAG_SET check into the
> > new function like beck has done in x509_verify_cert_cache_extensions()
> > which then becomes a simple wrapper (it's nice to keep the 'namespacing'
> > clean in x509_verify.c).
> >
> > Details inline.
>
> Thanks for the feedback!
>
> I think all your points have been addressed in the below changeset.
Yes that's great, thank you.
ok tb
with the two small nits below.
> +/*
> + * 1 is success, 0 is failure.
> + */
Please remove this comment. This is the default in libcrypto.
> +int
> +x509v3_cache_extensions(X509 *x)
> +{
> + if (!(x->ex_flags & EXFLAG_SET)) {
This is not really a Boolean, so please check explicitly against 0 like
a few lines down.
if ((x->ex_flags & EXFLAG_SET) == 0) {
> + CRYPTO_w_lock(CRYPTO_LOCK_X509);
> + x509v3_cache_extensions_internal(x);
> + CRYPTO_w_unlock(CRYPTO_LOCK_X509);
> + }
> +
> + return (x->ex_flags & EXFLAG_INVALID) == 0;
> +}