From b3b55cc472959113d457ca99aca06cd4cd0a401b Mon Sep 17 00:00:00 2001 From: Kristoffer Dalby Date: Fri, 4 Sep 2026 09:44:22 +0000 Subject: [PATCH] cli: fix users rename when resolved by name The rename request sent the raw --identifier flag value, which is 0 when the user was resolved with --name, so the API answered "user not found". Send the matched user's ID instead. Equivalent of #3442 on main, rewritten: that fix targets the v1 HTTP client, which 0.29 does not have. --- cmd/headscale/cli/users.go | 2 +- integration/cli_test.go | 41 +++++++++++++++++++++++++++++++++++++- 2 files changed, 41 insertions(+), 2 deletions(-) diff --git a/cmd/headscale/cli/users.go b/cmd/headscale/cli/users.go index bcc8c913..56c82340 100644 --- a/cmd/headscale/cli/users.go +++ b/cmd/headscale/cli/users.go @@ -231,7 +231,7 @@ var renameUserCmd = &cobra.Command{ newName, _ := cmd.Flags().GetString("new-name") renameReq := &v1.RenameUserRequest{ - OldId: id, + OldId: users.GetUsers()[0].GetId(), NewName: newName, } diff --git a/integration/cli_test.go b/integration/cli_test.go index d04bd02d..f1ebf949 100644 --- a/integration/cli_test.go +++ b/integration/cli_test.go @@ -237,13 +237,52 @@ func TestUserCommand(t *testing.T) { } }, integrationutil.ScaledTimeout(20*time.Second), 1*time.Second) + _, err = headscale.Execute( + []string{ + "headscale", + "users", + "rename", + "--output=json", + "--name=newname", + "--new-name=renamedbyname", + }, + ) + require.NoError(t, err) + + var listAfterRenameByName []*v1.User + + assert.EventuallyWithT(t, func(ct *assert.CollectT) { + err := executeAndUnmarshal(headscale, + []string{ + "headscale", + "users", + "list", + "--output", + "json", + }, + &listAfterRenameByName, + ) + assert.NoError(ct, err) + + if !assert.Len(ct, listAfterRenameByName, 1) { + return + } + + assert.Equal( + ct, + "renamedbyname", + listAfterRenameByName[0].GetName(), + "Should have renamedbyname after rename resolved by name", + ) + }, integrationutil.ScaledTimeout(20*time.Second), 1*time.Second) + deleteResult, err = headscale.Execute( []string{ "headscale", "users", "destroy", "--force", - "--name=newname", + "--name=renamedbyname", }, ) require.NoError(t, err)