From d84d4edd902e7ffc66ede1ab8ba7657209f18982 Mon Sep 17 00:00:00 2001 From: Julian Orth Date: Sun, 18 Jan 2026 16:01:33 +0100 Subject: [PATCH] dbus: simplify auth function --- src/dbus/auth.rs | 45 ++++++++++++++++++++------------------------- src/utils/buf.rs | 1 + 2 files changed, 21 insertions(+), 25 deletions(-) diff --git a/src/dbus/auth.rs b/src/dbus/auth.rs index a4685966..344d2697 100644 --- a/src/dbus/auth.rs +++ b/src/dbus/auth.rs @@ -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(()) } diff --git a/src/utils/buf.rs b/src/utils/buf.rs index 293f0f5c..b1d87b9d 100644 --- a/src/utils/buf.rs +++ b/src/utils/buf.rs @@ -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 { let cap = self.len(); let mut buf = self.deref_mut();