Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[curl] Curl port is missing multiple features like ZSTD #32109

Closed
2 of 7 tasks
MichalPetryka opened this issue Jun 19, 2023 · 18 comments
Closed
2 of 7 tasks

[curl] Curl port is missing multiple features like ZSTD #32109

MichalPetryka opened this issue Jun 19, 2023 · 18 comments
Assignees
Labels
category:port-feature The issue is with a library, which is requesting new capabilities that didn’t exist Stale

Comments

@MichalPetryka
Copy link

MichalPetryka commented Jun 19, 2023

Is your feature request related to a problem? Please describe.

Building curl with features available (with curl["brotli","c-ares","http2","non-http","sspi","websockets","c-ares","openssl","ssh","mbedtls","schannel","winidn","winldap"]:x64-windows to be exact) on VCPKG reports those features as unavailable:

  • CURL_VERSION_ZSTD
  • CURL_VERSION_GSASL
  • CURL_VERSION_HTTP3
  • CURL_VERSION_PSL
  • CURL_VERSION_NTLM_WB (not supported anymore)
  • CURL_VERSION_TLSAUTH_SRP
  • CURL_VERSION_GSSAPI

You can find the descriptions of all the flags here.

Proposed solution

Make building libcurl with provided features possible.

Describe alternatives you've considered

No response

Additional context

No response

@MichalPetryka MichalPetryka added the category:port-feature The issue is with a library, which is requesting new capabilities that didn’t exist label Jun 19, 2023
@teo-tsirpanis
Copy link
Contributor

teo-tsirpanis commented Jul 12, 2023

Zstd will be enabled with #32533. I took a look at the rest (disclaimer: I might be wrong at some of these):

  • CURL_VERSION_GSASL: Needs a port for libgsasl. Also Curl does not seem to have an option to enable it in CMake.
  • CURL_VERSION_HTTP3: Curl supports three backends for HTTP/3: quiche, msquic and ngtcp2. They are mutually exclusive which means that we must decide on which to use. Only the latter two backends currently have a port on vcpkg, with msquic being quite outdated.
  • CURL_VERSION_PSL: Needs a port of libpsl.
  • CURL_VERSION_NTLM_WB: Since NTLM is enabled by default and does not need any additional dependencies, it should be relatively easy to enable.
  • CURL_VERSION_TLSAUTH_SRP: Depends on whether OpenSSL supports it. I'm not sure if our vcpkg port does, and I don't know how we can signal it to the CMake build.
  • CURL_VERSION_GSSAPI: Needs a port of heimdal or MIT Kerberos. Like HTTP/3, we will have to pick one of the two.

@dg0yt
Copy link
Contributor

dg0yt commented Jul 12, 2023

  • CURL_VERSION_TLSAUTH_SRP: Depends on whether OpenSSL supports it. I'm not sure if our vcpkg port does, and I don't know how we can signal it to the CMake build.

Make srp an openssl feature, and make the curl port feature depend on that openssl port feature.
(And make sure this is tested at least once on all supported triplets.)

@MichalPetryka
Copy link
Author

  • CURL_VERSION_HTTP3: Curl supports three backends for HTTP/3: quiche, msquic and ngtcp2. They are mutually exclusive which means that we must decide on which to use. Only the latter two backends currently have a port on vcpkg, with msquic being quite outdated.

I've looked at the TLS libraries all that are supported with those and with curl (curl requires to be linked with the same library) and there are basically only 3 real choices:

  • QuicTLS - won't get a port as per [quictls] create a new port #17949
  • BoringSSL - unstable API & ABI so only static linking makes sense, vcpkg port seems to be really out of date since the project has no versioning
  • GnuTLS - LGPL which makes static linking problematic, on Windows it seems to have no option to use system certificate store which can be problematic.

Other options would need modifications to curl, have limited platform support (like Schannel - only Windows 11+), don't seem to be really actively supported (like PicoTLS) or use GPL (WolfSSL).

@talregev
Copy link
Contributor

talregev commented Dec 3, 2023

For http3, I try to compile with ngtcp2, nghttp3 and libgnutls.
For windows I am trying with shiftmedia-libgnutls.
When I compile with curl, It don't compile with gnutls.h that coming from shiftmedia-libgnutls, and it give me syntax error. clearly I do something wrong.
Anybody want to take a look? to help? I feel close on this.

@kotori2
Copy link
Contributor

