headscale/hscontrol/policy/v2
Kristoffer Dalby 171fd7a3c5 policy: key autogroup:self invalidation on UserID not User view
invalidateAutogroupSelfCache derived the owning user from
node.User().ID(), dereferencing the User association view. The
NodeStore stores nodes by value with User as a *User pointer, and not
every write path hydrates that association, so a non-tagged node could
reach SetNodes with UserID set but User nil. UserView.ID() then
dereferenced a nil *User and panicked on /machine/map whenever an
autogroup:self policy was active and a node restarted tailscaled.

Group affected nodes by node.TypedUserID(), which reads the UserID
field directly. UserID is the authoritative ownership field for
non-tagged nodes, so this needs no hydrated association and fixes every
.User().ID() site in the function.
2026-05-29 21:42:56 +02:00
..
testdata policy/v2: add SaaS goldens for via-grant prefix containment 2026-05-18 14:02:00 +02:00
compiled.go all: apply godoc [Name] link conventions across comments 2026-05-19 09:55:22 +02:00
filter.go metrics, policy/v2: drop unused scaffolding + nil-error returns 2026-05-19 09:55:22 +02:00
filter_test.go metrics, policy/v2: drop unused scaffolding + nil-error returns 2026-05-19 09:55:22 +02:00
issue_3212_test.go policy/v2: SaaS-derived compat tests for nodeAttrs 2026-05-13 14:22:30 +02:00
issue_3233_test.go policy/v2: surface autogroup:internet via grants on exit nodes 2026-04-30 19:22:45 +01:00
issue_3267_test.go metrics, policy/v2: drop unused scaffolding + nil-error returns 2026-05-19 09:55:22 +02:00
main_test.go all: fix test flakiness and improve test infrastructure 2026-03-14 02:52:28 -07:00
nodeattrs_test.go policy/v2: parse, validate, and compile nodeAttrs 2026-05-13 14:22:30 +02:00
policy.go policy: key autogroup:self invalidation on UserID not User view 2026-05-29 21:42:56 +02:00
policy_test.go policy: key autogroup:self invalidation on UserID not User view 2026-05-29 21:42:56 +02:00
policytester_compat_test.go policy/v2: match default proto set for tests with no proto 2026-05-12 11:54:54 +01:00
sshtest.go all: apply godoc [Name] link conventions across comments 2026-05-19 09:55:22 +02:00
sshtest_test.go policy/v2: evaluate sshTests at write boundary 2026-05-13 21:10:13 +02:00
sshtester_compat_test.go policy/v2: add sshtester compat runner 2026-05-13 21:10:13 +02:00
tailnet_state_caps.go all: apply godoc [Name] link conventions across comments 2026-05-19 09:55:22 +02:00
tailscale_acl_data_compat_test.go metrics, policy/v2: drop unused scaffolding + nil-error returns 2026-05-19 09:55:22 +02:00
tailscale_grants_compat_test.go metrics, policy/v2: drop unused scaffolding + nil-error returns 2026-05-19 09:55:22 +02:00
tailscale_nodeattrs_compat_test.go types/config, types/node: model default-auto-update from auto_update.enabled 2026-05-13 14:22:30 +02:00
tailscale_routes_data_compat_test.go metrics, policy/v2: drop unused scaffolding + nil-error returns 2026-05-19 09:55:22 +02:00
tailscale_ssh_data_compat_test.go policy/v2: evaluate sshTests at write boundary 2026-05-13 21:10:13 +02:00
test.go all: apply godoc [Name] link conventions across comments 2026-05-19 09:55:22 +02:00
test_test.go policy/v2: match default proto set for tests with no proto 2026-05-12 11:54:54 +01:00
types.go all: annotate complex functions with gocyclo rationale 2026-05-19 09:55:22 +02:00
types_test.go policy/v2: evaluate sshTests at write boundary 2026-05-13 21:10:13 +02:00
utils.go all: apply godoc [Name] link conventions across comments 2026-05-19 09:55:22 +02:00
utils_test.go policy/v2: exclude exit routes from ReduceFilterRules 2026-04-01 14:10:42 +01:00