@@ -181,6 +181,7 @@ pub trait UserBackend: Send + Sync {
181181 user. to_string ( )
182182 }
183183 }
184+ async fn is_same_realm ( & self , realm : & str ) -> bool ;
184185 async fn get_user ( & self , username : & str , realm : Option < & str > ) -> Result < SipUser > ;
185186 async fn create_user ( & self , _user : SipUser ) -> Result < ( ) > {
186187 Ok ( ( ) )
@@ -283,6 +284,10 @@ impl MemoryUserBackend {
283284
284285#[ async_trait]
285286impl UserBackend for MemoryUserBackend {
287+ async fn is_same_realm ( & self , realm : & str ) -> bool {
288+ return realm. is_empty ( ) ;
289+ }
290+
286291 fn get_identifier ( & self , user : & str , realm : Option < & str > ) -> String {
287292 Self :: get_identifier ( user, realm)
288293 }
@@ -292,7 +297,18 @@ impl UserBackend for MemoryUserBackend {
292297 let identifier = self . get_identifier ( username, realm) ;
293298 let mut user = match users. get ( & identifier) {
294299 Some ( user) => user. clone ( ) ,
295- None => return Err ( anyhow:: anyhow!( "missing user: {}" , identifier) ) ,
300+ None => {
301+ match users. get ( username) {
302+ Some ( user) => {
303+ if user. realm . as_ref ( ) . is_some_and ( |r| !r. is_empty ( ) ) {
304+ return Err ( anyhow:: anyhow!( "missing user: {}" , identifier) ) ;
305+ }
306+ return Ok ( user. clone ( ) ) ;
307+ }
308+ None => { }
309+ }
310+ return Err ( anyhow:: anyhow!( "missing user: {}" , identifier) ) ;
311+ }
296312 } ;
297313 user. realm = realm. map ( |r| r. to_string ( ) ) ;
298314 Ok ( user)
0 commit comments