-
Notifications
You must be signed in to change notification settings - Fork 2.3k
Fix mysql_clear_password
plugin on auth switch panic.
#646
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
Conversation
We literally just run into something very similar
Edit: Included for completeness, this is what AWS Aurora is spitting at us, which is why I added the if check
|
@@ -495,7 +499,7 @@ func (mc *mysqlConn) readResultOK() ([]byte, error) { | |||
if len(data) > 1 { | |||
pluginEndIndex := bytes.IndexByte(data, 0x00) | |||
plugin := string(data[1:pluginEndIndex]) | |||
cipher := data[pluginEndIndex+1 : len(data)-1] | |||
cipher := data[pluginEndIndex+1:] |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
does this still work if the mysql server appends 0x00
?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@julienschmidt with all due respect to @elemount but with an eye on expediency (we've got a bunch devs hung up on this), would it be acceptable for me to re-submit this merge request with my changes which answers the question of the appended 0x00
?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@julienschmidt , it depends how the protocol define. In protocol, the cipher is a string[EOF], and it must be string[EOF], string[NUL] is impossible, for the auth data(many times is a random salt) may contains the 0x00
inside, . So 0x00
must be the data which the auth plugin pass, so depends on the auth plugin itself to decide how to deal with it.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I tested it :D
https://play.golang.org/p/f2oGHOwj8H
@elemount fixes it, turns out my if is overkill :D
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
My concern was if it breaks native password auth, since it changes the behavior introduced in #494.
But this is actually addressed in this PR by slicing the data to the specified size, so everything should be fine.
Description
'mysql_clear_password' plugin on auth switch parse will panic on normal situation. To fix issue #636 , which is a bug by the code.
The root cause is that
Checklist