]> git.ipfire.org Git - thirdparty/curl.git/log
thirdparty/curl.git
2 years agovms: fixed language in comment
Daniel Stenberg [Tue, 11 Jun 2024 12:01:35 +0000 (14:01 +0200)] 
vms: fixed language in comment

It started with me fixing a repeated "are are" but the wording was
incomprehensible so I tried to untangle it.

Closes #13921

2 years agolib: xfer_setup and non-blocking shutdown
Stefan Eissing [Mon, 10 Jun 2024 11:32:13 +0000 (13:32 +0200)] 
lib: xfer_setup and non-blocking shutdown

- clarify Curl_xfer_setup() with RECV/SEND flags and different calls for
  which socket they operate on. Add a shutdown flag for secondary
  sockets
- change Curl_xfer_setup() calls to new functions
- implement non-blocking connection shutdown at the end of receiving or
  sending a transfer

Closes #13913

2 years agotest1486: verify that write-out.md and tool_writeout.c are in sync
Daniel Stenberg [Tue, 11 Jun 2024 07:30:29 +0000 (09:30 +0200)] 
test1486: verify that write-out.md and tool_writeout.c are in sync

- also verify alphabetialal order in the source
- add two missing variables to write-out.md

Closes #13920

2 years agoGHA: add cmake MSYS2 native job
Viktor Szakats [Mon, 10 Jun 2024 21:10:47 +0000 (23:10 +0200)] 
GHA: add cmake MSYS2 native job

curl, libcurl, examples, build-only.

To compare build behaviour with autotools.

Closes #13917

2 years agoopenssl: shortcut store_expired for negative timeouts
Daniel Stenberg [Tue, 11 Jun 2024 06:03:28 +0000 (08:03 +0200)] 
openssl: shortcut store_expired for negative timeouts

Avoid some unnecessary computation if the timeout is negative.

Spotted by CodeSonar
Closes #13919

2 years agoRELEASE-NOTES: synced
Daniel Stenberg [Tue, 11 Jun 2024 07:37:32 +0000 (09:37 +0200)] 
RELEASE-NOTES: synced

2 years agocurl: support -w '%{num_retries}
Daniel Stenberg [Fri, 7 Jun 2024 22:18:44 +0000 (00:18 +0200)] 
curl: support -w '%{num_retries}

Suggested-by: Jay Guerette
Ref: https://github.com/curl/curl/discussions/13901
Closes #13910

2 years agopytest: include testenv/vsftpd.py in dist tarball
Guilherme Puida [Mon, 10 Jun 2024 23:01:38 +0000 (20:01 -0300)] 
pytest: include testenv/vsftpd.py in dist tarball

Closes #13918

2 years agoDISTROS: add MSYS2 (native) links
Viktor Szakats [Mon, 10 Jun 2024 20:36:16 +0000 (22:36 +0200)] 
DISTROS: add MSYS2 (native) links

Also rename existing 'MSYS2' to 'MSYS2 (mingw-w64)'.

Closes #13915

2 years agotool_writeout: get certinfo only when needing it
Daniel Stenberg [Mon, 10 Jun 2024 11:57:01 +0000 (13:57 +0200)] 
tool_writeout: get certinfo only when needing it

Removes a fairly expensive libcurl call when not necessary

Closes #13914

2 years agotool_writeout: bsearch the variable name
Daniel Stenberg [Mon, 10 Jun 2024 11:33:16 +0000 (13:33 +0200)] 
tool_writeout: bsearch the variable name

As the list of variable names grows, doing a simple loop to find the
name get increasingly worse. This switches to a bsearch.

Also: do a case sensitive check for the variable name. The names have
not been documented to be case insensitive and there is no point in
having them so.

Closes #13914

2 years agomulti: prepare multi_wait() for future shutdown usage
Stefan Eissing [Thu, 6 Jun 2024 10:40:38 +0000 (12:40 +0200)] 
multi: prepare multi_wait() for future shutdown usage

- new struct curl_pollfds and struct curl_waitfds
- add structs and methods to init/add/cleanup an array of pollfd and
  struct curl_waitfd. Use in multi_wait() and multi_waitfds() to
  populate the sets for polling.
- place USE_WINSOCK WSAEventSelect() setting into a separate loop over
  all collected pfds

Closes #13900

2 years agoconnection: shutdown TLS (for FTP) better
Stefan Eissing [Fri, 7 Jun 2024 08:12:39 +0000 (10:12 +0200)] 
connection: shutdown TLS (for FTP) better

This adds connection shutdown infrastructure and first use for FTP. FTP
data connections, when not encountering an error, are now shut down in a
blocking way with a 2sec timeout.

    - add cfilter `Curl_cft_shutdown` callback
    - keep a shutdown start timestamp and timeout at connectdata
    - provide shutdown timeout default and member in
      `data->set.shutdowntimeout`.
    - provide methods for starting, interrogating and clearing
      shutdown timers
    - provide `Curl_conn_shutdown_blocking()` to shutdown the
      `sockindex` filter chain in a blocking way. Use that in FTP.
    - add `Curl_conn_cf_poll()` to wait for socket events during
      shutdown of a connection filter chain.
      This gets the monitoring sockets and events via the filters
      "adjust_pollset()" methods. This gives correct behaviour when
      shutting down a TLS connection through a HTTP/2 proxy.
    - Implement shutdown for all socket filters
      - for HTTP/2 and h2 proxying to send GOAWAY
      - for TLS backends to the best of their capabilities
      - for tcp socket filter to make a final, nonblocking
        receive to avoid unwanted RST states
    - add shutdown forwarding to happy eyeballers and
      https connect ballers when applicable.

Closes #13904

2 years agoCURLOPT_CONNECTTIMEOUT*: clarify, document the milliseond version
Daniel Stenberg [Fri, 7 Jun 2024 08:44:28 +0000 (10:44 +0200)] 
CURLOPT_CONNECTTIMEOUT*: clarify, document the milliseond version

