db: scope DestroyUser to only delete the target user's pre-auth keys

DestroyUser called ListPreAuthKeys(tx) which returns ALL pre-auth keys
across all users, then deleted every one of them. This caused deleting
any single user to wipe out pre-auth keys for every other user.

Extract a ListPreAuthKeysByUser function (consistent with the existing
ListNodesByUser pattern) and use it in DestroyUser to scope key deletion
to the user being destroyed.

Add unit test (table-driven in TestDestroyUserErrors) and integration
test to prevent regression.

Fixes #3154

Co-authored-by: Kristoffer Dalby <kristoffer@dalby.cc>
This commit is contained in:
Jacky 2026-03-27 13:12:20 +00:00 committed by Kristoffer Dalby
parent 6ae182696f
commit 7c756b8201
4 changed files with 61 additions and 1 deletions

View file

@ -90,6 +90,12 @@ internet is a security-sensitive choice. `autogroup:danger-all` can only be used
- Fix exit node approval not triggering filter rule recalculation for peers [#2180](https://github.com/juanfont/headscale/pull/2180)
- Policy validation error messages now include field context (e.g., `src=`, `dst=`) and are more descriptive [#2180](https://github.com/juanfont/headscale/pull/2180)
## 0.28.1 (202x-xx-xx)
### Changes
- **User deletion**: Fix `DestroyUser` deleting all pre-auth keys in the database instead of only the target user's keys [#3155](https://github.com/juanfont/headscale/pull/3155)
## 0.28.0 (2026-02-04)
**Minimum supported Tailscale client version: v1.74.0**