From: Dr. Stephen Henson Date: Sun, 18 Nov 2012 15:45:16 +0000 (+0000) Subject: add -naccept option to s_server to automatically exit after connections X-Git-Tag: master-post-reformat~1607 X-Git-Url: https://git.openssl.org/gitweb/?p=openssl.git;a=commitdiff_plain;h=b5cadfb564a604c0ba1c49984ac796cfd8310731;ds=inline add -naccept option to s_server to automatically exit after connections --- diff --git a/apps/s_apps.h b/apps/s_apps.h index d1ef18a4a2..ccf06a6905 100644 --- a/apps/s_apps.h +++ b/apps/s_apps.h @@ -148,7 +148,7 @@ typedef fd_mask fd_set; #define PORT_STR "4433" #define PROTOCOL "tcp" -int do_server(int port, int type, int *ret, int (*cb) (char *hostname, int s, unsigned char *context), unsigned char *context); +int do_server(int port, int type, int *ret, int (*cb) (char *hostname, int s, unsigned char *context), unsigned char *context, int naccept); #ifdef HEADER_X509_H int MS_CALLBACK verify_callback(int ok, X509_STORE_CTX *ctx); #endif diff --git a/apps/s_cb.c b/apps/s_cb.c index 58d0da8e97..a007899ae7 100644 --- a/apps/s_cb.c +++ b/apps/s_cb.c @@ -454,13 +454,13 @@ int ssl_print_curves(BIO *out, SSL *s, int noshared) } if (ncurves == 0) BIO_puts(out, "NONE"); + OPENSSL_free(curves); if (noshared) { BIO_puts(out, "\n"); return 1; } BIO_puts(out, "\nShared Elliptic curves: "); - OPENSSL_free(curves); ncurves = SSL_get_shared_curve(s, -1); for (i = 0; i < ncurves; i++) { diff --git a/apps/s_server.c b/apps/s_server.c index daf4fd43e2..dad9f61a0f 100644 --- a/apps/s_server.c +++ b/apps/s_server.c @@ -979,7 +979,7 @@ int MAIN(int argc, char *argv[]) STACK_OF(X509) *s_chain = NULL, *s_dchain = NULL; EVP_PKEY *s_key = NULL, *s_dkey = NULL; int no_cache = 0, ext_cache = 0; - int rev = 0; + int rev = 0, naccept = -1; #ifndef OPENSSL_NO_TLSEXT EVP_PKEY *s_key2 = NULL; X509 *s_cert2 = NULL; @@ -1040,6 +1040,17 @@ int MAIN(int argc, char *argv[]) if (!extract_port(*(++argv),&port)) goto bad; } + else if (strcmp(*argv,"-naccept") == 0) + { + if (--argc < 1) goto bad; + naccept = atol(*(++argv)); + if (naccept <= 0) + { + BIO_printf(bio_err, "bad accept value %s\n", + *argv); + goto bad; + } + } else if (strcmp(*argv,"-verify") == 0) { s_server_verify=SSL_VERIFY_PEER|SSL_VERIFY_CLIENT_ONCE; @@ -2000,11 +2011,11 @@ bad: BIO_printf(bio_s_out,"ACCEPT\n"); (void)BIO_flush(bio_s_out); if (rev) - do_server(port,socket_type,&accept_socket,rev_body, context); + do_server(port,socket_type,&accept_socket,rev_body, context, naccept); else if (www) - do_server(port,socket_type,&accept_socket,www_body, context); + do_server(port,socket_type,&accept_socket,www_body, context, naccept); else - do_server(port,socket_type,&accept_socket,sv_body, context); + do_server(port,socket_type,&accept_socket,sv_body, context, naccept); print_stats(bio_s_out,ctx); ret=0; end: diff --git a/apps/s_socket.c b/apps/s_socket.c index 6dd736af01..f73f1931e5 100644 --- a/apps/s_socket.c +++ b/apps/s_socket.c @@ -280,7 +280,7 @@ static int init_client_ip(int *sock, const unsigned char ip[4], int port, return(1); } -int do_server(int port, int type, int *ret, int (*cb)(char *hostname, int s, unsigned char *context), unsigned char *context) +int do_server(int port, int type, int *ret, int (*cb)(char *hostname, int s, unsigned char *context), unsigned char *context, int naccept) { int sock; char *name = NULL; @@ -310,7 +310,9 @@ int do_server(int port, int type, int *ret, int (*cb)(char *hostname, int s, uns if (name != NULL) OPENSSL_free(name); if (type==SOCK_STREAM) SHUTDOWN2(sock); - if (i < 0) + if (naccept != -1) + naccept--; + if (i < 0 || naccept == 0) { SHUTDOWN2(accept_socket); return(i);