77 lines
1.4 KiB
Go
77 lines
1.4 KiB
Go
//go:build !windows
|
|
// +build !windows
|
|
|
|
package ipcmux
|
|
|
|
import (
|
|
"github.com/mitchellh/go-ps"
|
|
"log"
|
|
"net"
|
|
"os"
|
|
libpath "path"
|
|
"strconv"
|
|
"time"
|
|
)
|
|
|
|
func init() {
|
|
|
|
listenNet = func(path string) (net.Listener, error) {
|
|
ipc_root := os.Getenv("IPC_ROOT")
|
|
if ipc_root == "" {
|
|
ipc_root = os.TempDir()
|
|
}
|
|
|
|
path = "replayme_" + path
|
|
path = libpath.Join(ipc_root, path)
|
|
err := os.Remove(path)
|
|
if err != nil {
|
|
if !os.IsNotExist(err) {
|
|
log.Printf("Err removing old uds: %s", err.Error())
|
|
}
|
|
}
|
|
l, err := net.Listen("unix", path)
|
|
log.Printf("UnixSocket::%s=>%v", path, err)
|
|
return l, err
|
|
|
|
}
|
|
dialNet = func(path string) (net.Conn, error) {
|
|
ipc_root := os.Getenv("IPC_ROOT")
|
|
if ipc_root == "" {
|
|
ipc_root = os.TempDir()
|
|
}
|
|
path = "replayme_" + path
|
|
path = libpath.Join(ipc_root, path)
|
|
conn, err := net.Dial("unix", path)
|
|
|
|
return conn, err
|
|
}
|
|
}
|
|
|
|
const (
|
|
PRCTL_SYSCALL = 157
|
|
PR_SET_PDEATHSIG = 1
|
|
)
|
|
|
|
func CheckRoot() {
|
|
|
|
time.Sleep(time.Second)
|
|
rootpid := os.Getenv(ENV_ROOTPID)
|
|
rootpidi, err := strconv.Atoi(rootpid)
|
|
if err != nil {
|
|
log.Printf("No root process found")
|
|
return
|
|
}
|
|
if rootpidi == 0 || rootpidi == os.Getpid() {
|
|
log.Printf("%s is set to zero, no monitoring on root will take place", ENV_ROOTPID)
|
|
return
|
|
}
|
|
for {
|
|
p, err := ps.FindProcess(rootpidi)
|
|
if p == nil || err != nil {
|
|
log.Printf("aborting")
|
|
os.Exit(1)
|
|
}
|
|
time.Sleep(time.Second)
|
|
}
|
|
}
|