Merge pull request 'torProvider: now creates new subdir for tor process per run to avoid collisions of zombies; log tor processl bump op.log version' (#14) from randDirLog into master
the build was successful
Details
the build was successful
Details
Reviewed-on: #14
This commit is contained in:
commit
f13387fcae
4
go.mod
4
go.mod
|
@ -3,7 +3,7 @@ module git.openprivacy.ca/openprivacy/connectivity
|
|||
go 1.13
|
||||
|
||||
require (
|
||||
git.openprivacy.ca/openprivacy/bine v0.0.3
|
||||
git.openprivacy.ca/openprivacy/log v1.0.0
|
||||
git.openprivacy.ca/openprivacy/bine v0.0.4
|
||||
git.openprivacy.ca/openprivacy/log v1.0.1
|
||||
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.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.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/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/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
||||
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
|
||||
|
|
|
@ -12,6 +12,7 @@ import (
|
|||
"git.openprivacy.ca/openprivacy/log"
|
||||
"golang.org/x/crypto/ed25519"
|
||||
"golang.org/x/crypto/sha3"
|
||||
"io/ioutil"
|
||||
"net"
|
||||
"net/textproto"
|
||||
"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) }
|
||||
|
||||
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 {
|
||||
os *tor.OnionService
|
||||
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
|
||||
func newHideCmd(exePath string) process.Creator {
|
||||
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.Stdout = os.Stdout
|
||||
cmd.Stderr = os.Stderr
|
||||
cmd.Stdout = loggerDebug
|
||||
cmd.Stderr = loggerError
|
||||
cmd.SysProcAttr = sysProcAttr
|
||||
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) {
|
||||
dataDir := path.Join(appDirectory, "tor")
|
||||
os.MkdirAll(dataDir, 0700)
|
||||
torDir := path.Join(appDirectory, "tor")
|
||||
|
||||
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)}
|
||||
|
||||
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
|
||||
if _, err := os.Stat(path.Join(dataDir, "torrc")); os.IsNotExist(err) {
|
||||
err = &NoTorrcError{path.Join(dataDir, "torrc")}
|
||||
if _, err := os.Stat(path.Join(torDir, "torrc")); os.IsNotExist(err) {
|
||||
err = &NoTorrcError{path.Join(torDir, "torrc")}
|
||||
log.Debugln(err.Error())
|
||||
return nil, err
|
||||
}
|
||||
|
||||
// if not, try running system 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 {
|
||||
log.Debugf("Error connecting to self-run system tor: %v\n", err)
|
||||
return nil, err
|
||||
|
@ -318,7 +338,7 @@ func startTor(appDirectory string, bundledTorPath string, controlPort int, authe
|
|||
tp.t = t
|
||||
} else if bundledTorPath != "" && checkCmdlineTorVersion(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 {
|
||||
log.Debugf("Error running bundled tor %v\n", err)
|
||||
return nil, err
|
||||
|
@ -326,8 +346,9 @@ func startTor(appDirectory string, bundledTorPath string, controlPort int, authe
|
|||
tp.t = t
|
||||
}
|
||||
|
||||
err := tp.checkVersion()
|
||||
err = tp.checkVersion()
|
||||
if err == nil {
|
||||
tp.t.DeleteDataDirOnClose = true
|
||||
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)
|
||||
|
@ -409,7 +430,7 @@ func createFromExisting(controlport *control.Conn, datadir string) *tor.Tor {
|
|||
Control: controlport,
|
||||
ProcessCancelFunc: nil,
|
||||
DataDir: datadir,
|
||||
DeleteDataDirOnClose: false,
|
||||
DeleteDataDirOnClose: true,
|
||||
DebugWriter: nil,
|
||||
StopProcessOnClose: false,
|
||||
GeoIPCreatedFile: "",
|
||||
|
|
Loading…
Reference in New Issue