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

mfa: fix startup crash when SSO users with MFA expire #6779

Merged
merged 4 commits into from
May 12, 2021

Conversation

awly
Copy link
Contributor

@awly awly commented May 7, 2021

The user loading code is kind of convoluted: it loads all the separate
backend items from the /web/users/ prefix into a struct. That struct
is then converted to a full types.User object.

For each user there are 3 kinds of backend items:

  • /params which is the main one, containing a marshalled types.User
    object
  • /pwd which contains the hashed password for local users
  • /mfa/... which contain registered MFA devices

When an SSO user expires, we delete the first two items but not
/mfa/.... This is intentional, to persist MFA devices across logins.
The user loading code would fail because the user was "found" (thanks to
MFA items), but didn't have the mandatory /params item.

This PR ignores any users that don't have /params instead of
hard-failing all GetUsers calls.

Updates #6695

@awly awly added this to the 6.2 "Buffalo" milestone May 7, 2021
@awly awly requested review from andrejtokarcik and Joerger May 7, 2021 18:51
The user loading code is kind of convoluted: it loads all the separate
backend items from the `/web/users/` prefix into a struct. That struct
is then converted to a full `types.User` object.

For each user there are 3 kinds of backend items:
- `/params` which is the main one, containing a marshalled `types.User`
  object
- `/pwd` which contains the hashed password for local users
- `/mfa/...` which contain registered MFA devices

When an SSO user expires, we delete the first two items but not
`/mfa/...`. This is intentional, to persist MFA devices across logins.
The user loading code would fail because the user was "found" (thanks to
MFA items), but didn't have the mandatory `/params` item.

This PR ignores any users that don't have `/params` instead of
hard-failing all `GetUsers` calls.
@awly awly force-pushed the andrew/startup-crash-mfa branch from 8158b4e to c2379bb Compare May 7, 2021 18:52
Copy link
Contributor

@russjones russjones left a comment

Choose a reason for hiding this comment

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

Bot.

@awly awly enabled auto-merge (squash) May 11, 2021 23:43
@awly awly merged commit 3cfdc9b into master May 12, 2021
@awly awly deleted the andrew/startup-crash-mfa branch May 12, 2021 16:00
awly pushed a commit that referenced this pull request May 12, 2021
The user loading code is kind of convoluted: it loads all the separate
backend items from the `/web/users/` prefix into a struct. That struct
is then converted to a full `types.User` object.

For each user there are 3 kinds of backend items:
- `/params` which is the main one, containing a marshalled `types.User`
  object
- `/pwd` which contains the hashed password for local users
- `/mfa/...` which contain registered MFA devices

When an SSO user expires, we delete the first two items but not
`/mfa/...`. This is intentional, to persist MFA devices across logins.
The user loading code would fail because the user was "found" (thanks to
MFA items), but didn't have the mandatory `/params` item.

This PR ignores any users that don't have `/params` instead of
hard-failing all `GetUsers` calls.
awly pushed a commit that referenced this pull request May 12, 2021
The user loading code is kind of convoluted: it loads all the separate
backend items from the `/web/users/` prefix into a struct. That struct
is then converted to a full `types.User` object.

For each user there are 3 kinds of backend items:
- `/params` which is the main one, containing a marshalled `types.User`
  object
- `/pwd` which contains the hashed password for local users
- `/mfa/...` which contain registered MFA devices

When an SSO user expires, we delete the first two items but not
`/mfa/...`. This is intentional, to persist MFA devices across logins.
The user loading code would fail because the user was "found" (thanks to
MFA items), but didn't have the mandatory `/params` item.

This PR ignores any users that don't have `/params` instead of
hard-failing all `GetUsers` calls.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants