From f68b40c0af9c7c5c2c8740fe4a8fbcba367e0087 Mon Sep 17 00:00:00 2001 From: Francois-Xavier Coudert Date: Fri, 24 Feb 2023 11:05:31 +0100 Subject: Pass hostkey & port to host verify callback Co-authored-by: Stefan Karpinski --- src/libgit2/transports/ssh.c | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/src/libgit2/transports/ssh.c b/src/libgit2/transports/ssh.c index 5500ea100..d7594aa12 100644 --- a/src/libgit2/transports/ssh.c +++ b/src/libgit2/transports/ssh.c @@ -651,6 +651,8 @@ static int check_against_known_hosts( return ret; } +#define SSH_DEFAULT_PORT 22 + /* * Perform the check for the session's certificate against known hosts if * possible and then ask the user if they have a callback. @@ -748,9 +750,16 @@ static int check_certificate( if (check_cb != NULL) { git_cert_hostkey *cert_ptr = &cert; git_error_state previous_error = {0}; + const char *host_ptr = host; + git_str host_and_port = GIT_STR_INIT; + + if (port != SSH_DEFAULT_PORT) { + git_str_printf(&host_and_port, "%s:%d", host, port); + host_ptr = host_and_port.ptr; + } git_error_state_capture(&previous_error, error); - error = check_cb((git_cert *) cert_ptr, cert_valid, host, check_cb_payload); + error = check_cb((git_cert *) cert_ptr, cert_valid, host_ptr, check_cb_payload); if (error == GIT_PASSTHROUGH) { error = git_error_state_restore(&previous_error); } else if (error < 0 && !git_error_last()) { @@ -758,13 +767,12 @@ static int check_certificate( } git_error_state_free(&previous_error); + git_str_dispose(&host_and_port); } return error; } -#define SSH_DEFAULT_PORT "22" - static int _git_ssh_setup_conn( ssh_subtransport *t, const char *url, -- cgit v1.2.1