diff --git a/sasl/src/client/mechanisms/scram.rs b/sasl/src/client/mechanisms/scram.rs index bec1fda3..0cad90ff 100644 --- a/sasl/src/client/mechanisms/scram.rs +++ b/sasl/src/client/mechanisms/scram.rs @@ -24,6 +24,7 @@ enum ScramState { /// A struct for the SASL SCRAM-* and SCRAM-*-PLUS mechanisms. pub struct Scram { name: String, + name_plus: String, username: String, password: Password, client_nonce: String, @@ -45,6 +46,7 @@ impl Scram { ) -> Result, Error> { Ok(Scram { name: format!("SCRAM-{}", S::name()), + name_plus: format!("SCRAM-{}-PLUS", S::name()), username: username.into(), password: password.into(), client_nonce: generate_nonce()?, @@ -64,6 +66,7 @@ impl Scram { ) -> Scram { Scram { name: format!("SCRAM-{}", S::name()), + name_plus: format!("SCRAM-{}-PLUS", S::name()), username: username.into(), password: password.into(), client_nonce: nonce, @@ -77,7 +80,10 @@ impl Scram { impl Mechanism for Scram { fn name(&self) -> &str { // TODO: this is quite the workaround… - &self.name + match self.channel_binding { + ChannelBinding::None | ChannelBinding::Unsupported => &self.name, + ChannelBinding::TlsUnique(_) | ChannelBinding::TlsExporter(_) => &self.name_plus, + } } fn from_credentials(credentials: Credentials) -> Result, MechanismError> {