summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatt Johnston <matt@ucc.asn.au>2013-03-19 20:55:11 +0800
committerMatt Johnston <matt@ucc.asn.au>2013-03-19 20:55:11 +0800
commit5d81dccef096981b843d2034cff26ed9db49f733 (patch)
tree945784f1bd0c39b927bbd84c695d2e03fd8a35fd
parent866775c7dfb00ffe941a721d1b31b7d2f6b47cc1 (diff)
downloaddropbear-5d81dccef096981b843d2034cff26ed9db49f733.tar.gz
Allow specifying server "-p" options with ipv6 bracket notation,
patch from Ben Jencks
-rw-r--r--svr-runopts.c19
1 files changed, 17 insertions, 2 deletions
diff --git a/svr-runopts.c b/svr-runopts.c
index 1cd39ff..b1a54ee 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 */