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:
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