From eaf5375ebee7c92a4e1bd4b5fd5822cc17cc8f97 Mon Sep 17 00:00:00 2001 From: Jinank Jain Date: Sat, 3 Jun 2017 16:28:29 -0500 Subject: [PATCH] Added option to read from /etc/passwd --- client/shell.go | 28 ++++++++++++++++++++++++---- 1 file changed, 24 insertions(+), 4 deletions(-) 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(