Provide command line options to s_client and s_server to select an

"engine" to use.
This commit is contained in:
Geoff Thorpe 2000-05-28 23:00:20 +00:00
parent b6577e040e
commit 6111f7408b
2 changed files with 56 additions and 0 deletions

View File

@ -79,6 +79,7 @@ typedef unsigned int u_int;
#include <openssl/ssl.h> #include <openssl/ssl.h>
#include <openssl/err.h> #include <openssl/err.h>
#include <openssl/pem.h> #include <openssl/pem.h>
#include <openssl/engine.h>
#include "s_apps.h" #include "s_apps.h"
#ifdef WINDOWS #ifdef WINDOWS
@ -152,6 +153,7 @@ static void sc_usage(void)
BIO_printf(bio_err," -bugs - Switch on all SSL implementation bug workarounds\n"); BIO_printf(bio_err," -bugs - Switch on all SSL implementation bug workarounds\n");
BIO_printf(bio_err," -cipher - preferred cipher to use, use the 'openssl ciphers'\n"); BIO_printf(bio_err," -cipher - preferred cipher to use, use the 'openssl ciphers'\n");
BIO_printf(bio_err," command to see what is available\n"); BIO_printf(bio_err," command to see what is available\n");
BIO_printf(bio_err," -engine id - Initialise and use the specified engine\n");
} }
@ -179,6 +181,8 @@ int MAIN(int argc, char **argv)
int prexit = 0; int prexit = 0;
SSL_METHOD *meth=NULL; SSL_METHOD *meth=NULL;
BIO *sbio; BIO *sbio;
char *engine_id=NULL;
ENGINE *e=NULL;
#ifdef WINDOWS #ifdef WINDOWS
struct timeval tv; struct timeval tv;
#endif #endif
@ -316,6 +320,11 @@ int MAIN(int argc, char **argv)
else if (strcmp(*argv,"-nbio") == 0) else if (strcmp(*argv,"-nbio") == 0)
{ c_nbio=1; } { c_nbio=1; }
#endif #endif
else if (strcmp(*argv,"-engine") == 0)
{
if (--argc < 1) goto bad;
engine_id = *(++argv);
}
else else
{ {
BIO_printf(bio_err,"unknown option %s\n",*argv); BIO_printf(bio_err,"unknown option %s\n",*argv);
@ -349,6 +358,25 @@ bad:
OpenSSL_add_ssl_algorithms(); OpenSSL_add_ssl_algorithms();
SSL_load_error_strings(); SSL_load_error_strings();
if (engine_id != NULL)
{
if((e = ENGINE_by_id(engine_id)) == NULL)
{
BIO_printf(bio_err,"invalid engine\n");
ERR_print_errors(bio_err);
goto end;
}
if(!ENGINE_set_default(e, ENGINE_METHOD_ALL))
{
BIO_printf(bio_err,"can't use that engine\n");
ERR_print_errors(bio_err);
goto end;
}
BIO_printf(bio_err,"engine \"%s\" set.\n", engine_id);
ENGINE_free(e);
}
ctx=SSL_CTX_new(meth); ctx=SSL_CTX_new(meth);
if (ctx == NULL) if (ctx == NULL)
{ {

View File

@ -83,6 +83,7 @@ typedef unsigned int u_int;
#include <openssl/pem.h> #include <openssl/pem.h>
#include <openssl/x509.h> #include <openssl/x509.h>
#include <openssl/ssl.h> #include <openssl/ssl.h>
#include <openssl/engine.h>
#include "s_apps.h" #include "s_apps.h"
#ifdef WINDOWS #ifdef WINDOWS
@ -176,6 +177,7 @@ static int s_debug=0;
static int s_quiet=0; static int s_quiet=0;
static int hack=0; static int hack=0;
static char *engine_id=NULL;
#ifdef MONOLITH #ifdef MONOLITH
static void s_server_init(void) static void s_server_init(void)
@ -198,6 +200,7 @@ static void s_server_init(void)
s_debug=0; s_debug=0;
s_quiet=0; s_quiet=0;
hack=0; hack=0;
engine_id=NULL;
} }
#endif #endif
@ -242,6 +245,7 @@ static void sv_usage(void)
BIO_printf(bio_err," -bugs - Turn on SSL bug compatibility\n"); BIO_printf(bio_err," -bugs - Turn on SSL bug compatibility\n");
BIO_printf(bio_err," -www - Respond to a 'GET /' with a status page\n"); BIO_printf(bio_err," -www - Respond to a 'GET /' with a status page\n");
BIO_printf(bio_err," -WWW - Respond to a 'GET /<path> HTTP/1.0' with file ./<path>\n"); BIO_printf(bio_err," -WWW - Respond to a 'GET /<path> HTTP/1.0' with file ./<path>\n");
BIO_printf(bio_err," -engine id - Initialise and use the specified engine\n");
} }
static int local_argc=0; static int local_argc=0;
@ -411,6 +415,7 @@ int MAIN(int argc, char *argv[])
int no_tmp_rsa=0,no_dhe=0,nocert=0; int no_tmp_rsa=0,no_dhe=0,nocert=0;
int state=0; int state=0;
SSL_METHOD *meth=NULL; SSL_METHOD *meth=NULL;
ENGINE *e=NULL;
#ifndef NO_DH #ifndef NO_DH
DH *dh=NULL; DH *dh=NULL;
#endif #endif
@ -565,6 +570,11 @@ int MAIN(int argc, char *argv[])
else if (strcmp(*argv,"-tls1") == 0) else if (strcmp(*argv,"-tls1") == 0)
{ meth=TLSv1_server_method(); } { meth=TLSv1_server_method(); }
#endif #endif
else if (strcmp(*argv,"-engine") == 0)
{
if (--argc < 1) goto bad;
engine_id= *(++argv);
}
else else
{ {
BIO_printf(bio_err,"unknown option %s\n",*argv); BIO_printf(bio_err,"unknown option %s\n",*argv);
@ -609,6 +619,24 @@ bad:
SSL_load_error_strings(); SSL_load_error_strings();
OpenSSL_add_ssl_algorithms(); OpenSSL_add_ssl_algorithms();
if (engine_id != NULL)
{
if((e = ENGINE_by_id(engine_id)) == NULL)
{
BIO_printf(bio_err,"invalid engine\n");
ERR_print_errors(bio_err);
goto end;
}
if(!ENGINE_set_default(e, ENGINE_METHOD_ALL))
{
BIO_printf(bio_err,"can't use that engine\n");
ERR_print_errors(bio_err);
goto end;
}
BIO_printf(bio_err,"engine \"%s\" set.\n", engine_id);
ENGINE_free(e);
}
ctx=SSL_CTX_new(meth); ctx=SSL_CTX_new(meth);
if (ctx == NULL) if (ctx == NULL)
{ {