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
*/

Reply via email to