// Simple RPC-like protocol: establish new connection and upload helper
-// Copyright (C) 2021 Simon Ruderich
-//
-// This program is free software: you can redistribute it and/or modify
-// it under the terms of the GNU General Public License as published by
-// the Free Software Foundation, either version 3 of the License, or
-// (at your option) any later version.
-//
-// This program is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License
-// along with this program. If not, see <http://www.gnu.org/licenses/>.
+// SPDX-License-Identifier: GPL-3.0-or-later
+// Copyright (C) 2021-2024 Simon Ruderich
package rpc
"encoding/hex"
"fmt"
"io"
+ "io/fs"
"os/exec"
"strconv"
"strings"
"ruderich.org/simon/safcm"
- "ruderich.org/simon/safcm/remote"
)
type SSHConfig struct {
Host string
User string // optional
SshConfig string // optional
+
+ RemoteHelpers fs.FS
}
func (c *Conn) DialSSH(cfg SSHConfig) error {
return fmt.Errorf("cannot reuse Conn")
}
+ if cfg.RemoteHelpers == nil {
+ return fmt.Errorf("SSHConfig.RemoteHelpers not set")
+ }
+ c.remoteHelpers = cfg.RemoteHelpers
+
remote := cfg.Host
if cfg.User != "" {
remote = cfg.User + "@" + cfg.Host
err = c.dialSSH(stdin, stdout)
if err != nil {
- c.Kill()
+ c.Kill() //nolint:errcheck
return err
}
c.conn = safcm.NewGobConn(stdout, stdin)
return err
}
- // Get embedded helper binary
- helper, err := remote.Helpers.ReadFile(
- fmt.Sprintf("helpers/%s-%s", goos, goarch))
+ // Get remote helper binary
+ helper, err := fs.ReadFile(c.remoteHelpers,
+ fmt.Sprintf("%s-%s", goos, goarch))
if err != nil {
return fmt.Errorf("remote not built for GOOS/GOARCH %s/%s",
goos, goarch)