1+ // This file was modified by Oracle on July 5, 2021.
2+ // Errors generated by asynchronous authentication plugins are now being
3+ // handled and subsequently emitted at the command level.
4+ // Modifications copyright (c) 2021, Oracle and/or its affiliates.
5+
16'use strict' ;
27
38const Packets = require ( '../packets/index.js' ) ;
@@ -17,6 +22,14 @@ function warnLegacyAuthSwitch() {
1722 ) ;
1823}
1924
25+ function authSwitchPluginError ( error , command ) {
26+ // Authentication errors are fatal
27+ error . code = 'AUTH_SWITCH_PLUGIN_ERROR' ;
28+ error . fatal = true ;
29+
30+ command . emit ( 'error' , error ) ;
31+ }
32+
2033function authSwitchRequest ( packet , connection , command ) {
2134 const { pluginName, pluginData } = Packets . AuthSwitchRequest . fromPacket (
2235 packet
@@ -34,8 +47,7 @@ function authSwitchRequest(packet, connection, command) {
3447 warnLegacyAuthSwitch ( ) ;
3548 legacySwitchHandler ( { pluginName, pluginData } , ( err , data ) => {
3649 if ( err ) {
37- connection . emit ( 'error' , err ) ;
38- return ;
50+ return authSwitchPluginError ( err , command ) ;
3951 }
4052 connection . writePacket ( new Packets . AuthSwitchResponse ( data ) . toPacket ( ) ) ;
4153 } ) ;
@@ -54,19 +66,20 @@ function authSwitchRequest(packet, connection, command) {
5466 if ( data ) {
5567 connection . writePacket ( new Packets . AuthSwitchResponse ( data ) . toPacket ( ) ) ;
5668 }
69+ } ) . catch ( err => {
70+ authSwitchPluginError ( err , command ) ;
5771 } ) ;
5872}
5973
60- function authSwitchRequestMoreData ( packet , connection ) {
74+ function authSwitchRequestMoreData ( packet , connection , command ) {
6175 const { data } = Packets . AuthSwitchRequestMoreData . fromPacket ( packet ) ;
6276
6377 if ( connection . config . authSwitchHandler ) {
6478 const legacySwitchHandler = connection . config . authSwitchHandler ;
6579 warnLegacyAuthSwitch ( ) ;
6680 legacySwitchHandler ( { pluginData : data } , ( err , data ) => {
6781 if ( err ) {
68- connection . emit ( 'error' , err ) ;
69- return ;
82+ return authSwitchPluginError ( err , command ) ;
7083 }
7184 connection . writePacket ( new Packets . AuthSwitchResponse ( data ) . toPacket ( ) ) ;
7285 } ) ;
@@ -82,6 +95,8 @@ function authSwitchRequestMoreData(packet, connection) {
8295 if ( data ) {
8396 connection . writePacket ( new Packets . AuthSwitchResponse ( data ) . toPacket ( ) ) ;
8497 }
98+ } ) . catch ( err => {
99+ authSwitchPluginError ( err , command ) ;
85100 } ) ;
86101}
87102
0 commit comments