You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@apr.apache.org by mi...@apache.org on 2011/12/08 18:11:06 UTC
svn commit: r1211987 - in /apr/apr/trunk: crypto/apr_crypto.c
crypto/apr_crypto_nss.c crypto/apr_crypto_openssl.c
include/private/apr_crypto_internal.h
Author: minfrin
Date: Thu Dec 8 17:11:05 2011
New Revision: 1211987
URL: http://svn.apache.org/viewvc?rev=1211987&view=rev
Log:
apr_crypto: Move the static initialisation of DRIVER_LOAD from
apr_crypto_init() to apr_crypto_get_driver(), so that we don't lose
the parameters.
Modified:
apr/apr/trunk/crypto/apr_crypto.c
apr/apr/trunk/crypto/apr_crypto_nss.c
apr/apr/trunk/crypto/apr_crypto_openssl.c
apr/apr/trunk/include/private/apr_crypto_internal.h
Modified: apr/apr/trunk/crypto/apr_crypto.c
URL: http://svn.apache.org/viewvc/apr/apr/trunk/crypto/apr_crypto.c?rev=1211987&r1=1211986&r2=1211987&view=diff
==============================================================================
--- apr/apr/trunk/crypto/apr_crypto.c (original)
+++ apr/apr/trunk/crypto/apr_crypto.c Thu Dec 8 17:11:05 2011
@@ -62,12 +62,12 @@ typedef struct apr_crypto_clear_t {
} apr_crypto_clear_t;
#if !APR_HAVE_MODULAR_DSO
-#define DRIVER_LOAD(name,driver,pool,params) \
+#define DRIVER_LOAD(name,driver,pool,params,rv,result) \
{ \
extern const apr_crypto_driver_t driver; \
apr_hash_set(drivers,name,APR_HASH_KEY_STRING,&driver); \
if (driver.init) { \
- driver.init(pool, params); \
+ rv = driver.init(pool, params, result); \
} \
}
#endif
@@ -101,22 +101,6 @@ APR_DECLARE(apr_status_t) apr_crypto_ini
#endif
drivers = apr_hash_make(pool);
-#if !APR_HAVE_MODULAR_DSO
- /* Load statically-linked drivers: */
-#if APU_HAVE_OPENSSL
- DRIVER_LOAD("openssl", apr_crypto_openssl_driver, pool, params);
-#endif
-#if APU_HAVE_NSS
- DRIVER_LOAD("nss", apr_crypto_nss_driver, pool, params);
-#endif
-#if APU_HAVE_MSCAPI
- DRIVER_LOAD("mscapi", apr_crypto_mscapi_driver, pool, params);
-#endif
-#if APU_HAVE_MSCNG
- DRIVER_LOAD("mscng", apr_crypto_mscng_driver, pool, params);
-#endif
-#endif /* APR_HAVE_MODULAR_DSO */
-
apr_pool_cleanup_register(pool, NULL, apr_crypto_term,
apr_pool_cleanup_null);
@@ -159,7 +143,10 @@ APR_DECLARE(apr_status_t) apr_crypto_get
apr_dso_handle_sym_t symbol;
#endif
apr_status_t rv;
- int rc = 0;
+
+ if (result) {
+ *result = NULL; /* until further notice */
+ }
#if APR_HAVE_MODULAR_DSO
rv = apu_dso_mutex_lock();
@@ -201,27 +188,51 @@ APR_DECLARE(apr_status_t) apr_crypto_get
}
*driver = symbol;
if ((*driver)->init) {
- rv = (*driver)->init(pool, params, &rc);
+ rv = (*driver)->init(pool, params, result);
+ }
+ if (rv == APR_SUCCESS) {
+ name = apr_pstrdup(pool, name);
+ apr_hash_set(drivers, name, APR_HASH_KEY_STRING, *driver);
}
- name = apr_pstrdup(pool, name);
- apr_hash_set(drivers, name, APR_HASH_KEY_STRING, *driver);
unlock: apu_dso_mutex_unlock();
- if (APR_SUCCESS != rv && result) {
+ if (APR_SUCCESS != rv && result && !*result) {
char *buffer = apr_pcalloc(pool, ERROR_SIZE);
apu_err_t *err = apr_pcalloc(pool, sizeof(apu_err_t));
if (err && buffer) {
apr_dso_error(dso, buffer, ERROR_SIZE - 1);
err->msg = buffer;
err->reason = modname;
- err->rc = rc;
*result = err;
}
}
#else /* not builtin and !APR_HAS_DSO => not implemented */
rv = APR_ENOTIMPL;
+
+ /* Load statically-linked drivers: */
+#if APU_HAVE_OPENSSL
+ if (name[0] == 'o' && !strcmp(name, "openssl")) {
+ DRIVER_LOAD("openssl", apr_crypto_openssl_driver, pool, params, rv, result);
+ }
+#endif
+#if APU_HAVE_NSS
+ else if (name[0] == 'n' && !strcmp(name, "nss")) {
+ DRIVER_LOAD("nss", apr_crypto_nss_driver, pool, params, rv, result);
+ }
+#endif
+#if APU_HAVE_MSCAPI
+ else if (name[0] == 'm' && !strcmp(name, "mscapi")) {
+ DRIVER_LOAD("mscapi", apr_crypto_mscapi_driver, pool, params, rv, result);
+ }
+#endif
+#if APU_HAVE_MSCNG
+ else if (name[0] == 'm' && !strcmp(name, "mscng")) {
+ DRIVER_LOAD("mscng", apr_crypto_mscng_driver, pool, params, rv, result);
+ }
+#endif
+
#endif
return rv;
Modified: apr/apr/trunk/crypto/apr_crypto_nss.c
URL: http://svn.apache.org/viewvc/apr/apr/trunk/crypto/apr_crypto_nss.c?rev=1211987&r1=1211986&r2=1211987&view=diff
==============================================================================
--- apr/apr/trunk/crypto/apr_crypto_nss.c (original)
+++ apr/apr/trunk/crypto/apr_crypto_nss.c Thu Dec 8 17:11:05 2011
@@ -120,7 +120,8 @@ static apr_status_t crypto_shutdown_help
/**
* Initialise the crypto library and perform one time initialisation.
*/
-static apr_status_t crypto_init(apr_pool_t *pool, const char *params, int *rc)
+static apr_status_t crypto_init(apr_pool_t *pool, const char *params,
+ const apu_err_t **result)
{
SECStatus s;
const char *dir = NULL;
@@ -208,8 +209,12 @@ static apr_status_t crypto_init(apr_pool
s = NSS_NoDB_Init(NULL);
}
if (s != SECSuccess) {
- if (rc) {
- *rc = PR_GetError();
+ if (result) {
+ apu_err_t *err = apr_pcalloc(pool, sizeof(apu_err_t));
+ err->rc = PR_GetError();
+ err->msg = PR_ErrorToName(s);
+ err->reason = "Error during 'nss' initialisation";
+ *result = err;
}
return APR_ECRYPT;
}
Modified: apr/apr/trunk/crypto/apr_crypto_openssl.c
URL: http://svn.apache.org/viewvc/apr/apr/trunk/crypto/apr_crypto_openssl.c?rev=1211987&r1=1211986&r2=1211987&view=diff
==============================================================================
--- apr/apr/trunk/crypto/apr_crypto_openssl.c (original)
+++ apr/apr/trunk/crypto/apr_crypto_openssl.c Thu Dec 8 17:11:05 2011
@@ -109,7 +109,8 @@ static apr_status_t crypto_shutdown_help
/**
* Initialise the crypto library and perform one time initialisation.
*/
-static apr_status_t crypto_init(apr_pool_t *pool, const char *params, int *rc)
+static apr_status_t crypto_init(apr_pool_t *pool, const char *params,
+ const apu_err_t **result)
{
CRYPTO_malloc_init();
ERR_load_crypto_strings();
Modified: apr/apr/trunk/include/private/apr_crypto_internal.h
URL: http://svn.apache.org/viewvc/apr/apr/trunk/include/private/apr_crypto_internal.h?rev=1211987&r1=1211986&r2=1211987&view=diff
==============================================================================
--- apr/apr/trunk/include/private/apr_crypto_internal.h (original)
+++ apr/apr/trunk/include/private/apr_crypto_internal.h Thu Dec 8 17:11:05 2011
@@ -39,7 +39,8 @@ struct apr_crypto_driver_t {
* @param params Optional init parameter string.
* @param rc Driver-specific additional error code
*/
- apr_status_t (*init)(apr_pool_t *pool, const char *params, int *rc);
+ apr_status_t (*init)(apr_pool_t *pool, const char *params,
+ const apu_err_t **result);
/**
* @brief Create a context for supporting encryption. Keys, certificates,