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/10/24 00:11:19 UTC
svn commit: r1187989 - in /apr/apr-util/branches/1.4.x/crypto:
apr_crypto_nss.c apr_crypto_openssl.c
Author: minfrin
Date: Sun Oct 23 22:11:19 2011
New Revision: 1187989
URL: http://svn.apache.org/viewvc?rev=1187989&view=rev
Log:
Backport from apr-util-1.5 to apr-util-1.4:
apr_crypto: Teach the apr_crypto_nss driver to support the "noinit" option
for where NSS is initialised elsewhere.
Modified:
apr/apr-util/branches/1.4.x/crypto/apr_crypto_nss.c
apr/apr-util/branches/1.4.x/crypto/apr_crypto_openssl.c
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=1187989&r1=1187988&r2=1187989&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 Sun Oct 23 22:11:19 2011
@@ -14,6 +14,7 @@
* limitations under the License.
*/
+#include "apr_lib.h"
#include "apu.h"
#include "apu_config.h"
#include "apu_errno.h"
@@ -127,65 +128,69 @@ static apr_status_t crypto_init(apr_pool
const char *keyPrefix = NULL;
const char *certPrefix = NULL;
const char *secmod = NULL;
+ int noinit = 0;
PRUint32 flags = 0;
struct {
const char *field;
- char *value;
+ const char *value;
+ int set;
} fields[] = {
- { "dir", NULL },
- { "key3", NULL },
- { "cert7", NULL },
- { "secmod", NULL },
- { NULL, NULL }
+ { "dir", NULL, 0 },
+ { "key3", NULL, 0 },
+ { "cert7", NULL, 0 },
+ { "secmod", NULL, 0 },
+ { "noinit", NULL, 0 },
+ { NULL, NULL, 0 }
};
- int i;
const char *ptr;
- const char *key;
size_t klen;
- const char *value;
- size_t vlen;
- static const char * const delims = " \r\n\t;|,";
-
- /* sanity check - we can only initialise NSS once */
- if (NSS_IsInitialized()) {
- return APR_EREINIT;
- }
-
- /* snitch parsing from the MySQL driver */
- for (ptr = strchr(params, '='); ptr; ptr = strchr(ptr, '=')) {
- /* don't dereference memory that may not belong to us */
- if (ptr == params) {
- ++ptr;
- continue;
- }
- for (key = ptr - 1; apr_isspace(*key); --key);
- klen = 0;
- while (apr_isalpha(*key)) {
- if (key == params) {
- /* Don't parse off the front of the params */
- --key;
- ++klen;
- break;
- }
- --key;
- ++klen;
+ char **elts = NULL;
+ char *elt;
+ int i = 0, j;
+ apr_status_t status;
+
+ if (APR_SUCCESS != (status = apr_tokenize_to_argv(params, &elts, pool))) {
+ return status;
+ }
+ while ((elt = elts[i])) {
+ ptr = strchr(elt, '=');
+ if (ptr) {
+ for (klen = ptr - elt; klen && apr_isspace(elt[klen - 1]); --klen);
+ ptr++;
+ }
+ else {
+ for (klen = strlen(elt); klen && apr_isspace(elt[klen - 1]); --klen);
}
- ++key;
- for (value = ptr + 1; apr_isspace(*value); ++value);
- vlen = strcspn(value, delims);
- for (i = 0; fields[i].field != NULL; ++i) {
- if (!strncasecmp(fields[i].field, key, klen)) {
- fields[i].value = apr_pstrndup(pool, value, vlen);
+ elt[klen] = 0;
+
+ for (j = 0; fields[j].field != NULL; ++j) {
+ if (klen && !strcasecmp(fields[j].field, elt)) {
+ fields[j].set = 1;
+ if (ptr) {
+ fields[j].value = ptr;
+ }
break;
}
}
- ptr = value + vlen;
+
+ i++;
}
dir = fields[0].value;
keyPrefix = fields[1].value;
certPrefix = fields[2].value;
secmod = fields[3].value;
+ noinit = fields[4].set;
+
+ /* if we've been asked to bypass, do so here */
+ if (noinit) {
+ return APR_SUCCESS;
+ }
+
+ /* sanity check - we can only initialise NSS once */
+ if (NSS_IsInitialized()) {
+ return APR_EREINIT;
+ }
apr_pool_cleanup_register(pool, pool, crypto_shutdown_helper,
apr_pool_cleanup_null);
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=1187989&r1=1187988&r2=1187989&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 Sun Oct 23 22:11:19 2011
@@ -191,21 +191,50 @@ static apr_status_t crypto_make(apr_cryp
apr_crypto_config_t *config = NULL;
apr_crypto_t *f = apr_pcalloc(pool, sizeof(apr_crypto_t));
+ const char *engine;
+
struct {
const char *field;
- char *value;
+ const char *value;
+ int set;
} fields[] = {
- { "engine", NULL },
- { NULL, NULL }
+ { "engine", NULL, 0 },
+ { NULL, NULL, 0 }
};
- int i;
const char *ptr;
- const char *key;
size_t klen;
- const char *value;
- size_t vlen;
- static const char * const delims = " \r\n\t;|,";
- const char *engine;
+ char **elts = NULL;
+ char *elt;
+ int i = 0, j;
+ apr_status_t status;
+
+ if (APR_SUCCESS != (status = apr_tokenize_to_argv(params, &elts, pool))) {
+ return status;
+ }
+ while ((elt = elts[i])) {
+ ptr = strchr(elt, '=');
+ if (ptr) {
+ for (klen = ptr - elt; klen && apr_isspace(elt[klen - 1]); --klen);
+ ptr++;
+ }
+ else {
+ for (klen = strlen(elt); klen && apr_isspace(elt[klen - 1]); --klen);
+ }
+ elt[klen] = 0;
+
+ for (j = 0; fields[j].field != NULL; ++j) {
+ if (!strcasecmp(fields[j].field, elt)) {
+ fields[j].set = 1;
+ if (ptr) {
+ fields[j].value = ptr;
+ }
+ break;
+ }
+ }
+
+ i++;
+ }
+ engine = fields[0].value;
if (!f) {
return APR_ENOMEM;
@@ -247,38 +276,6 @@ static apr_status_t crypto_make(apr_cryp
apr_pool_cleanup_register(pool, f, crypto_cleanup_helper,
apr_pool_cleanup_null);
- /* snitch parsing from the MySQL driver */
- for (ptr = strchr(params, '='); ptr; ptr = strchr(ptr, '=')) {
- /* don't dereference memory that may not belong to us */
- if (ptr == params) {
- ++ptr;
- continue;
- }
- for (key = ptr - 1; apr_isspace(*key); --key);
- klen = 0;
- while (apr_isalpha(*key)) {
- if (key == params) {
- /* Don't parse off the front of the params */
- --key;
- ++klen;
- break;
- }
- --key;
- ++klen;
- }
- ++key;
- for (value = ptr + 1; apr_isspace(*value); ++value);
- vlen = strcspn(value, delims);
- for (i = 0; fields[i].field != NULL; ++i) {
- if (!strncasecmp(fields[i].field, key, klen)) {
- fields[i].value = apr_pstrndup(pool, value, vlen);
- break;
- }
- }
- ptr = value + vlen;
- }
- engine = fields[0].value;
-
if (engine) {
config->engine = ENGINE_by_id(engine);
if (!config->engine) {