-/* apps/ssleay.c */
+/* apps/openssl.c */
/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
* All rights reserved.
*
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
-#include "bio.h"
-#include "crypto.h"
-#include "lhash.h"
-#include "conf.h"
-#include "x509.h"
-#include "pem.h"
-#include "ssl.h"
+#include <openssl/bio.h>
+#include <openssl/crypto.h>
+#include <openssl/lhash.h>
+#include <openssl/conf.h>
+#include <openssl/x509.h>
+#include <openssl/pem.h>
+#include <openssl/ssl.h>
#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 <openssl/err.h>
/*
#ifdef WINDOWS
#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[]);
-#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;
+static void sig_stop(int i)
{
char *a=NULL;
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
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;
}
goto end;
}
- /* ok, lets enter the old 'SSLeay>' mode */
+ /* ok, lets enter the old 'OpenSSL>' mode */
for (;;)
{
p[0]='\0';
if (i++)
prompt=">";
- else prompt="SSLeay>";
+ else prompt="OpenSSL> ";
fputs(prompt,stdout);
fflush(stdout);
fgets(p,n,stdin);
}
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;
ERR_remove_state(0);
EVP_cleanup();
+ ERR_free_strings();
CRYPTO_mem_leaks(bio_err);
if (bio_err != NULL)
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;
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++)
{
{
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);
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));
}