headscale/hscontrol/policy/v2
Kristoffer Dalby e5fcd01ee6 policy/v2: match via-grant destinations by prefix overlap
slices.Contains required exact equality between grant dst and the
advertised subnet route. Any non-identical pair was rejected, so a
via grant with broader (or narrower) dst emitted no filter rule and
added no route to the viewer's AllowedIPs. Tailscale SaaS uses
containment in either direction.

Switch to slices.ContainsFunc(routes, dst.Overlaps) for filter rule
emission (keep dst literal in DstPorts), and append overlapping
advertised routes to ViaRoutesForPeer.Include / Exclude. Rewrite the
multi-router HA election and regular-grant overlap detection to key
off the matched routes rather than the dst. Resolve *Host aliases to
*Prefix once in compileOneViaGrant and at the top of ViaRoutesForPeer
so the switch arms reach them.

Fixes #3267
2026-05-18 14:02:00 +02:00
..
testdata policy/v2: add sshtester compat runner 2026-05-13 21:10:13 +02:00
compiled.go policy/v2: match via-grant destinations by prefix overlap 2026-05-18 14:02:00 +02:00
filter.go policy: surface exit nodes via autogroup:internet (#3212) 2026-04-29 11:24:33 +01:00
filter_test.go policy/v2: surface autogroup:internet via grants on exit nodes 2026-04-30 19:22:45 +01: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 policy/v2: match via-grant destinations by prefix overlap 2026-05-18 14:02:00 +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/v2: match via-grant destinations by prefix overlap 2026-05-18 14:02:00 +02:00
policy_test.go policy/v2: match via-grant destinations by prefix overlap 2026-05-18 14:02:00 +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 policy/v2: evaluate sshTests at write boundary 2026-05-13 21:10:13 +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 types/config, types/node: model default-auto-update from auto_update.enabled 2026-05-13 14:22:30 +02:00
tailscale_acl_data_compat_test.go policy/v2: SaaS-derived compat tests for nodeAttrs 2026-05-13 14:22:30 +02:00
tailscale_grants_compat_test.go policy/v2: SaaS-derived compat tests for nodeAttrs 2026-05-13 14:22:30 +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 policy/v2: SaaS-derived compat tests for nodeAttrs 2026-05-13 14:22:30 +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 policy/v2: evaluate sshTests at write boundary 2026-05-13 21:10:13 +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 policy/v2: evaluate sshTests at write boundary 2026-05-13 21:10:13 +02:00
types_test.go policy/v2: evaluate sshTests at write boundary 2026-05-13 21:10:13 +02:00
utils.go policy/v2: exclude exit routes from ReduceFilterRules 2026-04-01 14:10:42 +01:00
utils_test.go policy/v2: exclude exit routes from ReduceFilterRules 2026-04-01 14:10:42 +01:00