Make all engines available in the openssl application.
[openssl.git] / apps / openssl.c
index 2e1b606a52923c7f3ca0fca82741eb08606d5550..cbb77b0c0a8404c9ea2e034441bdca5a2387f90b 100644 (file)
@@ -59,6 +59,7 @@
 #include <stdio.h>
 #include <string.h>
 #include <stdlib.h>
+#define OPENSSL_C /* tells apps.h to use complete apps_startup() */
 #include <openssl/bio.h>
 #include <openssl/crypto.h>
 #include <openssl/lhash.h>
@@ -67,7 +68,6 @@
 #include <openssl/pem.h>
 #include <openssl/ssl.h>
 #define USE_SOCKETS /* needed for the _O_BINARY defs in the MS world */
-#define OPENSSL_C /* tells apps.h to use complete apps_startup() */
 #include "apps.h"
 #include "progs.h"
 #include "s_apps.h"
@@ -101,6 +101,8 @@ int main(int Argc, char *Argv[])
        arg.data=NULL;
        arg.count=0;
 
+       if (getenv("OPENSSL_DEBUG_MEMORY") != NULL)
+               CRYPTO_malloc_debug_init();
        CRYPTO_mem_ctrl(CRYPTO_MEM_CHECK_ON);
 
        apps_startup();
@@ -110,6 +112,7 @@ int main(int Argc, char *Argv[])
                        BIO_set_fp(bio_err,stderr,BIO_NOCLOSE|BIO_FP_TEXT);
 
        ERR_load_crypto_strings();
+       ENGINE_load_builtin_engines();
 
        /* Lets load up our environment a little */
        p=getenv("OPENSSL_CONF");
@@ -201,12 +204,12 @@ end:
                config=NULL;
                }
        if (prog != NULL) lh_free(prog);
-       if (arg.data != NULL) Free(arg.data);
+       if (arg.data != NULL) OPENSSL_free(arg.data);
        ERR_remove_state(0);
 
        EVP_cleanup();
        ERR_free_strings();
-
+       
        CRYPTO_mem_leaks(bio_err);
        if (bio_err != NULL)
                {
@@ -233,6 +236,24 @@ static int do_cmd(LHASH *prog, int argc, char *argv[])
                {
                ret=fp->func(argc,argv);
                }
+       else if ((strncmp(argv[0],"no-",3)) == 0)
+               {
+               BIO *bio_stdout = BIO_new_fp(stdout,BIO_NOCLOSE);
+#ifdef VMS
+               {
+               BIO *tmpbio = BIO_new(BIO_f_linebuffer());
+               bio_stdout = BIO_push(tmpbio, bio_stdout);
+               }
+#endif
+               f.name=argv[0]+3;
+               ret = (lh_retrieve(prog,&f) != NULL);
+               if (!ret)
+                       BIO_printf(bio_stdout, "%s\n", argv[0]);
+               else
+                       BIO_printf(bio_stdout, "%s\n", argv[0]+3);
+               BIO_free_all(bio_stdout);
+               goto end;
+               }
        else if ((strcmp(argv[0],"quit") == 0) ||
                (strcmp(argv[0],"q") == 0) ||
                (strcmp(argv[0],"exit") == 0) ||
@@ -255,11 +276,17 @@ static int do_cmd(LHASH *prog, int argc, char *argv[])
                else /* strcmp(argv[0],LIST_CIPHER_COMMANDS) == 0 */
                        list_type = FUNC_TYPE_CIPHER;
                bio_stdout = BIO_new_fp(stdout,BIO_NOCLOSE);
+#ifdef VMS
+               {
+               BIO *tmpbio = BIO_new(BIO_f_linebuffer());
+               bio_stdout = BIO_push(tmpbio, bio_stdout);
+               }
+#endif
                
                for (fp=functions; fp->name != NULL; fp++)
                        if (fp->type == list_type)
                                BIO_printf(bio_stdout, "%s\n", fp->name);
-               BIO_free(bio_stdout);
+               BIO_free_all(bio_stdout);
                ret=0;
                goto end;
                }