1
0
mirror of https://github.com/v2fly/v2ray-core.git synced 2024-09-28 06:46:14 -04:00

Add padding to abstract unix domain socket in fallbacks (#277)

* fix fall back to abstract unix domain socket in vless and trojan

* Update trojan.go

* Update vless.go

* Update trojan.go

* Update vless.go

Co-authored-by: RPRX <63339210+rprx@users.noreply.github.com>
This commit is contained in:
lucifer 2020-10-08 08:35:21 +08:00 committed by GitHub
parent f0403a67a1
commit 425b4b497d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 14 additions and 0 deletions

View File

@ -2,7 +2,9 @@ package conf
import ( import (
"encoding/json" "encoding/json"
"runtime"
"strconv" "strconv"
"syscall"
"github.com/golang/protobuf/proto" // nolint: staticcheck "github.com/golang/protobuf/proto" // nolint: staticcheck
@ -147,6 +149,11 @@ func (c *TrojanServerConfig) Build() (proto.Message, error) {
switch fb.Dest[0] { switch fb.Dest[0] {
case '@', '/': case '@', '/':
fb.Type = "unix" fb.Type = "unix"
if fb.Dest[0] == '@' && len(fb.Dest) > 1 && fb.Dest[1] == '@' && runtime.GOOS == "linux" {
fullAddr := make([]byte, len(syscall.RawSockaddrUnix{}.Path)) // may need padding to work in front of haproxy
copy(fullAddr, fb.Dest[1:])
fb.Dest = string(fullAddr)
}
default: default:
if _, err := strconv.Atoi(fb.Dest); err == nil { if _, err := strconv.Atoi(fb.Dest); err == nil {
fb.Dest = "127.0.0.1:" + fb.Dest fb.Dest = "127.0.0.1:" + fb.Dest

View File

@ -2,7 +2,9 @@ package conf
import ( import (
"encoding/json" "encoding/json"
"runtime"
"strconv" "strconv"
"syscall"
"github.com/golang/protobuf/proto" "github.com/golang/protobuf/proto"
@ -102,6 +104,11 @@ func (c *VLessInboundConfig) Build() (proto.Message, error) {
switch fb.Dest[0] { switch fb.Dest[0] {
case '@', '/': case '@', '/':
fb.Type = "unix" fb.Type = "unix"
if fb.Dest[0] == '@' && len(fb.Dest) > 1 && fb.Dest[1] == '@' && runtime.GOOS == "linux" {
fullAddr := make([]byte, len(syscall.RawSockaddrUnix{}.Path)) // may need padding to work in front of haproxy
copy(fullAddr, fb.Dest[1:])
fb.Dest = string(fullAddr)
}
default: default:
if _, err := strconv.Atoi(fb.Dest); err == nil { if _, err := strconv.Atoi(fb.Dest); err == nil {
fb.Dest = "127.0.0.1:" + fb.Dest fb.Dest = "127.0.0.1:" + fb.Dest