Provide an explanation in the CURLOPT_CONNECTTIMEOUT_MS page instead of
just referring to the non-MS version.

Closes #13905

2 years agocmdline-opts: tidy up --ip-tos and --mptcp
Daniel Stenberg [Fri, 7 Jun 2024 09:02:46 +0000 (11:02 +0200)] 
cmdline-opts: tidy up --ip-tos and --mptcp

To make them render nicer in the manpage and minor polish.

Closes #13906

2 years agoRELEASE-NOTES: synced
Daniel Stenberg [Fri, 7 Jun 2024 09:08:46 +0000 (11:08 +0200)] 
RELEASE-NOTES: synced

2 years agocurl: (on linux) add MPTCP support
Dorian Craps [Thu, 4 Apr 2024 09:42:50 +0000 (11:42 +0200)] 
curl: (on linux) add MPTCP support

Multipath TCP (MPTCP), standardized in RFC8684 [1], is a TCP extension
that enables a TCP connection to use different paths.

Multipath TCP has been used for several use cases. On smartphones, MPTCP
enables seamless handovers between cellular and Wi-Fi networks while
preserving established connections. This use-case is what pushed Apple
to use MPTCP since 2013 in multiple applications [2]. On dual-stack
hosts, Multipath TCP enables the TCP connection to automatically use the
best performing path, either IPv4 or IPv6. If one path fails, MPTCP
automatically uses the other path.

To benefit from MPTCP, both the client and the server have to support
it. Multipath TCP is a backward-compatible TCP extension that is enabled
by default on recent Linux distributions (Debian, Ubuntu, Redhat, ...).
Multipath TCP is included in the Linux kernel since version 5.6 [3]. To
use it on Linux, an application must explicitly enable it when creating
the socket. No need to change anything else in the application.

This attached patch adds an --mptcp option which allows the creation of
an MPTCP socket instead of TCP on Linux. If Multipath TCP is not
supported on the system, an error will be reported. It is important to
note that if the end server doesn't support MPTCP, the connection will
continue after a seamless fallback to TCP.

Link: https://www.rfc-editor.org/rfc/rfc8684.html
Link: https://www.tessares.net/apples-mptcp-story-so-far/
Link: https://www.mptcp.dev
Co-developed-by: Dorian Craps (@CrapsDorian) <doriancraps@gmail.com>
Co-developed-by: Olivier Bonaventure (@obonaventure) <Olivier.Bonaventure@uclouvain.be>
Co-developed-by: Matthieu Baerts (@matttbe) <matttbe@kernel.org>
Signed-off-by: Dorian Craps <dorian.craps@student.vinci.be>
Closes #13278

2 years agocurl: support IP Type of Service / Traffic Class: --ip-tos
Orgad Shaneh [Sun, 12 May 2024 05:31:15 +0000 (08:31 +0300)] 
curl: support IP Type of Service / Traffic Class: --ip-tos

Add --ip-tos option to the command line tool for setting TOS for IPv4 or
Traffic Class for IPv6.

Closes #13606

2 years agosocketpair: provide `Curl_socketpair` only when `!CURL_DISABLE_SOCKETPAIR`
Andy Pan [Wed, 5 Jun 2024 08:08:15 +0000 (16:08 +0800)] 
socketpair: provide `Curl_socketpair` only when `!CURL_DISABLE_SOCKETPAIR`

Ref: https://curl.se/dev/log.cgi?id=20240605035856-3529577

Reported-by: Marcel Raad
Closes #13888

2 years agonoproxy: test bad ipv6 net size first
Daniel Stenberg [Thu, 6 Jun 2024 20:58:45 +0000 (22:58 +0200)] 
noproxy: test bad ipv6 net size first

No need to parse anything if the size is out of range.

Added some tests to this effect to test 1614.

Closes #13902

2 years agomanagen: warn on excessively long help texts
Daniel Stenberg [Wed, 5 Jun 2024 12:08:02 +0000 (14:08 +0200)] 
managen: warn on excessively long help texts

Help texts at 49 characters or longer get a warning displayed because
they make --help output uglier and we should make an effort to keep the
help texts short and succinct.

The warning is only for display, it does not break the build. That is
left for the future if necessary.

I picked 49 because the longest current text is 48.

Closes #13895

2 years agolib: tidy up types and casts
Viktor Szakats [Sun, 2 Jun 2024 20:30:52 +0000 (22:30 +0200)] 
lib: tidy up types and casts

Cherry-picked from #13489
Closes #13862

2 years agocmdline-opts/ech.md: shorten the help text
Daniel Stenberg [Wed, 5 Jun 2024 11:44:02 +0000 (13:44 +0200)] 
cmdline-opts/ech.md: shorten the help text

To make --help look sensible again

Closes #13894

2 years agocmdline-opts/_PROTOCOLS.md: mention WS(S)
Daniel Stenberg [Wed, 5 Jun 2024 09:08:33 +0000 (11:08 +0200)] 
cmdline-opts/_PROTOCOLS.md: mention WS(S)

Closes #13891

2 years agoGHA: disable TFTP and WebSockets tests in old-mingw-w64
Viktor Szakats [Wed, 5 Jun 2024 10:35:59 +0000 (12:35 +0200)] 
GHA: disable TFTP and WebSockets tests in old-mingw-w64

Follow-up to 03bd16e5339b069aa9409b75fcab2b21fd3a4b16 #13860
Follow-up to def7d05382743ea7aa1d356d1e41dcb22ecdd4d7

2 years agocmdline-opts/fail.md: expand and clarify
Daniel Stenberg [Wed, 5 Jun 2024 08:52:29 +0000 (10:52 +0200)] 
cmdline-opts/fail.md: expand and clarify

Closes #13890

2 years agodoh-insecure.md: expand
Daniel Stenberg [Wed, 5 Jun 2024 08:18:21 +0000 (10:18 +0200)] 
doh-insecure.md: expand

Closes #13889

2 years agocmdline: expand proxy option explanations
Daniel Stenberg [Wed, 5 Jun 2024 08:10:47 +0000 (10:10 +0200)] 
cmdline: expand proxy option explanations

