diff options
author | Nicolás Reynolds <fauno@endefensadelsl.org> | 2014-01-23 03:40:09 +0000 |
---|---|---|
committer | Nicolás Reynolds <fauno@endefensadelsl.org> | 2014-01-23 03:40:09 +0000 |
commit | 1a04b89cbb8e27e4622005c896745498af51ef45 (patch) | |
tree | 5991cef855e2a5ae07d66cccd5b47ba681007483 /extra/libssh | |
parent | c9e4976968b0f847cc693453df1e947531af2e76 (diff) |
Thu Jan 23 03:35:13 UTC 2014
Diffstat (limited to 'extra/libssh')
-rw-r--r-- | extra/libssh/0004-reset-global-request-status.patch | 18 | ||||
-rw-r--r-- | extra/libssh/0005-multi-reverse-fwd.patch | 85 | ||||
-rw-r--r-- | extra/libssh/PKGBUILD | 25 |
3 files changed, 121 insertions, 7 deletions
diff --git a/extra/libssh/0004-reset-global-request-status.patch b/extra/libssh/0004-reset-global-request-status.patch new file mode 100644 index 000000000..760f3497a --- /dev/null +++ b/extra/libssh/0004-reset-global-request-status.patch @@ -0,0 +1,18 @@ +Description: Allow requesting more than one channel per session. +Author: Andreas Schneider <asn@cryptomilk.org> +Abstract: + In the 0.5.x series of libssh only one channel request per session + is possible. This blocks using libssh client sessions which require + requesting multiple channels on a single SSH connection. +Origin: http://git.libssh.org/projects/libssh.git/commit/src/channels.c?id=e30acdb58a86937e8bece57ce47e272f1106ca55 +--- a/src/channels.c ++++ b/src/channels.c +@@ -1951,7 +1951,7 @@ + break; + + } +- ++ session->global_req_state = SSH_CHANNEL_REQ_STATE_NONE; + leave_function(); + return rc; + error: diff --git a/extra/libssh/0005-multi-reverse-fwd.patch b/extra/libssh/0005-multi-reverse-fwd.patch new file mode 100644 index 000000000..0771e8c4d --- /dev/null +++ b/extra/libssh/0005-multi-reverse-fwd.patch @@ -0,0 +1,85 @@ +Description: Allow requesting multiple reverse port forwarding tunnels per connection +Author: Oleksandr Shneyder <o.schneyder@phoca-gmbh.de> +Abstract: + Channel: Add ssh_channel_accept_forward(). + . + This new function works the same way as ssh_forward_accept() + but can return a destination port of the channel (useful if + SSH connection is supposed to reverse forward multiple TCP/IP + ports). +Origin: http://git.libssh.org/projects/libssh.git/commit/?id=a1c4fc07d43fb7a7e1e91bfdadbd3dc62b8ce462 +--- a/include/libssh/libssh.h ++++ b/include/libssh/libssh.h +@@ -371,6 +371,7 @@ + LIBSSH_API char *ssh_dirname (const char *path); + LIBSSH_API int ssh_finalize(void); + LIBSSH_API ssh_channel ssh_forward_accept(ssh_session session, int timeout_ms); ++LIBSSH_API ssh_channel ssh_channel_accept_forward(ssh_session session, int timeout_ms, int *destination_port); + LIBSSH_API int ssh_forward_cancel(ssh_session session, const char *address, int port); + LIBSSH_API int ssh_forward_listen(ssh_session session, const char *address, int port, int *bound_port); + LIBSSH_API void ssh_free(ssh_session session); +--- a/src/channels.c ++++ b/src/channels.c +@@ -1755,7 +1755,7 @@ + } + + static ssh_channel ssh_channel_accept(ssh_session session, int channeltype, +- int timeout_ms) { ++ int timeout_ms, int *destination_port) { + #ifndef _WIN32 + static const struct timespec ts = { + .tv_sec = 0, +@@ -1779,6 +1779,10 @@ + ssh_message_subtype(msg) == channeltype) { + ssh_list_remove(session->ssh_message_list, iterator); + channel = ssh_message_channel_request_open_reply_accept(msg); ++ if(destination_port) { ++ *destination_port=msg->channel_request_open.destination_port; ++ } ++ + ssh_message_free(msg); + return channel; + } +@@ -1809,7 +1813,7 @@ + * the server. + */ + ssh_channel ssh_channel_accept_x11(ssh_channel channel, int timeout_ms) { +- return ssh_channel_accept(channel->session, SSH_CHANNEL_X11, timeout_ms); ++ return ssh_channel_accept(channel->session, SSH_CHANNEL_X11, timeout_ms, NULL); + } + + /** +@@ -1857,7 +1861,7 @@ + } else { + session->global_req_state=SSH_CHANNEL_REQ_STATE_DENIED; + } +- ++ session->global_req_state = SSH_CHANNEL_REQ_STATE_NONE; + leave_function(); + return SSH_PACKET_USED; + +@@ -2027,7 +2031,23 @@ + * the server + */ + ssh_channel ssh_forward_accept(ssh_session session, int timeout_ms) { +- return ssh_channel_accept(session, SSH_CHANNEL_FORWARDED_TCPIP, timeout_ms); ++ return ssh_channel_accept(session, SSH_CHANNEL_FORWARDED_TCPIP, timeout_ms, NULL); ++} ++ ++/** ++ * @brief Accept an incoming TCP/IP forwarding channel and get information ++ * about incomming connection ++ * @param[in] session The ssh session to use. ++ * ++ * @param[in] timeout_ms A timeout in milliseconds. ++ * ++ * @param[in] destination_port A pointer to destination port or NULL. ++ * ++ * @return Newly created channel, or NULL if no incoming channel request from ++ * the server ++ */ ++ssh_channel ssh_channel_accept_forward(ssh_session session, int timeout_ms, int* destination_port) { ++ return ssh_channel_accept(session, SSH_CHANNEL_FORWARDED_TCPIP, timeout_ms, destination_port); + } + + /** diff --git a/extra/libssh/PKGBUILD b/extra/libssh/PKGBUILD index 16405b14d..936b6403d 100644 --- a/extra/libssh/PKGBUILD +++ b/extra/libssh/PKGBUILD @@ -1,4 +1,4 @@ -# $Id: PKGBUILD 195938 2013-10-05 20:32:06Z tomegun $ +# $Id: PKGBUILD 204549 2014-01-22 12:35:17Z andyrtr $ # Maintainer: Tom Gundersen <teg@jklm.no> # Contributor: Andrea Scarpino <andrea@archlinux.org> # Contributor: ice-man <icemanf@gmail.com> @@ -6,17 +6,29 @@ pkgname=libssh pkgver=0.5.5 -pkgrel=1 +pkgrel=2 pkgdesc="Library for accessing ssh client services through C libraries" url="http://www.libssh.org/" license=('LGPL') arch=('i686' 'x86_64') -depends=('openssl') +depends=('zlib' 'openssl') makedepends=('cmake' 'doxygen') -source=("https://red.libssh.org/attachments/download/51/${pkgname}-${pkgver}.tar.gz") +source=(https://red.libssh.org/attachments/download/51/${pkgname}-${pkgver}.tar.gz + 0004-reset-global-request-status.patch + 0005-multi-reverse-fwd.patch) +md5sums=('bb308196756c7255c0969583d917136b' + '0d8c28906b07e31466157b1fda441f4a' + '6fa3a1a4f448e85a7eb39360f4a72ce9') + +prepare() { + cd ${pkgname}-${pkgver} + # add multiple channels on a single SSH connection required by X2goclient + # see http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=736231 + patch -Np1 -i ${srcdir}/0004-reset-global-request-status.patch + patch -Np1 -i ${srcdir}/0005-multi-reverse-fwd.patch +} build() { - cd "${srcdir}" mkdir build cd build cmake ../${pkgname}-${pkgver} \ @@ -26,7 +38,6 @@ build() { } package(){ - cd "${srcdir}"/build + cd build make DESTDIR="${pkgdir}" install } -md5sums=('bb308196756c7255c0969583d917136b') |