ADR-0023: no ordering of M4/M5/M6 preserves decision 4 — decide the transition #308
Labels
No labels
bug
enhancement
in-progress
needs-info
needs-triage
p0
ready-for-agent
ready-for-human
wontfix
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
Cloonar/nixos#308
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Design decision for #299. No code — the outcome rewrites part of ADR-0023 and the milestone order.
The conflict
Spike 3 (#301) established that
useKerberosForPasswordAuthenticationreplaces LDAP password authentication rather than supplementing it. Measured on the livecloonarrealm:dominik.polakovics(has principal)dominik.polakovics(has principal)office@cloonar.com(no principal)That flag is realm-level. ADR-0023 decision 4 makes enrolment per-user and atomic — create the principal, the user sets their password, and the same operation locks
userPassword— on the stated grounds that "No individual is ever in a state where both credentials are live", because otherwise a user rotating a leaked password has revoked nothing.A per-user cutover cannot be expressed through a fleet-wide switch. Both orderings break someone:
userPasswordis locked.So decision 4 as written and the M-sequence in #299 cannot both hold.
Leading candidate: M5 before M4, and split the lock
Proposed by the maintainer during triage, and the most promising route so far.
userPasswordlast.Why it is attractive: no temp password has to be distributed out-of-band, because step 3 authenticates with a credential the user already holds. Enrolment stays per-user. By the time the realm-level flag flips, everyone has a Kerberos password they chose.
This reorders #299: M5 must precede M4. The issue body has been corrected.
The open question
ADR-0023 decision 6 specifies the Required Action as a current/new/confirm form performing kpasswd as the user. For a first Kerberos password there is no "current" to supply. So either:
userPassword, a different credential from the one being set. That is a materially different situation from decision 7's rejected self-service reset.kadminoperation — which decision 6 deliberately avoided, and is exactly why it rejected theCredentialInputUpdaterSPI (a privileged credential inside the most exposed service in the fleet).Neither is obviously right. This is the decision to make.
What must change once decided
Also worth considering
A third route nobody has costed: bridge
userPasswordfor enrolled users. Keycloak validates by binding as the user, so slapd does the comparison and a{SASL}value would satisfy it. ADR-0022 rejected{SASL}because Dovecot readsuserPasswordand compares it itself — but that objection weakens once M3 gives Dovecot a Kerberos passdb. Postfix's paths would need re-walking (smtpd_sender_login_mapsreads attributes rather than binding, and SMTP AUTH delegates to Dovecot). If it holds, it removes the dual-credential window entirely and preserves decision 4 intact. Unverified — listed so it is considered rather than rediscovered.Why this needs a human
It reverses a numbered decision in a merged ADR, trades off a security property (no dual-credential window) against operational feasibility, and the answer determines the build order for four milestones. It is a judgment call, not an implementation task.
Blocked by
Nothing. This should be settled before M4, M5 or M6 are filed as issues.