From c70235566952d14e4a0816d6bdc058f2958938a2 Mon Sep 17 00:00:00 2001 From: Maodanping <673698750@qq.com> Date: Tue, 8 Nov 2016 13:40:40 +0800 Subject: [PATCH] frps/control rename authTimeout; add judgement for subdomain --- conf/frps.ini | 5 +++-- src/cmd/frps/control.go | 13 +++++++++---- src/models/server/config.go | 8 ++++---- src/models/server/server.go | 10 ++++++---- 4 files changed, 22 insertions(+), 14 deletions(-) diff --git a/conf/frps.ini b/conf/frps.ini index e17ab11a..3a3b14a8 100644 --- a/conf/frps.ini +++ b/conf/frps.ini @@ -26,8 +26,9 @@ privilege_token = 12345678 privilege_allow_ports = 2000-3000,3001,3003,4000-50000 # pool_count in each proxy will change to max_pool_count if they exceed the maximum value max_pool_count = 100 -# conn_timeout set the timeout interval (seconds) when the frpc connects frps -conn_timeout = 10 +# authentication_timeout means the timeout interval (minute units) when the frpc connects frps +# if authentication_timeout set zero, the time is not verified +authentication_timeout = 15 # domain for frps domain = frps.com diff --git a/src/cmd/frps/control.go b/src/cmd/frps/control.go index 6dc43441..db5c4087 100644 --- a/src/cmd/frps/control.go +++ b/src/cmd/frps/control.go @@ -18,6 +18,7 @@ import ( "encoding/json" "fmt" "io" + "strings" "time" "github.com/fatedier/frp/src/models/consts" @@ -221,8 +222,8 @@ func doLogin(req *msg.ControlReq, c *conn.Conn) (ret int64, info string) { nowTime := time.Now().Unix() if req.PrivilegeMode { privilegeKey := pcrypto.GetAuthKey(req.ProxyName + server.PrivilegeToken + fmt.Sprintf("%d", req.Timestamp)) - // privilegeKey unavaiable after server.CtrlConnTimeout seconds - if server.CtrlConnTimeout != 0 && nowTime-req.Timestamp > server.CtrlConnTimeout { + // privilegeKey unavaiable after server.AuthTimeout minutes + if server.AuthTimeout != 0 && nowTime-req.Timestamp > server.AuthTimeout { info = fmt.Sprintf("ProxyName [%s], privilege mode authorization timeout", req.ProxyName) log.Warn(info) return @@ -234,8 +235,7 @@ func doLogin(req *msg.ControlReq, c *conn.Conn) (ret int64, info string) { } } else { authKey := pcrypto.GetAuthKey(req.ProxyName + s.AuthToken + fmt.Sprintf("%d", req.Timestamp)) - // privilegeKey unavaiable after server.CtrlConnTimeout seconds - if server.CtrlConnTimeout != 0 && nowTime-req.Timestamp > server.CtrlConnTimeout { + if server.AuthTimeout != 0 && nowTime-req.Timestamp > server.AuthTimeout { info = fmt.Sprintf("ProxyName [%s], authorization timeout", req.ProxyName) log.Warn(info) return @@ -291,6 +291,11 @@ func doLogin(req *msg.ControlReq, c *conn.Conn) (ret int64, info string) { s.HttpPassWord = req.HttpPassWord // package URL if req.SubDomain != "" { + if strings.Contains(req.SubDomain, ".") || strings.Contains(req.SubDomain, "*") { + info = fmt.Sprintf("ProxyName [%s], type [%s] not support when subdomain is not set", req.ProxyName, req.Type) + log.Warn(info) + return + } s.SubDomain = req.SubDomain + "." + server.Domain } if req.PoolCount > server.MaxPoolCount { diff --git a/src/models/server/config.go b/src/models/server/config.go index d7f06215..c246c6a8 100644 --- a/src/models/server/config.go +++ b/src/models/server/config.go @@ -45,7 +45,7 @@ var ( LogMaxDays int64 = 3 PrivilegeMode bool = false PrivilegeToken string = "" - CtrlConnTimeout int64 = 10 + AuthTimeout int64 = 15 Domain string = "" // if PrivilegeAllowPorts is not nil, tcp proxies which remote port exist in this map can be connected @@ -224,13 +224,13 @@ func loadCommonConf(confFile string) error { MaxPoolCount = v } } - tmpStr, ok = conf.Get("common", "conn_timeout") + tmpStr, ok = conf.Get("common", "authentication_timeout") if ok { v, err := strconv.ParseInt(tmpStr, 10, 64) if err != nil { - return fmt.Errorf("Parse conf error: conn_timeout is incorrect") + return fmt.Errorf("Parse conf error: authentication_timeout is incorrect") } else { - CtrlConnTimeout = v + AuthTimeout = v } } Domain, ok = conf.Get("common", "domain") diff --git a/src/models/server/server.go b/src/models/server/server.go index ec3fcad3..9fb8db16 100644 --- a/src/models/server/server.go +++ b/src/models/server/server.go @@ -130,11 +130,13 @@ func (p *ProxyServer) Start(c *conn.Conn) (err error) { } p.listeners = append(p.listeners, l) } - l, err := VhostHttpMuxer.Listen(p.SubDomain, p.HostHeaderRewrite, p.HttpUserName, p.HttpPassWord) - if err != nil { - return err + if p.SubDomain != "" { + l, err := VhostHttpMuxer.Listen(p.SubDomain, p.HostHeaderRewrite, p.HttpUserName, p.HttpPassWord) + if err != nil { + return err + } + p.listeners = append(p.listeners, l) } - p.listeners = append(p.listeners, l) } else if p.Type == "https" { for _, domain := range p.CustomDomains {