Commit Graph

12041 Commits

Author SHA1 Message Date
Stefan Eissing
45bcb2eaa7
urlapi: cleanup scheme parsing
Makea Curl_is_absolute_url() always leave a defined 'buf' and avoids
copying on urls that do not start with a scheme.

Closes #8043
2021-11-22 22:41:11 +01:00
Jacob Hoffman-Andrews
3f8fde366f
rustls: remove comment about checking handshaking
The comment is incorrect in two ways:
 - It says the check needs to be last, but the check is actually first.
 - is_handshaking actually starts out true.

Closes #8038
2021-11-20 22:57:13 +01:00
Marcel Raad
9b9485e7ac openssl: use non-deprecated API to read key parameters
With OpenSSL 3.0, the parameters are read directly from the `EVP_PKEY`
using `EVP_PKEY_get_bn_param`.

Closes https://github.com/curl/curl/pull/7893
2021-11-20 12:04:57 +01:00
Marcel Raad
9b923eaf3e openssl: reduce code duplication
`BN_print`'s `BIGNUM` parameter has been `const` since OpenSSL 0.9.4.

Closes https://github.com/curl/curl/pull/7893
2021-11-20 12:04:56 +01:00
Marcel Raad
6147dfab93 openssl: remove RSA_METHOD_FLAG_NO_CHECK handling if unavailable
The flag has been deprecated without replacement in OpenSSL 3.0.

Closes https://github.com/curl/curl/pull/7893
2021-11-20 12:04:56 +01:00
Marcel Raad
1e80f56d0b openssl: remove usage of deprecated SSL_get_peer_certificate
The function name was changed to `SSL_get1_peer_certificate` in OpenSSL
3.0.

Closes https://github.com/curl/curl/pull/7893
2021-11-20 12:04:56 +01:00
Daniel Stenberg
6e061ae63a
http: enable haproxy support for hyper backend
This is done by having native code do the haproxy header output before
hyper issues its request. The little downside with this approach is that
we need the entire Curl_buffer_send() function built, which is otherwise
not used for hyper builds.

If hyper ends up getting native support for the haproxy protocols we can
backpedal on this.

Enables test 1455 and 1456

Closes #8034
2021-11-19 14:06:42 +01:00
Don
f99a4c759f
cmake: don't set _USRDLL on a static Windows build
Closes #8030
2021-11-18 11:26:30 +01:00
Daniel Stenberg
4d97fe5473
tftp: mark protocol as not possible to do over CONNECT
... and make connect_init() refusing trying to tunnel protocols marked
as not working. Avoids a double-free.

Reported-by: Even Rouault
Fixes #8018
Closes #8020
2021-11-15 23:13:09 +01:00
Patrick Monnerat
b20b364764
mime: use percent-escaping for multipart form field and file names
Until now, form field and file names where escaped using the
backslash-escaping algorithm defined for multipart mails. This commit
replaces this with the percent-escaping method for URLs.

As this may introduce incompatibilities with server-side applications, a
new libcurl option CURLOPT_MIME_OPTIONS with bitmask
CURLMIMEOPT_FORMESCAPE is introduced to revert to legacy use of
backslash-escaping. This is controlled by new cli tool option
--form-escape.

New tests and documentation are provided for this feature.

Reported by: Ryan Sleevi
Fixes #7789
Closes #7805
2021-11-15 10:40:03 +01:00
Jacob Hoffman-Andrews
00f4ed2aad
rustls: read of zero bytes might be okay
When we're reading out plaintext from rustls' internal buffers, we might
get a read of zero bytes (meaning a clean TCP close, including
close_notify). However, we shouldn't return immediately when that
happens, since we may have already copied out some plaintext bytes.
Break out of the loop when we get a read of zero bytes, and figure out
which path we're dealing with.

Acked-by: Kevin Burke

Closes #8003
2021-11-13 22:57:51 +01:00
Jacob Hoffman-Andrews
be8d77b146
rustls: remove incorrect EOF check
The update to rustls-ffi 0.8.0 changed handling of EOF and close_notify.
From the CHANGELOG:

