This builds fine and works good.
ok inoguchi@

I have one comment additionally what jmc@ mentioned.

On Sun, Aug 29, 2021 at 01:10:56PM +0100, Jason McIntyre wrote:
> On Sun, Aug 29, 2021 at 02:00:44PM +0200, Theo Buehler wrote:
> > Terminate the s_server after n clients connected to it. This is
> > occasionally useful, matches OpenSSL's behavior and should help
> > simplifying regress/usr.bin/openssl/x509.
> > 
> 
> hi.
> 
> > Index: openssl.1
> > ===================================================================
> > RCS file: /cvs/src/usr.bin/openssl/openssl.1,v
> > retrieving revision 1.129
> > diff -u -p -r1.129 openssl.1
> > --- openssl.1       17 Mar 2021 18:08:32 -0000      1.129
> > +++ openssl.1       28 Aug 2021 17:12:59 -0000
> > @@ -4607,6 +4607,7 @@ will be used.
> >  .Op Fl keymatexportlen Ar len
> >  .Op Fl msg
> >  .Op Fl mtu Ar mtu
> > +.Op Fl naccept Ar arg
> 
> i guess "arg" should be "num".
> also i think it needs to be added to sv_usage in s_server.c.
> 
> otherwise doc parts ok.
> 
> jmc
> 
> >  .Op Fl named_curve Ar arg
> >  .Op Fl nbio
> >  .Op Fl nbio_test
> > @@ -4807,6 +4808,10 @@ Export len bytes of keying material (def
> >  Show all protocol messages with hex dump.
> >  .It Fl mtu Ar mtu
> >  Set the link layer MTU.
> > +.It Fl naccept Ar num
> > +Terminate server after
> > +.Ar num
> > +connections.
> >  .It Fl named_curve Ar arg
> >  Specify the elliptic curve name to use for ephemeral ECDH keys.
> >  This option is deprecated; use
> > Index: s_apps.h
> > ===================================================================
> > RCS file: /cvs/src/usr.bin/openssl/s_apps.h,v
> > retrieving revision 1.5
> > diff -u -p -r1.5 s_apps.h
> > --- s_apps.h        25 Apr 2018 07:12:33 -0000      1.5
> > +++ s_apps.h        28 Aug 2021 17:12:59 -0000
> > @@ -120,7 +120,7 @@ extern int verify_return_error;
> >  
> >  int do_server(int port, int type, int *ret,
> >      int (*cb)(char *hostname, int s, unsigned char *context),
> > -    unsigned char *context);
> > +    unsigned char *context, int naccept);
> >  #ifdef HEADER_X509_H
> >  int verify_callback(int ok, X509_STORE_CTX *ctx);
> >  #endif
> > Index: s_server.c
> > ===================================================================
> > RCS file: /cvs/src/usr.bin/openssl/s_server.c,v
> > retrieving revision 1.47
> > diff -u -p -r1.47 s_server.c
> > --- s_server.c      17 Mar 2021 18:11:01 -0000      1.47
> > +++ s_server.c      28 Aug 2021 17:17:38 -0000
> > @@ -267,6 +267,7 @@ static struct {
> >     uint16_t min_version;
> >     const SSL_METHOD *meth;
> >     int msg;
> > +   int naccept;
> >     char *named_curve;
> >     int nbio;
> >     int nbio_test;
> > @@ -741,6 +742,13 @@ static const struct option s_server_opti
> >     },
> >  #endif
> >     {
> > +           .name = "naccept",
> > +           .argname = "num",
> > +           .desc = "terminate after num connections",

Other .desc begins with capital letter, so "Terminate" would be better.
 
> > +           .type = OPTION_ARG_INT,
> > +           .opt.value = &s_server_config.naccept
> > +   },
> > +   {
> >             .name = "named_curve",
> >             .argname = "arg",
> >             .type = OPTION_ARG,
> > @@ -1084,6 +1092,7 @@ s_server_main(int argc, char *argv[])
> >     memset(&s_server_config, 0, sizeof(s_server_config));
> >     s_server_config.keymatexportlen = 20;
> >     s_server_config.meth = TLS_server_method();
> > +   s_server_config.naccept = -1;
> >     s_server_config.port = PORT;
> >     s_server_config.cert_file = TEST_CERT;
> >     s_server_config.cert_file2 = TEST_CERT2;
> > @@ -1465,10 +1474,12 @@ s_server_main(int argc, char *argv[])
> >     (void) BIO_flush(bio_s_out);
> >     if (s_server_config.www)
> >             do_server(s_server_config.port, s_server_config.socket_type,
> > -               &accept_socket, www_body, s_server_config.context);
> > +               &accept_socket, www_body, s_server_config.context,
> > +               s_server_config.naccept);
> >     else
> >             do_server(s_server_config.port, s_server_config.socket_type,
> > -               &accept_socket, sv_body, s_server_config.context);
> > +               &accept_socket, sv_body, s_server_config.context,
> > +               s_server_config.naccept);
> >     print_stats(bio_s_out, ctx);
> >     ret = 0;
> >   end:
> > Index: s_socket.c
> > ===================================================================
> > RCS file: /cvs/src/usr.bin/openssl/s_socket.c,v
> > retrieving revision 1.11
> > diff -u -p -r1.11 s_socket.c
> > --- s_socket.c      28 Jun 2019 13:35:02 -0000      1.11
> > +++ s_socket.c      28 Aug 2021 17:12:59 -0000
> > @@ -132,7 +132,7 @@ init_client(int *sock, char *host, char 
> >  int
> >  do_server(int port, int type, int *ret,
> >      int (*cb) (char *hostname, int s, unsigned char *context),
> > -    unsigned char *context)
> > +    unsigned char *context, int naccept)
> >  {
> >     int sock;
> >     char *name = NULL;
> > @@ -161,7 +161,9 @@ do_server(int port, int type, int *ret,
> >                     shutdown(sock, SHUT_RDWR);
> >                     close(sock);
> >             }
> > -           if (i < 0) {
> > +           if (naccept != -1)
> > +                   naccept--;
> > +           if (i < 0 || naccept == 0) {
> >                     shutdown(accept_socket, SHUT_RDWR);
> >                     close(accept_socket);
> >                     return (i);
> > 
> 

Reply via email to