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

View file

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