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()))
}
}