From 062efed8b7e42d4601fcddcd5569d72016735e6a Mon Sep 17 00:00:00 2001 From: Christian Grothoff Date: Wed, 27 Nov 2024 18:43:47 +0100 Subject: [PATCH] expand test to force GnuTLS --- src/tests/client_server/libtest.h | 13 ++++ src/tests/client_server/libtest_convenience.c | 64 ++++++++++++++----- src/tests/client_server/test_tls.c | 32 ++++++++++ 3 files changed, 92 insertions(+), 17 deletions(-) diff --git a/src/tests/client_server/libtest.h b/src/tests/client_server/libtest.h index e278a620..a51abfcf 100644 --- a/src/tests/client_server/libtest.h +++ b/src/tests/client_server/libtest.h @@ -575,6 +575,19 @@ MHDT_server_setup_tls (const void *cls, struct MHD_Daemon *d); +/** + * Initialize MHD daemon with TLS support using GnuTLS, binding to any free + * port. + * + * @param cls closure + * @param[in,out] d daemon to initialize + * @return error message, NULL on success + */ +const char * +MHDT_server_setup_gnutls (const void *cls, + struct MHD_Daemon *d); + + /** * Function that runs an MHD daemon until * a read() against @a finsig succeeds. diff --git a/src/tests/client_server/libtest_convenience.c b/src/tests/client_server/libtest_convenience.c index f4c31136..c0a6c2a4 100644 --- a/src/tests/client_server/libtest_convenience.c +++ b/src/tests/client_server/libtest_convenience.c @@ -54,11 +54,15 @@ MHDT_server_setup_minimal (const void *cls, } -const char * -MHDT_server_setup_tls (const void *cls, - struct MHD_Daemon *d) +/** + * Setup TLS at @a d for the given backend @a be. + * + * @return NULL on success, otherwise error message + */ +static const char * +server_setup_tls (struct MHD_Daemon *d, + enum MHD_TlsBackend be) { - const struct MHD_DaemonOptionAndValue *options = cls; static const char *mem_cert = "-----BEGIN CERTIFICATE-----\n\ MIIFJjCCAw6gAwIBAgIBBTANBgkqhkiG9w0BAQsFADCBgTELMAkGA1UEBhMCUlUx\n\ @@ -120,22 +124,10 @@ hW4ncX0UcqFPm7Ahqo9+NDemJlV7DYHRcvL/xVNUbr8yV7OpHILd4Hk/s8J4QGl/\n\ bC1zEehy8q0jMywvSR8vsS1v\n\ -----END PRIVATE KEY-----"; - if (MHD_SC_OK != - MHD_daemon_set_options ( - d, - options, - MHD_OPTIONS_ARRAY_MAX_SIZE)) - return "Failed to configure threading mode!"; if (MHD_SC_OK != MHD_DAEMON_SET_OPTIONS ( d, - MHD_D_OPTION_BIND_PORT (MHD_AF_AUTO, - 0))) - return "Failed to bind to port 0!"; - if (MHD_SC_OK != - MHD_DAEMON_SET_OPTIONS ( - d, - MHD_D_OPTION_TLS (MHD_TLS_BACKEND_ANY))) + MHD_D_OPTION_TLS (be))) return "Failed to enable TLS!"; if (MHD_SC_OK != MHD_DAEMON_SET_OPTIONS ( @@ -148,6 +140,44 @@ bC1zEehy8q0jMywvSR8vsS1v\n\ } +const char * +MHDT_server_setup_tls (const void *cls, + struct MHD_Daemon *d) +{ + const struct MHD_DaemonOptionAndValue *options = cls; + const char *err; + + err = MHDT_server_setup_minimal (options, + d); + if (NULL != err) + return err; + err = server_setup_tls (d, + MHD_TLS_BACKEND_ANY); + if (NULL != err) + return err; + return NULL; +} + + +const char * +MHDT_server_setup_gnutls (const void *cls, + struct MHD_Daemon *d) +{ + const struct MHD_DaemonOptionAndValue *options = cls; + const char *err; + + err = MHDT_server_setup_minimal (options, + d); + if (NULL != err) + return err; + err = server_setup_tls (d, + MHD_TLS_BACKEND_GNUTLS); + if (NULL != err) + return err; + return NULL; +} + + void MHDT_server_run_minimal (void *cls, int finsig, diff --git a/src/tests/client_server/test_tls.c b/src/tests/client_server/test_tls.c index 36c9f3c7..104ea132 100644 --- a/src/tests/client_server/test_tls.c +++ b/src/tests/client_server/test_tls.c @@ -90,6 +90,14 @@ main (int argc, char *argv[]) .server_setup_cls = thread2select, .server_runner = &MHDT_server_run_minimal, }, +#if HAVE_GNUTLS_GNUTLS_H + { + .label = "multi-threaded select, forcing GnuTLS", + .server_setup = &MHDT_server_setup_gnutls, + .server_setup_cls = thread2select, + .server_runner = &MHDT_server_run_minimal, + }, +#endif #endif #ifdef MHD_USE_POLL { @@ -104,6 +112,14 @@ main (int argc, char *argv[]) .server_setup_cls = thread2poll, .server_runner = &MHDT_server_run_minimal, }, +#if HAVE_GNUTLS_GNUTLS_H + { + .label = "multi-threaded poll, forcing GnuTLS", + .server_setup = &MHDT_server_setup_gnutls, + .server_setup_cls = thread2poll, + .server_runner = &MHDT_server_run_minimal, + }, +#endif #endif #if MHD_USE_EPOLL { @@ -118,6 +134,14 @@ main (int argc, char *argv[]) .server_setup_cls = thread2epoll, .server_runner = &MHDT_server_run_minimal, }, +#if HAVE_GNUTLS_GNUTLS_H + { + .label = "multi-threaded epoll, forcing GnuTLS", + .server_setup = &MHDT_server_setup_gnutls, + .server_setup_cls = thread2epoll, + .server_runner = &MHDT_server_run_minimal, + }, +#endif #endif { .label = "auto-selected mode, single threaded", @@ -125,6 +149,14 @@ main (int argc, char *argv[]) .server_setup_cls = thread1auto, .server_runner = &MHDT_server_run_minimal, }, +#if HAVE_GNUTLS_GNUTLS_H + { + .label = "auto-selected mode, single threaded, forcing GnuTLS", + .server_setup = &MHDT_server_setup_gnutls, + .server_setup_cls = thread1auto, + .server_runner = &MHDT_server_run_minimal, + }, +#endif #if 1 /* FIXME: remove once MHD_daemon_process_blocking has been implemented */