summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCarlos Martín Nieto <cmn@dwim.me>2014-09-04 16:46:14 +0200
committerCarlos Martín Nieto <cmn@dwim.me>2014-09-04 16:46:14 +0200
commit2dc399a81da0baec54da80ed90a0007fb8caed81 (patch)
tree4f98739622caa0d8fd64125c093141b9ff30e4ed
parent89e05e2ab19ac452e84e0eaa2dfb8e07ac6839bf (diff)
downloadlibgit2-cmn/ssh-errors.tar.gz
ssh: store error message immediately after a failed agent callcmn/ssh-errors
When the call to the agent fails, we must retrieve the error message just after the function call, as other calls may overwrite it. As the agent authentication is the only one which has a teardown and there does not seem to be a way to get the error message from a stored error number, this tries to introduce some small changes to store the error from the agent. Clearing the error at the beginning of the loop lets us know whether the agent has already set the libgit2 error message and we should skip it, or if we should set it.
-rw-r--r--src/transports/ssh.c8
1 files changed, 7 insertions, 1 deletions
diff --git a/src/transports/ssh.c b/src/transports/ssh.c
index fff81661a..a57d27d31 100644
--- a/src/transports/ssh.c
+++ b/src/transports/ssh.c
@@ -292,6 +292,10 @@ static int ssh_agent_auth(LIBSSH2_SESSION *session, git_cred_ssh_key *c) {
}
shutdown:
+
+ if (rc != LIBSSH2_ERROR_NONE)
+ ssh_error(session, "error authenticating");
+
libssh2_agent_disconnect(agent);
libssh2_agent_free(agent);
@@ -305,6 +309,7 @@ static int _git_ssh_authenticate_session(
int rc;
do {
+ giterr_clear();
switch (cred->credtype) {
case GIT_CREDTYPE_USERPASS_PLAINTEXT: {
git_cred_userpass_plaintext *c = (git_cred_userpass_plaintext *)cred;
@@ -361,7 +366,8 @@ static int _git_ssh_authenticate_session(
return GIT_EAUTH;
if (rc != LIBSSH2_ERROR_NONE) {
- ssh_error(session, "Failed to authenticate SSH session");
+ if (!giterr_last())
+ ssh_error(session, "Failed to authenticate SSH session");
return -1;
}