- New upstream release 1.4.1 - Build error with gcrypt backend - Always do "forced" window updates to avoid corner case stalls - aes: the init function fails when OpenSSL has AES support - transport_send: finish in-progress key exchange before sending data - channel_write: acknowledge transport errors - examples/x11.c: make sure sizeof passed to read operation is correct - examples/x11.c: fix suspicious sizeof usage - sftp_packet_add: verify the packet before accepting it - SFTP: preserve the original error code more - sftp_packet_read: adjust window size as necessary - Use safer snprintf rather then sprintf in several places - Define and use LIBSSH2_INVALID_SOCKET instead of INVALID_SOCKET - sftp_write: cannot return acked data *and* EAGAIN - sftp_read: avoid data *and* EAGAIN - libssh2.h: add missing prototype for libssh2_session_banner_set() - Drop upstream patches now included in release tarballepel9
parent
8e8214ab77
commit
e3d0f1a309
@ -1,28 +0,0 @@
|
||||
From b3ade9a63e881e69b4c9cfe7b5dbad78dcc4a0e0 Mon Sep 17 00:00:00 2001
|
||||
From: Peter Stuge <peter@stuge.se>
|
||||
Date: Wed, 1 Feb 2012 09:53:44 +0100
|
||||
Subject: [PATCH] Fix undefined reference to _libssh_error in libgcrypt
|
||||
backend
|
||||
|
||||
Commit 209de22299b4b58e582891dfba70f57e1e0492db introduced a function
|
||||
call to a non-existing function, and since then the libgcrypt backend
|
||||
has not been buildable.
|
||||
---
|
||||
src/libgcrypt.c | 2 +-
|
||||
1 files changed, 1 insertions(+), 1 deletions(-)
|
||||
|
||||
diff --git a/src/libgcrypt.c b/src/libgcrypt.c
|
||||
index 1bda5ee..5c2787b 100644
|
||||
--- a/src/libgcrypt.c
|
||||
+++ b/src/libgcrypt.c
|
||||
@@ -581,7 +581,7 @@ _libssh2_pub_priv_keyfile(LIBSSH2_SESSION *session,
|
||||
const char *privatekey,
|
||||
const char *passphrase)
|
||||
{
|
||||
- return _libssh_error(session, LIBSSH2_ERROR_FILE,
|
||||
+ return _libssh2_error(session, LIBSSH2_ERROR_FILE,
|
||||
"Unable to extract public key from private key file: "
|
||||
"Method unimplemented in libgcrypt backend");
|
||||
}
|
||||
--
|
||||
1.7.6.1
|
@ -1,58 +0,0 @@
|
||||
commit cc4f9d5679278ce41cd5480fab3f5e71dba163ed
|
||||
Author: Matthew Booth <mbooth@redhat.com>
|
||||
Date: Fri Mar 16 16:29:00 2012 +0100
|
||||
|
||||
transport_send: Finish in-progress key exchange before sending data
|
||||
|
||||
_libssh2_channel_write() first reads outstanding packets before writing
|
||||
new data. If it reads a key exchange request, it will immediately start
|
||||
key re-exchange, which will require sending a response. If the output
|
||||
socket is full, this will result in a return from
|
||||
_libssh2_transport_read() of LIBSSH2_ERROR_EAGAIN. In order not to block
|
||||
a write because there is no data to read, this error is explicitly
|
||||
ignored and the code continues marshalling a packet for sending. When it
|
||||
is sent, the remote end immediately drops the connection because it was
|
||||
expecting a continuation of the key exchange, but got a data packet.
|
||||
|
||||
This change adds the same check for key exchange to
|
||||
_libssh2_transport_send() that is in _libssh2_transport_read(). This
|
||||
ensures that key exchange is completed before any data packet is sent.
|
||||
|
||||
diff --git a/src/transport.c b/src/transport.c
|
||||
index 057dcf5..95b9a3a 100644
|
||||
--- a/src/transport.c
|
||||
+++ b/src/transport.c
|
||||
@@ -296,7 +296,7 @@ int _libssh2_transport_read(LIBSSH2_SESSION * session)
|
||||
* is done!
|
||||
*/
|
||||
_libssh2_debug(session, LIBSSH2_TRACE_TRANS, "Redirecting into the"
|
||||
- " key re-exchange");
|
||||
+ " key re-exchange from _libssh2_transport_read");
|
||||
rc = _libssh2_kex_exchange(session, 1, &session->startup_key_state);
|
||||
if (rc)
|
||||
return rc;
|
||||
@@ -687,6 +687,24 @@ int _libssh2_transport_send(LIBSSH2_SESSION *session,
|
||||
const unsigned char *orgdata = data;
|
||||
size_t orgdata_len = data_len;
|
||||
|
||||
+ /*
|
||||
+ * If the last read operation was interrupted in the middle of a key
|
||||
+ * exchange, we must complete that key exchange before continuing to write
|
||||
+ * further data.
|
||||
+ *
|
||||
+ * See the similar block in _libssh2_transport_read for more details.
|
||||
+ */
|
||||
+ if (session->state & LIBSSH2_STATE_EXCHANGING_KEYS &&
|
||||
+ !(session->state & LIBSSH2_STATE_KEX_ACTIVE)) {
|
||||
+ /* Don't write any new packets if we're still in the middle of a key
|
||||
+ * exchange. */
|
||||
+ _libssh2_debug(session, LIBSSH2_TRACE_TRANS, "Redirecting into the"
|
||||
+ " key re-exchange from _libssh2_transport_send");
|
||||
+ rc = _libssh2_kex_exchange(session, 1, &session->startup_key_state);
|
||||
+ if (rc)
|
||||
+ return rc;
|
||||
+ }
|
||||
+
|
||||
debugdump(session, "libssh2_transport_write plain", data, data_len);
|
||||
if(data2)
|
||||
debugdump(session, "libssh2_transport_write plain2", data2, data2_len);
|
@ -1,60 +0,0 @@
|
||||
From f4f2298ef3635acd031cc2ee0e71026cdcda5864 Mon Sep 17 00:00:00 2001
|
||||
From: Paul Howarth <paul@city-fan.org>
|
||||
Date: Sun, 18 Mar 2012 12:07:27 +0000
|
||||
Subject: [PATCH] aes: the init function fails when OpenSSL has AES support
|
||||
|
||||
The internal init function only worked fine when the configure script
|
||||
didn't detect the OpenSSL AES_CTR function!
|
||||
|
||||
Bug: http://www.libssh2.org/mail/libssh2-devel-archive-2012-03/0111.shtml
|
||||
Reported by: Paul Howarth
|
||||
---
|
||||
src/openssl.c | 4 +++-
|
||||
src/openssl.h | 6 ------
|
||||
2 files changed, 3 insertions(+), 7 deletions(-)
|
||||
|
||||
diff --git a/src/openssl.c b/src/openssl.c
|
||||
index 40818c0..481982c 100644
|
||||
--- a/src/openssl.c
|
||||
+++ b/src/openssl.c
|
||||
@@ -201,7 +201,7 @@ _libssh2_cipher_crypt(_libssh2_cipher_ctx * ctx,
|
||||
return ret == 1 ? 0 : 1;
|
||||
}
|
||||
|
||||
-#if LIBSSH2_AES_CTR && !defined(HAVE_EVP_AES_128_CTR)
|
||||
+#if LIBSSH2_AES_CTR
|
||||
|
||||
#include <openssl/aes.h>
|
||||
#include <openssl/evp.h>
|
||||
@@ -358,6 +358,8 @@ void _libssh2_init_aes_ctr(void)
|
||||
_libssh2_EVP_aes_256_ctr();
|
||||
}
|
||||
|
||||
+#else
|
||||
+void _libssh2_init_aes_ctr(void) {}
|
||||
#endif /* LIBSSH2_AES_CTR */
|
||||
|
||||
/* TODO: Optionally call a passphrase callback specified by the
|
||||
diff --git a/src/openssl.h b/src/openssl.h
|
||||
index a196184..6d2aeed 100644
|
||||
--- a/src/openssl.h
|
||||
+++ b/src/openssl.h
|
||||
@@ -148,15 +148,9 @@ void libssh2_md5(const unsigned char *message, unsigned long len, unsigned char
|
||||
#define _libssh2_cipher_aes256 EVP_aes_256_cbc
|
||||
#define _libssh2_cipher_aes192 EVP_aes_192_cbc
|
||||
#define _libssh2_cipher_aes128 EVP_aes_128_cbc
|
||||
-#ifdef HAVE_EVP_AES_128_CTR
|
||||
-#define _libssh2_cipher_aes128ctr EVP_aes_128_ctr
|
||||
-#define _libssh2_cipher_aes192ctr EVP_aes_192_ctr
|
||||
-#define _libssh2_cipher_aes256ctr EVP_aes_256_ctr
|
||||
-#else
|
||||
#define _libssh2_cipher_aes128ctr _libssh2_EVP_aes_128_ctr
|
||||
#define _libssh2_cipher_aes192ctr _libssh2_EVP_aes_192_ctr
|
||||
#define _libssh2_cipher_aes256ctr _libssh2_EVP_aes_256_ctr
|
||||
-#endif
|
||||
#define _libssh2_cipher_blowfish EVP_bf_cbc
|
||||
#define _libssh2_cipher_arcfour EVP_rc4
|
||||
#define _libssh2_cipher_cast5 EVP_cast5_cbc
|
||||
--
|
||||
1.7.7.6
|
||||
|
@ -1,34 +0,0 @@
|
||||
From fed075972080ed705bd79b731c40cf5e73085aeb Mon Sep 17 00:00:00 2001
|
||||
From: Daniel Stenberg <daniel@haxx.se>
|
||||
Date: Thu, 15 Mar 2012 13:03:08 +0100
|
||||
Subject: [PATCH] channel_write: acknowledge transport errors
|
||||
|
||||
When draining data off the socket with _libssh2_transport_read() (which
|
||||
in turn has to be done so that we can be sure to have read any possible
|
||||
window-increasing packets), this code previously ignored errors which
|
||||
could lead to nasty loops. Now all error codes except EAGAIN will cause
|
||||
the error to be returned at once.
|
||||
|
||||
Bug: http://www.libssh2.org/mail/libssh2-devel-archive-2012-03/0068.shtml
|
||||
Reported by: Matthew Booth
|
||||
---
|
||||
src/channel.c | 3 +++
|
||||
1 files changed, 3 insertions(+), 0 deletions(-)
|
||||
|
||||
diff --git a/src/channel.c b/src/channel.c
|
||||
index 8d6fb0a..9e29492 100644
|
||||
--- a/src/channel.c
|
||||
+++ b/src/channel.c
|
||||
@@ -2008,6 +2008,9 @@ _libssh2_channel_write(LIBSSH2_CHANNEL *channel, int stream_id,
|
||||
rc = _libssh2_transport_read(session);
|
||||
while (rc > 0);
|
||||
|
||||
+ if((rc < 0) && (rc != LIBSSH2_ERROR_EAGAIN))
|
||||
+ return rc;
|
||||
+
|
||||
if(channel->local.window_size <= 0)
|
||||
/* there's no room for data so we stop */
|
||||
return (rc==LIBSSH2_ERROR_EAGAIN?rc:0);
|
||||
--
|
||||
1.7.1
|
||||
|
Loading…
Reference in new issue