- do less references to other options
- provide more specific text about proxies
- added more see-also references

Closes #13887

2 years agocmdline-opts: expand the parallel explanations
Daniel Stenberg [Wed, 5 Jun 2024 07:34:32 +0000 (09:34 +0200)] 
cmdline-opts: expand the parallel explanations

Closes #13886

2 years agoRELEASE-NOTES: synced
Daniel Stenberg [Wed, 5 Jun 2024 07:09:17 +0000 (09:09 +0200)] 
RELEASE-NOTES: synced

2 years agovtls: new io_need flags for poll handling
Stefan Eissing [Tue, 4 Jun 2024 12:00:12 +0000 (14:00 +0200)] 
vtls: new io_need flags for poll handling

- decouple need to recv/send from negotiation state, we need
  this later in shutdown handling as well
- move ssl enums from urldata.h to vtls_int.h
- implement use of `connssl->io_need` in vtls.c. and all backends

Closes #13879

2 years agocfilters: make Curl_conn_connect always assign 'done'
Daniel Stenberg [Wed, 5 Jun 2024 06:31:11 +0000 (08:31 +0200)] 
cfilters: make Curl_conn_connect always assign 'done'

It could return error without assigning it, and we have a caller in
multi.c that assumes it gets set.

Spotted by CodeSonar
Closes #13884

2 years agoCURLOPT_INTERFACE.md: quote the less-than and larger-than
Daniel Stenberg [Wed, 5 Jun 2024 06:29:50 +0000 (08:29 +0200)] 
CURLOPT_INTERFACE.md: quote the less-than and larger-than

Fixes the warnings shown on stderr.

Follow-up from 3060557af702dd5

Closes #13883

2 years agocmdline-opts/interface.md: expand the documentation
Daniel Stenberg [Tue, 4 Jun 2024 22:06:28 +0000 (00:06 +0200)] 
cmdline-opts/interface.md: expand the documentation

Explain the syntax it supports.

Closes #13882

2 years agourl: allow DoH transfers to override max connection limit
Daniel Stenberg [Tue, 4 Jun 2024 15:00:05 +0000 (17:00 +0200)] 
url: allow DoH transfers to override max connection limit

When reaching the set maximum limit of allowed connections, allow a new
connection anyway if the transfer is created for the (internal) purpose
of doing a DoH name resolve. Otherwise, unrelated "normal" transfers can
starve out new DoH requests making it impossible to name resolve for new
transfers.

Bug: https://curl.se/mail/lib-2024-06/0001.html
Reported-by: kartatz
Closes #13880

2 years agowindows: fix UWP builds, add GHA job
Viktor Szakats [Mon, 3 Jun 2024 21:06:56 +0000 (23:06 +0200)] 
windows: fix UWP builds, add GHA job

Add new job to test building for UWP (aka `CURL_WINDOWS_APP`).

Fix fallouts when building for UWP:
- rand: do not use `BCryptGenRandom()`.
- cmake: disable using win32 LDAP.
- cmake: disable telnet.
- version_win32: fix code before declaration.
- schannel: disable `HAS_MANUAL_VERIFY_API`.
- schannel: disable `SSLSUPP_PINNEDPUBKEY`
  and make `schannel_checksum()` a stub.
  Ref: e178fbd40a896f2098278ae61e1166c88e7b31d0 #1429
- schannel: make `cert_get_name_string()` a failing stub.
- system_win32: make `Curl_win32_impersonating()` a failing stub.
- system_win32: try to fix `Curl_win32_init()` (untested).
- threads: fix to use `CreateThread()`.
- src: disable searching `PATH` for the CA bundle.
- src: disable bold text support and capability detection.
- src: disable `getfiletime()`/`setfiletime()`.
- tests: make `win32_load_system_library()` a failing stub.
- tests/server/util: make it compile.
- tests/server/sockfilt: make it compile.
- tests/lib3026: fix to use `CreateThread()`.

See individual commits for build error details.

Some of these fixes may have better solutions, and some may not work
as expected. The goal of this patch is to make curl build for UWP.

Closes #13870

2 years agosocket: support binding to interface *AND* IP
Orgad Shaneh [Fri, 17 May 2024 11:44:44 +0000 (14:44 +0300)] 
socket: support binding to interface *AND* IP

Introduce new notation for CURLOPT_INTERFACE / --interface:
ifhost!<interface>!<host>

Binding to an interface doesn't set the address, and an interface can
have multiple addresses.

When binding to an address (without interface), the kernel is free to
choose the route, and it can route through any device that can access
the target address, not necessarily the one with the chosen address.

Moreover, it is possible for different interfaces to have the same IP
address, on which case we need to provide a way to be more specific.

Factor out the parsing part of interface option, and add unit tests:
1663.

Closes #13719

2 years agosocketpair: add `eventfd` and use `SOCK_NONBLOCK` for `socketpair()`
Andy Pan [Sat, 1 Jun 2024 18:26:11 +0000 (02:26 +0800)] 
socketpair: add `eventfd` and use `SOCK_NONBLOCK` for `socketpair()`

Currently, we use `pipe` for `wakeup_create`, which requires ***two***
file descriptors. Furthermore, given its complexity inside, `pipe` is a
bit heavyweight for just a simple event wait/notify mechanism.

