BUG/MEDIUM: ssl/cli: abort ssl cert is freeing the old store
authorWilliam Lallemand <wlallemand@haproxy.org>
Mon, 1 Feb 2021 14:31:00 +0000 (15:31 +0100)
committerWilly Tarreau <w@1wt.eu>
Thu, 4 Feb 2021 16:32:44 +0000 (17:32 +0100)
The "abort ssl cert" command is buggy and removes the current ckch store,
and instances, leading to SNI removal. It must only removes the new one.

This patch also adds a check in set_ssl_cert.vtc and
set_ssl_server_cert.vtc.

Must be backported as far as 2.2.

(cherry picked from commit 8695ce0bae21238eba660438c819797a245be71e)
[wt: dropped reg-tests/ssl/set_ssl_server_cert.vtc]
Signed-off-by: Willy Tarreau <w@1wt.eu>

reg-tests/ssl/set_ssl_cert.vtc
src/ssl_ckch.c

index 0e84058..d6d4526 100644 (file)
@@ -86,3 +86,14 @@ client c1 -connect ${h1_clearlst_sock} {
     rxresp
     expect resp.status == 200
 } -run
+
+shell {
+    printf "set ssl cert ${testdir}/common.pem <<\n$(cat ${testdir}/common.pem)\n\n" | socat "${tmpdir}/h1/stats" -
+    echo "abort ssl cert ${testdir}/common.pem" | socat "${tmpdir}/h1/stats" -
+}
+
+haproxy h1 -cli {
+    send "show ssl cert ${testdir}/common.pem"
+    expect ~ ".*SHA1 FingerPrint: A490D069DBAFBEE66DE434BEC34030ADE8BCCBF1"
+}
+
index 1d7f409..c8a2835 100644 (file)
@@ -1707,7 +1707,6 @@ static int cli_parse_abort_cert(char **args, char *payload, struct appctx *appct
        /* Only free the ckchs there, because the SNI and instances were not generated yet */
        ckch_store_free(ckchs_transaction.new_ckchs);
        ckchs_transaction.new_ckchs = NULL;
-       ckch_store_free(ckchs_transaction.old_ckchs);
        ckchs_transaction.old_ckchs = NULL;
        free(ckchs_transaction.path);
        ckchs_transaction.path = NULL;