Commit graph

1812 commits

Author SHA1 Message Date
Wyatt OʼDay
c0010b3f93
Address comments from @icing
With debugging enabled, make it less chatty by default.
2025-08-07 07:21:37 -07:00
Wyatt O'Day
6ff518d9e0 style-bot 2025-08-05 06:17:38 -04:00
Wyatt O'Day
be61f9db1b yet more style-bot 2025-08-05 06:15:05 -04:00
Wyatt O'Day
8d7aa2cc6b more style-bot 2025-08-05 06:12:20 -04:00
Wyatt O'Day
881ae02a84 style-bot 2025-08-05 06:11:15 -04:00
Wyatt O'Day
67d1792d1f Error out on old medTLS versions immediately (as per @bagder request). Also, clarify debug function to exit-out early on "empty" lines. Should quiet up valgrind warnings. 2025-08-05 06:10:13 -04:00
Wyatt O'Day
857f445a9d Didn't know how old a version of C y'all use. 2025-08-04 15:45:02 -04:00
Wyatt O'Day
d049f3e24e More code-style 2025-08-04 15:41:17 -04:00
Wyatt O'Day
3e3d89b9de Minor code-style fixes. 2025-08-04 15:37:05 -04:00
Wyatt O'Day
b5182a0fdb Work around the (incorrect, apparently) assumption that the TLS library must be initialized before any TLS functions are called.
If this is a bug in curl-internals, I can remove the workaround once the fix has been applied to curl itself.
2025-08-04 15:34:02 -04:00
Wyatt O'Day
8f80ea1fad Fix runtime error when ssl_cert_type is not set. 2025-08-04 12:23:08 -04:00
Wyatt O'Day
13efff80fb Last (?🙏) code-style bot. 2025-08-04 10:43:16 -04:00
Wyatt O'Day
37c7bcdaf5 More code-style opinions. 2025-08-04 10:41:38 -04:00
Wyatt O'Day
fc36156419 Every bot has an opinion. 2025-08-04 10:32:17 -04:00
Wyatt O'Day
07575522af Make "spacecheck" bot happy. 🙄 2025-08-04 10:30:24 -04:00
Wyatt O'Day
1e45d1e4b9 Make code-style happy. 2025-08-04 10:27:46 -04:00
Wyatt O'Day
a205f2dc57 Make code-style bots happy. 2025-08-04 10:02:41 -04:00
Wyatt O'Day
9cb844627e Address issues by @badger & @vszakats 2025-08-04 09:32:01 -04:00
Wyatt O'Day
742a66f88d mbedTLS: clean-up insecure/deprecated code, and other fixes 2025-08-04 07:38:05 -04:00
Stefan Eissing
ec4c559104
openssl: check SSL_write() length on retries
When an SSL_write() blocks we need to retry it with the
same length as before or stupid OpenSSL freaks out. Remember
it, limit any longer sends and fail shorter ones.

Fixes #18121
Reported-by: adamse on github
Closes #18132
2025-08-01 17:54:05 +02:00
Stefan Eissing
ba9ddb9357
tls: CURLINFO_TLS_SSL_PTR testing
Add tests of CURLINFO_TLS_SSL_PTR and its returned value in test client
'hx-download'. Use obtained pointer to look up the negotiated TLS
version.

Update manpage of CURLINFO_TLS_SSL_PTR to also describe the behaviour of
wolfSSL similar to OpenSSL. Fix the wolfSSl implementation for TCP to
behave like that. Update the QUIC queries.

Fix rustls `get_internals()` to return the rustls_connection* and not
the address of the pointer.

Assisted-by: Viktor Szakats
Closes #18066
2025-08-01 09:37:36 +02:00
Viktor Szakats
902262b166
windows: document toolchain support for CERT_NAME_SEARCH_ALL_NAMES_FLAG
Follow-up to 5f99b45693 #18113
Follow-up to 3bfcfe82b9 #18085
2025-07-31 20:43:21 +02:00
Viktor Szakats
923db3515d
schannel: not supported with UWP, drop redundant code
Schannel is not supported by UWP. SSPI is also required by Schannel in
curl, and SSPI also isn't supported by UWP.

mingw-w64 is able to create such build regardless (my guess: due to API
parts not accurately marked as UWP-only), but the binary is unlikely
to work. With MSVC the failure happens at build-time.

