[PATCH] Cannot build for Windows against OpenSSL 1.1
"iso8583" <[email protected]> Thu, 27 Oct 2016 11:39:56 +0200
| Newsgroups | gmane.text.xml.xmlsec |
|---|---|
| Message-ID | <!&!AAAAAAAAAAAYAAAAAAAAAANq5a/vL1tLg3kjYt1GuffCgAAAEAAAANsUU47dco1AnGJdP+bkpigBAAAAAA==@free.fr> |
Hi Aleksey, I was not able to build current git repository for XMLSEC against OpenSSL 1.1 (compiled with 'no-deprecated' flag). I fixed all issues using the patch attached (and I picked version.h from the 1.2.23.tar.gz package). For some cases there may be better alternatives, but at least, it is a quick reference to what I had to change to achieve a successful build. (I am trying using a new email address subscription as my previous post looks lost) Thanks for your work, Regards, Michel. _______________________________________________ xmlsec mailing list [email protected] http://www.aleksey.com/mailman/listinfo/xmlsec
xmlsec-ossl110-3.patch
(application/octet-stream, 9.4 KB)
src/openssl/openssl11_wrapper.h | 3 +++
src/openssl/x509.c | 6 +++---
src/openssl/x509vfy.c | 6 +++---
win32/Makefile.msvc | 31 +++++++++++++++++++------------
win32/configure.js | 8 +++++++-
5 files changed, 35 insertions(+), 19 deletions(-)
diff --git a/src/openssl/openssl11_wrapper.h b/src/openssl/openssl11_wrapper.h
index 7f900ff..cb53502 100644
--- a/src/openssl/openssl11_wrapper.h
+++ b/src/openssl/openssl11_wrapper.h
@@ -18,6 +18,9 @@
#define ASN1_STRING_get0_data(data) ASN1_STRING_data((data))
#define X509_CRL_get0_nextUpdate(crl) X509_CRL_get_nextUpdate((crl))
+#define X509_getm_notBefore(x509) X509_get_notBefore(x509)
+#define X509_getm_notAfter(x509) X509_get_notAfter(x509)
+#define X509_STORE_CTX_get_by_subject X509_STORE_get_by_subject
#define X509_REVOKED_get0_serialNumber(r) (((r) != NULL) ? ((r)->serialNumber) : (const ASN1_INTEGER *)NULL)
#define X509_OBJECT_get0_X509(x) (((x) != NULL) ? ((x)->data.x509) : (X509 *)NULL)
diff --git a/src/openssl/x509.c b/src/openssl/x509.c
index 4b486cf..c3ad5c3 100644
--- a/src/openssl/x509.c
+++ b/src/openssl/x509.c
@@ -1667,8 +1667,8 @@ xmlSecOpenSSLKeyDataX509VerifyAndExtractKey(xmlSecKeyDataPtr data, xmlSecKeyPtr
return(-1);
}
- if((X509_get_notBefore(ctx->keyCert) != NULL) && (X509_get_notAfter(ctx->keyCert) != NULL)) {
- ret = xmlSecOpenSSLX509CertGetTime(X509_get_notBefore(ctx->keyCert), &(key->notValidBefore));
+ if((X509_getm_notBefore(ctx->keyCert) != NULL) && (X509_getm_notAfter(ctx->keyCert) != NULL)) {
+ ret = xmlSecOpenSSLX509CertGetTime(X509_getm_notBefore(ctx->keyCert), &(key->notValidBefore));
if(ret < 0) {
xmlSecError(XMLSEC_ERRORS_HERE,
xmlSecErrorsSafeString(xmlSecKeyDataGetName(data)),
@@ -1677,7 +1677,7 @@ xmlSecOpenSSLKeyDataX509VerifyAndExtractKey(xmlSecKeyDataPtr data, xmlSecKeyPtr
"notValidBefore");
return(-1);
}
- ret = xmlSecOpenSSLX509CertGetTime(X509_get_notAfter(ctx->keyCert), &(key->notValidAfter));
+ ret = xmlSecOpenSSLX509CertGetTime(X509_getm_notAfter(ctx->keyCert), &(key->notValidAfter));
if(ret < 0) {
xmlSecError(XMLSEC_ERRORS_HERE,
xmlSecErrorsSafeString(xmlSecKeyDataGetName(data)),
diff --git a/src/openssl/x509vfy.c b/src/openssl/x509vfy.c
index 59f3914..864260f 100644
--- a/src/openssl/x509vfy.c
+++ b/src/openssl/x509vfy.c
@@ -783,12 +783,12 @@ xmlSecOpenSSLX509VerifyCRL(X509_STORE* xst, X509_CRL *crl ) {
XMLSEC_ERRORS_NO_MESSAGE);
goto err;
}
- ret = X509_STORE_get_by_subject(xsc, X509_LU_X509,
- X509_CRL_get_issuer(crl), xobj);
+ ret = X509_STORE_CTX_get_by_subject(xsc, X509_LU_X509,
+ X509_CRL_get_issuer(crl), xobj);
if(ret <= 0) {
xmlSecError(XMLSEC_ERRORS_HERE,
NULL,
- "X509_STORE_get_by_subject",
+ "X509_STORE_CTX_get_by_subject",
XMLSEC_ERRORS_R_CRYPTO_FAILED,
XMLSEC_ERRORS_NO_MESSAGE);
goto err;
diff --git a/win32/Makefile.msvc b/win32/Makefile.msvc
index 8c887a1..b0a0872 100644
--- a/win32/Makefile.msvc
+++ b/win32/Makefile.msvc
@@ -33,7 +33,6 @@ AUTOCONF = .\configure.txt
#UNICODE = 1
#DEBUG = 0
#WITH_CRYPTO=openssl
-#WITH_CRYPTO=openssl
#WITH_DEFAULT_CRYPTO=openssl
#WITH_OPENSSL=1
#WITH_OPENSSL_VERSION=
@@ -116,7 +115,6 @@ XMLSEC_OPENSSL_SRCDIR = $(XMLSEC_SRCDIR)\openssl
XMLSEC_NSS_SRCDIR = $(XMLSEC_SRCDIR)\nss
XMLSEC_MSCRYPTO_SRCDIR = $(XMLSEC_SRCDIR)\mscrypto
-
#
# Object files for libraries and apps.
#
@@ -199,6 +197,7 @@ XMLSEC_OPENSSL_OBJS = \
$(XMLSEC_OPENSSL_INTDIR)\crypto.obj \
$(XMLSEC_OPENSSL_INTDIR)\digests.obj \
$(XMLSEC_OPENSSL_INTDIR)\evp.obj \
+ $(XMLSEC_OPENSSL_INTDIR)\evp_signatures.obj \
$(XMLSEC_OPENSSL_INTDIR)\hmac.obj \
$(XMLSEC_OPENSSL_INTDIR)\kt_rsa.obj \
$(XMLSEC_OPENSSL_INTDIR)\kw_aes.obj \
@@ -215,6 +214,7 @@ XMLSEC_OPENSSL_OBJS_A = \
$(XMLSEC_OPENSSL_INTDIR_A)\crypto.obj \
$(XMLSEC_OPENSSL_INTDIR_A)\digests.obj \
$(XMLSEC_OPENSSL_INTDIR_A)\evp.obj \
+ $(XMLSEC_OPENSSL_INTDIR_A)\evp_signatures.obj \
$(XMLSEC_OPENSSL_INTDIR_A)\hmac.obj \
$(XMLSEC_OPENSSL_INTDIR_A)\kt_rsa.obj \
$(XMLSEC_OPENSSL_INTDIR_A)\kw_aes.obj \
@@ -302,7 +302,7 @@ CPPFLAGS = /nologo
#
# The compiler and its options.
#
-CC = cl.exe
+CC = cl.exe
CFLAGS = /nologo /D "WIN32" /D "_WINDOWS"
CFLAGS = $(CFLAGS) /D "_MBCS" /D "_REENTRANT" /W1
CFLAGS = $(CFLAGS) /I$(BASEDIR) /I$(BASEDIR)\include
@@ -311,6 +311,7 @@ CFLAGS = $(CFLAGS) /D PACKAGE=\"$(XMLSEC_NAME)\"
CFLAGS = $(CFLAGS) /D "HAVE_STDIO_H" /D "HAVE_STDLIB_H"
CFLAGS = $(CFLAGS) /D "HAVE_STRING_H" /D "HAVE_CTYPE_H"
CFLAGS = $(CFLAGS) /D "HAVE_MALLOC_H" /D "HAVE_MEMORY_H"
+CFLAGS = $(CFLAGS) /D "XMLSEC_NO_GOST" /D "XMLSEC_NO_GOST2012"
!if "$(UNICODE)" == "1"
CFLAGS = $(CFLAGS) /D "UNICODE" /D "_UNICODE"
@@ -318,11 +319,13 @@ CFLAGS = $(CFLAGS) /D "UNICODE" /D "_UNICODE"
# Optimisation and debug symbols.
!if "$(DEBUG)" == "1"
-CFLAGS = $(CFLAGS) /D "_DEBUG" /Od /Z7 /MDd
+CFLAGS = $(CFLAGS) /D "_DEBUG" /Od /Z7
!else
-CFLAGS = $(CFLAGS) /D "NDEBUG" /O2 /MD
+CFLAGS = $(CFLAGS) /D "NDEBUG" /O2
!endif
+CFLAGS = $(CFLAGS) $(CRUNTIME)
+
# configurable options
!if "$(WITH_LIBXSLT)" == "1"
!else
@@ -356,7 +359,7 @@ XMLSEC_MSCRYPTO_CFLAGS = /D "XMLSEC_CRYPTO_MSCRYPTO" /D "XMLSEC_DEFAULT_CRYPTO=
#
# The linker and its options.
#
-LD = link.exe
+LD = link.exe
LDFLAGS = /nologo
LDFLAGS = $(LDFLAGS) /LIBPATH:$(BINDIR) /LIBPATH:$(LIBPREFIX)
LIBS =
@@ -365,7 +368,7 @@ LIBS =
!if "$(DEBUG)" == "1"
LDFLAGS = $(LDFLAGS) /DEBUG
!else
-LDFLAGS = $(LDFLAGS) /OPT:NOWIN98
+LDFLAGS = $(LDFLAGS)
!endif
SOLIBS = $(LIBS) libxml2.lib
@@ -391,11 +394,16 @@ APP_LIBS = $(SOLIBS) $(XMLSEC_CRYPTO_SOLIBS)
!else
!endif
-XMLSEC_OPENSSL_SOLIBS = libeay32.lib wsock32.lib kernel32.lib user32.lib gdi32.lib
-XMLSEC_OPENSSL_ALIBS = libeay32.lib wsock32.lib kernel32.lib user32.lib gdi32.lib
+!if "$(WITH_OPENSSL_VERSION)" == "XMLSEC_OPENSSL_110"
+XMLSEC_OPENSSL_SOLIBS = libcrypto.lib wsock32.lib kernel32.lib user32.lib gdi32.lib crypt32.lib advapi32.lib ws2_32.lib
+XMLSEC_OPENSSL_ALIBS = libcrypto.lib wsock32.lib kernel32.lib user32.lib gdi32.lib crypt32.lib advapi32.lib ws2_32.lib
+!else
+XMLSEC_OPENSSL_SOLIBS = libeay32.lib wsock32.lib kernel32.lib user32.lib gdi32.lib crypt32.lib advapi32.lib
+XMLSEC_OPENSSL_ALIBS = libeay32.lib wsock32.lib kernel32.lib user32.lib gdi32.lib crypt32.lib advapi32.lib
+!endif
-XMLSEC_NSS_SOLIBS = smime3.lib ssl3.lib nss3.lib libnspr4.lib libplds4.lib libplc4.lib kernel32.lib user32.lib gdi32.lib
-XMLSEC_NSS_ALIBS = smime3.lib ssl3.lib nss3.lib libnspr4_s.lib libplds4_s.lib libplc4_s.lib kernel32.lib user32.lib gdi32.lib
+XMLSEC_NSS_SOLIBS = smime3.lib ssl3.lib nss3.lib libnspr4.lib libplds4.lib libplc4.lib kernel32.lib user32.lib gdi32.lib
+XMLSEC_NSS_ALIBS = smime3.lib ssl3.lib nss3.lib libnspr4_s.lib libplds4_s.lib libplc4_s.lib kernel32.lib user32.lib gdi32.lib
XMLSEC_MSCRYPTO_SOLIBS = kernel32.lib user32.lib gdi32.lib Crypt32.lib Advapi32.lib
XMLSEC_MSCRYPTO_ALIBS = kernel32.lib user32.lib gdi32.lib Crypt32.lib Advapi32.lib
@@ -405,7 +413,6 @@ XMLSEC_MSCRYPTO_ALIBS = kernel32.lib user32.lib gdi32.lib Crypt32.lib Advapi32
AR = link.exe /lib
ARFLAGS = /nologo
-
#
# xmlsec-<default-crypto> options
#
diff --git a/win32/configure.js b/win32/configure.js
index 7bbba19..80620a4 100644
--- a/win32/configure.js
+++ b/win32/configure.js
@@ -59,6 +59,8 @@ var buildLibPrefix = "$(PREFIX)\\lib";
var buildSoPrefix = "$(PREFIX)\\lib";
var buildInclude = ".";
var buildLib = ".";
+var cruntime = "/MD";
+
/* Local stuff */
var error = 0;
@@ -176,6 +178,7 @@ function discoverVersion()
vf.WriteLine("SOPREFIX=" + buildSoPrefix);
vf.WriteLine("INCLUDE=$(INCLUDE);" + buildInclude);
vf.WriteLine("LIB=$(LIB);" + buildLib);
+ vf.WriteLine("CRUNTIME=" + cruntime);
vf.Close();
}
@@ -281,6 +284,8 @@ for (i = 0; (i < WScript.Arguments.length) && (error == 0); i++) {
buildInclude = arg.substring(opt.length + 1, arg.length);
else if (opt == "lib")
buildLib = arg.substring(opt.length + 1, arg.length);
+ else if (opt == "cruntime")
+ cruntime = arg.substring(opt.length + 1, arg.length);
else
error = 1;
} else if (i == 0) {
@@ -311,7 +316,7 @@ for (j = 0; j < crlist.length; j++) {
if (crlist[j] == "openssl") {
curcrypto="openssl";
withOpenSSL = 1;
- withOpenSSLVersion = "100"; /* default */
+ withOpenSSLVersion = "110"; /* default */
} else if (crlist[j] == "openssl=098") {
curcrypto="openssl";
withOpenSSL = 1;
@@ -379,6 +384,7 @@ txtOut += " NT 4.0 support: " + boolToStr(withNT4) + "\n";
txtOut += "\n";
txtOut += "Win32 build configuration\n";
txtOut += "-------------------------\n";
+txtOut += " C-Runtime option: " + cruntime + "\n";
txtOut += " Unicode: " + boolToStr(buildUnicode) + "\n";
txtOut += " Debug symbols: " + boolToStr(buildDebug) + "\n";
txtOut += " Static xmlsec: " + boolToStr(buildStatic) + "\n";