summaryrefslogtreecommitdiff
path: root/pkg/server/hook/proxy.go
diff options
context:
space:
mode:
Diffstat (limited to 'pkg/server/hook/proxy.go')
-rw-r--r--pkg/server/hook/proxy.go27
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
}