Implement SASL ANONYMOUS on the server side

Fixes #11.
This commit is contained in:
Emmanuel Gil Peyrot 2021-12-25 16:15:08 +01:00
commit 3a802eb193
3 changed files with 40 additions and 0 deletions

View file

@ -0,0 +1,28 @@
use crate::common::Identity;
use crate::server::{Mechanism, MechanismError, Response};
use getrandom::getrandom;
pub struct Anonymous;
impl Anonymous {
pub fn new() -> Anonymous {
Anonymous
}
}
impl Mechanism for Anonymous {
fn name(&self) -> &str {
"ANONYMOUS"
}
fn respond(&mut self, payload: &[u8]) -> Result<Response, MechanismError> {
if !payload.is_empty() {
return Err(MechanismError::FailedToDecodeMessage);
}
let mut rand = [0u8; 16];
getrandom(&mut rand)?;
let username = format!("{:02x?}", rand);
let ident = Identity::Username(username);
Ok(Response::Success(ident, Vec::new()))
}
}

View file

@ -1,7 +1,9 @@
mod anonymous;
mod plain;
#[cfg(feature = "scram")]
mod scram;
pub use self::anonymous::Anonymous;
pub use self::plain::Plain;
#[cfg(feature = "scram")]
pub use self::scram::Scram;