diff options
Diffstat (limited to 'src/c_exec.go')
| -rw-r--r-- | src/c_exec.go | 41 | 
1 files changed, 38 insertions, 3 deletions
| diff --git a/src/c_exec.go b/src/c_exec.go index b5b6cf6..b9990d9 100644 --- a/src/c_exec.go +++ b/src/c_exec.go @@ -43,7 +43,7 @@   * POSSIBILITY OF SUCH DAMAGE.   *   * hardflip: src/c_exec.go - * Fri Feb 02 11:44:44 2024 + * Tue Apr 23 17:47:58 2024   * Joe   *   * exec the command at some point @@ -53,6 +53,7 @@ package main  import (  	"bytes" +	"math/rand/v2"  	"os"  	"os/exec"  	"strconv" @@ -227,11 +228,45 @@ func c_format_cmd(host *HostNode, opts HardOpts,  	return cmd_fmt, cmd_env  } +func c_redirect_ssh(host *HostNode, local_port uint16) error { +	// TODO: here +	rdr_fmt := []string{} +	rdr_fmt = append(rdr_fmt, "ssh", "-f") +	rdr_fmt = append(rdr_fmt, "-L", +		strconv.Itoa(int(local_port)) + ":" + +		host.Host + ":" + +		strconv.Itoa(int(host.Port))) +	if len(host.Jump.Priv) > 0 { +		rdr_fmt = append(rdr_fmt, "-i", host.Jump.Priv) +	} +	if host.Jump.Port != 0 { +		rdr_fmt = append(rdr_fmt, "-p", strconv.Itoa(int(host.Jump.Port))) +	} +	rdr_fmt = append(rdr_fmt, host.Jump.User + "@" + host.Jump.Host, +		"-", "sleep", "5") +	if err := exec.Command(rdr_fmt[0], rdr_fmt[1:]...).Run(); err != nil { +		return err +	} +	return nil +} +  func c_exec(host *HostNode, opts HardOpts, ui *HardUI) {  	if host == nil {  		return  	} -	cmd_fmt, cmd_env := c_format_cmd(host, opts, ui) +	tmp_host := host +	if host.Protocol == PROTOCOL_RDP && len(host.Jump.Host) != 0 { +		local_host := "127.0.0.1" +		local_port := uint16(rand.IntN(40000) + 4389) +		ui.s.Fini() +		if err := c_redirect_ssh(host, local_port); err != nil { +			c_error_mode("ssh tunneling", err, ui) +			return +		} +		tmp_host.Host = local_host +		tmp_host.Port = local_port +	} +	cmd_fmt, cmd_env := c_format_cmd(tmp_host, opts, ui)  	if cmd_fmt == nil {  		return  	} @@ -253,7 +288,7 @@ func c_exec(host *HostNode, opts HardOpts, ui *HardUI) {  		ui.s.Show()  	}  	if err, err_str := c_exec_cmd(cmd_fmt, cmd_env, silent); -	   err != nil && host.Protocol == 2 { +	   err != nil && host.Protocol == PROTOCOL_CMD {  		c_error_mode(err_str, err, ui)  	}  	if opts.Loop == false { | 