> Handling of unclean close and the close_notify TLS alert. Mirroring
> upstream changes, a rustls_connection now tracks TCP closed state like
> so: rustls_connection_read_tls considers a 0-length read from its
> callback to mean "TCP stream was closed by peer."  If that happens
> before the peer sent close_notify, rustls_connection_read will return
> RUSTLS_RESULT_UNEXPECTED_EOF once the available plaintext bytes are
> exhausted. This is useful to protect against truncation attacks. Note:
> some TLS implementations don't send close_notify. If you are already
> getting length information from your protocol (e.g. Content-Length in
> HTTP) you may choose to ignore UNEXPECTED_EOF so long as the number of
> plaintext bytes was as expected.

That means we don't need to check for unclean EOF in `cr_recv()`,
because `process_new_packets()` will give us an error if appropriate.

Closes #8003
2021-11-13 22:57:20 +01:00
Daniel Stenberg
2989b11377
http_proxy: make Curl_connect_done() work for proxy disabled builds
... by making it an empty macro then.

Follow-up to f0b7099a10
Reported-by: Vincent Grande
Fixes #7995
Closes #7996
2021-11-12 14:48:45 +01:00
Daniel Stenberg
b89a4b5191
Curl_connect_done: handle being called twice
Follow-up to f0b7099a10

When torture testing 1021, it turns out the Curl_connect_done function
might be called twice and that previously then wrongly cleared the HTTP
pointer in the second invoke.

Closes #7999
2021-11-12 14:46:01 +01:00
Daniel Stenberg
76d9e07c6b
vtls/rustls: adapt to the updated rustls_version proto
Closes #7956
2021-11-11 13:47:41 +01:00
Kevin Burke
1fef5922da
vtls/rustls: handle RUSTLS_RESULT_PLAINTEXT_EMPTY
Previously we'd return CURLE_READ_ERROR if we received this, instead
of triggering the error handling logic that's present in the next if
block down.

After this change, curl requests to https://go.googlesource.com using
HTTP/2 complete successfully.

Fixes #7949
Closes #7948
2021-11-11 13:47:34 +01:00
Kevin Burke
b7757c2b81
vtls/rustls: update to compile with rustls-ffi v0.8.0
Some method names, as well as the generated library name, were changed
in a recent refactoring.

Further, change the default configuration instructions to check for
Hyper in either "target/debug" or "target/release" - the latter
contains an optimized build configuration.

Fixes #7947
Closes #7948
2021-11-11 13:47:25 +01:00
Daniel Stenberg
f0b7099a10
multi: shut down CONNECT in Curl_detach_connnection
... to prevent a lingering pointer that would lead to a double-free.

Added test 1939 to verify.

Reported-by: Stephen M. Coakley
Fixes #7982
Closes #7986
2021-11-11 08:42:31 +01:00
Daniel Stenberg
0942017162
url.c: fix the SIGPIPE comment for Curl_close
Closes #7984
2021-11-10 14:50:28 +01:00
Tatsuhiro Tsujikawa
9db25d213b
ngtcp2: advertise h3 as well as h3-29
Advertise h3 as well as h3-29 since some servers out there require h3
for QUIC v1.

Closes #7979
2021-11-09 11:46:12 +01:00
Tatsuhiro Tsujikawa
10bc426dd2
ngtcp2: use QUIC v1 consistently
Since we switched to v1 quic_transport_parameters codepoint in #7960
with quictls, lets use QUIC v1 consistently.

Closes #7979
2021-11-09 11:45:41 +01:00
Tatsuhiro Tsujikawa
d9d842989c
ngtcp2: compile with the latest nghttp3
Closes #7978
2021-11-09 11:40:00 +01:00
Roger Young
ef99e24886
ftp: make the MKD retry to retry once per directory
Reported-by: Roger Young
Fixes #7967
Closes #7976
2021-11-08 23:05:12 +01:00
Amaury Denoyelle
d1624b94f0
ngtcp2: support latest QUIC TLS RFC9001
QUIC Transport Parameters Extension has been changed between draft-29
and latest RFC9001. Most notably, its identifier has been updated from
0xffa5 to 0x0039. The version is selected through the QUIC TLS library
via the legacy codepoint.

