func sendTTYToCommand(commandUsock *unixsocket.Usock, clientFile *os.File, err error) error { if err != nil { return err } return commandUsock.WriteFD(int(clientFile.Fd())) }
func sendCommandLineArguments(usock *unixsocket.Usock, args []string) error { master, slave, err := unixsocket.Socketpair(syscall.SOCK_STREAM) if err != nil { return err } usock.WriteFD(int(slave.Fd())) if err != nil { return err } slave.Close() go func() { defer master.Close() argAsBytes := []byte{} for _, arg := range args[1:] { argAsBytes = append(argAsBytes, []byte(arg)...) argAsBytes = append(argAsBytes, byte(0)) } _, err = master.Write(argAsBytes) if err != nil { slog.ErrorString("Could not send arguments across: " + err.Error() + "\r") return } }() return nil }
func sendClientPidAndArgumentsToCommand(commandUsock *unixsocket.Usock, clientPid int, argCount int, argFD int, err error) error { if err != nil { return err } msg := messages.CreatePidAndArgumentsMessage(clientPid, argCount) _, err = commandUsock.WriteMessage(msg) if err != nil { return err } return commandUsock.WriteFD(argFD) }