Hi, Actually that can be done just with strrchr() instead of strchr Refer http://wl500g.googlecode.com/svn/trunk/dropbear/300-ipv6_addr_port_split.pat ch
In addition, here's simple patch that adds IP family support via additional cmd args For example, you can now listen on IPv6 only with "dropbear -6", on IPv4 only "dropbear -4" http://wl500g.googlecode.com/svn/trunk/dropbear/004-ip-family.patch Best Regards, Vladislav Grishenko wl500g.googlecode.com > -----Original Message----- > From: [email protected] [mailto:dropbear- > [email protected]] On Behalf Of Matt Johnston > Sent: Friday, December 14, 2012 8:30 PM > To: Ben Jencks > Cc: [email protected] > Subject: Re: [PATCH] IPv6 bracket notation for listen addresses in -p > > Hi, > > Thanks for that, I'll make sure it makes the next release. > > Cheers, > Matt > > On Tue, Dec 11, 2012 at 12:11:45AM -0500, Ben Jencks wrote: > > 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 */
