From 6bc672c4dc56f8b741e4357c70eb17670121d5a9 Mon Sep 17 00:00:00 2001 From: Nikias Bassen Date: Tue, 28 Jun 2022 11:53:57 +0200 Subject: Make sure to exactly match the passed variant when using --variant --- src/idevicerestore.c | 14 +++++++------- src/idevicerestore.h | 2 +- src/restore.c | 2 +- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/src/idevicerestore.c b/src/idevicerestore.c index ac628ca..23c48d5 100644 --- a/src/idevicerestore.c +++ b/src/idevicerestore.c @@ -835,11 +835,11 @@ int idevicerestore_start(struct idevicerestore_client_t* client) plist_dict_set_item(build_identity, "Manifest", manifest); } } else if (client->restore_variant) { - build_identity = build_manifest_get_build_identity_for_model_with_variant(client->build_manifest, client->device->hardware_model, client->restore_variant); + build_identity = build_manifest_get_build_identity_for_model_with_variant(client->build_manifest, client->device->hardware_model, client->restore_variant, 1); } else if (client->flags & FLAG_ERASE) { - build_identity = build_manifest_get_build_identity_for_model_with_variant(client->build_manifest, client->device->hardware_model, RESTORE_VARIANT_ERASE_INSTALL); + build_identity = build_manifest_get_build_identity_for_model_with_variant(client->build_manifest, client->device->hardware_model, RESTORE_VARIANT_ERASE_INSTALL, 0); } else { - build_identity = build_manifest_get_build_identity_for_model_with_variant(client->build_manifest, client->device->hardware_model, RESTORE_VARIANT_UPGRADE_INSTALL); + build_identity = build_manifest_get_build_identity_for_model_with_variant(client->build_manifest, client->device->hardware_model, RESTORE_VARIANT_UPGRADE_INSTALL, 0); if (!build_identity) { build_identity = build_manifest_get_build_identity_for_model(client->build_manifest, client->device->hardware_model); } @@ -849,7 +849,7 @@ int idevicerestore_start(struct idevicerestore_client_t* client) return -1; } - client->macos_variant = build_manifest_get_build_identity_for_model_with_variant(client->build_manifest, client->device->hardware_model, RESTORE_VARIANT_MACOS_RECOVERY_OS); + client->macos_variant = build_manifest_get_build_identity_for_model_with_variant(client->build_manifest, client->device->hardware_model, RESTORE_VARIANT_MACOS_RECOVERY_OS, 1); /* print information about current build identity */ build_identity_print_information(build_identity); @@ -1932,7 +1932,7 @@ int get_sep_nonce(struct idevicerestore_client_t* client, unsigned char** nonce, return 0; } -plist_t build_manifest_get_build_identity_for_model_with_variant(plist_t build_manifest, const char *hardware_model, const char *variant) +plist_t build_manifest_get_build_identity_for_model_with_variant(plist_t build_manifest, const char *hardware_model, const char *variant, int exact) { plist_t build_identities_array = plist_dict_get_item(build_manifest, "BuildIdentities"); if (!build_identities_array || plist_get_node_type(build_identities_array) != PLIST_ARRAY) { @@ -1966,7 +1966,7 @@ plist_t build_manifest_get_build_identity_for_model_with_variant(plist_t build_m str = plist_get_string_ptr(rvariant, NULL); if (strcmp(str, variant) != 0) { /* if it's not a full match, let's try a partial match, but ignore "*Research*" */ - if (strstr(str, variant) && !strstr(str, "Research")) { + if (!exact && strstr(str, variant) && !strstr(str, "Research")) { return ident; } continue; @@ -1983,7 +1983,7 @@ plist_t build_manifest_get_build_identity_for_model_with_variant(plist_t build_m plist_t build_manifest_get_build_identity_for_model(plist_t build_manifest, const char *hardware_model) { - return build_manifest_get_build_identity_for_model_with_variant(build_manifest, hardware_model, NULL); + return build_manifest_get_build_identity_for_model_with_variant(build_manifest, hardware_model, NULL, 0); } int get_preboard_manifest(struct idevicerestore_client_t* client, plist_t build_identity, plist_t* manifest) diff --git a/src/idevicerestore.h b/src/idevicerestore.h index 6f54b3e..8a5736f 100644 --- a/src/idevicerestore.h +++ b/src/idevicerestore.h @@ -105,7 +105,7 @@ int build_manifest_get_identity_count(plist_t build_manifest); int build_manifest_check_compatibility(plist_t build_manifest, const char* product); void build_manifest_get_version_information(plist_t build_manifest, struct idevicerestore_client_t* client); plist_t build_manifest_get_build_identity_for_model(plist_t build_manifest, const char *hardware_model); -plist_t build_manifest_get_build_identity_for_model_with_variant(plist_t build_manifest, const char *hardware_model, const char *variant); +plist_t build_manifest_get_build_identity_for_model_with_variant(plist_t build_manifest, const char *hardware_model, const char *variant, int exact); int build_manifest_get_build_count(plist_t build_manifest); void build_identity_print_information(plist_t build_identity); int build_identity_check_components_in_ipsw(plist_t build_identity, const char* ipsw); diff --git a/src/restore.c b/src/restore.c index 61edad4..7f7e903 100644 --- a/src/restore.c +++ b/src/restore.c @@ -3261,7 +3261,7 @@ plist_t restore_get_build_identity(struct idevicerestore_client_t* client, uint8 plist_t build_identity = build_manifest_get_build_identity_for_model_with_variant( client->build_manifest, client->device->hardware_model, - variant); + variant, 0); plist_t unique_id_node = plist_dict_get_item(client->build_manifest, "UniqueBuildID"); debug_plist(unique_id_node); -- cgit v1.1-32-gdbae