With GnuTLS 3.8.0+ the build-time SRP feature detection always succeeds.
It's also disabled by default in these GnuTLS versions.
When using TLS-SRP without it being available in GnuTLS, report
the correct error code `CURLE_NOT_BUILT_IN`, replacing the out of memory
error reported before this patch.
Also add comments to autotools and cmake scripts about this feature
detection property.
Detecting it at build-time would need to run code which doesn't work
in cross-builds. Once curl requires 3.8.0 as minimum, the build-time
checks can be deleted.
```
# before:
curl: (27) gnutls_srp_allocate_client_cred() failed: An unimplemented or disabled feature has been requested.
# after:
curl: (4) GnuTLS: TLS-SRP support not built in: An unimplemented or disabled feature has been requested.
```
Ref: https://github.com/gnutls/gnutls/commit/
dab063fca2eecb9ff1db73234108315c5b713756
Ref: https://github.com/gnutls/gnutls/commit/
a21e89edacfe4ec3c501b030fff59c11fd20dcf0
Closes #19365
list(APPEND CMAKE_REQUIRED_INCLUDES "${GNUTLS_INCLUDE_DIRS}")
list(APPEND CMAKE_REQUIRED_LIBRARIES "${GNUTLS_LIBRARIES}")
curl_required_libpaths("${GNUTLS_LIBRARY_DIRS}")
+ # In GnuTLS 3.8.0 (2023-02-10) and upper, this check always succeeds.
+ # Detecting actual TLS-SRP support needs poking the API at runtime.
check_symbol_exists("gnutls_srp_verifier" "gnutls/gnutls.h" HAVE_GNUTLS_SRP)
cmake_pop_check_state()
endif()
infof(data, "Using TLS-SRP username: %s", config->username);
rc = gnutls_srp_allocate_client_credentials(>ls->srp_client_cred);
- if(rc != GNUTLS_E_SUCCESS) {
+ if(rc == GNUTLS_E_UNIMPLEMENTED_FEATURE) {
+ failf(data, "GnuTLS: TLS-SRP support not built in: %s",
+ gnutls_strerror(rc));
+ return CURLE_NOT_BUILT_IN;
+ }
+ else if(rc != GNUTLS_E_SUCCESS) {
failf(data, "gnutls_srp_allocate_client_cred() failed: %s",
gnutls_strerror(rc));
return CURLE_OUT_OF_MEMORY;
dnl ---
dnl We require GnuTLS with SRP support.
+ dnl
+ dnl In GnuTLS 3.8.0 (2023-02-10) and upper, this check always succeeds.
+ dnl Detecting actual TLS-SRP support needs poking the API at runtime.
dnl ---
AC_CHECK_LIB(gnutls, gnutls_srp_verifier,
[