[PATCH] IPv6 bracket notation for listen addresses in -p

Ben Jencks ben at bjencks.net
Tue Dec 11 13:11:45 WST 2012


Updates parsing of the -p option to handle [2001:dba::]:22 style IPv6
addresses. This allows binding to specific IPv6 addresses, rather than
having to bind to all addresses in order to get any IPv6 support. For
example, you can now listen on IPv6 only with -p [::]:22.

This has been done before at [1], but I thought that patch
was kind of ugly so I wrote my own.

Please CC me on responses as I'm not subscribed to the list.

[1]
https://lists.openwrt.org/pipermail/openwrt-devel/2009-May/004299.html

diff -ur dropbear-2012.55.orig/svr-runopts.c dropbear-2012.55/svr-runopts.c
--- dropbear-2012.55.orig/svr-runopts.c	2012-02-23 08:47:06.000000000 -0500
+++ dropbear-2012.55/svr-runopts.c	2012-12-10 23:17:28.496729985 -0500
@@ -324,8 +324,23 @@
 		/* We don't free it, it becomes part of the runopt state */
 		myspec = m_strdup(spec);
 
-		/* search for ':', that separates address and port */
-		svr_opts.ports[svr_opts.portcount] = strchr(myspec, ':');
+		if (myspec[0] == '[') {
+			myspec++;
+			svr_opts.ports[svr_opts.portcount] = strchr(myspec, ']');
+			if (svr_opts.ports[svr_opts.portcount] == NULL) {
+				/* Unmatched [ -> exit */
+				dropbear_exit("Bad listen address");
+			}
+			svr_opts.ports[svr_opts.portcount][0] = '\0'; 
+			svr_opts.ports[svr_opts.portcount]++;
+			if (svr_opts.ports[svr_opts.portcount][0] != ':') {
+				/* Missing port -> exit */
+				dropbear_exit("Missing port");
+			}
+		} else {
+			/* search for ':', that separates address and port */
+			svr_opts.ports[svr_opts.portcount] = strchr(myspec, ':');
+		}
 
 		if (svr_opts.ports[svr_opts.portcount] == NULL) {
 			/* no ':' -> the whole string specifies just a port */


More information about the Dropbear mailing list