curl/lib/vtls
Viktor Szakats 2a92c39a21
windows: tidy up wincrypt.h / BoringSSL/AWS-LC coexist workaround
- openssl: move and expand explanatory comment.

- openssl: drop duplicate workaround.

- schannel: drop workaround. Unnecessary, because OpenSSL headers are
  not included in or after schannel code.

- schannel: drop explicit `wincrypt.h` include. It's indirectly
  included by system `<schannel.h>`.

- ldap: drop explicit `wincrypt.h` include.
  It isn't used there, and also not required for the workaround.
  `winldap.h` keeps including it indirectly.

Tested with BoringSSL and AWS-LC (MultiSSL with Schannel), also LDAP
enabled, and H3, unity and non-unity, and all tested cases build fine.

In lib in general, the point is to have the `#undef`s between the first
`wincrypt.h` include [1] and the first OpenSSL include [2], within a
single compilation unit. For non-unity builds the only such source is
`openssl.c`. For unity ones, depending on batch size, in theory we
should `#undef` after each `wincrypt.h` include. In practice this is
overkill and most cases are covered by `#undef`-fing _first_ in
`vtls/openssl.c`, and `#undef` in `ldap.c`. It's not impossible that we
need to add more undefs after further `wincrypt.h` includes to cover so
far undiscovered build cases [3]. Though I could not find more with the
current sources and source order.

It's also an option to include OpenSSL first, then `wincrypt.h`, as
done in libtests, but for lib and `vtls/openssl.c` it's more practical
to do the opposite.

[1] can be indirect, e.g. via `iphlpapi.h`, `schannel.h`, `winldap.h`.

[2] in
- BoringSSL/AWS-LC: any include (due to `openssl/base.h`).
  Original fix removed by BoringSSL in year
  [2014](ded93581f1 (diff-878093ea6426091505b4c49c59b78924f42859af0eb4ce39b8089bda9577e013)).
- OpenSSL: `openssl/ssl.h`, `openssl/x509v3.h`, and some more affected,
  and including `openssl/ossl_typ.h` does the `#undef` automatically.
  Since [3.1.0+](fbb9a1f997)
  each inclusion does the `#undef`, in 3.0.x (and earlier) only
  the first inclusion did. Initially fixed in
  [0.9.6d](1955b87423)
- LibreSSL [2.3.0+](0fa826d34f):
  not affected, though to suppress another warning 3.8.2+ and
  a [define](e7fe6caab2)
  is necessary.

[3] `lib/Makefile.inc` defines the order of unity sources.

For libtests, the case is simpler: There is always one compilation unit,
with a fixed order, and at the moment `cli_hx_download.c` is including
OpenSSL first, then wincrypt, and in this order they don't bother each
other. Also, at the moment `lib758.c` is the only other OpenSSL header
user, but it's compiled after `cli_hx_download.c` so the include is
skipped there. We may need to revisit this if either header gets
included before it.

All this said it'd be nice if BoringSSL/AWS-LC restored the built-in
workaround to behave like LibreSSL and OpenSSL and not require local
workarounds like these.

Ref: https://github.com/curl/curl/pull/20556#issuecomment-3888425644

Follow-up to 4c46c829f5 #9110
Follow-up to fbe07c6829 #5669 #5857

Closes #20567
2026-02-12 14:31:39 +01:00
..
apple.c build: fully omit verbose strings and code when disabled 2026-01-21 13:18:35 +01:00
apple.h tidy-up: miscellaneous 2025-12-26 22:06:09 +01:00
cipher_suite.c tidy-up: miscellaneous 2025-12-26 22:06:09 +01:00
cipher_suite.h build: assume stdint.h 2026-01-28 12:05:20 +01:00
gtls.c tidy-up: move literals to right-side of if expressions (where missing) 2026-02-07 16:41:51 +01:00
gtls.h tidy-up: miscellaneous 2025-12-26 22:06:09 +01:00
hostcheck.c tidy-up: miscellaneous 2025-12-26 22:06:09 +01:00
hostcheck.h tidy-up: miscellaneous 2025-12-26 22:06:09 +01:00
keylog.c tidy-up: miscellaneous 2025-12-26 22:06:09 +01:00
keylog.h spelling: 'a' vs 'an' 2025-05-30 11:38:35 +02:00
mbedtls.c tidy-up: move literals to right-side of if expressions (where missing) 2026-02-07 16:41:51 +01:00
mbedtls.h lib: include files using known path 2025-04-08 17:00:00 +02:00
openssl.c windows: tidy up wincrypt.h / BoringSSL/AWS-LC coexist workaround 2026-02-12 14:31:39 +01:00
openssl.h tidy-up: miscellaneous 2025-12-26 22:06:09 +01:00
rustls.c tidy-up: move literals to right-side of if expressions (where missing) 2026-02-07 16:41:51 +01:00
rustls.h tidy-up: miscellaneous 2025-12-26 22:06:09 +01:00
schannel.c build: tidy up and dedupe strdup functions 2026-02-03 14:02:30 +01:00
schannel.h windows: tidy up wincrypt.h / BoringSSL/AWS-LC coexist workaround 2026-02-12 14:31:39 +01:00
schannel_int.h windows: tidy up includes, macros, document dependencies 2026-02-11 16:15:11 +01:00
schannel_verify.c tidy-up: miscellaneous 2025-12-26 22:06:09 +01:00
vtls.c vtls: use ALPN http/1.0 & http/1.1 for HTTP/1.0 requests 2026-02-09 12:15:35 -05:00
vtls.h tls: add new SSLSUPP flags for several options 2026-01-20 10:34:08 +01:00
vtls_int.h vtls: use ALPN http/1.0 & http/1.1 for HTTP/1.0 requests 2026-02-09 12:15:35 -05:00
vtls_scache.c build: drop more forward function declarations 2026-01-14 23:34:05 +01:00
vtls_scache.h tidy-up: miscellaneous 2025-12-26 22:06:09 +01:00
vtls_spack.c build: tidy up and dedupe strdup functions 2026-02-03 14:02:30 +01:00
vtls_spack.h build: fix build errors/warnings in rare configurations 2025-07-23 22:17:03 +02:00
wolfssl.c tidy-up: move literals to right-side of if expressions (where missing) 2026-02-07 16:41:51 +01:00
wolfssl.h wolfssl: fix possible assert with !HAVE_NO_EX wolfSSL builds 2025-12-07 17:01:45 +01:00
x509asn1.c build: use more const 2026-02-02 12:32:49 +01:00
x509asn1.h tidy-up: miscellaneous 2025-12-26 22:06:09 +01:00