@@ -422,13 +422,13 @@ public async Task DisposeAsync(IOBehavior ioBehavior, CancellationToken cancella
422422 }
423423 }
424424
425- var connected = false ;
426- if ( cs . ConnectionProtocol == MySqlConnectionProtocol . Sockets )
427- connected = await OpenTcpSocketAsync ( cs , loadBalancer ?? throw new ArgumentNullException ( nameof ( loadBalancer ) ) , activity , ioBehavior , cancellationToken ) . ConfigureAwait ( false ) ;
428- else if ( cs . ConnectionProtocol == MySqlConnectionProtocol . UnixSocket )
429- connected = await OpenUnixSocketAsync ( cs , activity , ioBehavior , cancellationToken ) . ConfigureAwait ( false ) ;
430- else if ( cs . ConnectionProtocol == MySqlConnectionProtocol . NamedPipe )
431- connected = await OpenNamedPipeAsync ( cs , startingTimestamp , activity , ioBehavior , cancellationToken ) . ConfigureAwait ( false ) ;
425+ var connected = cs . ConnectionProtocol switch
426+ {
427+ MySqlConnectionProtocol . Sockets => await OpenTcpSocketAsync ( cs , loadBalancer ?? throw new ArgumentNullException ( nameof ( loadBalancer ) ) , activity , ioBehavior , cancellationToken ) . ConfigureAwait ( false ) ,
428+ MySqlConnectionProtocol . UnixSocket => await OpenUnixSocketAsync ( cs , activity , ioBehavior , cancellationToken ) . ConfigureAwait ( false ) ,
429+ MySqlConnectionProtocol . NamedPipe => await OpenNamedPipeAsync ( cs , startingTimestamp , activity , ioBehavior , cancellationToken ) . ConfigureAwait ( false ) ,
430+ _ => false ,
431+ } ;
432432 if ( ! connected )
433433 {
434434 lock ( m_lock )
@@ -686,12 +686,13 @@ private async Task<PayloadData> SwitchAuthenticationAsync(ConnectionSettings cs,
686686 return await ReceiveReplyAsync ( ioBehavior , cancellationToken ) . ConfigureAwait ( false ) ;
687687
688688 case "caching_sha2_password" :
689+ // see https://dev.mysql.com/doc/dev/mysql-server/latest/page_caching_sha2_authentication_exchanges.html
689690 var scrambleBytes = AuthenticationUtility . CreateScrambleResponse ( Utility . TrimZeroByte ( switchRequest . Data . AsSpan ( ) ) , password ) ;
690691 payload = new ( scrambleBytes ) ;
691692 await SendReplyAsync ( payload , ioBehavior , cancellationToken ) . ConfigureAwait ( false ) ;
692693 payload = await ReceiveReplyAsync ( ioBehavior , cancellationToken ) . ConfigureAwait ( false ) ;
693694
694- // OK payload can be sent immediately (e.g., if password is empty( (short-circuiting the )
695+ // OK payload can be sent immediately (e.g., if password is empty) bypassing even the fast authentication path
695696 if ( OkPayload . IsOk ( payload . Span , SupportsDeprecateEof ) )
696697 return payload ;
697698
@@ -814,7 +815,7 @@ private async Task<string> GetRsaPublicKeyAsync(string switchRequestName, Connec
814815 {
815816 // request the RSA public key
816817 var payloadContent = switchRequestName == "caching_sha2_password" ? ( byte ) 0x02 : ( byte ) 0x01 ;
817- await SendReplyAsync ( new PayloadData ( [ payloadContent ] ) , ioBehavior , cancellationToken ) . ConfigureAwait ( false ) ;
818+ await SendReplyAsync ( new PayloadData ( [ payloadContent ] ) , ioBehavior , cancellationToken ) . ConfigureAwait ( false ) ;
818819 var payload = await ReceiveReplyAsync ( ioBehavior , cancellationToken ) . ConfigureAwait ( false ) ;
819820 var publicKeyPayload = AuthenticationMoreDataPayload . Create ( payload . Span ) ;
820821 return Encoding . ASCII . GetString ( publicKeyPayload . Data ) ;
0 commit comments