used only by deprecated librdf_uri_get_digest so stub that to take only the return NULL error patchf41
parent
2f72cd73a4
commit
f86774ef67
@ -1,305 +0,0 @@
|
||||
From f9687b876e7faa65a1a897803ae5b07c94dd304e Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Caol=C3=A1n=20McNamara?= <caolanm@redhat.com>
|
||||
Date: Tue, 9 Mar 2021 11:35:40 +0000
|
||||
Subject: [PATCH] rhbz#1936659 restore --with-openssl-digests
|
||||
|
||||
which makes it possible to use --enable-digests=ripemd160
|
||||
---
|
||||
INSTALL.html | 9 +-
|
||||
configure.ac | 49 ++++++++++
|
||||
src/Makefile.am | 2 +-
|
||||
src/rdf_digest_openssl.c | 188 +++++++++++++++++++++++++++++++++++++++
|
||||
4 files changed, 245 insertions(+), 3 deletions(-)
|
||||
create mode 100644 src/rdf_digest_openssl.c
|
||||
|
||||
diff --git a/INSTALL.html b/INSTALL.html
|
||||
index 18ff49d3..2a7626b9 100644
|
||||
--- a/INSTALL.html
|
||||
+++ b/INSTALL.html
|
||||
@@ -140,8 +140,13 @@ Maintainer mode automatically enables this.</p>
|
||||
</dd>
|
||||
|
||||
<dt><code>--enable-digests=LIST</code><br /></dt>
|
||||
-<dd><p>Does nothing - only builtin content digests are available now:
|
||||
-MD5 and SHA1.</p></dd>
|
||||
+<dd><p>Select the list of content digests to be included if the are
|
||||
+availble. The valid list of digests are: <code>md5 sha1
|
||||
+ripem160</code> (the default). The digest functions can be provided
|
||||
+by external libraries such as the
|
||||
+<a href="http://www.openssl.org/">OpenSSL</a> libcrypto library or by
|
||||
+provided portable versions (only MD5 supported in this
|
||||
+release).</p></dd>
|
||||
|
||||
<dt><code>--enable-parsers=LIST</code><br /></dt>
|
||||
<dd><p>Select the list of RDF parsers to be included if the are availble. The
|
||||
diff --git a/configure.ac b/configure.ac
|
||||
index ab4ffae8..c9986a5b 100644
|
||||
--- a/configure.ac
|
||||
+++ b/configure.ac
|
||||
@@ -574,7 +574,56 @@ AC_MSG_RESULT($digest_modules)
|
||||
DIGEST_OBJS=
|
||||
DIGEST_SRCS=
|
||||
|
||||
+AC_ARG_WITH(openssl-digests, [ --with-openssl-digests Use openssl digests (default=yes)], enable_openssl_digests="$withval", enable_openssl_digests="yes")
|
||||
+
|
||||
+# This is needed because autoheader can't work out which computed
|
||||
+# symbols must be pulled from acconfig.h into config.h.in
|
||||
+if test "x" = "y"; then
|
||||
+ AC_DEFINE(HAVE_OPENSSL_CRYPTO_MD5_DIGEST, 1, [Have openssl MD5 digest])
|
||||
+ AC_DEFINE(HAVE_OPENSSL_CRYPTO_SHA1_DIGEST, 1, [Have openssl SHA1 digest])
|
||||
+ AC_DEFINE(HAVE_OPENSSL_CRYPTO_RIPEMD160_DIGEST, 1, [Have openssl RIPEMD160 digest])
|
||||
+fi
|
||||
+
|
||||
digest_modules_available=
|
||||
+AC_MSG_CHECKING(whether to use openssl digests)
|
||||
+if test "$enable_openssl_digests" = yes ; then
|
||||
+ AC_MSG_RESULT(yes)
|
||||
+ AC_CHECK_HEADERS(openssl/crypto.h)
|
||||
+ if test "$ac_cv_header_openssl_crypto_h" = yes ; then
|
||||
+ AC_DEFINE(HAVE_OPENSSL_DIGESTS, 1, [Have openssl digests])
|
||||
+ new_digest_modules=
|
||||
+ LIBS="$LIBRDF_LIBS -lcrypto"
|
||||
+ have_libcrypto=no
|
||||
+
|
||||
+ for module in $digest_modules; do
|
||||
+ func=`echo $module | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
|
||||
+ found=
|
||||
+ AC_MSG_CHECKING(for openssl $func digest module)
|
||||
+ AC_CACHE_VAL(ac_cv_lib_crypto_$func,
|
||||
+ [AC_TRY_LINK(, $func(),
|
||||
+ [eval "ac_cv_lib_crypto_$func=yes"],
|
||||
+ [eval "ac_cv_lib_crypto_$func=no"])])
|
||||
+ if eval "test \"`echo '$ac_cv_lib_crypto_'$func`\" = yes"; then
|
||||
+ AC_MSG_RESULT(yes)
|
||||
+ n=HAVE_OPENSSL_CRYPTO_${func}_DIGEST
|
||||
+ AC_DEFINE_UNQUOTED($n)
|
||||
+ have_libcrypto=yes
|
||||
+ digest_modules_available="$digest_modules_available $module(openssl)"
|
||||
+ else
|
||||
+ AC_MSG_RESULT(no)
|
||||
+ new_digest_modules="${new_digest_modules} $module"
|
||||
+ fi
|
||||
+ done
|
||||
+ if test "$have_libcrypto" = yes; then
|
||||
+ LIBRDF_LIBS="$LIBRDF_LIBS -lcrypto"
|
||||
+ fi
|
||||
+ DIGEST_OBJS="$DIGEST_OBJS rdf_digest_openssl.lo"
|
||||
+ DIGEST_SRCS="$DIGEST_SRCS rdf_digest_openssl.c"
|
||||
+ digest_modules=$new_digest_modules
|
||||
+ fi
|
||||
+else
|
||||
+ AC_MSG_RESULT(no)
|
||||
+fi
|
||||
|
||||
|
||||
dnl hashes
|
||||
diff --git a/src/Makefile.am b/src/Makefile.am
|
||||
index b0b708b8..cb32d058 100644
|
||||
--- a/src/Makefile.am
|
||||
+++ b/src/Makefile.am
|
||||
@@ -189,7 +189,7 @@ librdf_la_DEPENDENCIES = \
|
||||
@LIBRDF_INTERNAL_DEPS@
|
||||
|
||||
EXTRA_librdf_la_SOURCES = rdf_hash_bdb.c \
|
||||
-rdf_digest_md5.c rdf_digest_sha1.c \
|
||||
+rdf_digest_md5.c rdf_digest_sha1.c rdf_digest_openssl.c \
|
||||
rdf_parser_raptor.c
|
||||
|
||||
EXTRA_DIST=\
|
||||
diff --git a/src/rdf_digest_openssl.c b/src/rdf_digest_openssl.c
|
||||
new file mode 100644
|
||||
index 00000000..be04cb4f
|
||||
--- /dev/null
|
||||
+++ b/src/rdf_digest_openssl.c
|
||||
@@ -0,0 +1,188 @@
|
||||
+/* -*- Mode: c; c-basic-offset: 2 -*-
|
||||
+ *
|
||||
+ * rdf_digest_openssl.c - RDF Digest OpenSSL Digest interface
|
||||
+ *
|
||||
+ * Copyright (C) 2000-2008, David Beckett http://www.dajobe.org/
|
||||
+ * Copyright (C) 2000-2004, University of Bristol, UK http://www.bristol.ac.uk/
|
||||
+ *
|
||||
+ * This package is Free Software and part of Redland http://librdf.org/
|
||||
+ *
|
||||
+ * It is licensed under the following three licenses as alternatives:
|
||||
+ * 1. GNU Lesser General Public License (LGPL) V2.1 or any newer version
|
||||
+ * 2. GNU General Public License (GPL) V2 or any newer version
|
||||
+ * 3. Apache License, V2.0 or any newer version
|
||||
+ *
|
||||
+ * You may not use this file except in compliance with at least one of
|
||||
+ * the above three licenses.
|
||||
+ *
|
||||
+ * See LICENSE.html or LICENSE.txt at the top of this package for the
|
||||
+ * complete terms and further detail along with the license texts for
|
||||
+ * the licenses in COPYING.LIB, COPYING and LICENSE-2.0.txt respectively.
|
||||
+ *
|
||||
+ *
|
||||
+ */
|
||||
+
|
||||
+
|
||||
+#ifdef HAVE_CONFIG_H
|
||||
+#include <rdf_config.h>
|
||||
+#endif
|
||||
+
|
||||
+#ifdef WIN32
|
||||
+#include <win32_rdf_config.h>
|
||||
+#endif
|
||||
+
|
||||
+
|
||||
+#include <stdio.h>
|
||||
+#include <string.h>
|
||||
+#include <stdarg.h>
|
||||
+
|
||||
+#include <openssl/crypto.h>
|
||||
+
|
||||
+#include <redland.h>
|
||||
+#include <rdf_digest.h>
|
||||
+
|
||||
+#ifdef HAVE_OPENSSL_CRYPTO_MD5_DIGEST
|
||||
+#include <openssl/md5.h>
|
||||
+
|
||||
+
|
||||
+/* The new struct contains the old one at start (so casting works) plus
|
||||
+ * a space for the digest to be stored once calculated
|
||||
+ */
|
||||
+typedef struct
|
||||
+{
|
||||
+ MD5_CTX contex;
|
||||
+ unsigned char digest[MD5_DIGEST_LENGTH];
|
||||
+} MD5_CTX_2;
|
||||
+
|
||||
+
|
||||
+static void
|
||||
+md5_final(MD5_CTX_2 *c)
|
||||
+{
|
||||
+ MD5_Final(c->digest, (MD5_CTX*)c);
|
||||
+}
|
||||
+
|
||||
+static unsigned char *
|
||||
+md5_get_digest(MD5_CTX_2 *c)
|
||||
+{
|
||||
+ return c->digest;
|
||||
+}
|
||||
+
|
||||
+
|
||||
+static void
|
||||
+librdf_openssl_md5_register_factory(librdf_digest_factory *factory)
|
||||
+{
|
||||
+ factory->context_length = sizeof(MD5_CTX_2);
|
||||
+ factory->digest_length = MD5_DIGEST_LENGTH;
|
||||
+
|
||||
+ factory->init = (void (*)(void *))MD5_Init;
|
||||
+ factory->update = (void (*)(void *, const unsigned char*, size_t))MD5_Update;
|
||||
+ factory->final = (void (*)(void *))md5_final;
|
||||
+ factory->get_digest = (unsigned char *(*)(void *))md5_get_digest;
|
||||
+}
|
||||
+#endif
|
||||
+
|
||||
+
|
||||
+#ifdef HAVE_OPENSSL_CRYPTO_SHA1_DIGEST
|
||||
+#include <openssl/sha.h>
|
||||
+
|
||||
+/* The new struct contains the old one at start (so casting works) plus
|
||||
+ * a space for the digest to be stored once calculated
|
||||
+ */
|
||||
+typedef struct
|
||||
+{
|
||||
+ SHA_CTX contex;
|
||||
+ unsigned char digest[SHA_DIGEST_LENGTH];
|
||||
+} SHA_CTX_2;
|
||||
+
|
||||
+
|
||||
+static void
|
||||
+sha1_final(SHA_CTX_2 *c)
|
||||
+{
|
||||
+ SHA1_Final(c->digest, (SHA_CTX*)c);
|
||||
+}
|
||||
+
|
||||
+static unsigned char *
|
||||
+sha1_get_digest(SHA_CTX_2 *c)
|
||||
+{
|
||||
+ return c->digest;
|
||||
+}
|
||||
+
|
||||
+
|
||||
+static void
|
||||
+librdf_openssl_sha1_register_factory(librdf_digest_factory *factory)
|
||||
+{
|
||||
+ factory->context_length = sizeof(SHA_CTX_2);
|
||||
+ factory->digest_length = SHA_DIGEST_LENGTH;
|
||||
+
|
||||
+ factory->init = (void (*)(void *))SHA1_Init;
|
||||
+ factory->update = (void (*)(void *, const unsigned char*, size_t))SHA1_Update;
|
||||
+ factory->final = (void (*)(void *))sha1_final;
|
||||
+ factory->get_digest = (unsigned char *(*)(void *))sha1_get_digest;
|
||||
+}
|
||||
+#endif
|
||||
+
|
||||
+
|
||||
+#ifdef HAVE_OPENSSL_CRYPTO_RIPEMD160_DIGEST
|
||||
+#include <openssl/ripemd.h>
|
||||
+
|
||||
+/* The new struct contains the old one at start (so casting works) plus
|
||||
+ * a space for the digest to be stored once calculated
|
||||
+ */
|
||||
+typedef struct
|
||||
+{
|
||||
+ RIPEMD160_CTX contex;
|
||||
+ unsigned char digest[RIPEMD160_DIGEST_LENGTH];
|
||||
+} RIPEMD160_CTX_2;
|
||||
+
|
||||
+
|
||||
+static void
|
||||
+ripemd160_final(RIPEMD160_CTX_2 *c)
|
||||
+{
|
||||
+ RIPEMD160_Final(c->digest, (RIPEMD160_CTX*)c);
|
||||
+}
|
||||
+
|
||||
+static unsigned char *
|
||||
+ripemd160_get_digest(RIPEMD160_CTX_2 *c)
|
||||
+{
|
||||
+ return c->digest;
|
||||
+}
|
||||
+
|
||||
+
|
||||
+static void
|
||||
+librdf_openssl_ripemd160_register_factory(librdf_digest_factory *factory)
|
||||
+{
|
||||
+ factory->context_length = sizeof(RIPEMD160_CTX_2);
|
||||
+ factory->digest_length = RIPEMD160_DIGEST_LENGTH;
|
||||
+
|
||||
+ factory->init = (void (*)(void *))RIPEMD160_Init;
|
||||
+ factory->update = (void (*)(void *, const unsigned char*, size_t))RIPEMD160_Update;
|
||||
+ factory->final = (void (*)(void *))ripemd160_final;
|
||||
+ factory->get_digest = (unsigned char *(*)(void *))ripemd160_get_digest;
|
||||
+}
|
||||
+#endif
|
||||
+
|
||||
+
|
||||
+/**
|
||||
+ * librdf_digest_openssl_constructor:
|
||||
+ * @world: redland world object
|
||||
+ *
|
||||
+ * Initialise the OpenSSL digest module.
|
||||
+ *
|
||||
+ **/
|
||||
+void
|
||||
+librdf_digest_openssl_constructor(librdf_world *world)
|
||||
+{
|
||||
+#ifdef HAVE_OPENSSL_CRYPTO_MD5_DIGEST
|
||||
+ librdf_digest_register_factory(world,
|
||||
+ "MD5", &librdf_openssl_md5_register_factory);
|
||||
+#endif
|
||||
+#ifdef HAVE_OPENSSL_CRYPTO_RIPEMD160_DIGEST
|
||||
+ librdf_digest_register_factory(world,
|
||||
+ "RIPEMD160", &librdf_openssl_ripemd160_register_factory);
|
||||
+#endif
|
||||
+#ifdef HAVE_OPENSSL_CRYPTO_SHA1_DIGEST
|
||||
+ librdf_digest_register_factory(world,
|
||||
+ "SHA1", &librdf_openssl_sha1_register_factory);
|
||||
+#endif
|
||||
+
|
||||
+}
|
||||
--
|
||||
2.29.2
|
||||
|
@ -0,0 +1,69 @@
|
||||
diff -ru redland-1.0.17.orig/src/rdf_uri.c redland-1.0.17/src/rdf_uri.c
|
||||
--- redland-1.0.17.orig/src/rdf_uri.c 2021-03-22 09:02:42.420115182 +0000
|
||||
+++ redland-1.0.17/src/rdf_uri.c 2021-03-22 09:06:54.432694225 +0000
|
||||
@@ -358,32 +358,14 @@
|
||||
* @world: #librdf_world object
|
||||
* @uri: #librdf_uri object
|
||||
*
|
||||
- * Get a digest for the URI.
|
||||
- *
|
||||
- * Generates a digest object for the URI. The digest factory used is
|
||||
- * determined at class initialisation time by librdf_init_uri().
|
||||
- *
|
||||
- * Return value: new #librdf_digest object or NULL on failure.
|
||||
+ * exported public in error but never usable
|
||||
+ *
|
||||
+ * Return value: NULL.
|
||||
**/
|
||||
librdf_digest*
|
||||
librdf_uri_get_digest(librdf_world* world, librdf_uri* uri)
|
||||
{
|
||||
- librdf_digest* d;
|
||||
- unsigned char *str;
|
||||
- size_t len;
|
||||
-
|
||||
- LIBRDF_ASSERT_OBJECT_POINTER_RETURN_VALUE(uri, librdf_uri, NULL);
|
||||
-
|
||||
- d = librdf_new_digest_from_factory(world, world->digest_factory);
|
||||
- if(!d)
|
||||
- return NULL;
|
||||
-
|
||||
- str = librdf_uri_as_counted_string(uri, &len);
|
||||
-
|
||||
- librdf_digest_update(d, str, len);
|
||||
- librdf_digest_final(d);
|
||||
-
|
||||
- return d;
|
||||
+ return NULL;
|
||||
}
|
||||
|
||||
|
||||
@@ -536,7 +518,6 @@
|
||||
{
|
||||
const unsigned char *hp_string=(const unsigned char*)"http://purl.org/net/dajobe/";
|
||||
librdf_uri *uri1, *uri2, *uri3, *uri4, *uri5, *uri6, *uri7, *uri8, *uri9;
|
||||
- librdf_digest *d;
|
||||
const char *program=librdf_basename((const char*)argv[0]);
|
||||
const char *file_string="/big/long/directory/file";
|
||||
const unsigned char *file_uri_string=(const unsigned char*)"file:///big/long/directory/file";
|
||||
@@ -571,18 +552,11 @@
|
||||
librdf_uri_print(uri2, stderr);
|
||||
fputs("\n", stderr);
|
||||
|
||||
-
|
||||
- fprintf(stderr, "%s: Getting digest for URI\n", program);
|
||||
- d = librdf_uri_get_digest(world, uri2);
|
||||
- if(!d) {
|
||||
- fprintf(stderr, "%s: Failed to get digest for URI %s\n", program,
|
||||
+ if(librdf_uri_get_digest(world, uri2)) {
|
||||
+ fprintf(stderr, "%s: Didn't fail to get digest for URI %s\n", program,
|
||||
librdf_uri_as_string(uri2));
|
||||
return(1);
|
||||
}
|
||||
- fprintf(stderr, "%s: Digest is: ", program);
|
||||
- librdf_digest_print(d, stderr);
|
||||
- fputs("\n", stderr);
|
||||
- librdf_free_digest(d);
|
||||
|
||||
uri3=librdf_new_uri(world, (const unsigned char*)"file:/big/long/directory/");
|
||||
uri4=librdf_new_uri(world, (const unsigned char*)"http://somewhere/dir/");
|
Loading…
Reference in new issue