Author: mturk Date: Fri Aug 19 16:33:34 2011 New Revision: 1159678 URL: http://svn.apache.org/viewvc?rev=1159678&view=rev Log: Start work on OpenSSL support
Added: commons/sandbox/runtime/trunk/src/main/native/include/acr/ssl.h (with props) commons/sandbox/runtime/trunk/src/main/native/srclib/openssl/ commons/sandbox/runtime/trunk/src/main/native/srclib/openssl/api.c (with props) Modified: commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/Native.java commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/io/MemoryStream.java commons/sandbox/runtime/trunk/src/main/native/Makefile.msc.in commons/sandbox/runtime/trunk/src/main/native/Makefile.unx.in commons/sandbox/runtime/trunk/src/main/native/configure.bat commons/sandbox/runtime/trunk/src/main/test/org/apache/commons/runtime/TestMain.java Modified: commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/Native.java URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/Native.java?rev=1159678&r1=1159677&r2=1159678&view=diff ============================================================================== --- commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/Native.java (original) +++ commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/Native.java Fri Aug 19 16:33:34 2011 @@ -34,6 +34,8 @@ public final class Native throws Throwable; private static native boolean isdbg0(); private static native boolean hasopenssl0(); + private static native boolean ldopenssl0() + throws RuntimeException; private static native void fini0(); /** @@ -91,4 +93,18 @@ public final class Native } } + private static boolean sslresolved = false; + /** + * Load OpenSSL libraries + */ + public static synchronized boolean ldopenssl() + throws RuntimeException + { + if (sslresolved) + return true; + if (HAS_OPENSSL) + sslresolved = ldopenssl0(); + return sslresolved; + } + } Modified: commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/io/MemoryStream.java URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/io/MemoryStream.java?rev=1159678&r1=1159677&r2=1159678&view=diff ============================================================================== --- commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/io/MemoryStream.java (original) +++ commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/io/MemoryStream.java Fri Aug 19 16:33:34 2011 @@ -22,6 +22,7 @@ import java.io.IOException; import java.io.SyncFailedException; import java.nio.ByteBuffer; import org.apache.commons.runtime.InvalidArgumentException; +import org.apache.commons.runtime.InvalidRangeException; import org.apache.commons.runtime.Pointer; import org.apache.commons.runtime.OverflowException; import org.apache.commons.runtime.util.Utils; Modified: commons/sandbox/runtime/trunk/src/main/native/Makefile.msc.in URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/native/Makefile.msc.in?rev=1159678&r1=1159677&r2=1159678&view=diff ============================================================================== --- commons/sandbox/runtime/trunk/src/main/native/Makefile.msc.in (original) +++ commons/sandbox/runtime/trunk/src/main/native/Makefile.msc.in Fri Aug 19 16:33:34 2011 @@ -21,6 +21,7 @@ SRCDIRS=\ $(TOPDIR)\port \ $(TOPDIR)\shared \ $(TOPDIR)\srclib\bzip2 \ + $(TOPDIR)\srclib\openssl \ $(TOPDIR)\srclib\zlib \ $(TOPDIR)\srclib\zlib\win32 @@ -148,10 +149,14 @@ LIBSOURCES=\ $(TOPDIR)\shared\version.c \ $(TOPDIR)\shared\buildmark.c +SSLSOURCES=\ + $(TOPDIR)\srclib\openssl\api.c + CXXSOURCES= DEPOBJECTS=$(LIBSOURCES:.c=.dep) SHROBJECTS=$(LIBSOURCES:.c=.obj) $(ASMSOURCES:.asm=.obj) $(TOPDIR)\os\win32\main.res +SSLOBJECTS=$(SSLSOURCES:.c=.$(SLO)) all : prepare $(SHAREDDLL) @@ -169,7 +174,7 @@ all : prepare $(SHAREDDLL) .c.dep: @mkdepend $*.$$(OBJ) $(CCFLAGS) $(CCSHARE) $(CPPOPTS) $(CFLAGS) $(INCLUDES) $< >>Makedeps -$(SHAREDDLL): $(SHROBJECTS) +$(SHAREDDLL): $(SHROBJECTS) $(MODULES) @echo Building shared library ... $(LD) /DLL $(LDFLAGS) /SUBSYSTEM:WINDOWS $(LDARCH) /pdb:$(OUTLIBDIR)\$(DLLNAME).pdb /OUT:$@ @<< $(SHROBJECTS) $(MODULES) $(LIBS) Modified: commons/sandbox/runtime/trunk/src/main/native/Makefile.unx.in URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/native/Makefile.unx.in?rev=1159678&r1=1159677&r2=1159678&view=diff ============================================================================== --- commons/sandbox/runtime/trunk/src/main/native/Makefile.unx.in (original) +++ commons/sandbox/runtime/trunk/src/main/native/Makefile.unx.in Fri Aug 19 16:33:34 2011 @@ -24,6 +24,7 @@ SRCDIRS=\ $(TOPDIR)/port \ $(TOPDIR)/shared \ $(TOPDIR)/srclib/bzip2 \ + $(TOPDIR)/srclib/openssl \ $(TOPDIR)/srclib/zlib \ $(TOPDIR)/srclib/zlib/unix @@ -143,9 +144,13 @@ LIBSOURCES=\ $(TOPDIR)/shared/version.c \ $(TOPDIR)/shared/buildmark.c +SSLSOURCES=\ + $(TOPDIR)/srclib/openssl/api.c + CXXSOURCES= SHROBJECTS=$(LIBSOURCES:.c=.$(SLO)) $(CXXSOURCES:.cc=.$(SLO)) $(ASMSOURCES:.S=.$(SLO)) +SSLOBJECTS=$(SSLSOURCES:.c=.$(SLO)) all: prepare @sharedlib@ @modules@ Modified: commons/sandbox/runtime/trunk/src/main/native/configure.bat URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/native/configure.bat?rev=1159678&r1=1159677&r2=1159678&view=diff ============================================================================== --- commons/sandbox/runtime/trunk/src/main/native/configure.bat (original) +++ commons/sandbox/runtime/trunk/src/main/native/configure.bat Fri Aug 19 16:33:34 2011 @@ -99,6 +99,7 @@ set ENABLE_DEBUG=0 set HAVE_OPENSSL=0 set HAVE_INTRIN_H=0 set WITH_OPENSSL= +set MODULES= :ParseOption set "OPTION=%~1" @@ -148,6 +149,7 @@ if %HAVE_OPENSSL% == 1 ( echo. ) set "INCLUDES=%INCLUDES% -I%WITH_OPENSSL%" + set "MODULES=$(SSLOBJECTS)" ) if not exist "%WITH_JAVA%\include\jni.h" ( Added: commons/sandbox/runtime/trunk/src/main/native/include/acr/ssl.h URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/native/include/acr/ssl.h?rev=1159678&view=auto ============================================================================== --- commons/sandbox/runtime/trunk/src/main/native/include/acr/ssl.h (added) +++ commons/sandbox/runtime/trunk/src/main/native/include/acr/ssl.h Fri Aug 19 16:33:34 2011 @@ -0,0 +1,249 @@ +/* Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef _ACR_SSL_H_ +#define _ACR_SSL_H_ + +#include "acr/stdtypes.h" +#if HAVE_OPENSSL + +/* Exclude unused OpenSSL features + * even if the OpenSSL supports them + */ +#ifndef OPENSSL_NO_IDEA +#define OPENSSL_NO_IDEA +#endif +#ifndef OPENSSL_NO_KRB5 +#define OPENSSL_NO_KRB5 +#endif +#ifndef OPENSSL_NO_MDC2 +#define OPENSSL_NO_MDC2 +#endif +#ifndef OPENSSL_NO_RC5 +#define OPENSSL_NO_RC5 +#endif + +/* OpenSSL headers */ +#include <openssl/ssl.h> +#include <openssl/err.h> +#include <openssl/x509.h> +#include <openssl/pem.h> +#include <openssl/crypto.h> +#include <openssl/evp.h> +#include <openssl/rand.h> +#include <openssl/x509v3.h> +#include <openssl/md5.h> +/* Avoid tripping over an engine build installed globally and detected + * when the user points at an explicit non-engine flavor of OpenSSL + */ +#ifndef OPENSSL_NO_ENGINE +#include <openssl/engine.h> +#endif + +#ifndef RAND_MAX +#include <limits.h> +#define RAND_MAX INT_MAX +#endif + +#define SSL_ALGO_UNKNOWN (0) +#define SSL_ALGO_RSA (1<<0) +#define SSL_ALGO_DSA (1<<1) +#define SSL_ALGO_ALL (SSL_ALGO_RSA|SSL_ALGO_DSA) + +#define SSL_AIDX_RSA (0) +#define SSL_AIDX_DSA (1) +#define SSL_AIDX_MAX (2) + +/* + * Define IDs for the temporary RSA keys and DH params + */ + +#define SSL_TMP_KEY_RSA_512 (0) +#define SSL_TMP_KEY_RSA_1024 (1) +#define SSL_TMP_KEY_RSA_2048 (2) +#define SSL_TMP_KEY_RSA_4096 (3) +#define SSL_TMP_KEY_DH_512 (4) +#define SSL_TMP_KEY_DH_1024 (5) +#define SSL_TMP_KEY_DH_2048 (6) +#define SSL_TMP_KEY_DH_4096 (7) +#define SSL_TMP_KEY_MAX (8) + +#define SSL_CRT_FORMAT_UNDEF (0) +#define SSL_CRT_FORMAT_ASN1 (1) +#define SSL_CRT_FORMAT_TEXT (2) +#define SSL_CRT_FORMAT_PEM (3) +#define SSL_CRT_FORMAT_NETSCAPE (4) +#define SSL_CRT_FORMAT_PKCS12 (5) +#define SSL_CRT_FORMAT_SMIME (6) +#define SSL_CRT_FORMAT_ENGINE (7) +/* XXX this stupid macro helps us to avoid + * adding yet another param to load_*key() + */ +#define SSL_KEY_FORMAT_IISSGC (8) + +/* + * Define the SSL options + */ +#define SSL_OPT_NONE (0) +#define SSL_OPT_RELSET (1<<0) +#define SSL_OPT_STDENVVARS (1<<1) +#define SSL_OPT_EXPORTCERTDATA (1<<3) +#define SSL_OPT_FAKEBASICAUTH (1<<4) +#define SSL_OPT_STRICTREQUIRE (1<<5) +#define SSL_OPT_OPTRENEGOTIATE (1<<6) +#define SSL_OPT_ALL (SSL_OPT_STDENVVARS|SSL_OPT_EXPORTCERTDATA|SSL_OPT_FAKEBASICAUTH|SSL_OPT_STRICTREQUIRE|SSL_OPT_OPTRENEGOTIATE) + +/* + * Define the SSL Protocol options + */ +#define SSL_PROTOCOL_NONE (0) +#define SSL_PROTOCOL_SSLV2 (1<<0) +#define SSL_PROTOCOL_SSLV3 (1<<1) +#define SSL_PROTOCOL_TLSV1 (1<<2) +#define SSL_PROTOCOL_ALL (SSL_PROTOCOL_SSLV2|SSL_PROTOCOL_SSLV3|SSL_PROTOCOL_TLSV1) + +#define SSL_MODE_CLIENT (0) +#define SSL_MODE_SERVER (1) +#define SSL_MODE_COMBINED (2) + +#define SSL_BIO_FLAG_RDONLY (1<<0) +#define SSL_BIO_FLAG_CALLBACK (1<<1) +#define SSL_DEFAULT_CACHE_SIZE (256) +#define SSL_MAX_STR_LEN (2048) +#define SSL_MAX_PASSWORD_LEN (256) + +#define SSL_CVERIFY_UNSET (-1) +#define SSL_CVERIFY_NONE (0) +#define SSL_CVERIFY_OPTIONAL (1) +#define SSL_CVERIFY_REQUIRE (2) +#define SSL_CVERIFY_OPTIONAL_NO_CA (3) +#define SSL_VERIFY_PEER_STRICT (SSL_VERIFY_PEER|SSL_VERIFY_FAIL_IF_NO_PEER_CERT) + +#define SSL_SHUTDOWN_TYPE_UNSET (0) +#define SSL_SHUTDOWN_TYPE_STANDARD (1) +#define SSL_SHUTDOWN_TYPE_UNCLEAN (2) +#define SSL_SHUTDOWN_TYPE_ACCURATE (3) + +#define SSL_TO_APR_ERROR(X) (APR_OS_START_USERERR + 1000 + X) + +#define SSL_INFO_SESSION_ID (0x0001) +#define SSL_INFO_CIPHER (0x0002) +#define SSL_INFO_CIPHER_USEKEYSIZE (0x0003) +#define SSL_INFO_CIPHER_ALGKEYSIZE (0x0004) +#define SSL_INFO_CIPHER_VERSION (0x0005) +#define SSL_INFO_CIPHER_DESCRIPTION (0x0006) +#define SSL_INFO_PROTOCOL (0x0007) + +#define SSL_INFO_CLIENT_S_DN (0x0010) +#define SSL_INFO_CLIENT_I_DN (0x0020) +#define SSL_INFO_SERVER_S_DN (0x0040) +#define SSL_INFO_SERVER_I_DN (0x0080) + +#define SSL_INFO_DN_COUNTRYNAME (0x0001) +#define SSL_INFO_DN_STATEORPROVINCENAME (0x0002) +#define SSL_INFO_DN_LOCALITYNAME (0x0003) +#define SSL_INFO_DN_ORGANIZATIONNAME (0x0004) +#define SSL_INFO_DN_ORGANIZATIONALUNITNAME (0x0005) +#define SSL_INFO_DN_COMMONNAME (0x0006) +#define SSL_INFO_DN_TITLE (0x0007) +#define SSL_INFO_DN_INITIALS (0x0008) +#define SSL_INFO_DN_GIVENNAME (0x0009) +#define SSL_INFO_DN_SURNAME (0x000A) +#define SSL_INFO_DN_DESCRIPTION (0x000B) +#define SSL_INFO_DN_UNIQUEIDENTIFIER (0x000C) +#define SSL_INFO_DN_EMAILADDRESS (0x000D) + +#define SSL_INFO_CLIENT_MASK (0x0100) + +#define SSL_INFO_CLIENT_M_VERSION (0x0101) +#define SSL_INFO_CLIENT_M_SERIAL (0x0102) +#define SSL_INFO_CLIENT_V_START (0x0103) +#define SSL_INFO_CLIENT_V_END (0x0104) +#define SSL_INFO_CLIENT_A_SIG (0x0105) +#define SSL_INFO_CLIENT_A_KEY (0x0106) +#define SSL_INFO_CLIENT_CERT (0x0107) +#define SSL_INFO_CLIENT_V_REMAIN (0x0108) + +#define SSL_INFO_SERVER_MASK (0x0200) + +#define SSL_INFO_SERVER_M_VERSION (0x0201) +#define SSL_INFO_SERVER_M_SERIAL (0x0202) +#define SSL_INFO_SERVER_V_START (0x0203) +#define SSL_INFO_SERVER_V_END (0x0204) +#define SSL_INFO_SERVER_A_SIG (0x0205) +#define SSL_INFO_SERVER_A_KEY (0x0206) +#define SSL_INFO_SERVER_CERT (0x0207) +#define SSL_INFO_CLIENT_CERT_CHAIN (0x0400) + +#define SSL_VERIFY_ERROR_IS_OPTIONAL(errnum) \ + ((errnum == X509_V_ERR_DEPTH_ZERO_SELF_SIGNED_CERT) \ + || (errnum == X509_V_ERR_SELF_SIGNED_CERT_IN_CHAIN) \ + || (errnum == X509_V_ERR_UNABLE_TO_GET_ISSUER_CERT_LOCALLY) \ + || (errnum == X509_V_ERR_CERT_UNTRUSTED) \ + || (errnum == X509_V_ERR_UNABLE_TO_VERIFY_LEAF_SIGNATURE)) + +#define SSL_DEFAULT_PASS_PROMPT "Some of your private key files are encrypted for security reasons.\n" \ + "In order to read them you have to provide the pass phrases.\n" \ + "Enter password :" + +extern void *SSL_temp_keys[SSL_TMP_KEY_MAX]; + +typedef struct ssl_pkc_t { + /* client can have any number of cert/key pairs */ + const char *cert_file; + const char *cert_path; + STACK_OF(X509_INFO) *certs; +} ssl_pkc_t; + +typedef struct acr_ssl_ctxt_t { + SSL_CTX *ctx; + BIO *bio_os; + BIO *bio_is; + + unsigned char context_id[MD5_DIGEST_LENGTH]; + + int protocol; + /* we are one or the other */ + int mode; + + /* certificate revocation list */ + X509_STORE *crl; + /* pointer to the context verify store */ + X509_STORE *store; + const char *cert_files[SSL_AIDX_MAX]; + const char *key_files[SSL_AIDX_MAX]; + X509 *certs[SSL_AIDX_MAX]; + EVP_PKEY *keys[SSL_AIDX_MAX]; + + int ca_certs; + int shutdown_type; + char *rand_file; + + const char *cipher_suite; + /* for client or downstream server authentication */ + int verify_depth; + int verify_mode; +} acr_ssl_ctxt_t; + +#define SSL_CTX_get_extra_certs(ctx) ((ctx)->extra_certs) +#define SSL_CTX_set_extra_certs(ctx, value) \ + do { \ + (ctx)->extra_certs = (value); \ + } while (0) + + +#endif +#endif /* _ACR_SSL_H_ */ Propchange: commons/sandbox/runtime/trunk/src/main/native/include/acr/ssl.h ------------------------------------------------------------------------------ svn:eol-style = native Added: commons/sandbox/runtime/trunk/src/main/native/srclib/openssl/api.c URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/native/srclib/openssl/api.c?rev=1159678&view=auto ============================================================================== --- commons/sandbox/runtime/trunk/src/main/native/srclib/openssl/api.c (added) +++ commons/sandbox/runtime/trunk/src/main/native/srclib/openssl/api.c Fri Aug 19 16:33:34 2011 @@ -0,0 +1,124 @@ +/* Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "acr/clazz.h" +#include "acr/error.h" +#include "acr/misc.h" +#include "acr/dso.h" +#include "acr/ssl.h" + +#if !HAVE_OPENSSL +#error "Cannot compile this file without HAVE_OPENSSL defined" +#endif + +#if defined(WINDOWS) +#define SSL_DSO_NAME L"ssleay32.dll" +#define CRYPTO_DSO_NAME L"libeay32.dll" +#else +#define SSL_DSO_NAME "libssl" PACKAGE_DLLEXT +#define CRYPTO_DSO_NAME "libcrypto" PACKAGE_DLLEXT +#endif + +#if HAVE_OPENSSL_STATIC + +ACR_JNI_EXPORT(jboolean, Native, ldopenssl0)(JNI_STDARGS) +{ + return JNI_TRUE; +} + +#else /* !HAVE_OPENSSL_STATIC */ +/** + * Dynamic OpenSSL API loader + */ + +#define LIBSSL_FPLOAD(fN) \ + fname = #fN; \ + SSLapi.fp##fN = AcrGetProcAddress(ssldso, fname); \ + if (SSLapi.fp##fN == 0) goto failed + +#define CRYPTO_FPLOAD(fN) \ + fname = #fN; \ + SSLapi.fp##fN = AcrGetProcAddress(cryptodso, fname); \ + if (SSLapi.fp##fN == 0) goto failed + +#define SSLAPI_LINK(fN) (*SSLapi.fp##fN) + +struct SSLAPIst { + unsigned long (*fpSSLeay)(void); + const char* (*fpSSLeay_version)(int); + + SSL_CTX* (*fpSSL_CTX_new)(const SSL_METHOD *); + void (*fpSSL_CTX_free)(SSL_CTX *); + +}; + +static struct SSLAPIst SSLapi; +static acr_dso_t ssldso; +static acr_dso_t cryptodso; + +ACR_JNI_EXPORT(jboolean, Native, ldopenssl0)(JNI_STDARGS) +{ + char b[512]; + const char *fname = ""; + const char *dname = SSL_DSO_NAME; + + if ((cryptodso = AcrDsoLoad(CRYPTO_DSO_NAME)) == 0) { + ACR_THROW_SYS_ERRNO(); + return JNI_FALSE; + } + if ((ssldso = AcrDsoLoad(SSL_DSO_NAME)) == 0) { + ACR_THROW_SYS_ERRNO(); + return JNI_FALSE; + } + LIBSSL_FPLOAD(SSLeay); + LIBSSL_FPLOAD(SSLeay_version); + if (0x00908000L > SSLAPI_LINK(SSLeay)()) { + AcrThrow(env, ACR_EX_ERUNTIME, + "OpenSSL 0.9.8 or greater is required"); + return JNI_FALSE; + } + LIBSSL_FPLOAD(SSL_CTX_new); + LIBSSL_FPLOAD(SSL_CTX_free); + + return JNI_TRUE; +failed: + snprintf(b, sizeof(b), "Cannot find %s#%s", dname, fname); + AcrThrow(env, ACR_EX_ENOENT, b); + return JNI_FALSE; +} + +/* === OpenSSL wrappers for dynamic functions === */ +unsigned long SSLeay() +{ + return SSLAPI_LINK(SSLeay)(); +} + +const char *SSLeay_version(int type) +{ + return SSLAPI_LINK(SSLeay_version)(type); +} + +SSL_CTX *SSL_CTX_new(const SSL_METHOD *meth) +{ + return SSLAPI_LINK(SSL_CTX_new)(meth); +} + +void SSL_CTX_free(SSL_CTX *ctx) +{ + SSLAPI_LINK(SSL_CTX_free)(ctx); +} + +#endif /* HAVE_OPENSSL_STATIC */ Propchange: commons/sandbox/runtime/trunk/src/main/native/srclib/openssl/api.c ------------------------------------------------------------------------------ svn:eol-style = native Modified: commons/sandbox/runtime/trunk/src/main/test/org/apache/commons/runtime/TestMain.java URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/test/org/apache/commons/runtime/TestMain.java?rev=1159678&r1=1159677&r2=1159678&view=diff ============================================================================== --- commons/sandbox/runtime/trunk/src/main/test/org/apache/commons/runtime/TestMain.java (original) +++ commons/sandbox/runtime/trunk/src/main/test/org/apache/commons/runtime/TestMain.java Fri Aug 19 16:33:34 2011 @@ -39,6 +39,9 @@ public class TestMain extends Assert System.out.print(", Debug=" + Native.HAS_MAINTAINER_MODE); System.out.println("."); System.out.flush(); + if (Native.HAS_OPENSSL) { + assertTrue(Native.ldopenssl()); + } } @AfterSuite(groups = { "init" })