mirror of
https://github.com/tailscale/tailscale.git
synced 2025-04-20 13:41:41 +00:00
client/tailscale, cmd/tailscale/cli: move version mismatch check to CLI
So people can use the package for whois checks etc without version skew errors. The earlier change faa891c1f2ff759f4e5cbc158f310b3201d91b59 for #1905 was a bit too aggressive. Fixes #2757 Signed-off-by: Brad Fitzpatrick <bradfitz@tailscale.com>
This commit is contained in:
parent
8744394cde
commit
3c8ca4b357
@ -17,7 +17,6 @@ import (
|
|||||||
"net"
|
"net"
|
||||||
"net/http"
|
"net/http"
|
||||||
"net/url"
|
"net/url"
|
||||||
"os"
|
|
||||||
"strconv"
|
"strconv"
|
||||||
"strings"
|
"strings"
|
||||||
"time"
|
"time"
|
||||||
@ -86,6 +85,15 @@ func bestError(err error, body []byte) error {
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var onVersionMismatch func(clientVer, serverVer string)
|
||||||
|
|
||||||
|
// SetVersionMismatchHandler sets f as the version mismatch handler
|
||||||
|
// to be called when the client (the current process) has a version
|
||||||
|
// number that doesn't match the server's declared version.
|
||||||
|
func SetVersionMismatchHandler(f func(clientVer, serverVer string)) {
|
||||||
|
onVersionMismatch = f
|
||||||
|
}
|
||||||
|
|
||||||
func send(ctx context.Context, method, path string, wantStatus int, body io.Reader) ([]byte, error) {
|
func send(ctx context.Context, method, path string, wantStatus int, body io.Reader) ([]byte, error) {
|
||||||
req, err := http.NewRequestWithContext(ctx, method, "http://local-tailscaled.sock"+path, body)
|
req, err := http.NewRequestWithContext(ctx, method, "http://local-tailscaled.sock"+path, body)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@ -96,8 +104,8 @@ func send(ctx context.Context, method, path string, wantStatus int, body io.Read
|
|||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
defer res.Body.Close()
|
defer res.Body.Close()
|
||||||
if server := res.Header.Get("Tailscale-Version"); server != version.Long {
|
if server := res.Header.Get("Tailscale-Version"); server != "" && server != version.Long && onVersionMismatch != nil {
|
||||||
fmt.Fprintf(os.Stderr, "Warning: client version %q != tailscaled server version %q\n", version.Long, server)
|
onVersionMismatch(version.Long, server)
|
||||||
}
|
}
|
||||||
slurp, err := ioutil.ReadAll(res.Body)
|
slurp, err := ioutil.ReadAll(res.Body)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -19,6 +19,7 @@ import (
|
|||||||
"runtime"
|
"runtime"
|
||||||
"strconv"
|
"strconv"
|
||||||
"strings"
|
"strings"
|
||||||
|
"sync"
|
||||||
"syscall"
|
"syscall"
|
||||||
"text/tabwriter"
|
"text/tabwriter"
|
||||||
|
|
||||||
@ -82,6 +83,13 @@ func Run(args []string) error {
|
|||||||
args = []string{"version"}
|
args = []string{"version"}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var warnOnce sync.Once
|
||||||
|
tailscale.SetVersionMismatchHandler(func(clientVer, serverVer string) {
|
||||||
|
warnOnce.Do(func() {
|
||||||
|
fmt.Fprintf(os.Stderr, "Warning: client version %q != tailscaled server version %q\n", clientVer, serverVer)
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
rootfs := flag.NewFlagSet("tailscale", flag.ExitOnError)
|
rootfs := flag.NewFlagSet("tailscale", flag.ExitOnError)
|
||||||
rootfs.StringVar(&rootArgs.socket, "socket", paths.DefaultTailscaledSocket(), "path to tailscaled's unix socket")
|
rootfs.StringVar(&rootArgs.socket, "socket", paths.DefaultTailscaledSocket(), "path to tailscaled's unix socket")
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user