Disable the usage of legacy codepoint in curl to switch to latest
RFC9001. This is required to be able to keep up with latest QUIC
implementations.

Acked-by: Tatsuhiro Tsujikawa
Closes #7960
2021-11-05 10:42:46 +01:00
Jay Satiro
90e74206b9 schannel: fix memory leak due to failed SSL connection
- Call schannel_shutdown if the SSL connection fails.

Prior to this change schannel_shutdown (which shuts down the SSL
connection as well as memory cleanup) was not called when the SSL
connection failed (eg due to failed handshake).

Co-authored-by: Gisle Vanem

Fixes https://github.com/curl/curl/issues/7877
Closes https://github.com/curl/curl/pull/7878
2021-11-02 15:34:04 -04:00
Daniel Stenberg
f5ee9cf5ba
Curl_updateconninfo: store addresses for QUIC connections too
So that CURLINFO_PRIMARY_IP etc work for HTTP/3 like for other HTTP
versions.

Reported-by: Jerome Mao
Fixes #7939
Closes #7944
2021-11-02 17:57:04 +01:00
Tatsuhiro Tsujikawa
e05c08687f
ngtcp2: specify the missing required callback functions
Closes #7929
2021-11-01 15:54:24 +01:00
Axel Morawietz
49ab21e3d9
imap: display quota information
Show response to "GETQUOTAROOT INBOX" command.

Closes #6973
2021-10-28 21:33:02 +02:00
x2018
d55b8b6a45
url: check the return value of curl_url()
Closes #7917
2021-10-28 15:22:19 +02:00
Daniel Stenberg
c67a32fc56
http: reject HTTP response codes < 100
... which then also includes negative ones as test 1430 uses.

This makes native + hyper backend act identically on this and therefore
test 1430 can now be enabled when building with hyper. Adjust test 1431
as well.

Closes #7909
2021-10-27 10:26:15 +02:00
Patrick Monnerat
fa84ce347f
sendf: accept zero-length data in Curl_client_write()
Historically, Curl_client_write() used a length value of 0 as a marker
for a null-terminated data string. This feature has been removed in
commit f4b85d2. To detect leftover uses of the feature, a DEBUGASSERT
statement rejecting a length with value 0 was introduced, effectively
precluding use of this function with zero-length data.

The current commit removes the DEBUGASSERT and makes the function to
return immediately if length is 0.

A direct effect is to fix trying to output a zero-length distinguished
name in openldap.

Another DEBUGASSERT statement is also rephrased for better readability.

Closes #7898
2021-10-25 23:33:41 +02:00
Daniel Stenberg
bc8674d87d
c-hyper: make CURLOPT_SUPPRESS_CONNECT_HEADERS work
Verified by the enabled test 1288

Closes #7905
2021-10-25 23:32:45 +02:00
Viktor Szakats
13bbf81c59
Makefile.m32: fix to not require OpenSSL with -libssh2 or -rtmp options
Previously, -libssh2/-rtmp options assumed that OpenSSL is also enabled
(and then failed with an error when not finding expected OpenSSL headers),
but this isn't necessarly true, e.g. when building both libssh2 and curl
against Schannel. This patch makes sure to only enable the OpenSSL backend
with -libssh2/-rtmp, when there was no SSL option explicitly selected.

- Re-implement the logic as a single block of script.
- Also fix an indentation while there.

Assisted-by: Jay Satiro

Closes #7895
2021-10-25 19:10:55 +00:00
Eddie Lumpkin
8e701cc978
lib: fixing comment spelling typos in lib files
Closes #7894
Signed-off-by: ewlumpkin <ewlumpkin@gmail.com>
2021-10-22 22:53:44 +02:00
Daniel Stenberg
83393b1a36
openssl: if verifypeer is not requested, skip the CA loading
It was previously done mostly to show a match/non-match in the verbose
output even when verification was not asked for. This change skips the
loading of the CA certs unless verifypeer is set to save memory and CPU.

