Open the socket before opening the log
This commit is contained in:
parent
d9b0b2e21a
commit
9573438f75
@ -28,7 +28,7 @@ import (
|
||||
|
||||
var (
|
||||
sigExit = []os.Signal{os.Kill, os.Interrupt}
|
||||
sigIgnore []os.Signal
|
||||
sigIgnore []os.Signal
|
||||
logger = logrus.New()
|
||||
log *logrus.Entry
|
||||
appname = "sshrimp"
|
||||
@ -104,7 +104,6 @@ func setupLoging(config cfg) error {
|
||||
log = logger.WithFields(logrus.Fields{
|
||||
"pid": os.Getpid(),
|
||||
})
|
||||
log.Logger.Info("testing")
|
||||
|
||||
sshrimpagent.Log = log
|
||||
signer.Log = log
|
||||
@ -132,58 +131,73 @@ func main() {
|
||||
|
||||
flag.Parse()
|
||||
|
||||
if err := setupLoging(cli); err != nil {
|
||||
logger.Warnf("Error setting up logging: %v", err)
|
||||
}
|
||||
|
||||
c := config.NewSSHrimpWithDefaults()
|
||||
err := c.Read(cli.Config)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
err = launchAgent(c)
|
||||
listener := openSocket(c)
|
||||
if listener == nil {
|
||||
logger.Errorln("Failed to open socket")
|
||||
return
|
||||
}
|
||||
if err := setupLoging(cli); err != nil {
|
||||
logger.Warnf("Error setting up logging: %v", err)
|
||||
}
|
||||
err = launchAgent(c, listener)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
}
|
||||
|
||||
func launchAgent(c *config.SSHrimp) error {
|
||||
func openSocket(c *config.SSHrimp) net.Listener {
|
||||
var (
|
||||
err error
|
||||
listener net.Listener
|
||||
privateKey crypto.Signer
|
||||
sshSigner ssh.Signer
|
||||
err error
|
||||
logMessage string
|
||||
socketPath = ExpandPath(c.Agent.Socket)
|
||||
)
|
||||
|
||||
log.Traceln("Creating socket")
|
||||
if _, err = os.Stat(ExpandPath(c.Agent.Socket)); err == nil {
|
||||
log.Tracef("File already exists at %s", c.Agent.Socket)
|
||||
conn, sockErr := net.Dial("unix", ExpandPath(c.Agent.Socket))
|
||||
if _, err = os.Stat(socketPath); err == nil {
|
||||
fmt.Println("Creating socket")
|
||||
fmt.Printf("File already exists at %s\n", c.Agent.Socket)
|
||||
conn, sockErr := net.Dial("unix", socketPath)
|
||||
if conn == nil {
|
||||
logMessage = "conn is nil"
|
||||
}
|
||||
if sockErr == nil { // socket is accepting connections
|
||||
logMessage += "err reports successful connection"
|
||||
conn.Close()
|
||||
log.Errorf("Socket connected successfully %s", logMessage)
|
||||
return fmt.Errorf("socket %s already exists", c.Agent.Socket)
|
||||
fmt.Printf("socket %s already exists\n", c.Agent.Socket)
|
||||
return nil
|
||||
}
|
||||
log.Tracef("Socket is not connected %s", logMessage)
|
||||
if os.Remove(c.Agent.Socket) == nil { // socket is not accepting connections, assuming safe to remove
|
||||
log.Traceln("Deleting socket: success")
|
||||
fmt.Printf("Socket is not connected %s\n", logMessage)
|
||||
err = os.Remove(socketPath)
|
||||
if err == nil { // socket is not accepting connections, assuming safe to remove
|
||||
fmt.Println("Deleting socket: success")
|
||||
} else {
|
||||
log.Errorf("Deleting socket: fail")
|
||||
fmt.Println("Deleting socket: fail", err)
|
||||
return nil
|
||||
}
|
||||
}
|
||||
|
||||
// This affects all files created for the process. Since this is a sensitive
|
||||
// socket, only allow the current user to write to the socket.
|
||||
syscall.Umask(0077)
|
||||
listener, err = net.Listen("unix", ExpandPath(c.Agent.Socket))
|
||||
listener, err = net.Listen("unix", socketPath)
|
||||
if err != nil {
|
||||
return err
|
||||
fmt.Println("Error opening socket:", err)
|
||||
return nil
|
||||
}
|
||||
return listener
|
||||
}
|
||||
|
||||
func launchAgent(c *config.SSHrimp, listener net.Listener) error {
|
||||
var (
|
||||
err error
|
||||
privateKey crypto.Signer
|
||||
sshSigner ssh.Signer
|
||||
)
|
||||
defer listener.Close()
|
||||
|
||||
fmt.Printf("listening on %s\n", c.Agent.Socket)
|
||||
|
Loading…
x
Reference in New Issue
Block a user