Эх сурвалжийг харах

discover: do not panic on MAC mismatch. (Fixes #289)

The client's expected MAC will not match librespot's derived MAC
if the client used the wrong public key. This can happen if librespot
is restarted (and thus generated a new key) but the client is still
mistakingly using the old public key. When this happens we do not need
to panic, we can just abort the connection attempt.
Nick Steel 6 жил өмнө
parent
commit
4c1562f245
1 өөрчлөгдсөн 11 нэмэгдсэн , 1 устгасан
  1. 11 1
      connect/src/discovery.rs

+ 11 - 1
connect/src/discovery.rs

@@ -132,7 +132,17 @@ impl Discovery {
             h.result().code().to_owned()
         };
 
-        assert_eq!(&mac[..], cksum);
+        if mac != cksum {
+            warn!("Login error for user {:?}: MAC mismatch", username);
+            let result = json!({
+                "status": 102,
+                "spotifyError": 1,
+                "statusString": "ERROR-MAC"
+            });
+
+            let body = result.to_string();
+            return ::futures::finished(Response::new().with_body(body))
+        }
 
         let decrypted = {
             let mut data = vec![0u8; encrypted.len()];