@@ -795,38 +795,44 @@ async def _request_authentication(self):
795795 "for auth method %r" , auth_plugin )
796796
797797 async def _process_auth (self , plugin_name , auth_packet ):
798+ # These auth plugins do their own packet handling
798799 if plugin_name == b"caching_sha2_password" :
799- return self .caching_sha2_password_auth (auth_packet )
800+ await self .caching_sha2_password_auth (auth_packet )
800801 elif plugin_name == b"sha256_password" :
801- return self .sha256_password_auth (auth_packet )
802- elif plugin_name == b"mysql_native_password" :
803- # https://dev.mysql.com/doc/internals/en/
804- # secure-password-authentication.html#packet-Authentication::
805- # Native41
806- data = _auth .scramble_native_password (
807- self ._password .encode ('latin1' ),
808- auth_packet .read_all ())
809- elif plugin_name == b"mysql_old_password" :
810- # https://dev.mysql.com/doc/internals/en/
811- # old-password-authentication.html
812- data = _auth .scramble_old_password (self ._password .encode ('latin1' ),
813- auth_packet .read_all ()) + b'\0 '
814- elif plugin_name == b"mysql_clear_password" :
815- # https://dev.mysql.com/doc/internals/en/
816- # clear-text-authentication.html
817- data = self ._password .encode ('latin1' ) + b'\0 '
802+ await self .sha256_password_auth (auth_packet )
818803 else :
819- raise OperationalError (
820- 2059 , "Authentication plugin '%s' not configured" % plugin_name
821- )
822804
823- self .write_packet (data )
824- pkt = await self ._read_packet ()
825- pkt .check_error ()
805+ if plugin_name == b"mysql_native_password" :
806+ # https://dev.mysql.com/doc/internals/en/
807+ # secure-password-authentication.html#packet-Authentication::
808+ # Native41
809+ data = _auth .scramble_native_password (
810+ self ._password .encode ('latin1' ),
811+ auth_packet .read_all ())
812+ elif plugin_name == b"mysql_old_password" :
813+ # https://dev.mysql.com/doc/internals/en/
814+ # old-password-authentication.html
815+ data = _auth .scramble_old_password (
816+ self ._password .encode ('latin1' ),
817+ auth_packet .read_all ()
818+ ) + b'\0 '
819+ elif plugin_name == b"mysql_clear_password" :
820+ # https://dev.mysql.com/doc/internals/en/
821+ # clear-text-authentication.html
822+ data = self ._password .encode ('latin1' ) + b'\0 '
823+ else :
824+ raise OperationalError (
825+ 2059 , "Authentication plugin '{0}'"
826+ " not configured" .format (plugin_name )
827+ )
828+
829+ self .write_packet (data )
830+ pkt = await self ._read_packet ()
831+ pkt .check_error ()
826832
827- self ._auth_plugin_used = plugin_name
833+ self ._auth_plugin_used = plugin_name
828834
829- return pkt
835+ return pkt
830836
831837 async def caching_sha2_password_auth (self , pkt ):
832838 # No password fast path
0 commit comments