libmicrohttpd2

HTTP server C library (MHD 2.x, alpha)
Log | Files | Refs | README | LICENSE

commit 1937a9c7ad0c1a2548cdcd647b6b0c08d86c57a1
parent 81e09d29ede48bc9443bd8e86c9d090ec74991e0
Author: Evgeny Grin (Karlson2k) <k2k@drgrin.dev>
Date:   Sat, 11 Jul 2026 22:51:11 +0200

configure: fixed overcomplicated and broken MD5 backend selection

Diffstat:
Mconfigure.ac | 194+++++++++++++++++++++++++++++++++++++------------------------------------------
Msrc/mhd2/Makefile.am | 8++++----
Msrc/mhd2/lib_get_info.c | 2+-
Msrc/mhd2/mhd_md5.h | 8++++----
Msrc/tests/unit/Makefile.am | 19+++++++++++--------
5 files changed, 111 insertions(+), 120 deletions(-)

diff --git a/configure.ac b/configure.ac @@ -7207,32 +7207,33 @@ AC_MSG_RESULT([[$enable_cookie]]) # optional: MD5 support for Digest Auth. Enabled by default. AC_ARG_ENABLE([[md5]], [AS_HELP_STRING([[--enable-md5=TYPE]], - [enable TYPE of MD5 hashing code (yes, no, builtin, tlslib) [yes if dauth enabled]])], + [enable TYPE of MD5 hashing code (yes, no, builtin, tlslib, gnutls, openssl, mbedtls) [yes if dauth enabled]])], [ - AS_VAR_IF([enable_md5],["internal"],[enable_md5='builtin']) - AS_VAR_IF([enable_md5],["built-in"],[enable_md5='builtin']) - AS_VAR_IF([enable_digest_auth],["yes"],[], + AS_IF([test "X${enable_digest_auth}" != "Xyes" && test "X${enable_md5}" != "Xno"], [ - AS_VAR_IF([enable_md5],["no"],[], - [ - AC_MSG_WARN([The parameter --enable-md5=${enable_md5} is ignored as Digest Authentication is disabled]) - enable_md5='no' - ] - ) + AC_MSG_WARN([The parameter --enable-md5=${enable_md5} is ignored as Digest Authentication is disabled]) + enable_md5='no' ] ) + AS_CASE([$enable_md5], + [internal],[enable_md5='builtin'], + [built-in],[enable_md5='builtin'], + [yes|no|builtin|tlslib|gnutls|openssl|mbedtls],[:], + AC_MSG_ERROR([unrecognized parameter --enable-md5=${enable_md5}]) + ) ], [[enable_md5="${enable_digest_auth}"]] ) -AS_UNSET([have_md5_gnutls]) -AS_UNSET([have_md5_openssl]) -AS_UNSET([have_md5_mbedtls]) -AS_CASE([${enable_md5}],[yes|tlslib], + +AS_CASE([${enable_md5}], + [builtin],[use_md5_backend='builtin'], + [no],[use_md5_backend='no'], + [AS_UNSET([use_md5_backend])] +) +AS_CASE([${enable_md5}],[yes|tlslib|gnutls|openssl|mbedtls], [ - found_md5_tls="no" - AS_IF([test "x$enable_https" = "xyes"], + AS_IF([test -z "${use_md5_backend}" && test "X${have_gnutls}" = "Xyes"], [ - # Check GnuTLS - AS_VAR_IF([have_gnutls],["yes"], + AS_CASE([${enable_md5}],[yes|tlslib|gnutls], [ AC_CACHE_CHECK([whether GnuTLS supports MD5 hashing],[mhd_cv_gnutls_md5], [ @@ -7275,30 +7276,24 @@ AS_CASE([${enable_md5}],[yes|tlslib], [mhd_cv_gnutls_md5='yes'],[mhd_cv_gnutls_md5='no'] ) LIBS="${save_LIBS}" + LDFLAGS="${LDFLAGS_ac} ${user_LDFLAGS}" CFLAGS="${CFLAGS_ac} ${user_CFLAGS}" CPPFLAGS="${CPPFLAGS_ac} ${user_CPPFLAGS}" - CFLAGS="${CFLAGS_ac} ${user_CFLAGS}" - LDFLAGS="${LDFLAGS_ac} ${user_LDFLAGS}" ] ) AS_VAR_IF([mhd_cv_gnutls_md5],["no"], - [ - AS_VAR_IF([enable_md5],["tlslib"], - [AC_MSG_WARN([GnuTLS MD5 implementation is not available])] - ) - ], - [ - AC_DEFINE([[MHD_MD5_EXTR_GNUTLS]],[[1]], - [Define to 1 if libmicrohttpd is compiled with MD5 hashing by GnuTLS.]) - have_md5_gnutls="yes" - found_md5_tls="yes" - ] + [AC_MSG_WARN([GnuTLS MD5 implementation is not available])], + [use_md5_backend='gnutls'] ) ] - ) # end GnuTLS check + ) + ] + ) # end GnuTLS check - # Check OpenSSL - AS_VAR_IF([have_openssl],["yes"], + # Check OpenSSL + AS_IF([test -z "${use_md5_backend}" && test "X${have_openssl}" = "Xyes"], + [ + AS_CASE([${enable_md5}],[yes|tlslib|openssl], [ AC_CACHE_CHECK([whether OpenSSL supports MD5 hashing],[mhd_cv_openssl_md5], [ @@ -7329,29 +7324,24 @@ AS_CASE([${enable_md5}],[yes|tlslib], [mhd_cv_openssl_md5='yes'],[mhd_cv_openssl_md5='no'] ) LIBS="${save_LIBS}" - CPPFLAGS="${CPPFLAGS_ac} ${user_CPPFLAGS}" - CFLAGS="${CFLAGS_ac} ${user_CFLAGS}" LDFLAGS="${LDFLAGS_ac} ${user_LDFLAGS}" + CFLAGS="${CFLAGS_ac} ${user_CFLAGS}" + CPPFLAGS="${CPPFLAGS_ac} ${user_CPPFLAGS}" ] ) AS_VAR_IF([mhd_cv_openssl_md5],["no"], - [ - AS_VAR_IF([enable_md5],["tlslib"], - [AC_MSG_WARN([OpenSSL MD5 implementation is not available])] - ) - ], - [ - AC_DEFINE([[MHD_MD5_EXTR_OPENSSL]],[[1]], - [Define to 1 if libmicrohttpd is compiled with MD5 hashing by OpenSSL.]) - have_md5_openssl="yes" - found_md5_tls="yes" - ] + [AC_MSG_WARN([OpenSSL MD5 implementation is not available])], + [use_md5_backend="openssl"] ) ] ) + ] + ) # end OpenSSL check - # Check MbedTLS - AS_VAR_IF([have_mbedtls],["yes"], + # Check MbedTLS + AS_IF([test -z "${use_md5_backend}" && test "X${have_mbedtls}" = "Xyes"], + [ + AS_CASE([${enable_md5}],[yes|tlslib|mbedtls], [ AC_CACHE_CHECK([whether MbedTLS supports MD5 hashing],[mhd_cv_mbedtls_md5], [ @@ -7380,73 +7370,71 @@ AS_CASE([${enable_md5}],[yes|tlslib], [mhd_cv_mbedtls_md5='yes'],[mhd_cv_mbedtls_md5='no'] ) LIBS="${save_LIBS}" - CPPFLAGS="${CPPFLAGS_ac} ${user_CPPFLAGS}" - CFLAGS="${CFLAGS_ac} ${user_CFLAGS}" LDFLAGS="${LDFLAGS_ac} ${user_LDFLAGS}" + CFLAGS="${CFLAGS_ac} ${user_CFLAGS}" + CPPFLAGS="${CPPFLAGS_ac} ${user_CPPFLAGS}" ] ) AS_VAR_IF([mhd_cv_mbedtls_md5],["no"], - [ - AS_VAR_IF([enable_md5],["tlslib"], - [AC_MSG_WARN([MbedTLS MD5 implementation is not available])] - ) - ], - [ - AC_DEFINE([[MHD_MD5_EXTR_MBEDTLS]],[[1]], - [Define to 1 if libmicrohttpd is compiled with MD5 hashing by MbedTLS.]) - have_md5_mbedtls="yes" - found_md5_tls="yes" - ] + [AC_MSG_WARN([MbedTLS MD5 implementation is not available])], + [use_md5_backend="mbedtls"] ) ] - ) # end mbedtls check + ) ] - ) # end AS_IF (enable_https) + ) # end mbedtls check - AS_IF([test "x$enable_md5" = "xyes"], - [AS_VAR_IF([found_md5_tls],["yes"], - [enable_md5="tlslib"], - [ - enable_md5="builtin" - AS_UNSET([have_md5_gnutls]) - AS_UNSET([have_md5_openssl]) - AS_UNSET([have_md5_mbedtls]) - ] - )], - [AS_VAR_IF([found_md5_tls],["yes"], - [enable_md5="tlslib"], - [AC_MSG_ERROR([TLS library support requested for MD5, but no library supports it])] - )] + AS_IF([test -z "${use_md5_backend}"], + [ + AS_CASE([${enable_md5}],[tlslib|gnutls|openssl|mbedtls], + [AC_MSG_ERROR([selected MD5 backend (${enable_md5}) is not available])] + ) + ] ) ] -) # end "enable_md5 in yes|tlslib" +) # end "enable_md5 in yes|tlslib|gnutls|openssl|mbedtls" -AC_MSG_CHECKING([[whether to support MD5]]) +AC_MSG_CHECKING([[for MD5 backend to use]]) AS_UNSET([enable_md5_MSG]) -AS_CASE([${enable_md5}], - [builtin],[enable_md5_MSG='yes, built-in'], - [tlslib],[enable_md5_MSG='yes, external (TLS library)'], - [no],[enable_md5_MSG='no'], - [yes],[AC_MSG_ERROR([configure internal error: unexpected variable value])], - [AC_MSG_ERROR([Unrecognized parameter --enable-md5=${enable_md5}])] -) -AS_IF([test "x${enable_md5}" = "xbuiltin" || test "x${enable_md5}" = "xtlslib" ], - [ - AC_DEFINE([[MHD_SUPPORT_MD5]],[[1]], - [Define to 1 if libmicrohttpd is compiled with MD5 hashing support.]) - ] -) -AS_IF([test "x${enable_md5}" = "xtlslib" ], - [ - AC_DEFINE([[MHD_MD5_EXTR]],[[1]], - [Define to 1 if libmicrohttpd is compiled with MD5 hashing by TLS library.]) - ] +AS_IF([test -z "${use_md5_backend}"], + [ + AS_CASE([${enable_md5}], + [yes],[use_md5_backend='builtin'], + [AC_MSG_FAILURE([configure internal error: unexpected variable value \$enable_md5=${enable_md5}])] + ) + ] +) +AS_IF([test "X${enable_md5}" != "X${use_md5_backend}" && test "X${enable_md5}" != "Xyes" && test "X${enable_md5}" != "Xtlslib"], + [AC_MSG_FAILURE([configure internal error: unexpected variables values \$enable_md5=${enable_md5}; \$use_md5_backend=${use_md5_backend}])] +) +AS_IF([test "X${use_md5_backend}" != "Xno"], + [AC_DEFINE([[MHD_SUPPORT_MD5]],[[1]], + [Define to 1 if libmicrohttpd is compiled with MD5 hashing support.])]) +AM_CONDITIONAL([MHD_SUPPORT_MD5], [[test "X${use_md5_backend}" != "Xno"]]) +AS_IF([test "X${use_md5_backend}" = "Xbuiltin"], + [AC_DEFINE([[MHD_MD5_BUILTIN]],[[1]], + [Define to 1 if libmicrohttpd is compiled with MD5 hashing by internal code.])]) +AM_CONDITIONAL([MHD_MD5_BUILTIN], [[test "X${use_md5_backend}" = "Xbuiltin"]]) +AS_IF([test "X${use_md5_backend}" = "Xgnutls"], + [AC_DEFINE([[MHD_MD5_GNUTLS]],[[1]], + [Define to 1 if libmicrohttpd is compiled with MD5 hashing by GnuTLS.])]) +AM_CONDITIONAL([MHD_MD5_GNUTLS],[test "X${use_md5_backend}" = "Xgnutls"]) +AS_IF([test "X${use_md5_backend}" = "Xopenssl"], + [AC_DEFINE([[MHD_MD5_OPENSSL]],[[1]], + [Define to 1 if libmicrohttpd is compiled with MD5 hashing by OpenSSL.])]) +AM_CONDITIONAL([MHD_MD5_OPENSSL],[test "X${use_md5_backend}" = "Xopenssl"]) +AS_IF([test "X${use_md5_backend}" = "Xmbedtls"], + [AC_DEFINE([[MHD_MD5_MBEDTLS]],[[1]], + [Define to 1 if libmicrohttpd is compiled with MD5 hashing by MbedTLS.])]) +AM_CONDITIONAL([MHD_MD5_MBEDTLS],[test "X${use_md5_backend}" = "Xmbedtls"]) +AS_CASE([${use_md5_backend}], + [no],[enable_md5_MSG="no (disabled)"], + [builtin],[enable_md5_MSG='built-in (internal implementation)'], + [gnutls],[enable_md5_MSG='GnuTLS'], + [openssl],[enable_md5_MSG='OpenSSL'], + [mbedtls],[enable_md5_MSG='MbedTLS'], + [AC_MSG_FAILURE([configure internal error: unexpected variable value \$use_md5_backend=${use_md5_backend}])] ) -AM_CONDITIONAL([MHD_SUPPORT_MD5], [[test "x${enable_md5}" = "xbuiltin" || test "x${enable_md5}" = "xtlslib" ]]) -AM_CONDITIONAL([MHD_USE_MD5_INTR], [[test "X${enable_md5}" = "Xbuiltin"]]) -AM_CONDITIONAL([MHD_USE_MD5_GNUTLS],[test "X${have_md5_gnutls}" = "Xyes"]) -AM_CONDITIONAL([MHD_USE_MD5_OPENSSL],[test "X${have_md5_openssl}" = "Xyes"]) -AM_CONDITIONAL([MHD_USE_MD5_MBEDTLS],[test "X${have_md5_mbedtls}" = "Xyes"]) AC_MSG_RESULT([[${enable_md5_MSG}]]) # optional: SHA-256 support for Digest Auth. Enabled by default. diff --git a/src/mhd2/Makefile.am b/src/mhd2/Makefile.am @@ -159,25 +159,25 @@ auth_basic_OPTSOURCES = \ response_auth_basic.c -if MHD_USE_MD5_INTR +if MHD_MD5_BUILTIN md5_OPTSOURCES = \ md5_builtin.c md5_builtin.h \ mhd_md5.h endif -if MHD_USE_MD5_GNUTLS +if MHD_MD5_GNUTLS md5_OPTSOURCES = \ md5_gnutls.c md5_gnutls.h \ mhd_md5.h endif -if MHD_USE_MD5_OPENSSL +if MHD_MD5_OPENSSL md5_OPTSOURCES = \ md5_openssl.c md5_openssl.h \ mhd_md5.h endif -if MHD_USE_MD5_MBEDTLS +if MHD_MD5_MBEDTLS md5_OPTSOURCES = \ md5_mbedtls.c md5_mbedtls.h \ mhd_md5.h diff --git a/src/mhd2/lib_get_info.c b/src/mhd2/lib_get_info.c @@ -272,7 +272,7 @@ MHD_lib_get_info_fixed_sz (enum MHD_LibInfoFixed info_type, #if !defined(MHD_SUPPORT_MD5) output_buf->v_type_digest_auth_md5_algo_type = MHD_LIB_INFO_FIXED_DIGEST_ALGO_TYPE_NOT_AVAILABLE; -#elif !defined(MHD_MD5_EXTR) +#elif defined(MHD_MD5_BUILTIN) output_buf->v_type_digest_auth_md5_algo_type = MHD_LIB_INFO_FIXED_DIGEST_ALGO_TYPE_BUILT_IN; #elif !defined(mhd_MD5_HAS_EXT_ERROR) diff --git a/src/mhd2/mhd_md5.h b/src/mhd2/mhd_md5.h @@ -60,7 +60,7 @@ #include "mhd_macro_concat.h" -#if defined(MHD_MD5_EXTR_GNUTLS) +#if defined(MHD_MD5_GNUTLS) # include "md5_gnutls.h" /** @@ -76,7 +76,7 @@ */ # define mhd_MD5_MACRO_NAME_ID GTLS -#elif defined(MHD_MD5_EXTR_OPENSSL) +#elif defined(MHD_MD5_OPENSSL) # include "md5_openssl.h" /** @@ -92,7 +92,7 @@ */ # define mhd_MD5_MACRO_NAME_ID OSSL -#elif defined(MHD_MD5_EXTR_MBEDTLS) +#elif defined(MHD_MD5_MBEDTLS) # include "md5_mbedtls.h" /** @@ -107,7 +107,7 @@ * The hashing backend identifier for macro names */ # define mhd_MD5_MACRO_NAME_ID MTLS -#elif !defined(MHD_MD5_EXTR) +#elif defined(MHD_MD5_BUILTIN) # include "md5_builtin.h" /** diff --git a/src/tests/unit/Makefile.am b/src/tests/unit/Makefile.am @@ -114,20 +114,23 @@ unit_hpack_tables_combined_SOURCES = $(unit_hpack_tables_dynamic_SOURCES) unit_md5_SOURCES = \ unit_md5.c \ - $(srcdir)/../../mhd2/mhd_md5.h \ - $(srcdir)/../../mhd2/md5_builtin.c $(srcdir)/../../mhd2/md5_builtin.h + $(srcdir)/../../mhd2/mhd_md5.h -if MHD_SUPPORT_GNUTLS +if MHD_MD5_BUILTIN unit_md5_SOURCES += \ - $(srcdir)/../../mhd2/md5_gnutls.c $(srcdir)/../../mhd2/md5_gnutls.h + $(srcdir)/../../mhd2/md5_builtin.c $(srcdir)/../../mhd2/md5_builtin.h endif -if MHD_SUPPORT_OPENSSL +if MHD_MD5_GNUTLS unit_md5_SOURCES += \ - $(srcdir)/../../mhd2/md5_openssl.c $(srcdir)/../../mhd2/md5_openssl.h + $(srcdir)/../../mhd2/md5_gnutls.c $(srcdir)/../../mhd2/md5_gnutls.h endif -if MHD_SUPPORT_MBEDTLS +if MHD_MD5_OPENSSL unit_md5_SOURCES += \ - $(srcdir)/../../mhd2/md5_mbedtls.c $(srcdir)/../../mhd2/md5_mbedtls.h + $(srcdir)/../../mhd2/md5_openssl.c $(srcdir)/../../mhd2/md5_openssl.h +endif +if MHD_MD5_MBEDTLS + unit_md5_SOURCES += \ + $(srcdir)/../../mhd2/md5_mbedtls.c $(srcdir)/../../mhd2/md5_mbedtls.h endif