gnutls 3.7.7 ships with a <gnutls/socket.h> that fails to compile on
mingw:
https://gitlab.com/gnutls/gnutls/-/issues/1382. But it also
provides a stub function gnutls_transport_is_ktls_enabled that always
returns false (since ktls is a Linux-only thing for now). As such, we
are hitting compilation errors such as:
In file included from ../../server/crypto.c:59:
/usr/x86_64-w64-mingw32/sys-root/mingw/include/gnutls/socket.h:32:10: fatal error:
sys/socket.h: No such file or directory
32 | #include <sys/socket.h>
| ^~~~~~~~~~~~~~
compilation terminated.
unless we also probe for whether the header works. Noticed ever since
commit c4bc6d07 moved to newer lcitool that upgraded our CI mingw
environments into using the newer broken version of gnutls.
---
configure.ac | 1 +
server/crypto.c | 12 +++++++++---
2 files changed, 10 insertions(+), 3 deletions(-)
diff --git a/configure.ac b/configure.ac
index dc9ff94f..d506fb51 100644
--- a/configure.ac
+++ b/configure.ac
@@ -646,6 +646,7 @@ AS_IF([test "x$GNUTLS_LIBS" != "x"],[
gnutls_srp_server_get_username \
gnutls_transport_is_ktls_enabled \
])
+ AC_CHECK_HEADERS([gnutls/socket.h])
LIBS="$old_LIBS"
dnl macOS has its own program called certtool and packages the
diff --git a/server/crypto.c b/server/crypto.c
index 070fcc55..1f605083 100644
--- a/server/crypto.c
+++ b/server/crypto.c
@@ -55,7 +55,13 @@
#include <gnutls/gnutls.h>
#include <gnutls/x509.h>
-#ifdef HAVE_GNUTLS_TRANSPORT_IS_KTLS_ENABLED
+#if defined HAVE_GNUTLS_TRANSPORT_IS_KTLS_ENABLED && \
+ defined HAVE_GNUTLS_SOCKET_H
+#define TRY_KTLS 1
+#else
+#define TRY_KTLS 0
+#endif
+#if TRY_KTLS
#include <gnutls/socket.h>
#endif
@@ -542,7 +548,7 @@ debug_session (gnutls_session_t session)
bool dhe = false, ecdh = false;
int grp;
const char *desc, *username, *hint;
-#ifdef HAVE_GNUTLS_TRANSPORT_IS_KTLS_ENABLED
+#if TRY_KTLS
gnutls_transport_ktls_enable_flags_t ktls_enabled;
#endif
@@ -552,7 +558,7 @@ debug_session (gnutls_session_t session)
desc = gnutls_session_get_desc (session);
if (desc) nbdkit_debug ("TLS session: %s", desc);
-#ifdef HAVE_GNUTLS_TRANSPORT_IS_KTLS_ENABLED
+#if TRY_KTLS
ktls_enabled = gnutls_transport_is_ktls_enabled (session);
switch (ktls_enabled) {
case GNUTLS_KTLS_RECV:
--
2.37.3