* required type of "FUNCTION*"). This removes the necessity for
* macro-generated wrapper functions.
*/
-DECLARE_LHASH_OF(FUNCTION);
static LHASH_OF(FUNCTION) *prog_init(void);
static int do_cmd(LHASH_OF(FUNCTION) *prog, int argc, char *argv[]);
static void list_pkey(void);
BIO *bio_out = NULL;
BIO *bio_err = NULL;
-static void apps_startup()
+static int apps_startup()
{
#ifdef SIGPIPE
signal(SIGPIPE, SIG_IGN);
#endif
- CRYPTO_malloc_init();
- ERR_load_crypto_strings();
- ERR_load_SSL_strings();
- OpenSSL_add_all_algorithms();
- OpenSSL_add_ssl_algorithms();
- OPENSSL_load_builtin_modules();
+
+ /* Set non-default library initialisation settings */
+ if (!OPENSSL_init_crypto(OPENSSL_INIT_ENGINE_ALL_BUILTIN
+ | OPENSSL_INIT_LOAD_CONFIG, NULL))
+ return 0;
+
setup_ui_method();
- /*SSL_library_init();*/
-#ifndef OPENSSL_NO_ENGINE
- ENGINE_load_builtin_engines();
-#endif
+
+ return 1;
}
static void apps_shutdown()
{
-#ifndef OPENSSL_NO_ENGINE
- ENGINE_cleanup();
-#endif
destroy_ui_method();
- CONF_modules_unload(1);
-#ifndef OPENSSL_NO_COMP
- COMP_zlib_cleanup();
- SSL_COMP_free_compression_methods();
-#endif
- OBJ_cleanup();
- EVP_cleanup();
- CRYPTO_cleanup_all_ex_data();
- ERR_remove_thread_state(NULL);
- RAND_cleanup();
- ERR_free_strings();
}
static char *make_config_name()
size_t len;
char *p;
- if ((t = getenv("OPENSSL_CONF")) != NULL
- || (t = getenv("SSLEAY_CONF")) != NULL)
- return BUF_strdup(t);
+ if ((t = getenv("OPENSSL_CONF")) != NULL)
+ return OPENSSL_strdup(t);
t = X509_get_default_cert_area();
len = strlen(t) + 1 + strlen(OPENSSL_CONF) + 1;
#endif
p = getenv("OPENSSL_DEBUG_MEMORY");
- if (p == NULL)
- /* if not set, use compiled-in default */
- ;
- else if (strcmp(p, "off") != 0) {
- CRYPTO_malloc_debug_init();
- CRYPTO_set_mem_debug_options(V_CRYPTO_MDEBUG_ALL);
- } else {
- CRYPTO_set_mem_debug_functions(0, 0, 0, 0, 0);
- }
+ if (p != NULL && strcmp(p, "on") == 0)
+ CRYPTO_set_mem_debug(1);
CRYPTO_mem_ctrl(CRYPTO_MEM_CHECK_ON);
CRYPTO_set_locking_callback(lock_dbg_cb);
if (getenv("OPENSSL_FIPS")) {
#ifdef OPENSSL_FIPS
if (!FIPS_mode_set(1)) {
- ERR_load_crypto_strings();
ERR_print_errors(bio_err);
return 1;
}
#endif
}
- apps_startup();
+ if (!apps_startup())
+ goto end;
+
prog = prog_init();
pname = opt_progname(argv[0]);
BIO_free(bio_in);
BIO_free_all(bio_out);
apps_shutdown();
- CRYPTO_mem_leaks(bio_err);
+#ifndef OPENSSL_NO_CRYPTO_MDEBUG
+ if (CRYPTO_mem_leaks(bio_err) <= 0)
+ ret = 1;
+#endif
BIO_free(bio_err);
- return (ret);
+ EXIT(ret);
}
OPTIONS exit_options[] = {
return strncmp(a->name, b->name, 8);
}
-static IMPLEMENT_LHASH_COMP_FN(function, FUNCTION)
-
static unsigned long function_hash(const FUNCTION * a)
{
return lh_strhash(a->name);
}
-static IMPLEMENT_LHASH_HASH_FN(function, FUNCTION)
-
static int SortFnByName(const void *_f1, const void *_f2)
{
const FUNCTION *f1 = _f1;
#ifdef OPENSSL_NO_DSA
BIO_puts(bio_out, "DSA\n");
#endif
-#if defined(OPENSSL_NO_DTLS1) || defined(OPENSSL_NO_DTLS)
+#if defined(OPENSSL_NO_DTLS)
+ BIO_puts(bio_out, "DTLS\n");
+#endif
+#if defined(OPENSSL_NO_DTLS1)
BIO_puts(bio_out, "DTLS1\n");
#endif
+#if defined(OPENSSL_NO_DTLS1_2)
+ BIO_puts(bio_out, "DTLS1_2\n");
+#endif
#ifdef OPENSSL_NO_EC
BIO_puts(bio_out, "EC\n");
#endif
#ifdef OPENSSL_NO_GOST
BIO_puts(bio_out, "GOST\n");
#endif
+#ifdef OPENSSL_NO_HEARTBEATS
+ BIO_puts(bio_out, "HEARTBEATS\n");
+#endif
#ifdef OPENSSL_NO_HMAC
BIO_puts(bio_out, "HMAC\n");
#endif
#ifdef OPENSSL_NO_IDEA
BIO_puts(bio_out, "IDEA\n");
#endif
-#ifdef OPENSSL_NO_JPAKE
- BIO_puts(bio_out, "JPAKE\n");
-#endif
#ifdef OPENSSL_NO_MD2
BIO_puts(bio_out, "MD2\n");
#endif
#ifdef OPENSSL_NO_SRTP
BIO_puts(bio_out, "SRTP\n");
#endif
+#ifdef OPENSSL_NO_SSL
+ BIO_puts(bio_out, "SSL\n");
+#endif
#ifdef OPENSSL_NO_SSL3
BIO_puts(bio_out, "SSL3\n");
#endif
+#if defined(OPENSSL_NO_TLS)
+ BIO_puts(bio_out, "TLS\n");
+#endif
+#ifdef OPENSSL_NO_TLS1
+ BIO_puts(bio_out, "TLS1\n");
+#endif
+#ifdef OPENSSL_NO_TLS1_1
+ BIO_puts(bio_out, "TLS1_1\n");
+#endif
+#ifdef OPENSSL_NO_TLS1_2
+ BIO_puts(bio_out, "TLS1_2\n");
+#endif
#ifdef OPENSSL_NO_WHIRLPOOL
BIO_puts(bio_out, "WHIRLPOOL\n");
#endif
for (i = 0, f = functions; f->name != NULL; ++f, ++i) ;
qsort(functions, i, sizeof(*functions), SortFnByName);
- if ((ret = lh_FUNCTION_new()) == NULL)
+ if ((ret = lh_FUNCTION_new(function_hash, function_cmp)) == NULL)
return (NULL);
for (f = functions; f->name != NULL; f++)