Fix compilation of uuid-ossp
authorMichael Paquier <[email protected]>
Thu, 10 Dec 2020 03:49:43 +0000 (12:49 +0900)
committerMichael Paquier <[email protected]>
Thu, 10 Dec 2020 03:49:43 +0000 (12:49 +0900)
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/[email protected]

configure
configure.ac
contrib/uuid-ossp/Makefile
contrib/uuid-ossp/uuid-ossp.c

index 2a03ed0a01823fd109766a056133a5d5354d62c3..11a4284e5bd750114d423565e00c31b3823913ec 100755 (executable)
--- 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
index 466aa51dd67df05b2fd235f8f45526727ef4110f..fc523c6aeb413569fcb6f36c82017ebabc0a3fb2 100644 (file)
@@ -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=""
index e4bbffc30d91facc903a6aa8a7bf9be8e868abaf..0859a5397c97d26b5fb9d1b5b87b02712c44c226 100644 (file)
@@ -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) $< .
index 2a471e599b14cc1aa7eedf000f2a8a62a52c6cae..8f81c94e725308966153c41a4c01024a6d4257e6 100644 (file)
@@ -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
                {