]> ruderich.org/simon Gitweb - safcm/safcm.git/blobdiff - rpc/dial.go
Update copyright years
[safcm/safcm.git] / rpc / dial.go
index 0782ab08e617933e4e2c369651253d11324e355f..4fbb3244110bdb4924f553968c4be56b3105c879 100644 (file)
@@ -1,6 +1,6 @@
 // Simple RPC-like protocol: establish new connection and upload helper
 
-// Copyright (C) 2021  Simon Ruderich
+// Copyright (C) 2021-2023  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
@@ -24,22 +24,35 @@ import (
        "encoding/hex"
        "fmt"
        "io"
+       "io/fs"
        "os/exec"
        "strconv"
        "strings"
 
        "ruderich.org/simon/safcm"
-       "ruderich.org/simon/safcm/remote"
 )
 
-func (c *Conn) DialSSH(user, host, sshConfig string) error {
+type SSHConfig struct {
+       Host      string
+       User      string // optional
+       SshConfig string // optional
+
+       RemoteHelpers fs.FS
+}
+
+func (c *Conn) DialSSH(cfg SSHConfig) error {
        if c.events == nil {
                return fmt.Errorf("cannot reuse Conn")
        }
 
-       remote := host
-       if user != "" {
-               remote = user + "@" + host
+       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
        }
        c.debugf("DialSSH: connecting to %q", remote)
 
@@ -50,8 +63,8 @@ func (c *Conn) DialSSH(user, host, sshConfig string) error {
        }
 
        c.sshRemote = remote
-       if sshConfig != "" {
-               c.sshOpts = append(c.sshOpts, "-F", sshConfig)
+       if cfg.SshConfig != "" {
+               c.sshOpts = []string{"-F", cfg.SshConfig}
        }
        c.cmd = exec.Command("ssh",
                append(append([]string{}, c.sshOpts...),
@@ -77,7 +90,7 @@ func (c *Conn) DialSSH(user, host, sshConfig string) error {
 
        err = c.dialSSH(stdin, stdout)
        if err != nil {
-               c.Kill()
+               c.Kill() //nolint:errcheck
                return err
        }
        c.conn = safcm.NewGobConn(stdout, stdin)
@@ -177,7 +190,6 @@ f() {
                tmp="$(mktemp "$x.XXXXXX")"
                # Report filename for upload
                echo "$tmp"
-
                # Wait for upload to complete
                read unused
 
@@ -203,9 +215,9 @@ f
                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)