Closes #7892
2021-10-22 16:16:19 +02:00
Daniel Stenberg
10883eb981
c-hyper: don't abort CONNECT responses early when auth-in-progress
... and make sure to stop ignoring the body once the CONNECT is done.

This should make test 206 work proper again and not be flaky.

Closes #7889
2021-10-22 12:54:12 +02:00
Daniel Stenberg
1732502cb0
hyper: does not support disabling CURLOPT_HTTP_TRANSFER_DECODING
Simply because hyper doesn't have this ability. Mentioned in docs now.

Skip test 326 then

Closes #7889
2021-10-22 12:54:08 +02:00
Daniel Stenberg
cf088201a9
c-hyper: make test 217 run
Closes #7889
2021-10-22 12:54:00 +02:00
Daniel Stenberg
823d3ab855
http_proxy: multiple CONNECT with hyper done better
Enabled test 206

Closes #7888
2021-10-21 17:28:27 +02:00
Daniel Stenberg
5276ec941f
hyper: pass the CONNECT line to the debug callback
Closes #7887
2021-10-21 16:51:17 +02:00
Erik Stenlund
a24e895912
mime: mention CURL_DISABLE_MIME in comment
CURL_DISABLE_MIME is not mentioned in the comment describing the if else
preprocessor directive.

Closes #7882
2021-10-20 00:11:08 +02:00
Daniel Stenberg
54aa9c48b2
tls: remove newline from three infof() calls
Follow-up to e7416cf

Reported-by: billionai on github
Fixes #7879
Closes #7880
2021-10-19 23:03:57 +02:00
Daniel Stenberg
de0bd8547e
curl_gssapi: fix build warnings by removing const
Follow-up to 20e980f85b

In #7875 these inits were modified but I get two warnings that these new
typecasts are necessary for.

Closes #7876
2021-10-19 10:34:20 +02:00
Bo Anderson
20e980f85b
curl_gssapi: fix link error on macOS Monterey
Fixes #7657
Closes #7875
2021-10-19 09:34:21 +02:00
Daniel Stenberg
3da8b4dabf
checksrc: improve the SPACESEMICOLON error message
and adjust the MULTISPACE one to use plural

Closes #7866
2021-10-18 23:52:30 +02:00
Daniel Stenberg
bffe90cf2e
url: set "k->size" -1 at start of request
The size of the transfer is unknown at that point.

Fixes #7871
Closes #7872
2021-10-18 16:27:02 +02:00
Daniel Gustafsson
f06280eb53 doh: remove experimental code for DoH with GET
The code for sending DoH requests with GET was never enabled in a way
such that it could be used or tested. As there haven't been requests
for this feature, and since it at this is effectively dead, remove it
and favor reimplementing the feature in case anyone is interested.

Closes #7870
Reviewed-by: Daniel Stenberg <daniel@haxx.se>
2021-10-18 13:25:57 +02:00
Daniel Stenberg
53418dbc84
checksrc: ignore preprocessor lines
In order to check the actual code better, checksrc now ignores
everything that look like preprocessor instructions. It also means
that code in macros are now longer checked.

Note that some rules then still don't need to be followed when code is
exactly below a cpp instruction.

Removes two checksrc exceptions we needed previously because of
preprocessor lines being checked.

Reported-by: Marcel Raad
Fixes #7863
Closes #7864
2021-10-17 11:19:49 +02:00
Daniel Stenberg
efffa66f65
urlapi: skip a strlen(), pass in zero
... to let curl_easy_escape() itself do the strlen. This avoids a (false
positive) Coverity warning and it avoids us having to store the strlen()
return value in an int variable.

Reviewed-by: Daniel Gustafsson
Closes #7862
2021-10-15 23:22:14 +02:00
Daniel Stenberg
ccb466fd36
misc: update copyright years 2021-10-15 17:07:19 +02:00