summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFrancois-Xavier Coudert <fxcoudert@gmail.com>2023-02-24 11:05:31 +0100
committerEdward Thomson <ethomson@edwardthomson.com>2023-02-24 21:11:58 +0000
commitf68b40c0af9c7c5c2c8740fe4a8fbcba367e0087 (patch)
tree12d93877478ee0d34c0ba4b73ef0261d921266b0
parentc2bdef6f3a16ca5c4ea32444b28772046da881a5 (diff)
downloadlibgit2-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.c14
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,