From 532d447b9efed7a6aeb83922fb1d3359b7e37682 Mon Sep 17 00:00:00 2001
From: Matt Johnston <matt@ucc.asn.au>
Date: Sun, 14 May 2023 23:06:29 +0800
Subject: [PATCH] Make auth_unchallenged async

More async auth methods will probably follow
---
 src/behaviour.rs |  2 +-
 src/conn.rs      |  2 +-
 src/servauth.rs  | 12 ++++++------
 3 files changed, 8 insertions(+), 8 deletions(-)

diff --git a/src/behaviour.rs b/src/behaviour.rs
index 207f818..7cb3bdd 100644
--- a/src/behaviour.rs
+++ b/src/behaviour.rs
@@ -226,7 +226,7 @@ pub trait ServBehaviour {
     ///
     /// Implementations may need to take care to avoid leaking user existence
     /// based on timing.
-    fn auth_unchallenged(&mut self, username: TextString) -> bool {
+    async fn auth_unchallenged(&mut self, username: TextString<'_>) -> bool {
         false
     }
 
diff --git a/src/conn.rs b/src/conn.rs
index e275df9..ab41414 100644
--- a/src/conn.rs
+++ b/src/conn.rs
@@ -305,7 +305,7 @@ impl<C: CliBehaviour, S: ServBehaviour> Conn<C, S> {
                 if let ClientServer::Server(serv) = &mut self.cliserv {
                     disp.zeroize_payload = true;
                     let sess_id = self.sess_id.as_ref().trap()?;
-                    let success = serv.auth.request(p, sess_id, s, b.server()?)?;
+                    let success = serv.auth.request(p, sess_id, s, b.server()?).await?;
                     if success {
                         self.state = ConnState::Authed;
                     }
diff --git a/src/servauth.rs b/src/servauth.rs
index 4ce8bc4..5b701ee 100644
--- a/src/servauth.rs
+++ b/src/servauth.rs
@@ -21,11 +21,11 @@ impl ServAuth {
     }
 
     /// Returns `true` if auth succeeds
-    pub fn request(
+    pub async fn request(
         &mut self,
-        mut p: packets::UserauthRequest,
+        mut p: packets::UserauthRequest<'_>,
         sess_id: &SessId,
-        s: &mut TrafSend,
+        s: &mut TrafSend<'_, '_>,
         b: &mut impl ServBehaviour,
     ) -> Result<bool> {
 
@@ -38,9 +38,9 @@ impl ServAuth {
 
         let username = p.username.clone();
 
-        let inner = || {
+        let inner = async {
             // even allows "none" auth
-            if b.auth_unchallenged(p.username) {
+            if b.auth_unchallenged(p.username).await {
                 return Ok(AuthResp::Success) as Result<_>
             }
 
@@ -80,7 +80,7 @@ impl ServAuth {
         };
 
         // failure sends a list of available methods
-        match inner()? {
+        match inner.await? {
             AuthResp::Success => {
                 self.authed = true;
                 s.send(packets::UserauthSuccess {})?;
-- 
GitLab