From e3435673b8ed862266b5351b9e18cb55ed55d335 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Carlos=20Mart=C3=ADn=20Nieto?= Date: Mon, 18 May 2015 15:51:55 +0200 Subject: ssh: read from stderr if stdout is empty When we fail to read from stdout, it's typically because the URL was wrong and the server process has sent some output over its stderr output. Read that output and set the error message to whatever we read from it. --- src/transports/ssh.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/transports/ssh.c b/src/transports/ssh.c index c5b081151..0d179e715 100644 --- a/src/transports/ssh.c +++ b/src/transports/ssh.c @@ -125,10 +125,17 @@ static int ssh_stream_read( return -1; if ((rc = libssh2_channel_read(s->channel, buffer, buf_size)) < LIBSSH2_ERROR_NONE) { - ssh_error(s->session, "SSH could not read data");; + ssh_error(s->session, "SSH could not read data"); return -1; } + /* Having something in stderr is typically a not-found error */ + if (rc == 0 && (rc = libssh2_channel_read_stderr(s->channel, buffer, buf_size)) > 0) { + giterr_set(GITERR_SSH, "%*s", rc, buffer); + return -1; + } + + *bytes_read = rc; return 0; -- cgit v1.2.1