]> git.ipfire.org Git - thirdparty/curl.git/commitdiff
vtls/rustls: adapt to the updated rustls_version proto
authorDaniel Stenberg <daniel@haxx.se>
Thu, 4 Nov 2021 09:37:32 +0000 (10:37 +0100)
committerDaniel Stenberg <daniel@haxx.se>
Thu, 11 Nov 2021 12:47:41 +0000 (13:47 +0100)
Closes #7956

docs/RUSTLS.md
lib/vtls/rustls.c
zuul.d/jobs.yaml

index ecce430046eba5b28fe89f58d4039f7111aff53f..58143d619c78d2f13b21adb25d987760d645baae 100644 (file)
@@ -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
index 9944d9ac47fbf2d23763419a8483b4eb98058b5b..381737e599ecb98fa7631dcf4e91647ff07c1693 100644 (file)
@@ -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 */
index 4e668449c9e4b245f057a1eb5ad7d930ad9ce776..aebe0fff4a853248d86d1b997209475d681f8416 100644 (file)
         - 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: >-