summaryrefslogtreecommitdiff
path: root/patches
diff options
context:
space:
mode:
authorFlorian Schlichting <fsfs@debian.org>2015-10-15 23:14:48 +0200
committerFlorian Schlichting <fsfs@debian.org>2015-10-15 23:14:48 +0200
commit8bb31bb187d8567e2e810682a339c148b805577c (patch)
tree044dccd1c1a00674c57d96f5587f079253001777 /patches
parentf205c147abe36c1a3043cf68d9ff1bcfd6fcc534 (diff)
Imported Upstream version 0.66
Diffstat (limited to 'patches')
-rw-r--r--patches/openssh-fwd-stdio-to-streamlocal-1.patch167
1 files changed, 167 insertions, 0 deletions
diff --git a/patches/openssh-fwd-stdio-to-streamlocal-1.patch b/patches/openssh-fwd-stdio-to-streamlocal-1.patch
new file mode 100644
index 0000000..136380e
--- /dev/null
+++ b/patches/openssh-fwd-stdio-to-streamlocal-1.patch
@@ -0,0 +1,167 @@
+From 9e8d31d31f4f7a18244c6195fea87ecad4428833 Mon Sep 17 00:00:00 2001
+From: Salvador Fandino <sfandino@yahoo.com>
+Date: Tue, 23 Jun 2015 15:34:31 +0200
+Subject: [PATCH] Allow forwarding of stdio to streamlocal end points.
+
+Later versions of OpenSSH allow the user to forward connections also to/from Unix sockets.
+
+This patch allows to use Unix sockets as the target when forwarding the local stdio using the -W feature.
+---
+ channels.c | 15 ++++++++++-----
+ channels.h | 2 +-
+ mux.c | 6 +++---
+ ssh.c | 21 +++++++++++++--------
+ 4 files changed, 27 insertions(+), 17 deletions(-)
+
+diff --git a/channels.c b/channels.c
+index 45e1f9f..d4bf467 100644
+--- a/channels.c
++++ b/channels.c
+@@ -1269,25 +1269,30 @@ channel_decode_socks5(Channel *c, fd_set *readset, fd_set *writeset)
+ }
+
+ Channel *
+-channel_connect_stdio_fwd(const char *host_to_connect, u_short port_to_connect,
++channel_connect_stdio_fwd(const char *path_to_connect, u_int port_to_connect,
+ int in, int out)
+ {
+ Channel *c;
+
+- debug("channel_connect_stdio_fwd %s:%d", host_to_connect,
+- port_to_connect);
++ if (port_to_connect == (u_int)PORT_STREAMLOCAL)
++ debug("channel_connect_stdio_fwd stream local %s", path_to_connect);
++ else
++ debug("channel_connect_stdio_fwd %s:%d", path_to_connect,
++ port_to_connect);
+
+ c = channel_new("stdio-forward", SSH_CHANNEL_OPENING, in, out,
+ -1, CHAN_TCP_WINDOW_DEFAULT, CHAN_TCP_PACKET_DEFAULT,
+ 0, "stdio-forward", /*nonblock*/0);
+
+- c->path = xstrdup(host_to_connect);
++ c->path = xstrdup(path_to_connect);
+ c->host_port = port_to_connect;
+ c->listening_port = 0;
+ c->force_drain = 1;
+
+ channel_register_fds(c, in, out, -1, 0, 1, 0);
+- port_open_helper(c, "direct-tcpip");
++ port_open_helper(c, ((port_to_connect == (u_int)PORT_STREAMLOCAL)
++ ? "direct-streamlocal@openssh.com"
++ : "direct-tcpip"));
+
+ return c;
+ }
+diff --git a/channels.h b/channels.h
+index b9b4860..937e9b3 100644
+--- a/channels.h
++++ b/channels.h
+@@ -270,7 +270,7 @@ void channel_print_adm_permitted_opens(void);
+ int channel_input_port_forward_request(int, struct ForwardOptions *);
+ Channel *channel_connect_to_port(const char *, u_short, char *, char *);
+ Channel *channel_connect_to_path(const char *, char *, char *);
+-Channel *channel_connect_stdio_fwd(const char*, u_short, int, int);
++Channel *channel_connect_stdio_fwd(const char*, u_int, int, int);
+ Channel *channel_connect_by_listen_address(const char *, u_short,
+ char *, char *);
+ Channel *channel_connect_by_listen_path(const char *, char *, char *);
+diff --git a/mux.c b/mux.c
+index cdc01bd..dd448e9 100644
+--- a/mux.c
++++ b/mux.c
+@@ -88,7 +88,7 @@ extern char *host;
+ extern int subsystem_flag;
+ extern Buffer command;
+ extern volatile sig_atomic_t quit_pending;
+-extern char *stdio_forward_host;
++extern char *stdio_forward_path;
+ extern int stdio_forward_port;
+
+ /* Context for session open confirmation callback */
+@@ -1981,7 +1981,7 @@ mux_client_request_stdio_fwd(int fd)
+ buffer_put_int(&m, MUX_C_NEW_STDIO_FWD);
+ buffer_put_int(&m, muxclient_request_id);
+ buffer_put_cstring(&m, ""); /* reserved */
+- buffer_put_cstring(&m, stdio_forward_host);
++ buffer_put_cstring(&m, stdio_forward_path);
+ buffer_put_int(&m, stdio_forward_port);
+
+ if (mux_client_write_packet(fd, &m) != 0)
+@@ -2102,7 +2102,7 @@ muxclient(const char *path)
+ u_int pid;
+
+ if (muxclient_command == 0) {
+- if (stdio_forward_host != NULL)
++ if (stdio_forward_path != NULL)
+ muxclient_command = SSHMUX_COMMAND_STDIO_FWD;
+ else
+ muxclient_command = SSHMUX_COMMAND_OPEN;
+diff --git a/ssh.c b/ssh.c
+index 3fd5a94..60f86be 100644
+--- a/ssh.c
++++ b/ssh.c
+@@ -151,8 +151,8 @@ int ostdin_null_flag, ono_shell_flag, otty_flag, orequest_tty;
+ */
+ int fork_after_authentication_flag = 0;
+
+-/* forward stdio to remote host and port */
+-char *stdio_forward_host = NULL;
++/* forward stdio to remote host and port or unix socket */
++char *stdio_forward_path = NULL;
+ int stdio_forward_port = 0;
+
+ /*
+@@ -639,7 +639,7 @@ main(int ac, char **av)
+ options.fwd_opts.gateway_ports = 1;
+ break;
+ case 'O':
+- if (stdio_forward_host != NULL)
++ if (stdio_forward_path != NULL)
+ fatal("Cannot specify multiplexing "
+ "command with -W");
+ else if (muxclient_command != 0)
+@@ -756,12 +756,14 @@ main(int ac, char **av)
+ }
+ break;
+ case 'W':
+- if (stdio_forward_host != NULL)
++ if (stdio_forward_path != NULL)
+ fatal("stdio forward already specified");
+ if (muxclient_command != 0)
+ fatal("Cannot specify stdio forward with -O");
+ if (parse_forward(&fwd, optarg, 1, 0)) {
+- stdio_forward_host = fwd.listen_host;
++ stdio_forward_path = ((fwd.listen_port == PORT_STREAMLOCAL)
++ ? fwd.listen_path
++ : fwd.listen_host);
+ stdio_forward_port = fwd.listen_port;
+ free(fwd.connect_host);
+ } else {
+@@ -1493,17 +1495,20 @@ ssh_init_stdio_forwarding(void)
+ Channel *c;
+ int in, out;
+
+- if (stdio_forward_host == NULL)
++ if (stdio_forward_path == NULL)
+ return;
+ if (!compat20)
+ fatal("stdio forwarding require Protocol 2");
+
+- debug3("%s: %s:%d", __func__, stdio_forward_host, stdio_forward_port);
++ if (stdio_forward_port == PORT_STREAMLOCAL)
++ debug3("%s: stream local %s", __func__, stdio_forward_path);
++ else
++ debug3("%s: %s:%d", __func__, stdio_forward_path, stdio_forward_port);
+
+ if ((in = dup(STDIN_FILENO)) < 0 ||
+ (out = dup(STDOUT_FILENO)) < 0)
+ fatal("channel_connect_stdio_fwd: dup() in/out failed");
+- if ((c = channel_connect_stdio_fwd(stdio_forward_host,
++ if ((c = channel_connect_stdio_fwd(stdio_forward_path,
+ stdio_forward_port, in, out)) == NULL)
+ fatal("%s: channel_connect_stdio_fwd failed", __func__);
+ channel_register_cleanup(c->self, client_cleanup_stdio_fwd, 0);
+--
+2.1.4
+