X-Git-Url: https://git.openssl.org/gitweb/?a=blobdiff_plain;f=apps%2Fopenssl.c;h=5f0ffa9fd49704bccb5cb30ad4eb8114c0064a0d;hb=e73a6965e374270971d730f5886b6ecc214e609f;hp=dfa23d674e4ed157f5ab0bb578f06958b4ef6884;hpb=50acf46b925adb9fcaa0fb5e0ba592c5de37f580;p=openssl.git diff --git a/apps/openssl.c b/apps/openssl.c index dfa23d674e..5f0ffa9fd4 100644 --- a/apps/openssl.c +++ b/apps/openssl.c @@ -56,66 +56,36 @@ * [including the GNU Public Licence.] */ -#ifndef DEBUG -#undef DEBUG -#endif - #include #include #include -#include "bio.h" -#include "crypto.h" -#include "lhash.h" -#include "conf.h" -#include "x509.h" -#include "pem.h" -#include "ssl.h" -#define SSLEAY /* turn off a few special case MONOLITH macros */ +#define OPENSSL_C /* tells apps.h to use complete apps_startup() */ +#include +#include +#include +#include +#include +#include +#include #define USE_SOCKETS /* needed for the _O_BINARY defs in the MS world */ -#define SSLEAY_SRC #include "apps.h" +#include "progs.h" #include "s_apps.h" -#include "err.h" - -/* -#ifdef WINDOWS -#include "bss_file.c" -#endif -*/ +#include -#ifndef NOPROTO static unsigned long MS_CALLBACK hash(FUNCTION *a); static int MS_CALLBACK cmp(FUNCTION *a,FUNCTION *b); static LHASH *prog_init(void ); static int do_cmd(LHASH *prog,int argc,char *argv[]); -#else -static unsigned long MS_CALLBACK hash(); -static int MS_CALLBACK cmp(); -static LHASH *prog_init(); -static int do_cmd(); -#endif - LHASH *config=NULL; char *default_config_file=NULL; -#ifdef DEBUG -static void sig_stop(i) -int i; - { - char *a=NULL; - - *a='\0'; - } -#endif - /* Make sure there is only one when MONOLITH is defined */ #ifdef MONOLITH BIO *bio_err=NULL; #endif -int main(Argc,Argv) -int Argc; -char *Argv[]; +int main(int Argc, char *Argv[]) { ARGS arg; #define PROG_NAME_SIZE 16 @@ -131,24 +101,14 @@ char *Argv[]; arg.data=NULL; arg.count=0; - /* SSLeay_add_ssl_algorithms(); is called in apps_startup() */ - apps_startup(); + CRYPTO_mem_ctrl(CRYPTO_MEM_CHECK_ON); -#if defined(DEBUG) && !defined(WINDOWS) && !defined(MSDOS) -#ifdef SIGBUS - signal(SIGBUS,sig_stop); -#endif -#ifdef SIGSEGV - signal(SIGSEGV,sig_stop); -#endif -#endif + apps_startup(); if (bio_err == NULL) if ((bio_err=BIO_new(BIO_s_file())) != NULL) BIO_set_fp(bio_err,stderr,BIO_NOCLOSE|BIO_FP_TEXT); - CRYPTO_mem_ctrl(CRYPTO_MEM_CHECK_ON); - ERR_load_crypto_strings(); /* Lets load up our environment a little */ @@ -158,7 +118,9 @@ char *Argv[]; if (p == NULL) { strcpy(config_name,X509_get_default_cert_area()); - strcat(config_name,"/lib/"); +#ifndef VMS + strcat(config_name,"/"); +#endif strcat(config_name,OPENSSL_CONF); p=config_name; } @@ -174,7 +136,7 @@ char *Argv[]; program_name(Argv[0],pname,PROG_NAME_SIZE); f.name=pname; - fp=(FUNCTION *)lh_retrieve(prog,(char *)&f); + fp=(FUNCTION *)lh_retrieve(prog,&f); if (fp != NULL) { Argv[0]=pname; @@ -228,7 +190,7 @@ char *Argv[]; } if (ret != 0) BIO_printf(bio_err,"error in %s\n",argv[0]); - BIO_flush(bio_err); + (void)BIO_flush(bio_err); } BIO_printf(bio_err,"bad exit\n"); ret=1; @@ -239,12 +201,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) { @@ -254,10 +216,11 @@ end: EXIT(ret); } -static int do_cmd(prog,argc,argv) -LHASH *prog; -int argc; -char *argv[]; +#define LIST_STANDARD_COMMANDS "list-standard-commands" +#define LIST_MESSAGE_DIGEST_COMMANDS "list-message-digest-commands" +#define LIST_CIPHER_COMMANDS "list-cipher-commands" + +static int do_cmd(LHASH *prog, int argc, char *argv[]) { FUNCTION f,*fp; int i,ret=1,tp,nl; @@ -265,11 +228,23 @@ char *argv[]; if ((argc <= 0) || (argv[0] == NULL)) { ret=0; goto end; } f.name=argv[0]; - fp=(FUNCTION *)lh_retrieve(prog,(char *)&f); + fp=(FUNCTION *)lh_retrieve(prog,&f); if (fp != NULL) { ret=fp->func(argc,argv); } + else if ((strncmp(argv[0],"no-",3)) == 0) + { + BIO *bio_stdout = BIO_new_fp(stdout,BIO_NOCLOSE); + 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(bio_stdout); + goto end; + } else if ((strcmp(argv[0],"quit") == 0) || (strcmp(argv[0],"q") == 0) || (strcmp(argv[0],"exit") == 0) || @@ -278,6 +253,28 @@ char *argv[]; ret= -1; goto end; } + else if ((strcmp(argv[0],LIST_STANDARD_COMMANDS) == 0) || + (strcmp(argv[0],LIST_MESSAGE_DIGEST_COMMANDS) == 0) || + (strcmp(argv[0],LIST_CIPHER_COMMANDS) == 0)) + { + int list_type; + BIO *bio_stdout; + + if (strcmp(argv[0],LIST_STANDARD_COMMANDS) == 0) + list_type = FUNC_TYPE_GENERAL; + else if (strcmp(argv[0],LIST_MESSAGE_DIGEST_COMMANDS) == 0) + list_type = FUNC_TYPE_MD; + else /* strcmp(argv[0],LIST_CIPHER_COMMANDS) == 0 */ + list_type = FUNC_TYPE_CIPHER; + bio_stdout = BIO_new_fp(stdout,BIO_NOCLOSE); + + for (fp=functions; fp->name != NULL; fp++) + if (fp->type == list_type) + BIO_printf(bio_stdout, "%s\n", fp->name); + BIO_free(bio_stdout); + ret=0; + goto end; + } else { BIO_printf(bio_err,"openssl:Error: '%s' is an invalid command.\n", @@ -328,7 +325,7 @@ static int SortFnByName(const void *_f1,const void *_f2) return strcmp(f1->name,f2->name); } -static LHASH *prog_init() +static LHASH *prog_init(void) { LHASH *ret; FUNCTION *f; @@ -342,20 +339,16 @@ static LHASH *prog_init() if ((ret=lh_new(hash,cmp)) == NULL) return(NULL); for (f=functions; f->name != NULL; f++) - lh_insert(ret,(char *)f); + lh_insert(ret,f); return(ret); } -static int MS_CALLBACK cmp(a,b) -FUNCTION *a,*b; +static int MS_CALLBACK cmp(FUNCTION *a, FUNCTION *b) { return(strncmp(a->name,b->name,8)); } -static unsigned long MS_CALLBACK hash(a) -FUNCTION *a; +static unsigned long MS_CALLBACK hash(FUNCTION *a) { return(lh_strhash(a->name)); } - -#undef SSLEAY