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
|
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.
|
// 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) {
|
func doCopyMode(conn *hkexnet.Conn, remoteDest bool, files string, rec *hkexsh.Session) (err error, exitStatus uint32) {
|
||||||
if remoteDest {
|
if remoteDest {
|
||||||
|
@ -355,6 +314,52 @@ func reqTunnel(hc *hkexnet.Conn, lp uint16, p string /*net.Addr*/, rp uint16) {
|
||||||
return
|
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.
|
// hkexsh - a client for secure shell and file copy operations.
|
||||||
//
|
//
|
||||||
// While conforming to the basic net.Conn interface HKex.Conn has extra
|
// 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
|
// hkexsh accepts a command (-x) but not
|
||||||
// a srcpath (-r) or dstpath (-t)
|
// a srcpath (-r) or dstpath (-t)
|
||||||
flag.StringVar(&cmdStr, "x", "", "`command` to run (if not specified run interactive shell)")
|
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")
|
flag.BoolVar(&gopt, "g", false, "ask server to generate authtoken")
|
||||||
shellMode = true
|
shellMode = true
|
||||||
flag.Usage = UsageShell
|
flag.Usage = UsageShell
|
||||||
|
@ -643,15 +648,12 @@ func main() {
|
||||||
go func() {
|
go func() {
|
||||||
for {
|
for {
|
||||||
time.Sleep(time.Duration(2) * time.Second)
|
time.Sleep(time.Duration(2) * time.Second)
|
||||||
conn.WritePacket([]byte{0,0}, hkexnet.CSOTunKeepAlive)
|
conn.WritePacket([]byte{0, 0}, hkexnet.CSOTunKeepAlive)
|
||||||
}
|
}
|
||||||
}()
|
}()
|
||||||
|
|
||||||
if shellMode {
|
if shellMode {
|
||||||
// TESTING - tunnel
|
launchTuns(&conn, remoteHost, tunSpecStr)
|
||||||
remAddrs, _ := net.LookupHost(remoteHost)
|
|
||||||
reqTunnel(&conn, 6001, remAddrs[0], 7001)
|
|
||||||
// END TESTING - tunnel
|
|
||||||
|
|
||||||
doShellMode(isInteractive, &conn, oldState, rec)
|
doShellMode(isInteractive, &conn, oldState, rec)
|
||||||
} else { // copyMode
|
} else { // copyMode
|
||||||
|
|
Loading…
Reference in New Issue