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/09 13:17:43 UTC
svn commit: r1212356 - in /apr/apr-util/branches/1.4.x: ./ CHANGES
crypto/apr_crypto.c crypto/apr_crypto_nss.c crypto/apr_crypto_openssl.c
include/private/apr_crypto_internal.h
Author: minfrin
Date: Fri Dec 9 12:17:42 2011
New Revision: 1212356
URL: http://svn.apache.org/viewvc?rev=1212356&view=rev
Log:
Backport:
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-util/branches/1.4.x/ (props changed)
apr/apr-util/branches/1.4.x/CHANGES
apr/apr-util/branches/1.4.x/crypto/apr_crypto.c
apr/apr-util/branches/1.4.x/crypto/apr_crypto_nss.c
apr/apr-util/branches/1.4.x/crypto/apr_crypto_openssl.c
apr/apr-util/branches/1.4.x/include/private/apr_crypto_internal.h
Propchange: apr/apr-util/branches/1.4.x/
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Fri Dec 9 12:17:42 2011
@@ -1,4 +1,4 @@
-/apr/apr/trunk:781403,781409,784519,784592,789965,794508,917837-917838,1207704,1210524
+/apr/apr/trunk:781403,781409,784519,784592,789965,794508,917837-917838,1127648-1127649,1187984,1207704,1210524,1211987
/apr/apr-util/branches/1.3.x:896410,979221-979222,979232,1001059,1002632,1002648,1002733,1003214,1003255,1003358,1003370,1003376,1003602,1005956,1005962,1006017,1006137,1154885
-/apr/apr-util/branches/1.5.x:1002504,1002584-1002585,1002620,1002622-1002623,1002628,1207683,1207690,1207707,1209594,1210530
+/apr/apr-util/branches/1.5.x:1002504,1002584-1002585,1002620,1002622-1002623,1002628,1207683,1207690,1207707,1209594,1210530,1212347
/apr/apr-util/trunk:731033-731034,731225,731236,731291,731293,731379,743986,744009,745771,747612,747623,747630
Modified: apr/apr-util/branches/1.4.x/CHANGES
URL: http://svn.apache.org/viewvc/apr/apr-util/branches/1.4.x/CHANGES?rev=1212356&r1=1212355&r2=1212356&view=diff
==============================================================================
--- apr/apr-util/branches/1.4.x/CHANGES [utf-8] (original)
+++ apr/apr-util/branches/1.4.x/CHANGES [utf-8] Fri Dec 9 12:17:42 2011
@@ -1,6 +1,9 @@
-*- coding: utf-8 -*-
Changes with APR-Util 1.4.2
+ *) 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. [Graham Leggett]
Changes with APR-Util 1.4.1
Modified: apr/apr-util/branches/1.4.x/crypto/apr_crypto.c
URL: http://svn.apache.org/viewvc/apr/apr-util/branches/1.4.x/crypto/apr_crypto.c?rev=1212356&r1=1212355&r2=1212356&view=diff
==============================================================================
--- apr/apr-util/branches/1.4.x/crypto/apr_crypto.c (original)
+++ apr/apr-util/branches/1.4.x/crypto/apr_crypto.c Fri Dec 9 12:17:42 2011
@@ -68,12 +68,12 @@ typedef struct apr_crypto_clear_t {
} apr_crypto_clear_t;
#if !APU_DSO_BUILD
-#define DRIVER_LOAD(name,driver,pool) \
+#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, NULL, NULL); \
+ rv = driver.init(pool, params, result); \
} \
}
#endif
@@ -107,22 +107,6 @@ APU_DECLARE(apr_status_t) apr_crypto_ini
#endif
drivers = apr_hash_make(pool);
-#if !APU_DSO_BUILD
- /* Load statically-linked drivers: */
-#if APU_HAVE_OPENSSL
- DRIVER_LOAD("openssl", apr_crypto_openssl_driver, pool);
-#endif
-#if APU_HAVE_NSS
- DRIVER_LOAD("nss", apr_crypto_nss_driver, pool);
-#endif
-#if APU_HAVE_MSCAPI
- DRIVER_LOAD("mscapi", apr_crypto_mscapi_driver, pool);
-#endif
-#if APU_HAVE_MSCNG
- DRIVER_LOAD("mscng", apr_crypto_mscng_driver, pool);
-#endif
-#endif /* APU_DSO_BUILD */
-
apr_pool_cleanup_register(pool, NULL, apr_crypto_term,
apr_pool_cleanup_null);
@@ -165,7 +149,10 @@ APU_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 APU_DSO_BUILD
rv = apu_dso_mutex_lock();
@@ -207,27 +194,51 @@ APU_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-util/branches/1.4.x/crypto/apr_crypto_nss.c
URL: http://svn.apache.org/viewvc/apr/apr-util/branches/1.4.x/crypto/apr_crypto_nss.c?rev=1212356&r1=1212355&r2=1212356&view=diff
==============================================================================
--- apr/apr-util/branches/1.4.x/crypto/apr_crypto_nss.c (original)
+++ apr/apr-util/branches/1.4.x/crypto/apr_crypto_nss.c Fri Dec 9 12:17:42 2011
@@ -121,7 +121,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;
@@ -209,8 +210,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-util/branches/1.4.x/crypto/apr_crypto_openssl.c
URL: http://svn.apache.org/viewvc/apr/apr-util/branches/1.4.x/crypto/apr_crypto_openssl.c?rev=1212356&r1=1212355&r2=1212356&view=diff
==============================================================================
--- apr/apr-util/branches/1.4.x/crypto/apr_crypto_openssl.c (original)
+++ apr/apr-util/branches/1.4.x/crypto/apr_crypto_openssl.c Fri Dec 9 12:17:42 2011
@@ -108,7 +108,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-util/branches/1.4.x/include/private/apr_crypto_internal.h
URL: http://svn.apache.org/viewvc/apr/apr-util/branches/1.4.x/include/private/apr_crypto_internal.h?rev=1212356&r1=1212355&r2=1212356&view=diff
==============================================================================
--- apr/apr-util/branches/1.4.x/include/private/apr_crypto_internal.h (original)
+++ apr/apr-util/branches/1.4.x/include/private/apr_crypto_internal.h Fri Dec 9 12:17:42 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,