`eventfd` would be a more suitable solution for this kind of scenario,
kernel also advocates for developers to use `eventfd` instead of `pipe`
in some simple use cases:

    Applications can use an eventfd file descriptor instead of a pipe
    (see pipe(2) in all cases where a pipe is used simply to signal
    events. The kernel overhead of an eventfd file descriptor is much
    lower than that of a pipe, and only one file descriptor is required
    (versus the two required for a pipe).

This change adds the new backend of `eventfd` for `wakeup_create` and
uses it where available, eliminating the overhead of `pipe`. Also, it
optimizes the `wakeup_create` to eliminate the system calls that make
file descriptors non-blocking by moving the logic of setting
non-blocking flags on file descriptors to `socketpair.c` and using
`SOCK_NONBLOCK` for `socketpair(2)`, `EFD_NONBLOCK` for `eventfd(2)`.

Ref:
https://man7.org/linux/man-pages/man7/pipe.7.html
https://man7.org/linux/man-pages/man2/eventfd.2.html
https://man7.org/linux/man-pages/man2/socketpair.2.html
https://www.gnu.org/software/gnulib/manual/html_node/eventfd.html

Closes #13874

2 years agoci: update github/codeql-action digest to 2e230e8
renovate[bot] [Tue, 4 Jun 2024 15:52:27 +0000 (15:52 +0000)] 
ci: update github/codeql-action digest to 2e230e8

Closes #13881

2 years agoexamples/threaded-ssl: remove locking callback code
Jay Satiro [Sat, 1 Jun 2024 18:41:41 +0000 (14:41 -0400)] 
examples/threaded-ssl: remove locking callback code

- Remove the locking callback code that demonstrates how to meet
  requirements of threading libraries (mainly OpenSSL).

Locking callback code has not been needed for many years. According to
the documentation for OpenSSL and GnuTLS they are thread-safe by design,
assuming support for the underlying OS threading API is built-in.

Ref: https://github.com/curl/curl/pull/13850#issuecomment-2143538458

Closes https://github.com/curl/curl/pull/13851

2 years agotests: delete redundant `!MSDOS` guard
Viktor Szakats [Tue, 4 Jun 2024 11:40:13 +0000 (13:40 +0200)] 
tests: delete redundant `!MSDOS` guard

This fix was supposed to be committed earlier, but ended up missing from
the final commit.

Follow-up to e9a7d4a1c8377dbcf9a2d94365f60e3e5dff48f8 #12376
Closes #13878

2 years agolib: fix thread entry point to return `DWORD` on WinCE
Viktor Szakats [Tue, 4 Jun 2024 00:41:26 +0000 (02:41 +0200)] 
lib: fix thread entry point to return `DWORD` on WinCE

We already do this in `tests/server/util.c`:
https://github.com/curl/curl/blob/97e5e37cc8269660bc5d4a1936f10f2390b97c5a/tests/server/util.c#L604-L606
and in `sockfilt.c`, `lib3026.c`.

Before this patch it returned `unsigned int`.

Closes #13877

2 years agosocket: use SOCK_NONBLOCK to eliminate extra system call
Andy Pan [Sun, 2 Jun 2024 06:40:42 +0000 (14:40 +0800)] 
socket: use SOCK_NONBLOCK to eliminate extra system call

Every time function `cf_socket_open()` is called to create a socket,
`curlx_nonblock()` is called to make that socket non-blocking. And
`curlx_nonblock()` will cost us 1 or 2 system calls (2 for `fcntl()`, 1
for `ioctl()`, etc.), meanwhile, tucking `SOCK_NONBLOCK` and
`SOCK_CLOEXEC` into the `type` argument for `socket()` is widely
supported across UNIX-like OS: Linux, *BSD, Solaris, etc. With that
ability, we can save 1 or 2 system calls on each socket.

Another change in this PR is to eliminate the redundant
`curlx_nonblock()` call on the socket in `cf_udp_setup_quic()` as that
socket created by `cf_socket_open()` is already non-blocking.

Ref:
https://man7.org/linux/man-pages/man2/socket.2.html
https://man.freebsd.org/cgi/man.cgi?socket(2)
https://man.dragonflybsd.org/?command=socket&section=2
https://man.netbsd.org/socket.2
https://man.openbsd.org/socket
https://docs.oracle.com/cd/E88353_01/html/E37843/socket-3c.html
https://illumos.org/man/3SOCKET/socket
...

Closes #13855

2 years agoGHA: show cmake error log in Windows and non-native workflows
Viktor Szakats [Tue, 4 Jun 2024 00:46:05 +0000 (02:46 +0200)] 
GHA: show cmake error log in Windows and non-native workflows

CMake configure doesn't fail often, but when it does, it helps to see
its `CMakeFiles/CMakeConfigureLog.yaml` output. This file is present
since CMake v3.26:
  https://cmake.org/cmake/help/v3.26/manual/cmake-configure-log.7.html

(Older CMake versions save similar contend to
`CMakeFiles\CMakeOutput.log` and
`CMakeFiles\CMakeError.log`. This patch doesn't deal with that because
the workflows touched are all running a newer CMake.)

After this patch, we dump the content if cmake fails. Syncing this with
autotools, where we already did that.

Closes #13872

2 years agoGHA: switch a Windows job to UCRT (gcc)
Viktor Szakats [Tue, 4 Jun 2024 09:20:20 +0000 (11:20 +0200)] 
GHA: switch a Windows job to UCRT (gcc)

Cherry-picked from #13870

2 years agocurl-config: revert to backticks to support old target envs
Viktor Szakats [Tue, 4 Jun 2024 02:19:32 +0000 (04:19 +0200)] 
curl-config: revert to backticks to support old target envs

Make an exception for `curl-config` because this script that may be
running on any target system, including old ones, e.g. SunOS 5.10.

Reported-by: Alejandro R. Sedeño
Ref: https://github.com/curl/curl/pull/13307#issuecomment-2146427358
Follow-up to fa69b41c7790fab86fd363242c81d8ef2e89e183 #13307
Closes #13871

2 years agombedtls: v3.6.0 workarounds
Stefan Eissing [Fri, 31 May 2024 11:01:17 +0000 (13:01 +0200)] 
mbedtls: v3.6.0 workarounds

- add special sauce to disable unwanted peer verification by mbedtls
  when negotiating TLS v1.3
- add special sauce for MBEDTLS_ERR_SSL_RECEIVED_NEW_SESSION_TICKET
  return code on *writing* TLS data. We assume the data had not been
  written and EAGAIN.
- return correct Curl error code when peer verification failed.
- disable test_08_05 with 50 HTTP/1.1 connections, as mbedtls reports a
  memory allocation failed during handshake.
- bump CI mbedtls version to 3.6.0

Fixes #13653
Closes #13838

2 years agognutls: support CA caching
Stefan Eissing [Mon, 27 May 2024 14:50:15 +0000 (16:50 +0200)] 
gnutls: support CA caching

- similar to openssl, use a shared 'credentials' instance
  among TLS connections with a plain configuration.
- different to openssl, a connection with a client certificate
  is not eligible to sharing.
- document CURLOPT_CA_CACHE_TIMEOUT in man page

Closes #13795

2 years agotests: don't log buffer length in throwing away message
Dan Fandrich [Tue, 4 Jun 2024 05:19:14 +0000 (22:19 -0700)] 
tests: don't log buffer length in throwing away message

It's not available at that point, and it will be written in the
non-error case right afterward.

2 years agotests: log "Throwing away" messages before throwing away
Dan Fandrich [Mon, 3 Jun 2024 20:25:29 +0000 (13:25 -0700)] 
tests: log "Throwing away" messages before throwing away

In case the read that follows hangs we'll get a clue as to what it was
doing.

2 years agoCI: reduce memory request for FreeBSD builds
Dan Fandrich [Fri, 31 May 2024 01:39:12 +0000 (18:39 -0700)] 
CI: reduce memory request for FreeBSD builds

Also, add a comment with link to the Cirrus credit page since it's not
easy to find otherwise.

2 years agotcpkeepalive: support setting TCP keep-alive parameters on Solaris <11.4
Andy Pan [Mon, 3 Jun 2024 07:15:55 +0000 (15:15 +0800)] 
tcpkeepalive: support setting TCP keep-alive parameters on Solaris <11.4

Solaris didn't support TCP_KEEPIDLE and TCP_KEEPINTVL until 11.4,
before that it use TCP_KEEPALIVE_THRESHOLD and TCP_KEEPALIVE_ABORT_THRESHOLD
as the substitute. Therefore, for Solaris <11.4 we need to use this substitute
for setting TCP keep-alive parameters.

Ref:
https://docs.oracle.com/cd/E86824_01/html/E54777/tcp-7p.html
https://docs.oracle.com/cd/E88353_01/html/E37851/tcp-4p.html

Closes #13864

2 years agoKNOWN_BUGS: quiche: QUIC connection is draining
Daniel Stenberg [Mon, 3 Jun 2024 08:10:47 +0000 (10:10 +0200)] 
KNOWN_BUGS: quiche: QUIC connection is draining

Closes #12037
Closes #13867

2 years agoKNOWN_BUGS: aws-sigv4 has problems with particular URLs
Daniel Stenberg [Mon, 3 Jun 2024 08:04:50 +0000 (10:04 +0200)] 
KNOWN_BUGS: aws-sigv4 has problems with particular URLs

Closes #13058
Closes #13866

2 years agoKNOWN_BUGS: aws-sigv4 does not handle multipart/form-data correctly
Daniel Stenberg [Mon, 3 Jun 2024 08:02:33 +0000 (10:02 +0200)] 
KNOWN_BUGS: aws-sigv4 does not handle multipart/form-data correctly

Closes #13351
Closes #13866

2 years agoRELEASE-NOTES: synced
Daniel Stenberg [Mon, 3 Jun 2024 08:43:06 +0000 (10:43 +0200)] 
RELEASE-NOTES: synced

2 years agoGHA: fix old mingw-w64 32-bit job
Viktor Szakats [Sun, 2 Jun 2024 23:11:47 +0000 (01:11 +0200)] 
GHA: fix old mingw-w64 32-bit job

This toolchain resides in the `mingw32` directory. Make sure to
configure `PATH` accordingly.

Before this patch, it pointed to a non-existing `mingw64` directory,
making the job use the wrong compiler (gcc 12, 64-bit).

Follow-up to e838b341a08b44d4a8486fb0d3f15d12fc794c62 #12927
Closes #13863

2 years agotool_cb_hdr: return error for failed header writes
Daniel Stenberg [Sun, 2 Jun 2024 15:16:58 +0000 (17:16 +0200)] 
tool_cb_hdr: return error for failed header writes

By checking that fflush() works.

Reported-by: Sebastian Andersson
Fixes #13836
Closes #13859

2 years agoGHA: bump all build jobs to nproc+1
Viktor Szakats [Tue, 28 May 2024 07:01:49 +0000 (09:01 +0200)] 
GHA: bump all build jobs to nproc+1

- bump rest of the workflows (windows, macos, distrocheck).

- non-native virtualized envs have 2 CPUs, bump down accordingly.
  (for `vmactions/omnios-vm` it's just a guess.)

- bump all to nproc + 1.

Follow-up to e838b341a08b44d4a8486fb0d3f15d12fc794c62 #12927
Closes #13807

2 years agoGHA: disable MQTT and WebSocket tests in Windows jobs
Viktor Szakats [Sun, 2 Jun 2024 17:30:19 +0000 (19:30 +0200)] 
GHA: disable MQTT and WebSocket tests in Windows jobs

Trying to figure out which category is causing the remaining hangs.

Follow-up to def7d05382743ea7aa1d356d1e41dcb22ecdd4d7
Closes #13860

2 years agolib/v*: tidy up types and casts
Viktor Szakats [Mon, 13 May 2024 15:56:19 +0000 (17:56 +0200)] 
lib/v*: tidy up types and casts

Also add a couple of negative checks.

Cherry-picked from #13489
Closes #13622

2 years agoGHA: fix caching old mingw-w64 toolchains in the Windows workflow
Viktor Szakats [Sun, 2 Jun 2024 16:22:48 +0000 (18:22 +0200)] 
GHA: fix caching old mingw-w64 toolchains in the Windows workflow

- stop altering the `PATH` via `GITHUB_ENV`. This confused the
  `actions/cache` post-job, which needs to run in the exact same
  environment as its pre-job, to have a consistent cache entry "version"
  hash. Altering the `PATH` via `GITHUB_ENV` spills into the the
  post-job and breaks this hash. GHA doesn't reset the env automatically
  and I have not found a way to do it manually.

- add double-quotes where missing.

- move cache directory under `USERPROFILE` to not rely on absolute
  paths.

- make cache directory flatter and versionless.

Follow-up to 0914d8aadddac0d1459673d5b7f77e8f3378b22b #13759
Closes #13856

2 years agoci: pin actions/github-script action to 60a0d83
renovate[bot] [Sat, 1 Jun 2024 08:58:26 +0000 (08:58 +0000)] 
ci: pin actions/github-script action to 60a0d83

Closes #13846

2 years agox509asn1: add some common ECDSA OIDs
Bo Anderson [Sun, 2 Jun 2024 13:17:10 +0000 (14:17 +0100)] 
x509asn1: add some common ECDSA OIDs

Closes #13857

2 years agoci: update rojopolis/spellcheck-github-actions digest to e36f662
renovate[bot] [Sat, 1 Jun 2024 18:44:11 +0000 (18:44 +0000)] 
ci: update rojopolis/spellcheck-github-actions digest to e36f662

Closes #13852

2 years agox509asn1: fallback to dotted OID representation
Bo Anderson [Sun, 2 Jun 2024 13:18:20 +0000 (14:18 +0100)] 
x509asn1: fallback to dotted OID representation

Reported-by: Luke Hamburg
Fixes #13845
Closes #13858

2 years agorequest.md: language fix
Lee Li [Sun, 2 Jun 2024 01:42:52 +0000 (09:42 +0800)] 
request.md: language fix

improved for better readability and correctness

Closes #13854

2 years agovtls: deprioritize Secure Transport
MonkeybreadSoftware [Tue, 7 May 2024 07:45:15 +0000 (09:45 +0200)] 
vtls: deprioritize Secure Transport

Moved Secure Transport behind OpenSSL, so we can build CURL with both
and prefer using OpenSSL over Secure Transport by default.

Closes #13547

2 years agourlapi: add CURLU_NO_GUESS_SCHEME
Daniel Stenberg [Sat, 1 Jun 2024 10:03:34 +0000 (12:03 +0200)] 
urlapi: add CURLU_NO_GUESS_SCHEME

Used for extracting:

- when used asking for a scheme, it will return CURLUE_NO_SCHEME if the
  stored information was a guess

- when used asking for a URL, the URL is returned without a scheme, like
  when previously given to the URL parser when it was asked to guess

- as soon as the scheme is set explicitly, it is no longer internally
  marked as guessed

The idea being:

1. allow a user to figure out if a URL's scheme was set as a result of
  guessing

2. extract the URL without a guessed scheme

3. this makes it work similar to how we already deal with port numbers

Extend test 1560 to verify.

Closes #13616

2 years agowolfssl: support CA caching
Daniel Stenberg [Sat, 1 Jun 2024 10:24:42 +0000 (12:24 +0200)] 
wolfssl: support CA caching

As a bonus, add SSLSUPP_CA_CACHE to let TLS backends signal its support
for this so that *setopt() return error if there is no support.

Closes #13786

2 years agosocket: change TCP keepalive from ms to seconds on DragonFly BSD
Andy Pan [Sat, 1 Jun 2024 10:36:04 +0000 (18:36 +0800)] 
socket: change TCP keepalive from ms to seconds on DragonFly BSD

DragonFly BSD changed the time unit for TCP keep-alive from milliseconds
to seconds since v5.8, thus setting the keepalive options with
milliseconds with curl/libcurl will result in unexpected behaviors on
DragonFlyBSD 5.8+

Distinguish the DragonFly BSD versions and use the proper time units
accordingly.

Ref:
  https://lists.dragonflybsd.org/pipermail/commits/2019-July/719125.html
  https://github.com/DragonFlyBSD/DragonFlyBSD/blob/965b380e960908836b97aa034fa2753091e0172e/sys/sys/param.h#L207

Fixes #13847
Closes #13848

2 years agocurlver.h: aiming for 8.9.0
Daniel Stenberg [Sat, 1 Jun 2024 10:26:20 +0000 (12:26 +0200)] 
curlver.h: aiming for 8.9.0

2 years agonoproxy: patterns need to be comma separated
Daniel Stenberg [Sat, 1 Jun 2024 10:25:12 +0000 (12:25 +0200)] 
noproxy: patterns need to be comma separated

or they will not parse correctly.

Mentioned in DEPRECATED since Janurary 2023 (in 7ad8a7ba9ebdedc).

Closes #13789

2 years agosectransp: remove large cipher table
Jan Venekamp [Wed, 29 May 2024 11:58:53 +0000 (13:58 +0200)] 
sectransp: remove large cipher table

Previously a large table of ciphers was used to determine the default
ciphers and to lookup manually selected ciphers names.

With the lookup of the manually selected cipher names moved to
Curl_cipher_suite_walk_str() the large table is no longer needed for
that purpose.

The list of manually selected cipher can now be intersected with the
ciphers supported by Secure Transport (SSLGetSupportedCiphers()),
instead of using the fixed table for that.

The other use of the table was to filter the list of all supported
ciphers offered by Secure Transport to create a list of ciphers to
use by default, excluding ciphers in the table marked as weak.

Instead of using a complement based approach (exclude weak), switch
to using an intersection with a smaller list of ciphers deemed
appropriate.

Closes #13823

2 years agoGHA: unify http3 workflows into one
Tatsuhiro Tsujikawa [Tue, 21 May 2024 09:50:57 +0000 (18:50 +0900)] 
GHA: unify http3 workflows into one

This commit unifies the following http3 workflows into http3-linux.yml:

- ngtcp2-linux.yml
- osslq-linux.yml
- quiche-linux.yml

The idea is better use of the build cache. Previously, they
independently create caches with the same key. Some of the caches
include source code and intermediate object files, which makes cache
quite large. In this commit, only built artifacts are cached, which
drastically reduces the cache size. OpenSSL v3, mod_h2 and quiche caches
still include all stuff, but they are left for the later improvement.
Because the contents of the cache have been changed, the cache keys are
also changed to include the word "http3".

Closes #13841

2 years agoopenSSL: fix hostname handling when using ECH
Stephen Farrell [Wed, 29 May 2024 11:32:32 +0000 (12:32 +0100)] 
openSSL: fix hostname handling when using ECH

Reported-by: vvb2060
Fixes #13818
Closes #13822

2 years agoci: update github/codeql-action digest to f079b84
renovate[bot] [Fri, 31 May 2024 09:55:28 +0000 (09:55 +0000)] 
ci: update github/codeql-action digest to f079b84

Closes #13837

2 years agoRELEASE-NOTES: synced
Daniel Stenberg [Sat, 1 Jun 2024 08:40:20 +0000 (10:40 +0200)] 
RELEASE-NOTES: synced

2 years agocurl_multi_poll.md: expand the example with an custom file descriptor
Daniel Stenberg [Fri, 31 May 2024 12:42:45 +0000 (14:42 +0200)] 
curl_multi_poll.md: expand the example with an custom file descriptor

Closes #13842

2 years agoDISTROS: add a link to the list archive
Christian Heusel [Fri, 31 May 2024 12:44:02 +0000 (14:44 +0200)] 
DISTROS: add a link to the list archive

Related to https://github.com/curl/curl/discussions/13833

Signed-off-by: Christian Heusel <christian@heusel.eu>
Closes #13843

2 years agoautoconf: remove 'deeper' checks for `AC_CHECK_FUNCS`
Matt Jolly [Thu, 30 May 2024 04:47:11 +0000 (14:47 +1000)] 
autoconf: remove 'deeper' checks for `AC_CHECK_FUNCS`

The net effect of the deeper checks is to raise implicit function decls
on modern compilers.

These checks appear to have been added ~20 years ago, relating to an
unverifiable claim about HP-UX. Autoconf support for the platform has
grown in leaps and bounds since.

It didn't cause a real problem here, but when investigating a FP this
came up. No evidence has been identified that this was actually broken
in the past, and there is no evidence that this is necessary now.

`-Werror=implicit-function-declarations` is enabled for both checks;
without a working prototype they will both fail regardless. In the
second case there will in fact never be a working prototype and
therefore it will always fail unconditionally.

`AC_CHECK_FUNCS` does effectively the same thing as the removed checks,
except it actually defines a dummy prototype to see if it links.

If `AC_CHECK_FUNCS` is broken on a given platform we have bigger
problems than trying to build cURL. This should also be faster.

Bug: https://bugs.gentoo.org/932827
Reviewed-By: Eli Schwartz <eschwartz93@gmail.com>
Closes #13830

2 years agocf-socket: improve SO_SNDBUF update for Winsock
Jay Satiro [Sun, 26 May 2024 18:56:24 +0000 (14:56 -0400)] 
cf-socket: improve SO_SNDBUF update for Winsock

- Rename: Curl_sndbufset => Curl_sndbuf_init

- Rename: win_update_buffer_size => win_update_sndbuf_size

- Save the last set SO_SNDBUF size to compare against so that we can
  avoid setsockopt calls every second.

This is a follow-up to 0b520e12 which moved the SO_SNDBUF update check
into cf-socket. This change improves it further by making the function
names easier to understand and reducing the amount of setsockopt calls.

Closes https://github.com/curl/curl/pull/13827

2 years agotidy-up: use consistent casing for Windows directories
Viktor Szakats [Thu, 30 May 2024 10:26:12 +0000 (12:26 +0200)] 
tidy-up: use consistent casing for Windows directories

C:\Windows\System32

Closes #13832

2 years agoGHA: use ubuntu-latest with OmniOS job
Viktor Szakats [Thu, 30 May 2024 10:00:27 +0000 (12:00 +0200)] 
GHA: use ubuntu-latest with OmniOS job

It's the same as ubuntu-22.04.

Also update OmniOS package search link.

Closes #13831

2 years agoGHA: adjust parallel job counts
Ayesh Karunaratne [Mon, 12 Feb 2024 07:05:35 +0000 (14:05 +0700)] 
GHA: adjust parallel job counts

Adjusts the `make -j` flag to match the latest GitHub-hosted runner
hardware specs[^1]:

 - `ubuntu-latest` on 4 CPU cores
 - `macos-latest` on 3 CPU cores

The processor count is ideally obtained from `nproc`, but setting env
vars from the current CI yaml files is not possible because they expect
literal strings.

[^1]: https://docs.github.com/en/actions/using-github-hosted-runners/about-github-hosted-runners/about-github-hosted-runners#standard-github-hosted-runners-for-public-repositories

Closes #12927

2 years agoget.d: clarify the explanation
pszlazak [Sun, 19 May 2024 15:35:47 +0000 (17:35 +0200)] 
get.d: clarify the explanation

Closes #13706

2 years agocurl_url_set.md: libcurl only parses :// URLs
Daniel Stenberg [Wed, 29 May 2024 09:33:41 +0000 (11:33 +0200)] 
curl_url_set.md: libcurl only parses :// URLs

Make it clearer in the documentation.

Closes #13821

2 years agomulti: fix multi_wait() timeout handling
Stefan Eissing [Wed, 29 May 2024 15:13:34 +0000 (17:13 +0200)] 
multi: fix multi_wait() timeout handling

- determine the actual poll timeout *after* all sockets
  have been collected. Protocols and connection filters may
  install new timeouts during collection.
- add debug logging to test1533 where the mistake was noticed

Reported-by: Matt Jolly
Fixes #13782
Closes #13825

2 years agolib: prefer `var = time(NULL)` over `time(&var)`
Viktor Szakats [Tue, 28 May 2024 14:16:01 +0000 (16:16 +0200)] 
lib: prefer `var = time(NULL)` over `time(&var)`

Following up on previous occurrences showing up as gcc warnings, replace
the remaining `time(&var)` calls with `var = time(NULL)`, though these
aren't specifically causing compiler warnings. These are in the TFTP
client code (`lib/tftp.c`), except one which is in a debug branch in
`lib/http_aws_sigv4.c`.

What's unexplainable is that this patch seems to mitigate TFTP tests
often hanging or going into an infinite loop on GHA windows workflows
with MSYS2, mingw-w64 and MSVC (Cygwin is unaffected):
  https://github.com/curl/curl/pull/13599#issuecomment-2119372376
TFTP hangs did not entirely disappear though, so could be unrelated.

`time()` docs:
https://learn.microsoft.com/en-us/cpp/c-runtime-library/reference/time-time32-time64
https://manpages.debian.org/bookworm/manpages-dev/time.2.en.html

Follow-up to 58ca0a2f0743a586716ca357c382b29e3f08db69 #13800
Follow-up to d0728c9109629ee82b855b350a4c3f1f52ee61df #13643
Closes #13815

2 years agowinsock: move SO_SNDBUF update into cf-socket
Stefan Eissing [Fri, 24 May 2024 08:09:32 +0000 (10:09 +0200)] 
winsock: move SO_SNDBUF update into cf-socket

- Move the code that updates the SO_SNDBUF size for Windows to
  cf_socket_send.

Prior to this change the code was in readwrite_upload but the socket
filter is the more appropriate place because it applies to all sends.

Background:

For Windows users SO_SNDBUF (the total per-socket buffer size reserved
by Winsock for sends) is updated dynamically by libcurl during the
transfer. This is because Windows does not do it automatically for
non-blocking sockets and without it the performance of large transfers
may suffer.

Closes https://github.com/curl/curl/pull/13763

2 years agosectransp: use common code for cipher suite lookup
Jan Venekamp [Wed, 8 May 2024 18:40:29 +0000 (20:40 +0200)] 
sectransp: use common code for cipher suite lookup

Take advantage of the Curl_cipher_suite_walk_str() and
Curl_cipher_suite_get_str() functions introduced in commit fba9afe.

Closes #13521

2 years agoaws-sigv4: url encode the canonical path
Matthias Gatto [Mon, 27 May 2024 12:58:11 +0000 (14:58 +0200)] 
aws-sigv4: url encode the canonical path

Refactors canon_query, so it could use the encoding part of the function
to use it in the path.

As the path doesn't encode '/', but encode '=', I had to add some
conditions to know If I was doing the query or path encoding.

Also, instead of adding a `bool in_path` variable, I use `bool
*found_equals` to know if the function was called for the query or path,
as found_equals is used only in query_encoding.

Test 472 verifies.

Reported-by: Alexander Shtuchkin
Fixes #13754
Closes #13814

Signed-off-by: Matthias Gatto <matthias.gatto@outscale.com>
2 years agocd2nroff: use an empty "##" to signal end of .IP sequence
Daniel Stenberg [Tue, 28 May 2024 06:32:19 +0000 (08:32 +0200)] 
cd2nroff: use an empty "##" to signal end of .IP sequence

Like when we list a series of options and then want to add "normal" text
again afterwards.

Without this, the indentation level wrongly continues even after the
final "##" header, making following text wrongly appear to belong to the
header above.

Adjusted several curldown files to use this.

Fixes #13803
Reported-by: Jay Satiro
Closes #13806

2 years agoopenssl: fix %-specifier in infof() call
vvb2060 [Tue, 28 May 2024 17:11:44 +0000 (01:11 +0800)] 
openssl: fix %-specifier in infof() call

Closes #13816

2 years agocurl: make warnings and other messages aware of terminal width
Daniel Stenberg [Tue, 28 May 2024 07:44:27 +0000 (09:44 +0200)] 
curl: make warnings and other messages aware of terminal width

This removes unnecessary line wraps when the terminal is wider than 79
columns and it also makes messages look better in narrower terminals.

The get_terminal_columns() function is not split out into its own source
file.

Suggested-by: Elliott Balsley
Fixes #13804
Closes #13808

2 years agoGHA: enable tests 1139, 1177, 1477 on Windows
Viktor Szakats [Tue, 28 May 2024 17:19:43 +0000 (19:19 +0200)] 
GHA: enable tests 1139, 1177, 1477 on Windows

These exclusions came from the AppVeyor CI config, but they do pass now
and they are static tests with no flakiness risk.

Follow-up to 0914d8aadddac0d1459673d5b7f77e8f3378b22b #13759
Closes #13817

2 years agoCI: Improve labeler tag detection
Dan Fandrich [Mon, 13 May 2024 19:58:44 +0000 (12:58 -0700)] 
CI: Improve labeler tag detection

Also, simplify patterns with a single glob.

2 years agoGHA: disable TFTP tests in Windows jobs
Viktor Szakats [Tue, 28 May 2024 11:07:34 +0000 (13:07 +0200)] 
GHA: disable TFTP tests in Windows jobs

Shot in the dark trying to find out which tests are
hanging / going to an infinite loop.

The ones failing after 45 minutes (mingw-w64) or 30 minutes (MSVC).

Ref: https://github.com/curl/curl/pull/13599#issuecomment-2119372376

2 years agoci: update vmactions/omnios-vm digest to a61ca1e
renovate[bot] [Mon, 27 May 2024 20:56:52 +0000 (20:56 +0000)] 
ci: update vmactions/omnios-vm digest to a61ca1e

Closes #13801

2 years agoopenssl/gnutls: rectify the TLS version checks for QUIC
Daniel Stenberg [Mon, 27 May 2024 21:12:27 +0000 (23:12 +0200)] 
openssl/gnutls: rectify the TLS version checks for QUIC

The versions check wrongly complained and return error if the *minimum*
version was set to something less than 1.3. QUIC is always TLS 1.3, but
that means minimum 1.2 is still fine to ask for.

This also renames the local variable to make the mistake harder to make
in the future.

Regression shipped in 8.8.0

Follow-up to 3210101088dfa3d6a125

Reported-by: fds242 on github
Fixes #13799
Closes #13802