mirror of https://gogs.blitter.com/RLabs/xs
Stubbed tun option parsing
Signed-off-by: Russ Magee <rmagee@gmail.com>
This commit is contained in:
parent
d9453835bf
commit
a9ebb102bd
|
@ -55,47 +55,6 @@ func GetSize() (cols, rows int, err error) {
|
|||
return
|
||||
}
|
||||
|
||||
func parseNonSwitchArgs(a []string) (user, host, path string, isDest bool, otherArgs []string) {
|
||||
// Whether fancyArg is src or dst file depends on flag.Args() index;
|
||||
// fancyArg as last flag.Args() element denotes dstFile
|
||||
// fancyArg as not-last flag.Args() element denotes srcFile
|
||||
var fancyUser, fancyHost, fancyPath string
|
||||
for i, arg := range a {
|
||||
if strings.Contains(arg, ":") || strings.Contains(arg, "@") {
|
||||
fancyArg := strings.Split(flag.Arg(i), "@")
|
||||
var fancyHostPath []string
|
||||
if len(fancyArg) < 2 {
|
||||
//TODO: no user specified, use current
|
||||
fancyUser = "[default:getUser]"
|
||||
fancyHostPath = strings.Split(fancyArg[0], ":")
|
||||
} else {
|
||||
// user@....
|
||||
fancyUser = fancyArg[0]
|
||||
fancyHostPath = strings.Split(fancyArg[1], ":")
|
||||
}
|
||||
|
||||
// [...@]host[:path]
|
||||
if len(fancyHostPath) > 1 {
|
||||
fancyPath = fancyHostPath[1]
|
||||
}
|
||||
fancyHost = fancyHostPath[0]
|
||||
|
||||
//if fancyPath == "" {
|
||||
// fancyPath = "."
|
||||
//}
|
||||
|
||||
if i == len(a)-1 {
|
||||
isDest = true
|
||||
//fmt.Println("remote path isDest")
|
||||
}
|
||||
//fmt.Println("fancyArgs: user:", fancyUser, "host:", fancyHost, "path:", fancyPath)
|
||||
} else {
|
||||
otherArgs = append(otherArgs, a[i])
|
||||
}
|
||||
}
|
||||
return fancyUser, fancyHost, fancyPath, isDest, otherArgs
|
||||
}
|
||||
|
||||
// doCopyMode begins a secure hkexsh local<->remote file copy operation.
|
||||
func doCopyMode(conn *hkexnet.Conn, remoteDest bool, files string, rec *hkexsh.Session) (err error, exitStatus uint32) {
|
||||
if remoteDest {
|
||||
|
@ -355,6 +314,52 @@ func reqTunnel(hc *hkexnet.Conn, lp uint16, p string /*net.Addr*/, rp uint16) {
|
|||
return
|
||||
}
|
||||
|
||||
func parseNonSwitchArgs(a []string) (user, host, path string, isDest bool, otherArgs []string) {
|
||||
// Whether fancyArg is src or dst file depends on flag.Args() index;
|
||||
// fancyArg as last flag.Args() element denotes dstFile
|
||||
// fancyArg as not-last flag.Args() element denotes srcFile
|
||||
var fancyUser, fancyHost, fancyPath string
|
||||
for i, arg := range a {
|
||||
if strings.Contains(arg, ":") || strings.Contains(arg, "@") {
|
||||
fancyArg := strings.Split(flag.Arg(i), "@")
|
||||
var fancyHostPath []string
|
||||
if len(fancyArg) < 2 {
|
||||
//TODO: no user specified, use current
|
||||
fancyUser = "[default:getUser]"
|
||||
fancyHostPath = strings.Split(fancyArg[0], ":")
|
||||
} else {
|
||||
// user@....
|
||||
fancyUser = fancyArg[0]
|
||||
fancyHostPath = strings.Split(fancyArg[1], ":")
|
||||
}
|
||||
|
||||
// [...@]host[:path]
|
||||
if len(fancyHostPath) > 1 {
|
||||
fancyPath = fancyHostPath[1]
|
||||
}
|
||||
fancyHost = fancyHostPath[0]
|
||||
|
||||
//if fancyPath == "" {
|
||||
// fancyPath = "."
|
||||
//}
|
||||
|
||||
if i == len(a)-1 {
|
||||
isDest = true
|
||||
//fmt.Println("remote path isDest")
|
||||
}
|
||||
//fmt.Println("fancyArgs: user:", fancyUser, "host:", fancyHost, "path:", fancyPath)
|
||||
} else {
|
||||
otherArgs = append(otherArgs, a[i])
|
||||
}
|
||||
}
|
||||
return fancyUser, fancyHost, fancyPath, isDest, otherArgs
|
||||
}
|
||||
|
||||
func launchTuns(conn *hkexnet.Conn, remoteHost string, tunSpecs string) {
|
||||
remAddrs, _ := net.LookupHost(remoteHost)
|
||||
reqTunnel(conn, 6001, remAddrs[0], 7001)
|
||||
}
|
||||
|
||||
// hkexsh - a client for secure shell and file copy operations.
|
||||
//
|
||||
// While conforming to the basic net.Conn interface HKex.Conn has extra
|
||||
|
@ -410,7 +415,7 @@ func main() {
|
|||
// hkexsh accepts a command (-x) but not
|
||||
// a srcpath (-r) or dstpath (-t)
|
||||
flag.StringVar(&cmdStr, "x", "", "`command` to run (if not specified run interactive shell)")
|
||||
flag.StringVar(&tunSpecStr, "t", "", "`tunnelspec` localPort:remotePort[,localPort:remotePort,...]")
|
||||
flag.StringVar(&tunSpecStr, "T", "", "`tunnelspec` localPort:remotePort[,localPort:remotePort,...]")
|
||||
flag.BoolVar(&gopt, "g", false, "ask server to generate authtoken")
|
||||
shellMode = true
|
||||
flag.Usage = UsageShell
|
||||
|
@ -643,15 +648,12 @@ func main() {
|
|||
go func() {
|
||||
for {
|
||||
time.Sleep(time.Duration(2) * time.Second)
|
||||
conn.WritePacket([]byte{0,0}, hkexnet.CSOTunKeepAlive)
|
||||
conn.WritePacket([]byte{0, 0}, hkexnet.CSOTunKeepAlive)
|
||||
}
|
||||
}()
|
||||
|
||||
if shellMode {
|
||||
// TESTING - tunnel
|
||||
remAddrs, _ := net.LookupHost(remoteHost)
|
||||
reqTunnel(&conn, 6001, remAddrs[0], 7001)
|
||||
// END TESTING - tunnel
|
||||
launchTuns(&conn, remoteHost, tunSpecStr)
|
||||
|
||||
doShellMode(isInteractive, &conn, oldState, rec)
|
||||
} else { // copyMode
|
||||
|
|
Loading…
Reference in New Issue