You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
tailscale/ipn
Nick Khyl 6fac2903e1 ipn/ipnserver: fix race condition where LocalBackend is reset after a different user connects
In this commit, we add a failing test to verify that ipn/ipnserver.Server correctly
sets and unsets the current user when two different clients send requests concurrently
(A sends request, B sends request, A's request completes, B's request completes).

The expectation is that the user who wins the race becomes the current user
from the LocalBackend's perspective, remaining in this state until they disconnect,
after which a different user should be able to connect and use the LocalBackend.

We then fix the second of two bugs in (*Server).addActiveHTTPRequest, where a race
condition causes the LocalBackend's state to be reset after a new client connects,
instead of after the last active request of the previous client completes and the server
becomes idle.

Fixes tailscale/corp#25804

Signed-off-by: Nick Khyl <nickk@tailscale.com>
11 months ago
..
conffile ipn/conffile: don't depend on hujson on iOS/Android 1 year ago
ipnauth ipn/{ipnauth,ipnlocal,ipnserver}, client/tailscale: make ipnserver.Server testable 11 months ago
ipnlocal ipn/{ipnlocal,ipnserver}: remove redundant (*LocalBackend).ResetForClientDisconnect 11 months ago
ipnserver ipn/ipnserver: fix race condition where LocalBackend is reset after a different user connects 11 months ago
ipnstate all: illumos/solaris userspace only support 11 months ago
localapi util/uniq,types/lazy,*: delete code that's now in Go std 11 months ago
policy ipn,tailconfig: clean up unreleased and removed app connector service 2 years ago
store kube/{kubeapi,kubeclient},ipn/store/kubestore,cmd/{containerboot,k8s-operator}: emit kube store Events (#14112) 1 year ago
backend.go ipn: declare NotifyWatchOpt consts without using iota 11 months ago
conf.go ipn/conf.go: add VIPServices to tailscaled configfile (#14345) 11 months ago
doc.go IPN: Update ServeConfig to accept configuration for Services. 1 year ago
ipn_clone.go IPN: Update ServeConfig to accept configuration for Services. 1 year ago
ipn_test.go all: do not depend on the testing package 2 years ago
ipn_view.go cmd/viewer,all: consistently use "read-only" instead of "readonly" 11 months ago
prefs.go cmd/tailscale,ipn,tailcfg: add `tailscale advertise` subcommand behind envknob (#13734) 1 year ago
prefs_test.go cmd/tailscale,ipn,tailcfg: add `tailscale advertise` subcommand behind envknob (#13734) 1 year ago
serve.go ipn/ipnlocal: connect serve config to c2n endpoint 11 months ago
serve_test.go cmd/serve: don't convert localhost to 127.0.0.1 1 year ago
store.go ipn: add comment about thread-safety to StateStore 2 years ago
store_test.go ipn: avoid useless no-op WriteState calls 2 years ago