Ref: https://learn.microsoft.com/windows/win32/api/sspi/nf-sspi-initsecurityinterfacea#requirements
Ref: https://learn.microsoft.com/windows/win32/secauthn/initializesecuritycontext--schannel#requirements

Drop all UWP-related logic, including two related feature checks, that
can now be permanently enabled.

Also:
- build: show fatal error for Schannel in UWP mode.
- build: do not allow enabling SSPI in UWP mode.
- drop undocumented option `DISABLE_SCHANNEL_CLIENT_CERT`. Added without
  mention in an unrelated commit. The PR text says to save size. On x64
  this is 0.3%, or 4KB out of 1.3MB. The tiny gain doesn't justify
  an extra build variant. Ref: 8beff43559
- move `MPROTO_SCHANNEL_CERT_SHARE_KEY` closer to its use.
- replace commented block with `#if 0`.

Reviewed-by: Jay Satiro
Follow-up to cd0ec4784c #17089
Closes #18116
2025-07-31 20:05:32 +02:00
Viktor Szakats
b5c245045e
windows: drop two interim, single-use macros
Follow-up to e77d867068

Closes #18114
2025-07-31 11:54:18 +02:00
Viktor Szakats
5f99b45693
windows: document toolchain support for some macros (cont.)
Follow-up to 3bfcfe82b9 #18085

Closes #18113
2025-07-31 09:29:48 +02:00
Viktor Szakats
3bfcfe82b9
windows: document toolchain support for some macros
The oldest MS SDK I checked is 6.0A (VS2008). Versions are approximate
beyond 7.1A. I only have two Win10 SDKs to verify:
10.0.16299.0 (VS2017-15.4) and 10.0.22621.0 (VS2022).

Ref: https://en.wikipedia.org/wiki/Microsoft_Windows_SDK
Ref: https://developer.microsoft.com/windows/downloads/sdk-archive/index-legacy (recent versions mostly)

Closes #18085
2025-07-31 00:43:57 +02:00
Viktor Szakats
08acef2aab
schannel: assume CERT_CHAIN_REVOCATION_CHECK_CHAIN
Always available in supported mingw-w64 and MSVC compilers, except
in UWP mode. For mingw32ce this macro is defined later in the code.

Also available in OpenWatcom 2.
ce6c37eb29/bld/w32api/include/winerror.mh

Closes #18108
2025-07-31 00:41:36 +02:00
Viktor Szakats
e32a6dc510
schannel: drop fallbacks for 4 macros
They are defined by all mingw-w64 versions and all supported MSVC
versions (SDK 7.1A+).

Also by OpenWatcom 2:
ce6c37eb29/bld/w32api/include/wincrypt.mh

These aren't defined by mingw32ce. And likely defined by MS WinCE SDK,
but curl code doesn't use them in WinCE builds.

Closes #18093
2025-07-30 12:24:37 +02:00
Viktor Szakats
dfe3844c56
schannel: drop fallbacks for unused BCRYPT_* macros
In case they are used again in the future, the fallbacks are not
necessary for the supported mingw-w64 (v3+) and MSVC versions.

Follow-up to 6238888ca7 #15621

Closes #18091
2025-07-30 12:24:37 +02:00
Viktor Szakats
58906838c5
schannel: fix recent update for mingw32ce
Follow-up to 952c929bdf #18084
Closes #18097
2025-07-30 11:55:54 +02:00
Daniel Stenberg
8d00527e9e
schannel: use if(result) like the code style says
instead of comparing != CURLE_OK

Closes #18094
2025-07-30 11:26:04 +02:00
Daniel Stenberg
d7918861d1
openssl: split cert_stuff into smaller sub functions
- rename it client_cert
- make it return CURLcode

Closes #18081
2025-07-30 09:12:10 +02:00
Viktor Szakats
58e0ff809f
tidy-up: whitespace, indent, #if 0
Closes #18090
2025-07-30 03:46:21 +02:00
Viktor Szakats
952c929bdf
schannel: drop old-mingw special case
mingw-w64 always defines `CERT_CHAIN_REVOCATION_CHECK_CHAIN`.

Also confirmed in CI.

Follow-up to 38029101e2 #11625
Ref: a28f5f68b9 #18010
Closes #18084
2025-07-29 22:35:06 +02:00
Stefan Eissing
21e885eb39
alpn: query filter
Add a connection filter query to obtained the negotiated ALPN
protocol to check in setup/protocols how the connection needs
to behave.

