From f03de54cbf6f7a9ed61ccf40e7d5f9d9723df4f0 Mon Sep 17 00:00:00 2001 From: Xare123 <57245242+Xare123@users.noreply.github.com> Date: Fri, 24 Jul 2026 11:41:56 -0700 Subject: [PATCH 1/6] Use resilient anisette provisioning client --- .gitmodules | 2 +- apple-private-apis | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.gitmodules b/.gitmodules index 91d6d2d..87c895b 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,6 +1,6 @@ [submodule "apple-private-apis"] path = apple-private-apis - url = git@github.com:OpenBubbles/apple-private-apis.git + url = https://github.com/Xare123/apple-private-apis.git [submodule "open-absinthe"] path = open-absinthe url = git@github.com:OpenBubbles/OpenAbsinthe-Stub.git diff --git a/apple-private-apis b/apple-private-apis index e1c2b0b..9da2af6 160000 --- a/apple-private-apis +++ b/apple-private-apis @@ -1 +1 @@ -Subproject commit e1c2b0b26bc0d1e9ef04191b8d31c079ee625586 +Subproject commit 9da2af6db8a89163f42810d7022d444d4dc51c2f From 82dfa0100db8fdd42a07873ba25869fc44518d4f Mon Sep 17 00:00:00 2001 From: Xare123 <57245242+Xare123@users.noreply.github.com> Date: Fri, 24 Jul 2026 12:15:32 -0700 Subject: [PATCH 2/6] Fix provisioning attempt error conversion --- apple-private-apis | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apple-private-apis b/apple-private-apis index 9da2af6..eff3980 160000 --- a/apple-private-apis +++ b/apple-private-apis @@ -1 +1 @@ -Subproject commit 9da2af6db8a89163f42810d7022d444d4dc51c2f +Subproject commit eff3980b7de235e48c01d99a5d6ac160f99b9db1 From 38ddc729fca8fccb33d48a70a43ee51a50524432 Mon Sep 17 00:00:00 2001 From: Xare123 <57245242+Xare123@users.noreply.github.com> Date: Fri, 24 Jul 2026 12:20:33 -0700 Subject: [PATCH 3/6] Retry anisette transport failures --- apple-private-apis | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apple-private-apis b/apple-private-apis index eff3980..a7d7e5f 160000 --- a/apple-private-apis +++ b/apple-private-apis @@ -1 +1 @@ -Subproject commit eff3980b7de235e48c01d99a5d6ac160f99b9db1 +Subproject commit a7d7e5f9a7a952b520e0d029d82dc144a8e9f4a7 From 28b20cd0551402348b4d53e346c08db0b2bf6462 Mon Sep 17 00:00:00 2001 From: Xare123 <57245242+Xare123@users.noreply.github.com> Date: Fri, 24 Jul 2026 18:11:16 -0700 Subject: [PATCH 4/6] Use upstream apple-private-apis submodule --- .gitmodules | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitmodules b/.gitmodules index 87c895b..babd9a9 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,6 +1,6 @@ [submodule "apple-private-apis"] path = apple-private-apis - url = https://github.com/Xare123/apple-private-apis.git + url = https://github.com/OpenBubbles/apple-private-apis.git [submodule "open-absinthe"] path = open-absinthe url = git@github.com:OpenBubbles/OpenAbsinthe-Stub.git From 359ddf3c4c6e0d34efa0219f26c41b719f9b57a3 Mon Sep 17 00:00:00 2001 From: Xare123 <57245242+Xare123@users.noreply.github.com> Date: Fri, 24 Jul 2026 18:20:52 -0700 Subject: [PATCH 5/6] Use HTTPS for OpenAbsinthe submodule --- .gitmodules | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitmodules b/.gitmodules index babd9a9..d7dc513 100644 --- a/.gitmodules +++ b/.gitmodules @@ -3,4 +3,4 @@ url = https://github.com/OpenBubbles/apple-private-apis.git [submodule "open-absinthe"] path = open-absinthe - url = git@github.com:OpenBubbles/OpenAbsinthe-Stub.git + url = https://github.com/OpenBubbles/OpenAbsinthe-Stub.git From e5e76919ceb9bf6e2fc05c8ad641430ffcfeb588 Mon Sep 17 00:00:00 2001 From: Xare123 <57245242+Xare123@users.noreply.github.com> Date: Tue, 28 Jul 2026 14:39:54 -0700 Subject: [PATCH 6/6] Handle IDS alias errors without leaking responses --- src/ids/user.rs | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/src/ids/user.rs b/src/ids/user.rs index df97ecc..24f36bf 100644 --- a/src/ids/user.rs +++ b/src/ids/user.rs @@ -804,19 +804,18 @@ impl IDSUser { .send(&REQWEST).await? .bytes().await?; - info!("Got alias response {}", str::from_utf8(&bytes).expect("Bytes to urtf8")); - #[derive(Deserialize)] struct AliasResult { - alias: String, + #[serde(default)] + alias: Option, status: u32, } let parsed: AliasResult = plist::from_bytes(&bytes)?; - *alias = Some(parsed.alias); if parsed.status != 0 { return Err(PushError::AliasError(parsed.status)) } + *alias = Some(parsed.alias.ok_or(PushError::BadMsg)?); info!("Just took action {operation} on alias {} for handle {handle}", alias.as_ref().expect("No alias!"));