d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen# Patch developed in-house. Solaris-specific; not suitable for upstream.
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen--- openssl-0.9.8m/apps/openssl.c Thu Oct 15 19:28:02 2009
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen+++ openssl-0.9.8m/apps/openssl.c Fri Feb 26 16:12:30 2010
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen@@ -135,6 +135,9 @@
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen+/* Solaris OpenSSL */
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen * The LHASH callbacks ("hash" & "cmp") have been replaced by functions with
d8552f9f65e5ff64be5de9faf9a8171799a0bbecTimo Sirainen * the base prototypes (we cast each variable inside the function to the
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen@@ -155,9 +158,10 @@
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen BIO *bio_err = NULL;
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen+static int *modes;
b2ed2b25c4c457ec1c99ebe5e9bd66a2e2f89cfdTimo Sirainen static void lock_dbg_cb(int mode, int type, const char *file, int line)
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen- static int modes[CRYPTO_NUM_LOCKS]; /* = {0, 0, ... } */
cdc8485491045d82bb98405d4b995f277d12838eTimo Sirainen const char *errstr = NULL;
d8552f9f65e5ff64be5de9faf9a8171799a0bbecTimo Sirainen@@ -167,7 +168,7 @@
c0e5c6a86e1de5d4f5591d39b4aa921a23c807d7Timo Sirainen- if (type < 0 || type >= CRYPTO_NUM_LOCKS) {
d8552f9f65e5ff64be5de9faf9a8171799a0bbecTimo Sirainen+ if (type < 0 || type >= CRYPTO_num_locks()) {
d8552f9f65e5ff64be5de9faf9a8171799a0bbecTimo Sirainen errstr = "type out of bounds";
d8552f9f65e5ff64be5de9faf9a8171799a0bbecTimo Sirainen@@ -305,6 +306,14 @@
d8552f9f65e5ff64be5de9faf9a8171799a0bbecTimo Sirainen if (getenv("OPENSSL_DEBUG_LOCKING") != NULL)
d8552f9f65e5ff64be5de9faf9a8171799a0bbecTimo Sirainen+ modes = OPENSSL_malloc(CRYPTO_num_locks() * sizeof (int));
d8552f9f65e5ff64be5de9faf9a8171799a0bbecTimo Sirainen+ if (modes == NULL) {
d8552f9f65e5ff64be5de9faf9a8171799a0bbecTimo Sirainen+ ERR_load_crypto_strings();
d8552f9f65e5ff64be5de9faf9a8171799a0bbecTimo Sirainen+ BIO_printf(bio_err,"Memory allocation failure\n");
d8552f9f65e5ff64be5de9faf9a8171799a0bbecTimo Sirainen+ ERR_print_errors(bio_err);
d8552f9f65e5ff64be5de9faf9a8171799a0bbecTimo Sirainen+ memset(modes, 0, CRYPTO_num_locks() * sizeof (int));
d8552f9f65e5ff64be5de9faf9a8171799a0bbecTimo Sirainen CRYPTO_set_locking_callback(lock_dbg_cb);
d8552f9f65e5ff64be5de9faf9a8171799a0bbecTimo Sirainen@@ -308,18 +320,28 @@
d8552f9f65e5ff64be5de9faf9a8171799a0bbecTimo Sirainen CRYPTO_set_locking_callback(lock_dbg_cb);
d8552f9f65e5ff64be5de9faf9a8171799a0bbecTimo Sirainen+ * Solaris OpenSSL
d8552f9f65e5ff64be5de9faf9a8171799a0bbecTimo Sirainen+ * Add a further check for the FIPS_mode_set() symbol before calling to
d8552f9f65e5ff64be5de9faf9a8171799a0bbecTimo Sirainen+ * allow openssl(1openssl) to be run against both fips and non-fips libraries.
d8552f9f65e5ff64be5de9faf9a8171799a0bbecTimo Sirainen if (getenv("OPENSSL_FIPS")) {
d8552f9f65e5ff64be5de9faf9a8171799a0bbecTimo Sirainen-#ifdef OPENSSL_FIPS
d8552f9f65e5ff64be5de9faf9a8171799a0bbecTimo Sirainen- if (!FIPS_mode_set(1)) {
d8552f9f65e5ff64be5de9faf9a8171799a0bbecTimo Sirainen+ int (*FIPS_mode_set)(int);
d8552f9f65e5ff64be5de9faf9a8171799a0bbecTimo Sirainen+ FIPS_mode_set = (int (*)(int)) dlsym(RTLD_NEXT, "FIPS_mode_set");
d8552f9f65e5ff64be5de9faf9a8171799a0bbecTimo Sirainen+ if (FIPS_mode_set != NULL) {
d8552f9f65e5ff64be5de9faf9a8171799a0bbecTimo Sirainen+ if (!(*FIPS_mode_set)(1)) {
d8552f9f65e5ff64be5de9faf9a8171799a0bbecTimo Sirainen ERR_load_crypto_strings();
d8552f9f65e5ff64be5de9faf9a8171799a0bbecTimo Sirainen ERR_print_errors(BIO_new_fp(stderr, BIO_NOCLOSE));
d8552f9f65e5ff64be5de9faf9a8171799a0bbecTimo Sirainen- fprintf(stderr, "FIPS mode not supported.\n");
d8552f9f65e5ff64be5de9faf9a8171799a0bbecTimo Sirainen+ fprintf(stderr, "Failed to enable FIPS mode. "
d8552f9f65e5ff64be5de9faf9a8171799a0bbecTimo Sirainen+ "For more information about running in FIPS mode see openssl(5).\n");
d8552f9f65e5ff64be5de9faf9a8171799a0bbecTimo Sirainen apps_startup();