On 31 Mar 2012, at 7:25 PM, Gregg Smith wrote:
> It was nss and I was pulling away nss dll files to see just what was needed and what wasn't. Interesting was that the error was different for most but that error came up for some. The other was
>
> [Fri Mar 30 18:12:05.018600 2012] [session_crypto:error] [pid 3404:tid 700] (OS 126)The specified module could not be found. : AH01845: The specified module could not be found.
>
> This does give better info
> [Sat Mar 31 10:15:59.017600 2012] [session_crypto:error] [pid 4932:tid 700] (100005)Error string not specified yet: AH01845: The crypto library 'nss' could not be loaded: (null) (Error during 'nss' initialisation)
>
> Maybe however, "Error string not specified by the driver yet" or something to that effect? It cannot be incorrectly read as "we're not sure what to say here yet," as I embarrassingly did.
The string "Error string not specified yet" belongs to APR, and is returned if an error code (in this case
100005) isn't recognised by apr_error_string().
If it's nss, then the following code is generating the error:
if (s != SECSuccess) {
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;
}
In turn, it means that PR_ErrorToName(s) is returning the string "(null)".
It may be worth logging the value err->rc as well to see the value of the NSS error. When I developed this stuff way back when I discovered a number of places where NSS errors were either missing or were duplicated (ie multiple failures mapped to the same error code). When the errors were pointed out, the NSS guys were very quick to fix the problems. Are you using a recent version of NSS?
Index: modules/session/mod_session_crypto.c
===================================================================
--- modules/session/mod_session_crypto.c (revision 1307617)
+++ modules/session/mod_session_crypto.c (working copy)
@@ -435,7 +435,7 @@
}
if (APR_SUCCESS != rv && err) {
ap_log_error(APLOG_MARK, APLOG_ERR, rv, s, APLOGNO(01845)
- "%s", err->msg);
+ "The crypto library '%s' could not be loaded: %s (%s: %d)", conf->library, err->msg, err->reason, err->rc);
return rv;
}
if (APR_ENOTIMPL == rv) {
Regards,
Graham
--