Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix issue caused by group-creation forwarding. #29559

Merged
merged 3 commits into from
Feb 12, 2025
Merged

Conversation

banks
Copy link
Member

@banks banks commented Feb 11, 2025

Description

Fixes a bug introduced in #29483. That PR included an attempt to prevent duplicate groups with different IDs being created by a race condition, however that fix interferes in a subtle way when duplicate groups (causes by historical bugs, like the one it was trying to fix) are already present in storage. It turns out that that code was not actually necessary for the fix - removing it doesn't make any of the test cases added in https://github.com/hashicorp/vault-enterprise/pull/6990 fail - I ran them over 40 times each locally with no failures.

This PR also fixes up the URL in the reports since the docs were moved around.

Fixes VAULT-33879. This also fixes a bunch of potential new issues in the case that duplicate groups already exist - before this fix they would have loaded the contents of one group but swapped it's ID for another duplicate which is even more confusing and problematic than before!

There is no Enterprise part to this PR exactly, however while working on this I realised we deprecated an RPC and so will make a PR to remove it and make it error to avoid unexpected behavior during mixed version upgrade scenarios.

@biazmoreira The one thing you mentioned that I didn't get to was that we potentially missed some of the group-alias endpoints in the original PR. I took a quick look and it certainly does look like there are a couple of code paths there that get to doing an UpsertGroup which will no longer forward at the RPC level and are potentially even more broken than before because of that by #29483. Could you take a look? We can include that in this PR if so.

TODO

  • Add forwarding to necessary group-alias endpoints too.

TODO only if you're a HashiCorp employee

  • Backport Labels: If this fix needs to be backported, use the appropriate backport/ label that matches the desired release branch. Note that in the CE repo, the latest release branch will look like backport/x.x.x, but older release branches will be backport/ent/x.x.x+ent.
    • LTS: If this fixes a critical security vulnerability or severity 1 bug, it will also need to be backported to the current LTS versions of Vault. To ensure this, use all available enterprise labels.
  • ENT Breakage: If this PR either 1) removes a public function OR 2) changes the signature
    of a public function, even if that change is in a CE file, double check that
    applying the patch for this PR to the ENT repo and running tests doesn't
    break any tests. Sometimes ENT only tests rely on public functions in CE
    files.
  • Jira: If this change has an associated Jira, it's referenced either
    in the PR description, commit message, or branch name.
  • RFC: If this change has an associated RFC, please link it in the description.
  • ENT PR: If this change has an associated ENT PR, please link it in the
    description. Also, make sure the changelog is in this PR, not in your ENT PR.

@banks banks added this to the 1.19.0-rc milestone Feb 11, 2025
@github-actions github-actions bot added the hashicorp-contributed-pr If the PR is HashiCorp (i.e. not-community) contributed label Feb 11, 2025
Copy link

github-actions bot commented Feb 11, 2025

CI Results:
All Go tests succeeded! ✅

@banks banks force-pushed the f/id-dupe-reporting branch from 5237f46 to 3054286 Compare February 11, 2025 21:03
@banks banks force-pushed the f/id-dupe-reporting branch from 3054286 to 13c6dd8 Compare February 11, 2025 21:24
@banks banks marked this pull request as ready for review February 11, 2025 21:24
@banks banks requested a review from a team as a code owner February 11, 2025 21:24
@banks banks requested a review from Monkeychip February 11, 2025 21:24
Copy link

Build Results:
All builds succeeded! ✅

@@ -2035,14 +2035,6 @@ func (i *IdentityStore) UpsertGroupInTxn(ctx context.Context, txn *memdb.Txn, gr
return fmt.Errorf("group is nil")
}

g, err := i.MemDBGroupByName(ctx, group.Name, true)
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🤔 I wonder if this would have worked if we used the txn that's passed into this method...

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It would not have. The problem here is the lines below where we set the incoming group.ID to be the same as the existing one. That meant that when there are duplicate groups in storage we end up loading the second one over the first, but switching it to have the first one's ID so now you can't even lookup the original by ID and the one you do get is a strange hybrid of two different groups in storage...

@biazmoreira biazmoreira merged commit f4d73bb into main Feb 12, 2025
92 checks passed
@biazmoreira biazmoreira deleted the f/id-dupe-reporting branch February 12, 2025 15:34
drivera258 pushed a commit that referenced this pull request Feb 12, 2025
* Set correct docs URL in duplicate report

* Fix duplicate reporting (and other possible duplicate bugs) caused by incorrect ID fixup

* Enable forwarding to primary active in all group aliases write paths

---------

Co-authored-by: Bianca Moreira <[email protected]>
drivera258 pushed a commit that referenced this pull request Feb 12, 2025
* Set correct docs URL in duplicate report

* Fix duplicate reporting (and other possible duplicate bugs) caused by incorrect ID fixup

* Enable forwarding to primary active in all group aliases write paths

---------

Co-authored-by: Bianca Moreira <[email protected]>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
backport/1.19.x hashicorp-contributed-pr If the PR is HashiCorp (i.e. not-community) contributed pr/no-changelog
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants