diff --git a/cmd/sshrimp-agent/main.go b/cmd/sshrimp-agent/main.go index 080d55f..af977c0 100644 --- a/cmd/sshrimp-agent/main.go +++ b/cmd/sshrimp-agent/main.go @@ -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)