]> git.ipfire.org Git - thirdparty/haproxy.git/commitdiff
MINOR: ssl: Enable error fetches in case of handshake error
authorRemi Tricot-Le Breton <rlebreton@haproxy.com>
Thu, 29 Jul 2021 07:45:50 +0000 (09:45 +0200)
committerWilliam Lallemand <wlallemand@haproxy.org>
Thu, 29 Jul 2021 13:40:45 +0000 (15:40 +0200)
The ssl_c_err, ssl_c_ca_err and ssl_c_ca_err_depth sample fetches values
were not recoverable when the connection failed because of the test
"conn->flags & CO_FL_WAIT_XPRT" (which required the connection to be
established). They could then not be used in a log-format since whenever
they would have sent a non-null value, the value fetching was disabled.
This patch ensures that all these values can be fetched in case of
connection failure.

src/ssl_sample.c

index 5509e1f227abfdd7f571d4c6e3d4f3c6eba14bdf..d6315267f9476b271be1201c6144d56250c623f8 100644 (file)
@@ -1342,11 +1342,14 @@ smp_fetch_ssl_c_ca_err(const struct arg *args, struct sample *smp, const char *k
                return 0;
        ctx = conn->xprt_ctx;
 
-       if (conn->flags & CO_FL_WAIT_XPRT) {
+       if (conn->flags & CO_FL_WAIT_XPRT && !conn->err_code) {
                smp->flags = SMP_F_MAY_CHANGE;
                return 0;
        }
 
+       if (!ctx)
+               return 0;
+
        smp->data.type = SMP_T_SINT;
        smp->data.u.sint = (unsigned long long int)SSL_SOCK_ST_TO_CA_ERROR(ctx->xprt_st);
        smp->flags = SMP_F_VOL_SESS;
@@ -1365,12 +1368,15 @@ smp_fetch_ssl_c_ca_err_depth(const struct arg *args, struct sample *smp, const c
        if (!conn || conn->xprt != &ssl_sock)
                return 0;
 
-       if (conn->flags & CO_FL_WAIT_XPRT) {
+       if (conn->flags & CO_FL_WAIT_XPRT && !conn->err_code) {
                smp->flags = SMP_F_MAY_CHANGE;
                return 0;
        }
        ctx = conn->xprt_ctx;
 
+       if (!ctx)
+               return 0;
+
        smp->data.type = SMP_T_SINT;
        smp->data.u.sint = (long long int)SSL_SOCK_ST_TO_CAEDEPTH(ctx->xprt_st);
        smp->flags = SMP_F_VOL_SESS;
@@ -1389,13 +1395,16 @@ smp_fetch_ssl_c_err(const struct arg *args, struct sample *smp, const char *kw,
        if (!conn || conn->xprt != &ssl_sock)
                return 0;
 
-       if (conn->flags & CO_FL_WAIT_XPRT) {
+       if (conn->flags & CO_FL_WAIT_XPRT && !conn->err_code) {
                smp->flags = SMP_F_MAY_CHANGE;
                return 0;
        }
 
        ctx = conn->xprt_ctx;
 
+       if (!ctx)
+               return 0;
+
        smp->data.type = SMP_T_SINT;
        smp->data.u.sint = (long long int)SSL_SOCK_ST_TO_CRTERROR(ctx->xprt_st);
        smp->flags = SMP_F_VOL_SESS;