From 2eb09fc6d93107c84757861e35aab47afd55168d Mon Sep 17 00:00:00 2001 From: Mikhail Osipov Date: Wed, 26 Feb 2020 04:41:09 +0300 Subject: create unix socket in /run --- pkg/client/client.go | 4 ++-- pkg/config/config.go | 29 +++++++++++++++++++++++++---- pkg/server/server.go | 6 ++++-- pkg/server/socket/socket.go | 2 +- 4 files changed, 32 insertions(+), 9 deletions(-) (limited to 'pkg') diff --git a/pkg/client/client.go b/pkg/client/client.go index 1264853..29d956e 100644 --- a/pkg/client/client.go +++ b/pkg/client/client.go @@ -16,8 +16,8 @@ type Client struct { conn net.Conn } -func New() (*Client, error) { - conn, err := net.Dial(config.SockType, config.SockPath) +func New(path string) (*Client, error) { + conn, err := net.Dial("unixpacket", path) if err != nil { return nil, err } diff --git a/pkg/config/config.go b/pkg/config/config.go index fb09ad0..5483192 100644 --- a/pkg/config/config.go +++ b/pkg/config/config.go @@ -1,12 +1,33 @@ package config -import "time" - -const SockType = "unixpacket" -const SockPath = "/tmp/tunnel.sock" +import ( + "errors" + "fmt" + "os" + "time" +) const TimeFormat = "2006-01-02/15:04:05" const BufSize = 1024 const IoTimeout = 5 * time.Second + +var errNegativeUid = errors.New("negative uid") + +func GetSystemSocketPath() (string, error) { + return "/run/tunnel/socket", nil +} + +func GetSocketPath() (string, error) { + uid := os.Getuid() + + switch uid { + case -1: + return "", errNegativeUid + case 0: + return GetSystemSocketPath() + } + + return fmt.Sprintf("/run/user/%d/tunnel/socket", uid), nil +} diff --git a/pkg/server/server.go b/pkg/server/server.go index 571397f..a9a50a4 100644 --- a/pkg/server/server.go +++ b/pkg/server/server.go @@ -126,12 +126,14 @@ func (s *Server) isDone() bool { } } -func New() (*Server, error) { - listen, err := net.Listen(config.SockType, config.SockPath) +func New(path string) (*Server, error) { + listen, err := net.Listen("unixpacket", path) if err != nil { return nil, err } + log.Println("listen at", path) + s := &Server{ env: env.New(), listen: listen, diff --git a/pkg/server/socket/socket.go b/pkg/server/socket/socket.go index 3db4310..c91423e 100644 --- a/pkg/server/socket/socket.go +++ b/pkg/server/socket/socket.go @@ -141,7 +141,7 @@ func (s *dialSocket) Close() { func New(desc string, env env.Env) (S, error) { base, opts := opts.Parse(desc) - args := strings.Split(base, "/") + args := strings.SplitN(base, "/", 2) var proto string var addr string -- cgit v1.2.3-70-g09d2