1
0
Fork 0
forked from wry/wry

dbus: simplify auth function

This commit is contained in:
Julian Orth 2026-01-18 16:01:33 +01:00
parent 3d7dc1161f
commit d84d4edd90
2 changed files with 21 additions and 25 deletions

View file

@ -52,38 +52,33 @@ impl Auth {
}
async fn handle_auth(&mut self) -> Result<(), DbusError> {
let mut out_buf = Buf::new(128);
{
let buf = out_buf
.write_fmt(format_args!("\0AUTH EXTERNAL\r\nDATA\r\n"))
.unwrap();
self.write_buf(buf).await?;
// dbus-broker hard codes this initial burst of messages
const AUTH: &str = "\
\0\
AUTH EXTERNAL\r\n\
DATA\r\n\
NEGOTIATE_UNIX_FD\r\n\
BEGIN\r\n\
";
let out_buf = Buf::from_slice(AUTH.as_bytes());
self.write_buf(out_buf).await?;
let mut line;
macro_rules! read_cmd {
() => {{
line = self.readline().await?;
let (cmd, _) = line_to_cmd(&line);
cmd
}};
}
let line = self.readline().await?;
let (cmd, _) = line_to_cmd(&line);
if cmd != "DATA" {
if read_cmd!() != "DATA" {
return Err(DbusError::NoChallenge);
}
let line = self.readline().await?;
let (cmd, _) = line_to_cmd(&line);
if cmd != "OK" {
if read_cmd!() != "OK" {
return Err(DbusError::Auth);
}
{
let buf = out_buf
.write_fmt(format_args!("NEGOTIATE_UNIX_FD\r\n"))
.unwrap();
self.write_buf(buf).await?;
}
let line = self.readline().await?;
let (cmd, _) = line_to_cmd(&line);
if cmd != "AGREE_UNIX_FD" {
if read_cmd!() != "AGREE_UNIX_FD" {
return Err(DbusError::UnixFd);
}
{
let buf = out_buf.write_fmt(format_args!("BEGIN\r\n")).unwrap();
self.write_buf(buf).await?;
}
Ok(())
}

View file

@ -145,6 +145,7 @@ impl Buf {
unsafe { self.storage.as_ptr().add(self.range.start as _) }
}
#[expect(dead_code)]
pub fn write_fmt(&mut self, args: Arguments) -> Result<Self, io::Error> {
let cap = self.len();
let mut buf = self.deref_mut();