summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Stenberg <daniel@haxx.se>2021-11-04 10:37:32 +0100
committerDaniel Stenberg <daniel@haxx.se>2021-11-11 13:47:41 +0100
commit76d9e07c6b0d6e9312d0cbfaf25c42926453fcb4 (patch)
treeba3fb403f960cc07325873a58dd8b90a231a6dda
parent1fef5922da63125e3ac262aa3d8360210a9edb1f (diff)
downloadcurl-76d9e07c6b0d6e9312d0cbfaf25c42926453fcb4.tar.gz
vtls/rustls: adapt to the updated rustls_version proto
Closes #7956
-rw-r--r--docs/RUSTLS.md4
-rw-r--r--lib/vtls/rustls.c28
-rw-r--r--zuul.d/jobs.yaml1
3 files changed, 20 insertions, 13 deletions
diff --git a/docs/RUSTLS.md b/docs/RUSTLS.md
index ecce43004..58143d619 100644
--- a/docs/RUSTLS.md
+++ b/docs/RUSTLS.md
@@ -3,7 +3,7 @@
[Rustls is a TLS backend written in Rust.](https://docs.rs/rustls/). Curl can
be built to use it as an alternative to OpenSSL or other TLS backends. We use
the [rustls-ffi C bindings](https://github.com/rustls/rustls-ffi/). This
-version of curl depends on version v0.7.0 of rustls-ffi.
+version of curl depends on version v0.8.0 of rustls-ffi.
# Building with rustls
@@ -12,7 +12,7 @@ First, [install Rust](https://rustup.rs/).
Next, check out, build, and install the appropriate version of rustls-ffi:
% cargo install cbindgen
- % git clone https://github.com/rustls/rustls-ffi -b v0.7.0
+ % git clone https://github.com/rustls/rustls-ffi -b v0.8.0
% cd rustls-ffi
% make
% make DESTDIR=${HOME}/rustls-ffi-built/ install
diff --git a/lib/vtls/rustls.c b/lib/vtls/rustls.c
index 9944d9ac4..381737e59 100644
--- a/lib/vtls/rustls.c
+++ b/lib/vtls/rustls.c
@@ -161,20 +161,20 @@ cr_recv(struct Curl_easy *data, int sockindex,
(uint8_t *)plainbuf + plain_bytes_copied,
plainlen - plain_bytes_copied,
&n);
- if(n == 0) {
- *err = CURLE_OK;
- return 0;
+ if(rresult == RUSTLS_RESULT_PLAINTEXT_EMPTY) {
+ infof(data, "cr_recv got 0 bytes of plaintext");
+ backend->data_pending = FALSE;
+ break;
}
- else if(rresult != RUSTLS_RESULT_OK &&
- rresult != RUSTLS_RESULT_PLAINTEXT_EMPTY) {
- failf(data, "error in rustls_connection_read");
+ else if(rresult != RUSTLS_RESULT_OK) {
+ /* n always equals 0 in this case, don't need to check it */
+ failf(data, "error in rustls_connection_read: %d", rresult);
*err = CURLE_READ_ERROR;
return -1;
}
- else if(rresult == RUSTLS_RESULT_PLAINTEXT_EMPTY) {
- infof(data, "cr_recv got 0 bytes of plaintext");
- backend->data_pending = FALSE;
- break;
+ else if(n == 0) {
+ *err = CURLE_OK;
+ return 0;
}
else {
infof(data, "cr_recv copied out %ld bytes of plaintext", n);
@@ -540,6 +540,12 @@ cr_close(struct Curl_easy *data, struct connectdata *conn,
}
}
+static size_t cr_version(char *buffer, size_t size)
+{
+ struct rustls_str ver = rustls_version();
+ return msnprintf(buffer, size, "%.*s", (int)ver.len, ver.data);
+}
+
const struct Curl_ssl Curl_ssl_rustls = {
{ CURLSSLBACKEND_RUSTLS, "rustls" },
SSLSUPP_TLS13_CIPHERSUITES, /* supports */
@@ -547,7 +553,7 @@ const struct Curl_ssl Curl_ssl_rustls = {
Curl_none_init, /* init */
Curl_none_cleanup, /* cleanup */
- rustls_version, /* version */
+ cr_version, /* version */
Curl_none_check_cxn, /* check_cxn */
Curl_none_shutdown, /* shutdown */
cr_data_pending, /* data_pending */
diff --git a/zuul.d/jobs.yaml b/zuul.d/jobs.yaml
index 4e668449c..aebe0fff4 100644
--- a/zuul.d/jobs.yaml
+++ b/zuul.d/jobs.yaml
@@ -131,6 +131,7 @@
- libzstd-dev
curl_env:
T: debug-rustls
+ # Keep this in sync with the version in docs/RUSTLS.md
RUSTLS_VERSION: v0.8.0
LIBS: -lm
C: >-