On Tuesday 31 March 2015, Tim van der Molen wrote:
> httpd/server.c contains the following:
>
>       ret = tls_accept_socket(srv->srv_tls_ctx, &clt->clt_tls_ctx,
>           clt->clt_s);
>       [...]
>       } else if (ret != 0) {
>               log_warnx("%s: TLS accept failed - %s", __func__,
>                   tls_error(srv->srv_tls_ctx));
>               return;
>
> Here the return value of tls_error(srv->srv_tls_ctx) may be incorrect if
> tls_accept_socket() sets the error message in clt->clt_tls_ctx.
>
> For instance, in my case, the above code snippet produces the following
> log entries:
>
> Mar 29 22:53:22 alpha httpd[6684]: server_accept_tls: TLS accept failed -
> (null)

Thanks for flagging this - the real issue is that the error was being assigned 
to the connection context, rather than the server context. I've just 
submitted a diff that changes this behaviour. This means we now get actual 
errors:

server_accept_tls: TLS accept failed - accept failed: error:1407609C:SSL 
routines:SSL23_GET_CLIENT_HELLO:http request

> Perhaps the following diff would be a good way to fix this.
>
> Index: tls_server.c
> ===================================================================
> RCS file: /cvs/src/lib/libtls/tls_server.c,v
> retrieving revision 1.5
> diff -p -U5 -r1.5 tls_server.c
> --- tls_server.c      7 Feb 2015 09:50:09 -0000       1.5
> +++ tls_server.c      30 Mar 2015 17:28:33 -0000
> @@ -133,10 +133,11 @@ tls_accept_socket(struct tls *ctx, struc
>       if ((ret = SSL_accept(conn_ctx->ssl_conn)) != 1) {
>               err = tls_ssl_error(conn_ctx, ret, "accept");
>               if (err == TLS_READ_AGAIN || err == TLS_WRITE_AGAIN) {
>                       return (err);
>               }
> +             tls_set_error(ctx, "%s", tls_error(conn_ctx));
>               goto err;
>       }
>
>       return (0);



-- 

    "Action without study is fatal. Study without action is futile."
        -- Mary Ritter Beard

Reply via email to