Commit Graph
4960 Commits
Author SHA1 Message Date
Kristoffer Dalby 9f61d79473 hscontrol: compare API replay fields per object
One aggregate per field hid a partial fix. Device users are compared,
and headscale's oauthClientId resolves to the SaaS label.
2026-10-27 21:31:35 +00:00
Kristoffer Dalby 9b8e441c1b hscontrol: check API replay outcomes apart from status
A listed status hid a call flipping between allowed and refused, and
validate refusals SaaS answers with 200 went unchecked.
2026-10-27 21:31:35 +00:00
Kristoffer Dalby 0298186946 servertest: recapture v2 OAuth and policy API golden data
Tag writes are read back once the tags hold, and both files carry a
baseline snapshot. Statuses and read-backs match the first capture.
2026-10-27 21:31:35 +00:00
Kristoffer Dalby ad4dbfdfbc servertest, policy/v2: replay tag owner chain joins through registration
A key login never asks the policy about requested tags, so the joins are
checked where headscale decides them. OAuth mints stay at
TagOwnedByTags.
2026-10-27 21:31:35 +00:00
Kristoffer Dalby 9a3553665e servertest: recapture re-authentication golden data
The probe now stops a refused login's retries; the replay disconnects
there too. Outcomes match the first capture, and user IDs are labels.
2026-10-27 21:31:35 +00:00
Kristoffer Dalby 5ae0064ef8 servertest: fail on skip entries no lifecycle replay reads
Consumers check entries under their own capture only, so a bare or
misspelled key never went stale.
2026-10-27 21:31:35 +00:00
Kristoffer Dalby 01844d5e75 servertest: check route continuity in every streamed step
Removal and route drops were judged only on steps SaaS sent frames for;
silent steps and a clear-then-restore within a step went unchecked.
2026-10-27 21:31:35 +00:00
Kristoffer Dalby 58eb7e8d6a servertest: fail step checks that never hold
A match on the last sample before the deadline no longer passes.
2026-10-27 21:31:35 +00:00
Kristoffer Dalby 32e7b67a41 servertest: keep the address family in filter comparisons
A rule missing one family of a peer's addresses compared equal.
2026-10-27 21:31:35 +00:00
Kristoffer Dalby 148e533f80 servertest: check peer visibility, routes and addresses apart
A listed difference in one no longer hides the others; the exit route
entries now key the AllowedIPs check alone.
2026-10-27 21:31:35 +00:00
Kristoffer Dalby f7f58523b7 policy/v2: name the destination in sshTests failure breakdowns
A failure reported against the wrong dst alias no longer passes.
2026-10-27 21:31:35 +00:00
Kristoffer Dalby f0c4c53567 servertest: check peers and filters apart after a via source loss
The user node's filter already matches SaaS and is now asserted.
2026-10-27 21:31:35 +00:00
Kristoffer Dalby 2a5cdd1c10 policy/v2: check the SSH login 0 mapping apart from the rules
Its skip entries no longer hide rule count, order or principals.
2026-10-27 21:31:35 +00:00
Kristoffer Dalby 715a36be40 policy/v2: add grant port list refusal capture
Grant and ACL refusals share one check-keyed refused/message check.
2026-10-27 21:31:35 +00:00
Kristoffer Dalby e1a62c53f2 prek: exempt grant captures from the large file check
They keep a netmap per node and stay as recorded.
2026-10-27 21:31:35 +00:00
Kristoffer Dalby 3ede8b748f servertest, state: add map delivery golden data
A retag through the API, a running peer's DERP, disco, hostname and
port, down and up gaps around policy pushes; peers, filters and frames
per node.
2026-10-27 21:31:29 +00:00
Kristoffer Dalby 8d0f54b2d2 servertest: add via HA failover golden data
One route on a non-via router and a via pair through crashes and
returns, the via group down, expiry, approval loss, withdraw,
re-advertise and delete; route owner and peers per viewer per step.
2026-10-27 21:30:36 +00:00
Kristoffer Dalby 2bb2dc1a47 servertest: join replayed routers with their routes
A route update sent after the join could be overtaken by the stream's
first request and dropped; the probe joined with the routes set.
2026-10-27 21:30:36 +00:00
Kristoffer Dalby f1a1a8eb8e servertest, hscontrol: add ephemeral, expiry, pending login golden data
Ephemeral devices through logout, deletes, re-auth and collection;
expired routers and nodes, a client's own expiry and logout; a login
waiting across restarts, replayed exchange by exchange.
2026-10-27 21:30:36 +00:00
Kristoffer Dalby d0fe3563cb servertest: add login flag, endpoint, disco rotation and expiry helpers
WithLoginFlags and WithEndpoints shape what a client sends; RotateDisco
logs in again on a new disco key and leaves an auth URL waiting;
SetExpirySooner asks for an earlier key expiry.
2026-10-27 21:30:36 +00:00
Kristoffer Dalby cc65dbd8db hscontrol, servertest: add v2 OAuth and policy API golden data
OAuth clients, tokens, keys and tag writes by principal, and policy
writes over a baseline, replayed through v1 and v2; a deleted parent
client's key joins real clients.
2026-10-27 21:30:36 +00:00
Kristoffer Dalby 2686253df7 servertest, policy/v2: add re-authentication golden data
Expired, live, ephemeral and admin-tagged devices logging in again with
spent, revoked, valid and other users' keys, by key and by login;
tag ownership through tags per policy function.
2026-10-27 21:30:36 +00:00
Kristoffer Dalby 6ced7950df servertest: add login, profile, restart and register log helpers
TryNewClient returns a refused login; Login covers profile switches and
interactive logins approved through ApproveAuth; RegisterAttempts reads
the client's register log.
2026-10-27 21:30:36 +00:00
Kristoffer Dalby 1076706198 servertest: add route approval lifecycle golden data
Owner changes, re-auth, revokes, policy pushes, withdraw and logout
replayed step by step against SaaS approvals and served routes.
2026-10-27 21:30:36 +00:00
Kristoffer Dalby 68883ead0b prek: exempt step captures from the large file check
They keep a netmap per node per step and must stay as recorded.
2026-10-27 21:30:36 +00:00
Kristoffer Dalby c4c1fc0048 servertest: add relogin and auth key helpers
Relogin builds a new Direct on the same machine key and persisted
node key, as tailscaled does on up --auth-key; force rotates the key.
2026-10-27 21:30:36 +00:00
Kristoffer Dalby 4c354f0c61 policy/v2, servertest: add via port captures
A port-limited ACL entry beside a via grant, and a via tag with no
advertiser. Via HA replays now compare router filters by address.
2026-10-27 21:30:36 +00:00
Kristoffer Dalby 0a2689ae3f policy/v2, servertest: add multi-route router captures
A seven-route router and an exit node under six policies; replayed
through policy, peer map and map stream. Peer map now checked against
SaaS peers.
2026-10-27 21:30:36 +00:00
Kristoffer Dalby 076281e909 policy/v2, servertest, hscontrol: add tailnet overlap route captures
Routers announcing tailnet addresses, approved by policy, admin key and
devices:routes token; replayed through policy, map stream and v1/v2
APIs.
2026-10-27 21:30:36 +00:00
Kristoffer Dalby 31e7105008 policy/v2, mapper: add nextdns attr captures
SaaS accepts malformed nextdns profiles and keeps them in the CapMap;
its resolver skips them. DoH addresses compare per node: path, query,
ID.
2026-10-27 21:30:36 +00:00
Kristoffer Dalby 1d4bd1d453 policy/v2: add user token captures
SaaS answers for unknown users, a short name and a bare "@" at every
site. Each capture also runs under headscale-only user rows, at boot and
runtime; SaaS nodes must not change and overlay nodes get nothing.
2026-10-27 21:30:36 +00:00
Kristoffer Dalby 49899da5ac policy/v2, servertest: add via source loss captures
Repeated via destinations, a user via source, and an empty one.
A rename that empties the via source must reach open streams as v67.
2026-10-27 21:30:36 +00:00
Kristoffer Dalby e03665990e policy/v2, servertest: add validation matrix and grant shape captures
SaaS answers for sshTests sources, tests semantics, failure reports,
duplicate destinations, empty and allow-all policies, and refusals.
ACL and SSH compat checks are keyed per check; differences listed.
2026-10-27 21:30:36 +00:00
Kristoffer Dalby 13c79cf508 policy/v2: recapture tester rows with failure detail
Re-runs keep SaaS's error data and validate answer. Tester compat checks
verdict, message, failure breakdown and node labels.
2026-10-27 21:30:35 +00:00
Kristoffer Dalby 43a6034304 servertest: check refused policies leave the live policy unchanged
Posts every policy SaaS refused through v2; filter, SSH, body and ETag
must stay as before. Policies headscale accepts are skip entries.
2026-10-27 21:30:35 +00:00
Kristoffer Dalby d8a31890e0 servertest: compare router self routes with captures
Replays ten routes captures through the mapper too; SaaS's address
ranges for "*" now resolve. Known gaps are skip entries per node.
2026-10-27 14:15:01 +00:00
Kristoffer Dalby e6df6eb9a9 servertest: compare user profiles in via captures
Self and peer profiles, by login and display name. A tagged self gets
its own profile in SaaS; listed as a skip entry until headscale matches.
2026-10-27 14:15:01 +00:00
Kristoffer Dalby 8db053c978 policy/v2: build tester nodes from the capture topology
The fixed node list had other addresses than the captures, so address
and range tests ran against nodes SaaS never saw.
2026-10-27 14:15:01 +00:00
Kristoffer Dalby f1a3f39df6 servertest: list passing via captures
Fourteen committed via captures already match at map level; run them.
2026-10-27 14:15:01 +00:00
Kristoffer Dalby 412303dd29 policy/v2: compare compat captures through the policy manager
ACL, grant and SSH captures now also check FilterForNode and SSHPolicy,
which add the global merge and caches the per-node compile skips.
2026-10-27 14:15:01 +00:00
Kristoffer Dalby d11b876ea1 testcapture: record multi-step captures and API error detail
Optional Steps, NodeIDs, error data and login state; v1 files unchanged.
Register log and raw map frame parsers; Write refuses auth keys and
login URLs.
2026-10-27 14:15:01 +00:00
Kristoffer Dalby 2d220b2eb8 mkdocs: set the current release to 0.29.6 2026-10-24 15:43:39 +02:00
Kristoffer Dalby f3fc915b71 CHANGELOG: set the 0.29.6 release date 2026-10-24 15:43:39 +02:00
Kristoffer Dalby 33544f62cb CHANGELOG: document the 0.29.6 security and patch release
Updates #3579 and #3549.
2026-10-24 11:15:20 +02:00
Kristoffer Dalby 30ff8df93c integration: ignore disconnected recipients when checking map state
Disconnected streams retain historical maps and cannot receive peer updates.
2026-10-23 18:23:53 +02:00
Kristoffer Dalby e195ce9675 CHANGELOG: map session and churn fixes 2026-10-23 18:23:53 +02:00
Kristoffer Dalby eed5c8c80a mapper: count folded patches when bounding pending
A fold keeps every patch it merges, so counting changes hid the
backlog: the cap never fired and each fold recopied the patches.
2026-10-23 18:23:53 +02:00
Kristoffer Dalby daad12e964 mapper: retry slow sessions from current state
A full session channel after the send window evicted live but busy clients.
Requeue and regenerate; evict after no progress for connectionStallTimeout.
Retire blocked reconnect siblings once the newest stream accepts the frame.

Updates #3129.
2026-10-23 18:23:53 +02:00
Kristoffer Dalby f46ea3d1df mapper: skip responses left empty by visibility filtering
A peer change hidden from a recipient still produced a frame carrying only
ControlTime, one per sender per recipient. Drop it once the response is final.
2026-10-23 18:23:53 +02:00
Kristoffer Dalby 2047ef35b8 hscontrol: wait for map session cleanup during shutdown
Batcher shutdown cuts reconnect grace short to keep shutdown prompt.
Wait for each session's Disconnect to persist LastSeen before the database closes.
2026-10-23 18:23:53 +02:00