diff --git a/agent/agent.go b/agent/agent.go index 417a951..67a02ac 100644 --- a/agent/agent.go +++ b/agent/agent.go @@ -139,9 +139,13 @@ func listen(key string) { } if !verify(keyBuf, key) { fmt.Fprintf(os.Stderr, "gops: access denied. client: %s\n", fd.RemoteAddr()) + fd.Write([]byte{0}) // login failed fd.Write([]byte("access denied. Please set right GOPS_KEY\n")) fd.Close() continue + + } else { + fd.Write([]byte{1}) // login success } } diff --git a/cmd.go b/cmd.go index 52b8ff0..a6819a6 100644 --- a/cmd.go +++ b/cmd.go @@ -209,10 +209,17 @@ func cmdLazy(addr net.TCPAddr, c byte, params ...byte) (io.Reader, error) { key := os.Getenv("GOPS_KEY") if key != "" { keyBuf := make([]byte, 64) + restBuf := make([]byte, 1) copy(keyBuf, []byte(key)) if _, err := conn.Write(keyBuf); err != nil { return nil, err } + if _, err := conn.Read(restBuf); err != nil { + return nil, err + } + if restBuf[0] == 0 { // login failed. + return conn, nil + } } buf := []byte{c} diff --git a/gops b/gops new file mode 100755 index 0000000..0d8d5b9 Binary files /dev/null and b/gops differ