func prepareHostControlPath(host, gateway *config.Host) error { controlPathDir := path.Dir(os.ExpandEnv(strings.Replace(host.ControlPath, "~", "$HOME", -1))) gatewayControlPath := path.Join(controlPathDir, gateway.Name()) if config.BoolVal(host.ControlMasterMkdir) { return os.MkdirAll(gatewayControlPath, 0700) } return nil }
func proxyGo(host *config.Host) error { if host.HostName == "" { host.HostName = host.Name() } if len(host.ResolveNameservers) > 0 { Logger.Debugf("Resolving host: '%s' using nameservers %s", host.HostName, host.ResolveNameservers) // FIXME: resolve using custom dns server results, err := net.LookupAddr(host.HostName) if err != nil { return err } if len(results) > 0 { host.HostName = results[0] } Logger.Debugf("Resolved host is: %s", host.HostName) } if host.ResolveCommand != "" { command := commandApplyHost(host.ResolveCommand, host) Logger.Debugf("Resolving host: %q using command: %q", host.HostName, command) args, err := shlex.Split(command) if err != nil { return err } out, err := exec.Command(args[0], args[1:]...).Output() if err != nil { return err } host.HostName = strings.TrimSpace(fmt.Sprintf("%s", out)) Logger.Debugf("Resolved host is: %s", host.HostName) } Logger.Debugf("Connecting to %s:%d", host.HostName, host.Port) conn, err := net.Dial("tcp", fmt.Sprintf("%s:%d", host.HostName, host.Port)) if err != nil { return err } defer conn.Close() Logger.Debugf("Connected to %s:%d", host.HostName, host.Port) // Create Stdio pipes c1 := readAndWrite(conn, os.Stdout) c2 := readAndWrite(os.Stdin, conn) select { case err = <-c1: case err = <-c2: } if err != nil { return err } return nil }
func hostPrepare(host *config.Host) error { if host.HostName == "" { host.HostName = host.Name() } if len(host.ResolveNameservers) > 0 { Logger.Debugf("Resolving host: '%s' using nameservers %s", host.HostName, host.ResolveNameservers) // FIXME: resolve using custom dns server results, err := net.LookupAddr(host.HostName) if err != nil { return err } if len(results) > 0 { host.HostName = results[0] } Logger.Debugf("Resolved host is: %s", host.HostName) } if host.ResolveCommand != "" { command := host.ExpandString(host.ResolveCommand) Logger.Debugf("Resolving host: %q using command: %q", host.HostName, command) args, err := shlex.Split(command) if err != nil { return err } cmd := exec.Command(args[0], args[1:]...) var stdout bytes.Buffer var stderr bytes.Buffer cmd.Stdout = &stdout cmd.Stderr = &stderr if err := cmd.Run(); err != nil { Logger.Errorf("ResolveCommand failed: %s", stderr.String()) return err } host.HostName = strings.TrimSpace(fmt.Sprintf("%s", stdout.String())) Logger.Debugf("Resolved host is: %s", host.HostName) } return nil }
func hostPrepare(host *config.Host) error { if host.HostName == "" { host.HostName = host.Name() } if len(host.ResolveNameservers) > 0 { Logger.Debugf("Resolving host: '%s' using nameservers %s", host.HostName, host.ResolveNameservers) // FIXME: resolve using custom dns server results, err := net.LookupAddr(host.HostName) if err != nil { return err } if len(results) > 0 { host.HostName = results[0] } Logger.Debugf("Resolved host is: %s", host.HostName) } if host.ResolveCommand != "" { command := host.ExpandString(host.ResolveCommand) Logger.Debugf("Resolving host: %q using command: %q", host.HostName, command) args, err := shlex.Split(command) if err != nil { return err } out, err := exec.Command(args[0], args[1:]...).Output() if err != nil { return err } host.HostName = strings.TrimSpace(fmt.Sprintf("%s", out)) Logger.Debugf("Resolved host is: %s", host.HostName) } return nil }
func commandApplyHost(command string, host *config.Host) string { command = strings.Replace(command, "%name", host.Name(), -1) command = strings.Replace(command, "%h", host.HostName, -1) command = strings.Replace(command, "%p", fmt.Sprintf("%d", host.Port), -1) return command }