From 8393c5f0166dc456462e3c80126107346e1d1b7c Mon Sep 17 00:00:00 2001 From: Matt Johnston <matt@ucc.asn.au> Date: Tue, 19 Mar 2013 20:55:11 +0800 Subject: [PATCH] Allow specifying server "-p" options with ipv6 bracket notation, patch from Ben Jencks --- svr-runopts.c | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/svr-runopts.c b/svr-runopts.c index 1cd39ffd..b1a54ee9 100644 --- a/svr-runopts.c +++ b/svr-runopts.c @@ -329,8 +329,23 @@ static void addportandaddress(char* spec) { /* 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] = strrchr(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] = strrchr(myspec, ':'); + } if (svr_opts.ports[svr_opts.portcount] == NULL) { /* no ':' -> the whole string specifies just a port */ -- GitLab