Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
This PR updates the hello command so that all validation is done before either the name is applied or authentication is checked. Additionally, only one authentication or name is ever applied, with the following rules:
What is the motivation for this change?
This change came up while discussing the design for #10709, since it becomes awkward to yield multiple times to handle authentication. This change simplifies the code so only one callback ever needs to be triggered.
Is this a breaking change?
In a sense it is. All previously valid commands will continue to be valid and return the same result. A valid command is a command that contains only valid username password combinations and valid setnames. This change may behave differently when an error is thrown. There are a couple of new exemplar modes:
HELLO 2 SETNAME FOO AUTH INVALID PASSWORD
: This command would previously set the client name to foo, before throwing an error about an invalid password. It will no longer set the client name to foo and still error the same way.HELLO 2 AUTH INVALID PASSWORD AUTH VALID PASSWORD
: This command would previously fail with an error about an invalid password, since the first password is invalid. It will now succeed, since the last authentication is valid.