Remove the members `alpn` and `proxy_alpn` from `connectdata`.

Closes #17947
2025-07-28 14:04:31 +02:00
Viktor Szakats
89771d19d5
tidy-up: prefer ifdef/ifndef for single checks
Closes #18018
2025-07-27 22:35:17 +02:00
Viktor Szakats
b2bccdc257
tidy-up: move literal to the right side of comparisons
Closes #17876
2025-07-27 22:35:17 +02:00
Daniel Stenberg
9d8998c994
tls: make default TLS version be minimum 1.2
This still allows users to explictily ask for 1.0 or 1.1 as the minimum
version. If the TLS library allows it.

Starting with this change, the CURL_SSLVERSION_DEFAULT value is no
longer used as minimum version when the TLS backend are called.

This also makes curl set the minimum version to 1.2 independently of
libcurl for the rare case where a newer curl tool would use an older
libcurl.

URL: https://curl.se/mail/lib-2025-07/0007.html
Assisted-by: Stefan Eissing
Closes #17894
2025-07-27 18:23:04 +02:00
Daniel Stenberg
91138b014d
vquic: drop msh3
It has never been properly functional in curl while there are several
alternatives that are.

Closes #17729
2025-07-27 17:57:17 +02:00
Viktor Szakats
4d977fe552
tidy-up: more whitespace/indent, comments
Also a couple of minor formatting updates in the root `CMakeLists.txt`.
One swap to `#ifdef`.

Closes #17929
2025-07-25 11:47:51 +02:00
Viktor Szakats
c37e06c642
build: fix build errors/warnings in rare configurations
- vtls: fix unused variable and symbols.
- ftp: fix unused variable.
- http: fix unused variables.
- smtp: fix unsued variable.
- wolfssl: fix unused variable with !proxy.
- libssh: fix unused argument.
- curl_trc: sync guards between declaration and definition.
- curl_trc: add missing guard for `Curl_trc_ssls` when !verbose.
- curl_trc: fix errors with !http + http3.
- curl_trc: fix missing function with !http + nghttp2.
- cf-h2-proxy: disable when !http + nghttp2, to avoid calling undeclared
  functions.
- sha256: fix missing declaration in rare configs.
- md4: fix symbol conflict when building GnuTLS together with AWS-LC or
  wolfSSL. By prioritizing the latter two. AWS-LC has no option
  to disable the clashing symbol. wolfSSL does, but the most seamless is
  to skip including GnuTLS's standalone `md4.h` to avoid the clash.
- build: fix errors with !http + nghttp2.
- build: catch !ssl + ssls-export combination in source. Convert
  build-level errors to warnings.
- build: fix errors with !http + http3.
- build: fix building curl tool and unit1302 in rare combinations.
  By always compiling base64 curlx functions.

- cmake: add `_CURL_SKIP_BUILD_CERTS` internal option.
  To disable automatically building certs with the testdeps target.
  To improve performance when testing builds.
  (used locally to find the failing builds fixed in this PR.)

Closes #17962
2025-07-23 22:17:03 +02:00
Viktor Szakats
0260e8465a
GHA/checksrc: expand spellcheck, fix issues found
- codespell: break logic out into its own runnable script. Allowing
  to run it on local machines.
- codespell: install via `pip`, bump to latest version.
- codespell: show version number in CI log.
- codespell: drop no longer needed word exception: `msdos`.
- codespell: include all curl source tree, except `packages` and
  `winbuild`. Drop an obsolete file exclusion.
- add new spellchecker job using the `typos` tool. It includes
  the codespell dictionary and a couple more. Use linuxbrew to install
  it. This takes 10 seconds, while installing via `cargo` from source
  would take over a minute.
- codespell: introduce an inline ignore filter compatible with `cspell`
  Make `typos` recognize it, too. Move single exceptions inline.

Fix new typos found. Also rename variables and words to keep
spellchecking exceptions at minumum. This involves touching some tests.
Also switch base64 strings to `%b64[]` to avoid false positives.

Ref: https://github.com/crate-ci/typos/blob/master/docs/reference.md
Ref: https://github.com/codespell-project/codespell?tab=readme-ov-file#inline-ignore
Ref: https://github.com/codespell-project/codespell/issues/1212#issuecomment-1721152455
Ref: https://cspell.org/docs/Configuration/document-settings

