X-Git-Url: https://git.openssl.org/?p=openssl.git;a=blobdiff_plain;f=apps%2Fopenssl.c;h=d7d6601b083f3e4d3963736035a5cf150bdd2860;hp=f69f14aa2e262e9977caefe5354b0de8e5f83f08;hb=d2eec3a6105c0e0d73e3b26598eaeff1a1c07a86;hpb=b7896b3cb86d80206af14a14d69b0717786f2729 diff --git a/apps/openssl.c b/apps/openssl.c index f69f14aa2e..d7d6601b08 100644 --- a/apps/openssl.c +++ b/apps/openssl.c @@ -1,5 +1,5 @@ -/* apps/ssleay.c */ -/* Copyright (C) 1995-1997 Eric Young (eay@cryptsoft.com) +/* apps/openssl.c */ +/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) * All rights reserved. * * This package is an SSL implementation written @@ -56,49 +56,42 @@ * [including the GNU Public Licence.] */ -#define DEBUG +#ifndef DEBUG +#undef DEBUG +#endif #include #include #include -#ifdef WIN16 -#define APPS_WIN16 -#endif -#include "bio.h" -#include "crypto.h" -#include "lhash.h" -#include "conf.h" -#include "x509.h" -#include "pem.h" -#include "ssl.h" +#include +#include +#include +#include +#include +#include +#include #define SSLEAY /* turn off a few special case MONOLITH macros */ #define USE_SOCKETS /* needed for the _O_BINARY defs in the MS world */ #define SSLEAY_SRC #include "apps.h" #include "s_apps.h" -#include "err.h" +#include +/* +#ifdef WINDOWS +#include "bss_file.c" +#endif +*/ -#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[]); -static void sig_stop(int i); -#else -static unsigned long MS_CALLBACK hash(); -static int MS_CALLBACK cmp(); -static LHASH *prog_init(); -static int do_cmd(); -static void sig_stop(); -#endif - LHASH *config=NULL; char *default_config_file=NULL; #ifdef DEBUG -static void sig_stop(i) -int i; +static void sig_stop(int i) { char *a=NULL; @@ -111,9 +104,7 @@ int i; 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 @@ -143,19 +134,23 @@ char *Argv[]; if (bio_err == NULL) if ((bio_err=BIO_new(BIO_s_file())) != NULL) - BIO_set_fp(bio_err,stderr,BIO_NOCLOSE); + 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 */ - p=getenv("SSLEAY_CONF"); + p=getenv("OPENSSL_CONF"); + if (p == NULL) + p=getenv("SSLEAY_CONF"); if (p == NULL) { strcpy(config_name,X509_get_default_cert_area()); - strcat(config_name,"/lib/"); - strcat(config_name,SSLEAY_CONF); +#ifndef VMS + strcat(config_name,"/"); +#endif + strcat(config_name,OPENSSL_CONF); p=config_name; } @@ -189,7 +184,7 @@ char *Argv[]; goto end; } - /* ok, lets enter the old 'SSLeay>' mode */ + /* ok, lets enter the old 'OpenSSL>' mode */ for (;;) { @@ -202,7 +197,7 @@ char *Argv[]; p[0]='\0'; if (i++) prompt=">"; - else prompt="SSLeay>"; + else prompt="OpenSSL> "; fputs(prompt,stdout); fflush(stdout); fgets(p,n,stdin); @@ -224,6 +219,7 @@ char *Argv[]; } if (ret != 0) BIO_printf(bio_err,"error in %s\n",argv[0]); + BIO_flush(bio_err); } BIO_printf(bio_err,"bad exit\n"); ret=1; @@ -238,6 +234,7 @@ end: ERR_remove_state(0); EVP_cleanup(); + ERR_free_strings(); CRYPTO_mem_leaks(bio_err); if (bio_err != NULL) @@ -248,10 +245,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; @@ -272,12 +270,34 @@ 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,"'%s' is a bad command, valid commands are", + BIO_printf(bio_err,"openssl:Error: '%s' is an invalid command.\n", argv[0]); + BIO_printf(bio_err, "\nStandard commands"); i=0; - fp=functions; tp=0; for (fp=functions; fp->name != NULL; fp++) { @@ -295,27 +315,43 @@ char *argv[]; { i=1; BIO_printf(bio_err, - "Message Digest commands - see the dgst command for more details\n"); + "\nMessage Digest commands (see the `dgst' command for more details)\n"); } else if (tp == FUNC_TYPE_CIPHER) { i=1; - BIO_printf(bio_err,"Cipher commands - see the enc command for more details\n"); + BIO_printf(bio_err,"\nCipher commands (see the `enc' command for more details)\n"); } } BIO_printf(bio_err,"%-15s",fp->name); } - BIO_printf(bio_err,"\nquit\n"); + BIO_printf(bio_err,"\n\n"); ret=0; } end: return(ret); } -static LHASH *prog_init() +static int SortFnByName(const void *_f1,const void *_f2) + { + const FUNCTION *f1=_f1; + const FUNCTION *f2=_f2; + + if(f1->type != f2->type) + return f1->type-f2->type; + return strcmp(f1->name,f2->name); + } + +static LHASH *prog_init(void) { LHASH *ret; FUNCTION *f; + int i; + + /* Purely so it looks nice when the user hits ? */ + for(i=0,f=functions ; f->name != NULL ; ++f,++i) + ; + qsort(functions,i,sizeof *functions,SortFnByName); if ((ret=lh_new(hash,cmp)) == NULL) return(NULL); @@ -324,14 +360,12 @@ static LHASH *prog_init() 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)); }