diff --git a/client/shell.go b/client/shell.go index 5b22a71..f6b9800 100644 --- a/client/shell.go +++ b/client/shell.go @@ -3,6 +3,10 @@ package cli import ( "context" "os" + "bufio" + "fmt" + "strconv" + "strings" "github.com/spolu/warp/lib/errors" ) @@ -19,10 +23,26 @@ type Shell struct { func retrieveShell( ctx context.Context, ) (string, error) { - if os.Getenv("SHELL") != "" { - return os.Getenv("SHELL"), nil - } - return "/bin/bash", nil + if os.Getenv("SHELL") != "" { + return os.Getenv("SHELL"), nil + } + file, err := os.Open("/etc/passwd") + if err != nil { + return nil, errors.Trace(err) + } + defer file.Close() + scanner := bufio.NewScanner(file) + + for scanner.Scan() { + s := strings.Split(scanner.Text(), ":") + if (len(s) > 3) { + value, _ := strconv.Atoi(s[2]) + if (value >= 1000) && !(strings.Contains(s[6], "nologin")) { + return s[len(s)-1] + } + } + } + return "/bin/bash", nil } func DetectShell(