Closes #17905
2025-07-21 16:09:01 +02:00
Viktor Szakats
bf9d9fe0bd
multissl: initialize when requesting a random number
To fix test 1308 in MultiSSL builds.

Failure was caused by the random number generator virtual function being
NULL, instead of pointing to the implementation in the runtime-selected
TLS backend. This could happen in MultiSSL builds when a functionality
was asking for a random number without triggering a VTLS function table
initialization first. Such functionality is MIME, or form data via MIME.

The reason CI did not catch it in an earlier MultiSSL GHA/windows job,
is that it was a debug-enabled one. In debug-enabled builds the test
runner was overriding the random number generator for all tests.

Fixed this by moving the override to the tests requiring it, via
1fcf22585f #17971, enabling debug builds
to catch this issue.

Enable MultiSSL in two CI jobs, to verify this patch.

Fixing:
```
test 1308...[formpost tests]

libtests returned 44, when expecting 0
 1308: exit FAILED
[...]
=== Start of file stderr1308
 URL: log/3/test-1308
 tests/libtest/lib1308.c:70 Assertion 'res == 0' FAILED: curl_formget returned error
 tests/libtest/lib1308.c:72 Assertion 'total_size == 518' FAILED: curl_formget got wrong size back
 tests/libtest/lib1308.c:88 Assertion 'res == 0' FAILED: curl_formget returned error
 tests/libtest/lib1308.c:89 Assertion 'total_size == 899' FAILED: curl_formget got wrong size back
```
Ref: https://github.com/curl/curl/actions/runs/16387693424/job/46309536359?pr=17963#step:16:2515

Bug: https://github.com/curl/curl/pull/17963#issuecomment-3092282057

Closes #17970
2025-07-20 12:03:56 +02:00
Stefan Eissing
044de8e19b
gnutls: some small cleanups
- de-complex Curl_gtls_verifyserver() by splitting of static
  functions for parts of it.
- follow the `goto out` style with common deallocation code

Closes #17941
2025-07-18 00:41:09 +02:00
Stefan Eissing
3ad4b44073
openssl: some small cleanups
- rename Curl_oss_check_peer_cert() to Curl_ossl_check_peer_cert()
- leave altname match loop after the first success when the match
  was an ip address
- remove static subj_alt_hostcheck() since it did not really do much
- use length based infof() output of altname, even though it does
  seem always to be nul terminated

Closes #17940
2025-07-18 00:40:26 +02:00
Viktor Szakats
3222eabe18
tidy-up: whitespace/indent
Closes #17925
2025-07-14 18:33:43 +02:00
Stefan Eissing
e9ae1bd404
connection: clarify transport
The `transport` to use for a transfer, e.g. TCP/QUIC/UNIX/UDP, is
initially selected by options and protocol used. This is set at the
`struct connectdata` as `transport` member.

During connection establishment, this transport may change due to
Alt-Svc or Happy-Eyeballing. Most common is the switch from TCP to QUIC.

Rename the connection member to `transport_wanted` and add a way to
query the connection for the transport in use via a new connection
filter query.

The filter query can also be used in the happy eyeballing attempts when
code needs to know which transport is used by the "filter below". This
happens in wolfssl initialization, as one example.

Closes #17923
2025-07-14 14:33:18 +02:00
Stefan Eissing
674ad27f77
http/3: report handshake with version and cipher as for TCP connections
Make reporting into separate functions, to be called from QUIC handshakes
as well.

Closes #17922
2025-07-14 14:08:32 +02:00
Ryan Hooper
b1fb8da0fa
wolfssl: add support for ML_KEM hybrids
For parity with OpenSSL 3.5

Closes #17902
2025-07-12 22:51:08 +02:00
Daniel McCarney
a2028823a8
lib/vts: fix a copy-pasted early data comment typo
In gtls.c there was a typo'd comment that I think was missing the word
"no" to indicate there's "no GnuTLS way to signal no EarlyData".

This commit fixes that typo, and also updates a copy-pasted instance
that made it into wolfssl.c where it should refer to the WolfSSL API
missing the capability, not GnuTLS.

Closes #17907
2025-07-12 19:27:36 +02:00