diff options
author | Francois-Xavier Coudert <fxcoudert@gmail.com> | 2023-02-24 11:05:31 +0100 |
---|---|---|
committer | Edward Thomson <ethomson@edwardthomson.com> | 2023-02-24 21:11:58 +0000 |
commit | f68b40c0af9c7c5c2c8740fe4a8fbcba367e0087 (patch) | |
tree | 12d93877478ee0d34c0ba4b73ef0261d921266b0 | |
parent | c2bdef6f3a16ca5c4ea32444b28772046da881a5 (diff) | |
download | libgit2-f68b40c0af9c7c5c2c8740fe4a8fbcba367e0087.tar.gz |
Pass hostkey & port to host verify callback
Co-authored-by: Stefan Karpinski <stefan@karpinski.org>
-rw-r--r-- | src/libgit2/transports/ssh.c | 14 |
1 files 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, |