#include <stdlib.h>
#include <string.h>
+#include <openssl/opensslconf.h>
+
+#ifndef OPENSSL_NO_SOCK
+
#define USE_SOCKETS
#include "apps.h"
#include <openssl/x509.h>
#include <openssl/pem.h>
#include "s_apps.h"
#include <openssl/err.h>
-#ifdef WIN32_STUFF
-# include "winmain.h"
-# include "wintext.h"
-#endif
#if !defined(OPENSSL_SYS_MSDOS)
# include OPENSSL_UNISTD
#endif
typedef enum OPTION_choice {
OPT_ERR = -1, OPT_EOF = 0, OPT_HELP,
OPT_CONNECT, OPT_CIPHER, OPT_CERT, OPT_KEY, OPT_CAPATH,
- OPT_CAFILE, OPT_NEW, OPT_REUSE, OPT_BUGS, OPT_VERIFY, OPT_TIME,
-#ifndef OPENSSL_NO_SSL3
- OPT_SSL3,
-#endif
+ OPT_CAFILE, OPT_NOCAPATH, OPT_NOCAFILE, OPT_NEW, OPT_REUSE, OPT_BUGS,
+ OPT_VERIFY, OPT_TIME, OPT_SSL3,
OPT_WWW
} OPTION_CHOICE;
{"key", OPT_KEY, '<', "File with key, PEM; default is -cert file"},
{"CApath", OPT_CAPATH, '/', "PEM format directory of CA's"},
{"cafile", OPT_CAFILE, '<', "PEM format file of CA's"},
+ {"no-CAfile", OPT_NOCAFILE, '-',
+ "Do not load the default certificates file"},
+ {"no-CApath", OPT_NOCAPATH, '-',
+ "Do not load certificates from the default certificates directory"},
{"new", OPT_NEW, '-', "Just time new connections"},
{"reuse", OPT_REUSE, '-', "Just time connection reuse"},
{"bugs", OPT_BUGS, '-', "Turn on SSL bug compatibility"},
{"verify", OPT_VERIFY, 'p',
"Turn on peer certificate verification, set depth"},
- {"time", OPT_TIME, 'p', "Sf seconds to collect data, default" SECONDSSTR},
+ {"time", OPT_TIME, 'p', "Seconds to collect data, default " SECONDSSTR},
{"www", OPT_WWW, 's', "Fetch specified page from the site"},
#ifndef OPENSSL_NO_SSL3
{"ssl3", OPT_SSL3, '-', "Just use SSLv3"},
char *CApath = NULL, *CAfile = NULL, *cipher = NULL, *www_path = NULL;
char *host = SSL_CONNECT_NAME, *certfile = NULL, *keyfile = NULL, *prog;
double totalTime = 0.0;
+ int noCApath = 0, noCAfile = 0;
int maxtime = SECONDS, nConn = 0, perform = 3, ret = 1, i, st_bugs =
0, ver;
long bytes_read = 0, finishtime = 0;
OPTION_CHOICE o;
-#ifdef OPENSSL_SYS_WIN32
- int exitNow = 0; /* Set when it's time to exit main */
-#endif
+ int max_version = 0;
meth = TLS_client_method();
verify_depth = 0;
case OPT_CAFILE:
CAfile = opt_arg();
break;
+ case OPT_NOCAPATH:
+ noCApath = 1;
+ break;
+ case OPT_NOCAFILE:
+ noCAfile = 1;
+ break;
case OPT_CIPHER:
cipher = opt_arg();
break;
goto end;
}
break;
-#ifndef OPENSSL_NO_SSL3
case OPT_SSL3:
- meth = SSLv3_client_method();
+ max_version = SSL3_VERSION;
break;
-#endif
}
}
argc = opt_num_rest();
- argv = opt_rest();
+ if (argc != 0)
+ goto opthelp;
if (cipher == NULL)
cipher = getenv("SSL_CIPHER");
if (cipher == NULL) {
- fprintf(stderr, "No CIPHER specified\n");
+ BIO_printf(bio_err, "No CIPHER specified\n");
goto end;
}
goto end;
SSL_CTX_set_quiet_shutdown(ctx, 1);
+ if (SSL_CTX_set_max_proto_version(ctx, max_version) == 0)
+ goto end;
if (st_bugs)
SSL_CTX_set_options(ctx, SSL_OP_ALL);
if (!set_cert_stuff(ctx, certfile, keyfile))
goto end;
- if (!ctx_set_verify_locations(ctx, CAfile, CApath)) {
+ if (!ctx_set_verify_locations(ctx, CAfile, CApath, noCAfile, noCApath)) {
ERR_print_errors(bio_err);
goto end;
}
for (;;) {
if (finishtime < (long)time(NULL))
break;
-#ifdef WIN32_STUFF
-
- if (flushWinMsgs(0) == -1)
- goto end;
-
- if (waitingToDie || exitNow) /* we're dead */
- goto end;
-#endif
if ((scon = doConnection(NULL, host, ctx)) == NULL)
goto end;
#else
SSL_shutdown(scon);
#endif
- SHUTDOWN2(SSL_get_fd(scon));
+ BIO_closesocket(SSL_get_fd(scon));
nConn += 1;
if (SSL_session_reused(scon))
/* Get an SSL object so we can reuse the session id */
if ((scon = doConnection(NULL, host, ctx)) == NULL) {
- fprintf(stderr, "Unable to get connection\n");
+ BIO_printf(bio_err, "Unable to get connection\n");
goto end;
}
#else
SSL_shutdown(scon);
#endif
- SHUTDOWN2(SSL_get_fd(scon));
+ BIO_closesocket(SSL_get_fd(scon));
nConn = 0;
totalTime = 0.0;
if (finishtime < (long)time(NULL))
break;
-#ifdef WIN32_STUFF
- if (flushWinMsgs(0) == -1)
- goto end;
-
- if (waitingToDie || exitNow) /* we're dead */
- goto end;
-#endif
-
if ((doConnection(scon, host, ctx)) == NULL)
goto end;
#else
SSL_shutdown(scon);
#endif
- SHUTDOWN2(SSL_get_fd(scon));
+ BIO_closesocket(SSL_get_fd(scon));
nConn += 1;
if (SSL_session_reused(scon))
return serverCon;
}
+#endif /* OPENSSL_NO_SOCK */