torProvider: now creates new subdir for tor process per run to avoid collisions of zombies; log tor processl bump op.log version
the build was successful
Details
the build was successful
Details
This commit is contained in:
parent
d8d823d9d5
commit
89dff1f5e0
4
go.mod
4
go.mod
|
@ -3,7 +3,7 @@ module git.openprivacy.ca/openprivacy/connectivity
|
||||||
go 1.13
|
go 1.13
|
||||||
|
|
||||||
require (
|
require (
|
||||||
git.openprivacy.ca/openprivacy/bine v0.0.3
|
git.openprivacy.ca/openprivacy/bine v0.0.4
|
||||||
git.openprivacy.ca/openprivacy/log v1.0.0
|
git.openprivacy.ca/openprivacy/log v1.0.1
|
||||||
golang.org/x/crypto v0.0.0-20201012173705-84dcc777aaee
|
golang.org/x/crypto v0.0.0-20201012173705-84dcc777aaee
|
||||||
)
|
)
|
||||||
|
|
3
go.sum
3
go.sum
|
@ -2,8 +2,11 @@ git.openprivacy.ca/openprivacy/bine v0.0.2 h1:2uJyxOYfcYvpQAuRt5XWc81ZXrHuubdFsk
|
||||||
git.openprivacy.ca/openprivacy/bine v0.0.2/go.mod h1:13ZqhKyqakDsN/ZkQkIGNULsmLyqtXc46XBcnuXm/mU=
|
git.openprivacy.ca/openprivacy/bine v0.0.2/go.mod h1:13ZqhKyqakDsN/ZkQkIGNULsmLyqtXc46XBcnuXm/mU=
|
||||||
git.openprivacy.ca/openprivacy/bine v0.0.3 h1:PSHUmNqaW7BZUX8n2eTDeNbjsuRe+t5Ae0Og+P+jDM0=
|
git.openprivacy.ca/openprivacy/bine v0.0.3 h1:PSHUmNqaW7BZUX8n2eTDeNbjsuRe+t5Ae0Og+P+jDM0=
|
||||||
git.openprivacy.ca/openprivacy/bine v0.0.3/go.mod h1:13ZqhKyqakDsN/ZkQkIGNULsmLyqtXc46XBcnuXm/mU=
|
git.openprivacy.ca/openprivacy/bine v0.0.3/go.mod h1:13ZqhKyqakDsN/ZkQkIGNULsmLyqtXc46XBcnuXm/mU=
|
||||||
|
git.openprivacy.ca/openprivacy/bine v0.0.4/go.mod h1:13ZqhKyqakDsN/ZkQkIGNULsmLyqtXc46XBcnuXm/mU=
|
||||||
git.openprivacy.ca/openprivacy/log v1.0.0 h1:Rvqm1weUdR4AOnJ79b1upHCc9vC/QF1rhSD2Um7sr1Y=
|
git.openprivacy.ca/openprivacy/log v1.0.0 h1:Rvqm1weUdR4AOnJ79b1upHCc9vC/QF1rhSD2Um7sr1Y=
|
||||||
git.openprivacy.ca/openprivacy/log v1.0.0/go.mod h1:gGYK8xHtndRLDymFtmjkG26GaMQNgyhioNS82m812Iw=
|
git.openprivacy.ca/openprivacy/log v1.0.0/go.mod h1:gGYK8xHtndRLDymFtmjkG26GaMQNgyhioNS82m812Iw=
|
||||||
|
git.openprivacy.ca/openprivacy/log v1.0.1 h1:NWV5oBTatvlSzUE6wtB+UQCulgyMOtm4BXGd34evMys=
|
||||||
|
git.openprivacy.ca/openprivacy/log v1.0.1/go.mod h1:gGYK8xHtndRLDymFtmjkG26GaMQNgyhioNS82m812Iw=
|
||||||
github.com/davecgh/go-spew v1.1.0 h1:ZDRjVQ15GmhC3fiQ8ni8+OwkZQO4DARzQgrnXU1Liz8=
|
github.com/davecgh/go-spew v1.1.0 h1:ZDRjVQ15GmhC3fiQ8ni8+OwkZQO4DARzQgrnXU1Liz8=
|
||||||
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
||||||
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
|
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
|
||||||
|
|
|
@ -12,6 +12,7 @@ import (
|
||||||
"git.openprivacy.ca/openprivacy/log"
|
"git.openprivacy.ca/openprivacy/log"
|
||||||
"golang.org/x/crypto/ed25519"
|
"golang.org/x/crypto/ed25519"
|
||||||
"golang.org/x/crypto/sha3"
|
"golang.org/x/crypto/sha3"
|
||||||
|
"io/ioutil"
|
||||||
"net"
|
"net"
|
||||||
"net/textproto"
|
"net/textproto"
|
||||||
"os"
|
"os"
|
||||||
|
@ -49,6 +50,15 @@ type NoTorrcError struct {
|
||||||
|
|
||||||
func (e *NoTorrcError) Error() string { return fmt.Sprintf("torrc file does not exist at %v", e.path) }
|
func (e *NoTorrcError) Error() string { return fmt.Sprintf("torrc file does not exist at %v", e.path) }
|
||||||
|
|
||||||
|
type logWriter struct {
|
||||||
|
level log.Level
|
||||||
|
}
|
||||||
|
|
||||||
|
func (l *logWriter) Write(p []byte) (int, error) {
|
||||||
|
log.Printf(l.level, "tor: %v", string(p))
|
||||||
|
return len(p), nil
|
||||||
|
}
|
||||||
|
|
||||||
type onionListenService struct {
|
type onionListenService struct {
|
||||||
os *tor.OnionService
|
os *tor.OnionService
|
||||||
tp *torProvider
|
tp *torProvider
|
||||||
|
@ -259,9 +269,12 @@ func NewTorACN(appDirectory string, bundledTorPath string) (connectivity.ACN, er
|
||||||
// newHideCmd creates a Creator function for bine which generates a cmd that one windows will hide the dosbox
|
// newHideCmd creates a Creator function for bine which generates a cmd that one windows will hide the dosbox
|
||||||
func newHideCmd(exePath string) process.Creator {
|
func newHideCmd(exePath string) process.Creator {
|
||||||
return process.CmdCreatorFunc(func(ctx context.Context, args ...string) (*exec.Cmd, error) {
|
return process.CmdCreatorFunc(func(ctx context.Context, args ...string) (*exec.Cmd, error) {
|
||||||
|
loggerDebug := &logWriter{log.LevelDebug}
|
||||||
|
loggerError := &logWriter{log.LevelError}
|
||||||
|
|
||||||
cmd := exec.CommandContext(ctx, exePath, args...)
|
cmd := exec.CommandContext(ctx, exePath, args...)
|
||||||
cmd.Stdout = os.Stdout
|
cmd.Stdout = loggerDebug
|
||||||
cmd.Stderr = os.Stderr
|
cmd.Stderr = loggerError
|
||||||
cmd.SysProcAttr = sysProcAttr
|
cmd.SysProcAttr = sysProcAttr
|
||||||
return cmd, nil
|
return cmd, nil
|
||||||
})
|
})
|
||||||
|
@ -287,8 +300,15 @@ func (tp *torProvider) checkVersion() error {
|
||||||
}
|
}
|
||||||
|
|
||||||
func startTor(appDirectory string, bundledTorPath string, controlPort int, authenticator tor.Authenticator) (*torProvider, error) {
|
func startTor(appDirectory string, bundledTorPath string, controlPort int, authenticator tor.Authenticator) (*torProvider, error) {
|
||||||
dataDir := path.Join(appDirectory, "tor")
|
torDir := path.Join(appDirectory, "tor")
|
||||||
os.MkdirAll(dataDir, 0700)
|
|
||||||
|
os.MkdirAll(torDir, 0700)
|
||||||
|
dataDir := ""
|
||||||
|
var err error
|
||||||
|
if dataDir, err = ioutil.TempDir(torDir, "data-dir-"); err != nil {
|
||||||
|
return nil, fmt.Errorf("Unable to create temp data dir: %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
tp := &torProvider{authenticator: authenticator, controlPort: controlPort, appDirectory: appDirectory, bundeledTorPath: bundledTorPath, childListeners: make(map[string]*onionListenService), breakChan: make(chan bool), statusCallback: nil, lastRestartTime: time.Now().Add(-restartCooldown)}
|
tp := &torProvider{authenticator: authenticator, controlPort: controlPort, appDirectory: appDirectory, bundeledTorPath: bundledTorPath, childListeners: make(map[string]*onionListenService), breakChan: make(chan bool), statusCallback: nil, lastRestartTime: time.Now().Add(-restartCooldown)}
|
||||||
|
|
||||||
log.Debugf("launching system tor")
|
log.Debugf("launching system tor")
|
||||||
|
@ -302,15 +322,15 @@ func startTor(appDirectory string, bundledTorPath string, controlPort int, authe
|
||||||
}
|
}
|
||||||
|
|
||||||
// check if the torrc file is present where expected
|
// check if the torrc file is present where expected
|
||||||
if _, err := os.Stat(path.Join(dataDir, "torrc")); os.IsNotExist(err) {
|
if _, err := os.Stat(path.Join(torDir, "torrc")); os.IsNotExist(err) {
|
||||||
err = &NoTorrcError{path.Join(dataDir, "torrc")}
|
err = &NoTorrcError{path.Join(torDir, "torrc")}
|
||||||
log.Debugln(err.Error())
|
log.Debugln(err.Error())
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
// if not, try running system tor
|
// if not, try running system tor
|
||||||
if checkCmdlineTorVersion("tor") {
|
if checkCmdlineTorVersion("tor") {
|
||||||
t, err := tor.Start(nil, &tor.StartConf{ControlPort: tp.controlPort, DisableCookieAuth: true, UseEmbeddedControlConn: false, DisableEagerAuth: true, EnableNetwork: true, DataDir: dataDir, TorrcFile: path.Join(dataDir, "torrc"), DebugWriter: nil, ProcessCreator: newHideCmd("tor")})
|
t, err := tor.Start(nil, &tor.StartConf{ControlPort: tp.controlPort, DisableCookieAuth: true, UseEmbeddedControlConn: false, DisableEagerAuth: true, EnableNetwork: true, DataDir: dataDir, TorrcFile: path.Join(torDir, "torrc"), DebugWriter: nil, ProcessCreator: newHideCmd("tor")})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Debugf("Error connecting to self-run system tor: %v\n", err)
|
log.Debugf("Error connecting to self-run system tor: %v\n", err)
|
||||||
return nil, err
|
return nil, err
|
||||||
|
@ -318,7 +338,7 @@ func startTor(appDirectory string, bundledTorPath string, controlPort int, authe
|
||||||
tp.t = t
|
tp.t = t
|
||||||
} else if bundledTorPath != "" && checkCmdlineTorVersion(bundledTorPath) {
|
} else if bundledTorPath != "" && checkCmdlineTorVersion(bundledTorPath) {
|
||||||
log.Debugln("attempting using bundled tor '" + bundledTorPath + "'")
|
log.Debugln("attempting using bundled tor '" + bundledTorPath + "'")
|
||||||
t, err := tor.Start(nil, &tor.StartConf{ControlPort: tp.controlPort, DisableCookieAuth: true, UseEmbeddedControlConn: false, DisableEagerAuth: true, EnableNetwork: true, DataDir: dataDir, TorrcFile: path.Join(dataDir, "torrc"), ExePath: bundledTorPath, DebugWriter: nil, ProcessCreator: newHideCmd(bundledTorPath)})
|
t, err := tor.Start(nil, &tor.StartConf{ControlPort: tp.controlPort, DisableCookieAuth: true, UseEmbeddedControlConn: false, DisableEagerAuth: true, EnableNetwork: true, DataDir: dataDir, TorrcFile: path.Join(torDir, "torrc"), ExePath: bundledTorPath, DebugWriter: nil, ProcessCreator: newHideCmd(bundledTorPath)})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Debugf("Error running bundled tor %v\n", err)
|
log.Debugf("Error running bundled tor %v\n", err)
|
||||||
return nil, err
|
return nil, err
|
||||||
|
@ -326,8 +346,9 @@ func startTor(appDirectory string, bundledTorPath string, controlPort int, authe
|
||||||
tp.t = t
|
tp.t = t
|
||||||
}
|
}
|
||||||
|
|
||||||
err := tp.checkVersion()
|
err = tp.checkVersion()
|
||||||
if err == nil {
|
if err == nil {
|
||||||
|
tp.t.DeleteDataDirOnClose = true
|
||||||
return tp, nil
|
return tp, nil
|
||||||
}
|
}
|
||||||
return nil, fmt.Errorf("could not connect to or start Tor that met requirments (min Tor version 0.3.5.x): %v", err)
|
return nil, fmt.Errorf("could not connect to or start Tor that met requirments (min Tor version 0.3.5.x): %v", err)
|
||||||
|
@ -409,7 +430,7 @@ func createFromExisting(controlport *control.Conn, datadir string) *tor.Tor {
|
||||||
Control: controlport,
|
Control: controlport,
|
||||||
ProcessCancelFunc: nil,
|
ProcessCancelFunc: nil,
|
||||||
DataDir: datadir,
|
DataDir: datadir,
|
||||||
DeleteDataDirOnClose: false,
|
DeleteDataDirOnClose: true,
|
||||||
DebugWriter: nil,
|
DebugWriter: nil,
|
||||||
StopProcessOnClose: false,
|
StopProcessOnClose: false,
|
||||||
GeoIPCreatedFile: "",
|
GeoIPCreatedFile: "",
|
||||||
|
|
Loading…
Reference in New Issue