From de6080b7c2e5f3d2a9ed9677e3df0667bfc31842 Mon Sep 17 00:00:00 2001
From: nico <nico@3c298f89-4303-0410-b956-a3cf2f4a3e73>
Date: Thu, 3 Nov 2011 08:12:17 +0000
Subject: [PATCH] package/dropbear: fix segfault with remote port forwarding
 (closes: #10339)

git-svn-id: svn://svn.openwrt.org/openwrt/trunk@28718 3c298f89-4303-0410-b956-a3cf2f4a3e73
---
 package/dropbear/Makefile                     |  2 +-
 .../patches/160-segfault_fwd_localhost.patch  | 40 +++++++++++++++++++
 2 files changed, 41 insertions(+), 1 deletion(-)
 create mode 100644 package/dropbear/patches/160-segfault_fwd_localhost.patch

diff --git a/package/dropbear/Makefile b/package/dropbear/Makefile
index 34f064c37..5006c94bb 100644
--- a/package/dropbear/Makefile
+++ b/package/dropbear/Makefile
@@ -9,7 +9,7 @@ include $(TOPDIR)/rules.mk
 
 PKG_NAME:=dropbear
 PKG_VERSION:=0.53.1
-PKG_RELEASE:=4
+PKG_RELEASE:=5
 
 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
 PKG_SOURCE_URL:= \
diff --git a/package/dropbear/patches/160-segfault_fwd_localhost.patch b/package/dropbear/patches/160-segfault_fwd_localhost.patch
new file mode 100644
index 000000000..05ae844c1
--- /dev/null
+++ b/package/dropbear/patches/160-segfault_fwd_localhost.patch
@@ -0,0 +1,40 @@
+http://wl500g.googlecode.com/svn/trunk/dropbear/011-fwd-all-segfault.patch
+https://dev.openwrt.org/ticket/10339
+
+--- a/svr-tcpfwd.c
++++ b/svr-tcpfwd.c
+@@ -210,15 +210,13 @@ static int svr_remotetcpreq() {
+ 	tcpinfo->chantype = &svr_chan_tcpremote;
+ 	tcpinfo->tcp_type = forwarded;
+ 
+-	if (!opts.listen_fwd_all 
+-			|| (strcmp(tcpinfo->listenaddr, "localhost") == 0) ) {
+-        // NULL means "localhost only"
+-        tcpinfo->listenaddr = NULL;
+-	}
+-    else
+-    {
+-        tcpinfo->listenaddr = bindaddr;
+-    }
++	if (!opts.listen_fwd_all || (strcmp(bindaddr, "localhost") == 0) ) {
++		// NULL means "localhost only"
++		tcpinfo->listenaddr = NULL;
++	}
++	else {
++		tcpinfo->listenaddr = bindaddr;
++	}
+ 
+ 	ret = listen_tcpfwd(tcpinfo);
+ 
+--- a/tcp-accept.c
++++ b/tcp-accept.c
+@@ -80,6 +80,9 @@ static void tcp_acceptor(struct Listener
+ 			addr = tcpinfo->listenaddr;
+ 			port = tcpinfo->listenport;
+ 		}
++		if (!addr) {
++			addr = "localhost";
++		}
+ 
+ 		buf_putstring(ses.writepayload, addr, strlen(addr));
+ 		buf_putint(ses.writepayload, port);
-- 
2.20.1