[krbdev.mit.edu #9037] Race condition in krb5_set_password()

"Greg Hudson via RT" <[email protected]> Fri, 12 Nov 2021 13:04:40 -0500
Newsgroups gmane.comp.encryption.kerberos.bugs
Message-ID <rt-4.4.3-2-71932-1636740280-1540.9037-5-0@kerborg-prod-app-1.mit.edu>
<URL: http://kerborg-prod-app-1.mit.edu/rt/Ticket/Display.html?id=9037 >

After some thought, I think a reasonable strategy is to try TCP only, and
after that completely fails, try UDP only.  This will have terrible
performance if TCP/464 is blackholed, but it will at least work.

I can see two basic implementation directions: we could define a new
k5_transport_strategy and handle this within k5_sendto(), or we could make two
separate calls to k5_sendto().  The latter option still requires an adjustment
to the internal k5_locate/k5_sendto APIs since we can't currently ask for UDP
only.

This plan does not rule out potential TCP-only races involving multiple admin
servers, but I think we can defer worrying about that until it becomes a real
issue.