improvements in channel binding

This commit is contained in:
lumi 2017-03-07 18:38:21 +01:00
commit 9d57e1a63b

View file

@ -158,18 +158,22 @@ impl Client {
let ms = &features.sasl_mechanisms.ok_or(Error::SaslError(Some("no SASL mechanisms".to_owned())))?; let ms = &features.sasl_mechanisms.ok_or(Error::SaslError(Some("no SASL mechanisms".to_owned())))?;
fn wrap_err(err: String) -> Error { Error::SaslError(Some(err)) } fn wrap_err(err: String) -> Error { Error::SaslError(Some(err)) }
// TODO: better way for selecting these, enabling anonymous auth // TODO: better way for selecting these, enabling anonymous auth
let mut mechanism: Box<SaslMechanism> = if ms.contains("SCRAM-SHA-256-PLUS") { let mut mechanism: Box<SaslMechanism> = if ms.contains("SCRAM-SHA-256-PLUS") && credentials.channel_binding != ChannelBinding::None {
Box::new(Scram::<Sha256>::from_credentials(credentials).map_err(wrap_err)?) Box::new(Scram::<Sha256>::from_credentials(credentials).map_err(wrap_err)?)
} }
else if ms.contains("SCRAM-SHA-1-PLUS") { else if ms.contains("SCRAM-SHA-1-PLUS") && credentials.channel_binding != ChannelBinding::None {
Box::new(Scram::<Sha1>::from_credentials(credentials).map_err(wrap_err)?) Box::new(Scram::<Sha1>::from_credentials(credentials).map_err(wrap_err)?)
} }
else if ms.contains("SCRAM-SHA-256") { else if ms.contains("SCRAM-SHA-256") {
if credentials.channel_binding != ChannelBinding::None {
credentials.channel_binding = ChannelBinding::Unsupported; credentials.channel_binding = ChannelBinding::Unsupported;
}
Box::new(Scram::<Sha256>::from_credentials(credentials).map_err(wrap_err)?) Box::new(Scram::<Sha256>::from_credentials(credentials).map_err(wrap_err)?)
} }
else if ms.contains("SCRAM-SHA-1") { else if ms.contains("SCRAM-SHA-1") {
if credentials.channel_binding != ChannelBinding::None {
credentials.channel_binding = ChannelBinding::Unsupported; credentials.channel_binding = ChannelBinding::Unsupported;
}
Box::new(Scram::<Sha1>::from_credentials(credentials).map_err(wrap_err)?) Box::new(Scram::<Sha1>::from_credentials(credentials).map_err(wrap_err)?)
} }
else if ms.contains("PLAIN") { else if ms.contains("PLAIN") {