diff options
Diffstat (limited to 'pkg/server/hook/proxy.go')
| -rw-r--r-- | pkg/server/hook/proxy.go | 27 |
1 files changed, 15 insertions, 12 deletions
diff --git a/pkg/server/hook/proxy.go b/pkg/server/hook/proxy.go index 26be2d0..172b01a 100644 --- a/pkg/server/hook/proxy.go +++ b/pkg/server/hook/proxy.go @@ -11,7 +11,8 @@ import ( "tunnel/pkg/server/queue" ) -var addrRe = regexp.MustCompile("^[0-9a-zA-Z-.]+:[0-9]+$") +var addrPattern = "^([0-9a-zA-Z-.]+|\\[[0-9a-fA-F:]*\\]):[0-9]+$" +var isGoodAddr = regexp.MustCompile(addrPattern).MatchString type proxyHook struct { addr string @@ -61,8 +62,13 @@ func (p *proxy) Recv(rq, wq queue.Q) error { } func (h *proxyHook) Open(env env.Env) (interface{}, error) { + addr := env.Eval(h.addr) + if !isGoodAddr(addr) { + return nil, fmt.Errorf("invalid addr '%s'", addr) + } + p := &proxy{ - addr: h.addr, + addr: addr, auth: h.auth, c: make(chan bool), } @@ -74,18 +80,15 @@ func (h *proxyHook) Open(env env.Env) (interface{}, error) { return p, nil } -func newProxyHook(opts opts.Opts, env env.Env) (hook, error) { - h := &proxyHook{} - - if addr, ok := opts["addr"]; !ok { - return nil, errors.New("proxy: missing addr") - } else if !addrRe.MatchString(addr) { - return nil, errors.New("proxy: invalid addr") - } else { - h.addr = addr +func newProxyHook(opts opts.Opts) (hook, error) { + h := &proxyHook{ + addr: opts["addr"], + auth: opts["auth"], } - h.auth = opts["auth"] + if h.addr == "" { + return nil, errors.New("expected addr") + } return h, nil } |
