Hi all,

we are close to bumping X2Go Client to a new release series (4.0.2.x).

This new release branch will require two patches for libssh 0.5.x that distro maintainers should bring into their distributions before packaging the soon-to-appear release series 4.0.2.x of X2Go Client.

For further reading, please look at the bug I have just filed against libssh 0.5.4-1 in Debian.

Attached to this mail, you will find the two required patches in normal diff format.

Furthermore, X2Go Client currently does not work with libssh 0.6.0.

We will try making X2Go Client build and run with 0.6.x releases soon. Our goal is that the 4.0.2.x release series will work with 0.6.1 and later versions.

light+love,
Mike
--

DAS-NETZWERKTEAM
mike gabriel, herweg 7, 24357 fleckeby
fon: +49 (1520) 1976 148

GnuPG Key ID 0x25771B31
mail: mike.gabr...@das-netzwerkteam.de, http://das-netzwerkteam.de

freeBusy:
https://mail.das-netzwerkteam.de/freebusy/m.gabriel%40das-netzwerkteam.de.xfb
Description: Allow requesting more than one channel per session.
Author: Andreas Schneider <a...@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:
Description: Allow requesting multiple reverse port forwarding tunnels per connection
Author: Oleksandr Shneyder <o.schney...@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);
 }
 
 /**

Attachment: pgp_bMKY8gTuG.pgp
Description: Digitale PGP-Signatur

_______________________________________________
X2Go-Dev mailing list
X2Go-Dev@lists.berlios.de
https://lists.berlios.de/mailman/listinfo/x2go-dev

Reply via email to