Remove X509_PURPOSE extensibility
authortb <tb@openbsd.org>
Sat, 6 Jan 2024 17:17:08 +0000 (17:17 +0000)
committertb <tb@openbsd.org>
Sat, 6 Jan 2024 17:17:08 +0000 (17:17 +0000)
commit9c4f0f435b59ed8624aadc0844e0d9dca804c717
tree62d1a830efb0e763acf209725f77189e42b48ef8
parent3de6427df554cad336f7097189879d662506c924
Remove X509_PURPOSE extensibility

Another bit of global state without lock protection. The by now familiar
complications of a stack to make this user configurable, which, of course,
no one ever did. The table is not currently const, and the API exposes its
entries directly, so anyone can modify it. This fits very well with the
safety guarantees of Rust's 'static lifetime, which is how rust-openssl
exposes it (for no good reason).

Remove the stack and make the X509_PURPOSE_add() API always fail.
Simplify the other bits accordingly.

In addition, this API inflicts the charming difference between purpose
identifiers and purpose indexes (the former minus one) onto the user.
Neither of the two obvious solutions to avoid this trap seems to have
crossed the implementer's mind.

ok jsing
lib/libcrypto/x509/x509_purp.c