summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--config_host.mk.in2
-rw-r--r--config_host/config_gpgme.h.in3
-rw-r--r--configure.ac23
-rw-r--r--xmlsecurity/CppunitTest_xmlsecurity_signing.mk14
-rw-r--r--xmlsecurity/qa/unit/signing/signing.cxx8
5 files changed, 49 insertions, 1 deletions
diff --git a/config_host.mk.in b/config_host.mk.in
index 7d793455901b..8cbbc5fee1d5 100644
--- a/config_host.mk.in
+++ b/config_host.mk.in
@@ -198,6 +198,7 @@ export EPOXY_LIBS=$(gb_SPACE)@EPOXY_LIBS@
export GLM_CFLAGS=$(gb_SPACE)@GLM_CFLAGS@
export GPG_ERROR_CFLAGS=$(gb_SPACE)@GPG_ERROR_CFLAGS@
export GPG_ERROR_LIBS=$(gb_SPACE)@GPG_ERROR_LIBS@
+export GPGCONF=@GPGCONF@
export GPGMEPP_CFLAGS=$(gb_SPACE)@GPGMEPP_CFLAGS@
export GPGMEPP_LIBS=$(gb_SPACE)@GPGMEPP_LIBS@
export GNUTLS_CFLAGS=$(gb_SPACE)@GNUTLS_CFLAGS@
@@ -241,6 +242,7 @@ export HAVE_GCC_FNO_INLINE=@HAVE_GCC_FNO_INLINE@
export HAVE_GCC_FNO_SIZED_DEALLOCATION=@HAVE_GCC_FNO_SIZED_DEALLOCATION@
export HAVE_GCC_GGDB2=@HAVE_GCC_GGDB2@
export HAVE_GNUMAKE_FILE_FUNC=@HAVE_GNUMAKE_FILE_FUNC@
+export HAVE_GPGCONF_SOCKETDIR=@HAVE_GPGCONF_SOCKETDIR@
export HAVE_LD_BSYMBOLIC_FUNCTIONS=@HAVE_LD_BSYMBOLIC_FUNCTIONS@
export HAVE_LD_HASH_STYLE=@HAVE_LD_HASH_STYLE@
export HAVE_POSIX_FALLOCATE=@HAVE_POSIX_FALLOCATE@
diff --git a/config_host/config_gpgme.h.in b/config_host/config_gpgme.h.in
index 7e46f3703ec3..4a2f24a2de61 100644
--- a/config_host/config_gpgme.h.in
+++ b/config_host/config_gpgme.h.in
@@ -19,6 +19,9 @@
// Defined if gpg and gpgme signature verification is available
#define HAVE_FEATURE_GPGVERIFY 0
+// Defined if gpgconf --create-socketdir works
+#define HAVE_GPGCONF_SOCKETDIR 0
+
#if HAVE_FEATURE_GPGME
# include "config_lgpl.h"
#endif
diff --git a/configure.ac b/configure.ac
index f8394c9677a7..bbcc18c77b92 100644
--- a/configure.ac
+++ b/configure.ac
@@ -10170,6 +10170,27 @@ elif test "$_os" = "Linux" -o "$_os" = "Darwin" -o "$_os" = "WINNT" ; then
# gpg installation to run OpenPGP signature verification
AC_DEFINE([HAVE_FEATURE_GPGVERIFY])
fi
+ if test "$_os" = "Linux"; then
+ uid=`id -u`
+ AC_MSG_CHECKING([for /run/user/$uid])
+ if test -d /run/user/$uid; then
+ AC_MSG_RESULT([yes])
+ AC_PATH_PROG(GPGCONF, gpgconf)
+ AC_MSG_CHECKING([for gpgconf --create-socketdir... ])
+ if $GPGCONF --dump-options > /dev/null ; then
+ if $GPGCONF --dump-options | grep -q create-socketdir ; then
+ AC_MSG_RESULT([yes])
+ AC_DEFINE([HAVE_GPGCONF_SOCKETDIR])
+ else
+ AC_MSG_RESULT([no])
+ fi
+ else
+ AC_MSG_RESULT([no. missing or broken gpgconf?])
+ fi
+ else
+ AC_MSG_RESULT([no])
+ fi
+ fi
fi
AC_SUBST(ENABLE_GPGMEPP)
AC_SUBST(SYSTEM_GPGMEPP)
@@ -10179,6 +10200,8 @@ AC_SUBST(LIBASSUAN_CFLAGS)
AC_SUBST(LIBASSUAN_LIBS)
AC_SUBST(GPGMEPP_CFLAGS)
AC_SUBST(GPGMEPP_LIBS)
+AC_SUBST(GPGCONF)
+AC_SUBST(HAVE_GPGCONF_SOCKETDIR)
AC_MSG_CHECKING([whether to build the Wiki Publisher extension])
if test "x$enable_ext_wiki_publisher" = "xyes" -a "x$enable_extension_integration" != "xno" -a "$with_java" != "no"; then
diff --git a/xmlsecurity/CppunitTest_xmlsecurity_signing.mk b/xmlsecurity/CppunitTest_xmlsecurity_signing.mk
index c382e3b09e75..2f3ed41e2dfb 100644
--- a/xmlsecurity/CppunitTest_xmlsecurity_signing.mk
+++ b/xmlsecurity/CppunitTest_xmlsecurity_signing.mk
@@ -52,11 +52,23 @@ ifeq ($(ENABLE_PDFIMPORT),TRUE)
$(eval $(call gb_CppunitTest_use_executable,xmlsecurity_signing,xpdfimport))
endif
-# reset the LD_LIBRARY_PATH for spawned GPG processes
+# various hacks to make unit test work on Linux more often
ifeq ($(OS),LINUX)
+# reset the LD_LIBRARY_PATH for spawned GPG processes
$(call gb_CppunitTest_get_target,xmlsecurity_signing): \
EXTRA_ENV_VARS := \
LIBO_LD_PATH=$$LD_LIBRARY_PATH
+
+ifneq (,$(HAVE_GPGCONF_SOCKETDIR))
+# create socket dir below /run/user/ instead of in workdir
+.PHONY : gb_CppunitTest_run_gpgconf
+gb_CppunitTest_run_gpgconf:
+ GNUPGHOME=$(WORKDIR)/CppunitTest/xmlsecurity_signing.test.user \
+ $(GPGCONF) --create-socketdir
+
+$(call gb_CppunitTest_get_target,xmlsecurity_signing): \
+ gb_CppunitTest_run_gpgconf
+endif
endif
# vim: set noet sw=4 ts=4:
diff --git a/xmlsecurity/qa/unit/signing/signing.cxx b/xmlsecurity/qa/unit/signing/signing.cxx
index 39a6d0ca6299..b7cc077d2097 100644
--- a/xmlsecurity/qa/unit/signing/signing.cxx
+++ b/xmlsecurity/qa/unit/signing/signing.cxx
@@ -113,9 +113,11 @@ public:
void testODFBrokenStreamGPG();
/// Test a typical broken ODF signature where the XML dsig hash is corrupted.
void testODFBrokenDsigGPG();
+#if HAVE_GPGCONF_SOCKETDIR
/// Test loading an encrypted ODF document
void testODFEncryptedGPG();
#endif
+#endif
CPPUNIT_TEST_SUITE(SigningTest);
CPPUNIT_TEST(testDescription);
CPPUNIT_TEST(testODFGood);
@@ -143,8 +145,10 @@ public:
CPPUNIT_TEST(testODFUntrustedGoodGPG);
CPPUNIT_TEST(testODFBrokenStreamGPG);
CPPUNIT_TEST(testODFBrokenDsigGPG);
+#if HAVE_GPGCONF_SOCKETDIR
CPPUNIT_TEST(testODFEncryptedGPG);
#endif
+#endif
CPPUNIT_TEST_SUITE_END();
private:
@@ -743,6 +747,8 @@ void SigningTest::testODFBrokenDsigGPG()
CPPUNIT_ASSERT_EQUAL(static_cast<int>(SignatureState::BROKEN), static_cast<int>(pObjectShell->GetDocumentSignatureState()));
}
+#if HAVE_GPGCONF_SOCKETDIR
+
void SigningTest::testODFEncryptedGPG()
{
createDoc(m_directories.getURLFromSrc(DATA_DIRECTORY) + "encryptedGPG.odt");
@@ -754,6 +760,8 @@ void SigningTest::testODFEncryptedGPG()
#endif
+#endif
+
void SigningTest::registerNamespaces(xmlXPathContextPtr& pXmlXpathCtx)
{
xmlXPathRegisterNs(pXmlXpathCtx, BAD_CAST("odfds"), BAD_CAST("urn:oasis:names:tc:opendocument:xmlns:digitalsignature:1.0"));