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" })


Reply via email to