kotori2 commented Jan 6, 2024

I'm actually not in favor of using OpenSSL forks because they tends to cause linking errors while there is a great amount of libraries depends on the OG OpenSSL.
According to the OpenSSL roadmap, the primitive QUIC support with OpenSSL should already been released in OpenSSL 3.2.0 (Nov 2023). But it seems curl is not working on the OpenSSL QUIC API support right now. The only discussion page I found: curl/curl#12425

@talregev
Copy link
Contributor

talregev commented Jan 6, 2024

I'm actually not in favor of using OpenSSL forks because they tends to cause linking errors while there is a great amount of libraries depends on the OG OpenSSL. According to the OpenSSL roadmap, the primitive QUIC support with OpenSSL should already been released in OpenSSL 3.2.0 (Nov 2023). But it seems curl is not working on the OpenSSL QUIC API support right now. The only discussion page I found: curl/curl#12425

It not sufficient
ngtcp2/ngtcp2#990 (comment)

quicktls have plan to build their own lib above openssl:
quictls/openssl#124

@talregev
Copy link
Contributor

talregev commented Mar 5, 2024

Please remove the CURL_VERSION_NTLM_WB.
curl will remove this support soon:
https://curl.se/dev/deprecate.html

@talregev
Copy link
Contributor

Added psl feature:
#38345

@talregev
Copy link
Contributor

talregev commented May 6, 2024

CURL_VERSION_GSSAPI added for linux:
#38402

Feel free to improve krb5 to support more os.

@talregev
Copy link
Contributor

talregev commented May 6, 2024

I can do a PR for CURL_VERSION_GSASL. only for linux.
But I don't see curl ubuntu ship with that. Any idea?

Will you interesting only in linux?

@talregev
Copy link
Contributor

@MichalPetryka please mark it finished CURL_VERSION_GSSAPI.
This feature is for unix, and krb5 is now compile in linux and osx.
#38943

@talregev
Copy link
Contributor

talregev commented May 31, 2024

CURL_VERSION_TLSAUTH_SRP it already happen automatic, it check that openssl or gnussl have this feature.
I confirm that in vcpkg curl with openssl detect this feature and compile it when you use openssl.
So please mark that feature too.

> ./curl --version
curl 8.8.0-DEV (Linux) libcurl/8.8.0-DEV OpenSSL/3.3.0 zlib/1.3.1
Release-Date: [unreleased]
Protocols: dict file ftp ftps gopher gophers http https imap imaps ipfs ipns mqtt pop3 pop3s rtsp smb smbs smtp smtps telnet tftp
Features: alt-svc AsynchDNS HSTS HTTPS-proxy IPv6 Largefile libz NTLM SSL threadsafe TLS-SRP UnixSockets

Please note on the TLS-SRP.

@dg0yt dg0yt mentioned this issue Jun 27, 2024
7 tasks
@talregev
Copy link
Contributor

everything is check except the http3.

@dg0yt
Copy link
Contributor

dg0yt commented Jun 27, 2024

I would be curious to hear about real life usage. Some features build, but won't be usable without extra configuration. So it is not safe to assume that all features actually work.

@talregev
Copy link
Contributor

talregev commented Jun 27, 2024

I would be curious to hear about real life usage. Some features build, but won't be usable without extra configuration. So it is not safe to assume that all features actually work.

curl test the features.
Most of the features also ship with ubuntu

@dg0yt
Copy link
Contributor

dg0yt commented Jul 1, 2024

curl test the features.

I see build tests. I don't see end-to-end tests. I.e. we know it is included. I want to know if it works.

@talregev
Copy link
Contributor

talregev commented Jul 1, 2024

curl test the features.

I see build tests. I don't see end-to-end tests. I.e. we know it is included. I want to know if it works.

I see in curl ci that they running the tests. You can ask about the end to end in curl side, also for more details about the tests.

Copy link

github-actions bot commented Jan 2, 2025

This is an automated message. Per our repo policy, stale issues get closed if there has been no activity in the past 180 days. The issue will be automatically closed in 14 days. If you wish to keep this issue open, please add a new comment.

@github-actions github-actions bot added the Stale label Jan 2, 2025
@github-actions github-actions bot closed this as not planned Won't fix, can't repro, duplicate, stale Jan 18, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
category:port-feature The issue is with a library, which is requesting new capabilities that didn’t exist Stale
Projects
None yet
Development

No branches or pull requests

6 participants