From 525e60b7429925d09fce1b5aa0bc2f23cfe6dd18 Mon Sep 17 00:00:00 2001 From: Michael Paquier Date: Thu, 10 Dec 2020 12:49:43 +0900 Subject: [PATCH] Fix compilation of uuid-ossp This module had a dependency on pgcrypto's md5.c that got removed by b67b57a. Instead of the code from pgcrypto, this code can just use the new cryptohash routines for MD5 as a drop-in replacement, so let's just do this switch. This has also the merit to simplify a bit the compilation of uuid-ossp. This requires --with-uuid to be reproduced, and I have used e2fs as a way to reproduce the failure, then test this commit. Per reports from buildfarm members longfin, florican and sifaka. Discussion: https://postgr.es/m/X9GToVd3QmWeNvj8@paquier.xyz --- configure | 4 ++-- configure.ac | 4 ++-- contrib/uuid-ossp/Makefile | 4 ++-- contrib/uuid-ossp/uuid-ossp.c | 16 ++++++++++------ 4 files changed, 16 insertions(+), 12 deletions(-) diff --git a/configure b/configure index 2a03ed0a018..11a4284e5bd 100755 --- a/configure +++ b/configure @@ -8307,12 +8307,12 @@ if test "$with_uuid" = bsd ; then $as_echo "#define HAVE_UUID_BSD 1" >>confdefs.h - UUID_EXTRA_OBJS="md5.o sha1.o" + UUID_EXTRA_OBJS="sha1.o" elif test "$with_uuid" = e2fs ; then $as_echo "#define HAVE_UUID_E2FS 1" >>confdefs.h - UUID_EXTRA_OBJS="md5.o sha1.o" + UUID_EXTRA_OBJS="sha1.o" elif test "$with_uuid" = ossp ; then $as_echo "#define HAVE_UUID_OSSP 1" >>confdefs.h diff --git a/configure.ac b/configure.ac index 466aa51dd67..fc523c6aeb4 100644 --- a/configure.ac +++ b/configure.ac @@ -921,10 +921,10 @@ fi if test "$with_uuid" = bsd ; then AC_DEFINE([HAVE_UUID_BSD], 1, [Define to 1 if you have BSD UUID support.]) - UUID_EXTRA_OBJS="md5.o sha1.o" + UUID_EXTRA_OBJS="sha1.o" elif test "$with_uuid" = e2fs ; then AC_DEFINE([HAVE_UUID_E2FS], 1, [Define to 1 if you have E2FS UUID support.]) - UUID_EXTRA_OBJS="md5.o sha1.o" + UUID_EXTRA_OBJS="sha1.o" elif test "$with_uuid" = ossp ; then AC_DEFINE([HAVE_UUID_OSSP], 1, [Define to 1 if you have OSSP UUID support.]) UUID_EXTRA_OBJS="" diff --git a/contrib/uuid-ossp/Makefile b/contrib/uuid-ossp/Makefile index e4bbffc30d9..0859a5397c9 100644 --- a/contrib/uuid-ossp/Makefile +++ b/contrib/uuid-ossp/Makefile @@ -19,7 +19,7 @@ pgcrypto_src = $(top_srcdir)/contrib/pgcrypto PG_CPPFLAGS = -I$(pgcrypto_src) -EXTRA_CLEAN = md5.c sha1.c +EXTRA_CLEAN = sha1.c ifdef USE_PGXS PG_CONFIG = pg_config @@ -32,5 +32,5 @@ include $(top_builddir)/src/Makefile.global include $(top_srcdir)/contrib/contrib-global.mk endif -md5.c sha1.c: % : $(pgcrypto_src)/% +sha1.c: % : $(pgcrypto_src)/% rm -f $@ && $(LN_S) $< . diff --git a/contrib/uuid-ossp/uuid-ossp.c b/contrib/uuid-ossp/uuid-ossp.c index 2a471e599b1..8f81c94e725 100644 --- a/contrib/uuid-ossp/uuid-ossp.c +++ b/contrib/uuid-ossp/uuid-ossp.c @@ -14,6 +14,7 @@ #include "postgres.h" #include "fmgr.h" +#include "common/cryptohash.h" #include "port/pg_bswap.h" #include "utils/builtins.h" #include "utils/uuid.h" @@ -44,7 +45,6 @@ * so we use a copy of the ones from pgcrypto. Not needed with OSSP, though. */ #ifndef HAVE_UUID_OSSP -#include "md5.h" #include "sha1.h" #endif @@ -324,13 +324,17 @@ uuid_generate_internal(int v, unsigned char *ns, const char *ptr, int len) if (v == 3) { - MD5_CTX ctx; + pg_cryptohash_ctx *ctx = pg_cryptohash_create(PG_MD5); - MD5Init(&ctx); - MD5Update(&ctx, ns, sizeof(uu)); - MD5Update(&ctx, (unsigned char *) ptr, len); + if (pg_cryptohash_init(ctx) < 0) + elog(ERROR, "could not initialize %s context", "MD5"); + if (pg_cryptohash_update(ctx, ns, sizeof(uu)) < 0 || + pg_cryptohash_update(ctx, (unsigned char *) ptr, len) < 0) + elog(ERROR, "could not update %s context", "MD5"); /* we assume sizeof MD5 result is 16, same as UUID size */ - MD5Final((unsigned char *) &uu, &ctx); + if (pg_cryptohash_final(ctx, (unsigned char *) &uu) < 0) + elog(ERROR, "could not finalize %s context", "MD5"); + pg_cryptohash_free(ctx); } else {