Skip to content

Commit

Permalink
Fix update restore by making sure the premanifest is properly generated
Browse files Browse the repository at this point in the history
  • Loading branch information
nikias committed Nov 9, 2023
1 parent 6085ed7 commit 10c15d5
Show file tree
Hide file tree
Showing 3 changed files with 32 additions and 14 deletions.
4 changes: 2 additions & 2 deletions src/idevicerestore.c
Original file line number Diff line number Diff line change
Expand Up @@ -1981,7 +1981,7 @@ int get_preboard_manifest(struct idevicerestore_client_t* client, plist_t build_
plist_t overrides = plist_new_dict();
plist_dict_set_item(overrides, "@APTicket", plist_new_bool(1));
plist_dict_set_item(overrides, "ApProductionMode", plist_new_uint(0));
plist_dict_set_item(overrides, "ApSecurityDomain", plist_new_uint(0));
plist_dict_set_item(overrides, "ApSecurityDomain", plist_new_uint(1));

plist_dict_set_item(parameters, "ApProductionMode", plist_new_bool(0));
plist_dict_set_item(parameters, "ApSecurityMode", plist_new_bool(0));
Expand All @@ -2005,7 +2005,7 @@ int get_preboard_manifest(struct idevicerestore_client_t* client, plist_t build_
return -1;
}

plist_dict_set_item(parameters, "_OnlyFWComponents", plist_new_bool(1));
plist_dict_set_item(parameters, "_OnlyFWOrTrustedComponents", plist_new_bool(1));

/* add tags from manifest */
if (tss_request_add_ap_tags(request, parameters, NULL) < 0) {
Expand Down
11 changes: 5 additions & 6 deletions src/img4.c
Original file line number Diff line number Diff line change
Expand Up @@ -844,13 +844,12 @@ int img4_create_local_manifest(plist_t request, plist_t build_identity, plist_t*
comp = _img4_get_component_tag(key);
}
if (!comp) {
error("ERROR: %s: Unhandled component '%s' - can't create manifest\n", __func__, key);
free(iter);
free(buf);
return -1;
debug("DEBUG: %s: Unhandled component '%s'\n", __func__, key);
_manifest_write_component(&p, &length, key, val);
} else {
debug("DEBUG: found component %s (%s)\n", comp, key);
_manifest_write_component(&p, &length, comp, val);
}
debug("DEBUG: found component %s (%s)\n", comp, key);
_manifest_write_component(&p, &length, comp, val);
}
free(key);
} while (val);
Expand Down
31 changes: 25 additions & 6 deletions src/tss.c
Original file line number Diff line number Diff line change
Expand Up @@ -582,8 +582,15 @@ int tss_request_add_ap_recovery_tags(plist_t request, plist_t parameters, plist_
continue;
}

if (!_plist_dict_get_bool(info_dict, "IsFirmwarePayload") && !_plist_dict_get_bool(info_dict, "IsSecondaryFirmwarePayload") && !_plist_dict_get_bool(info_dict, "IsFUDFirmware")) {
debug("DEBUG: %s: Skipping '%s' as it is neither firmware nor secondary nor FUD firmware payload\n", __func__, key);
if (!_plist_dict_get_bool(info_dict, "IsFirmwarePayload")
&& !_plist_dict_get_bool(info_dict, "IsSecondaryFirmwarePayload")
&& !_plist_dict_get_bool(info_dict, "IsFUDFirmware")
&& !_plist_dict_get_bool(info_dict, "IsLoadedByiBoot")
&& !_plist_dict_get_bool(info_dict, "IsEarlyAccessFirmware")
&& !_plist_dict_get_bool(info_dict, "IsiBootEANFirmware")
&& !_plist_dict_get_bool(info_dict, "IsiBootNonEssentialFirmware"))
{
debug("DEBUG: %s: Skipping '%s' as it is not a firmware payload\n", __func__, key);
continue;
}
}
Expand Down Expand Up @@ -679,14 +686,26 @@ int tss_request_add_ap_tags(plist_t request, plist_t parameters, plist_t overrid
}
}

if (_plist_dict_get_bool(parameters, "_OnlyFWComponents")) {
int is_fw_payload = _plist_dict_get_bool(info_dict, "IsFirmwarePayload")
|| _plist_dict_get_bool(info_dict, "IsSecondaryFirmwarePayload")
|| _plist_dict_get_bool(info_dict, "IsFUDFirmware")
|| _plist_dict_get_bool(info_dict, "IsLoadedByiBoot")
|| _plist_dict_get_bool(info_dict, "IsEarlyAccessFirmware")
|| _plist_dict_get_bool(info_dict, "IsiBootEANFirmware")
|| _plist_dict_get_bool(info_dict, "IsiBootNonEssentialFirmware");

if (_plist_dict_get_bool(parameters, "_OnlyFWOrTrustedComponents")) {
if (!_plist_dict_get_bool(manifest_entry, "Trusted") && !is_fw_payload) {
debug("DEBUG: %s: Skipping '%s' as it is neither firmware payload nor trusted\n", __func__, key);
continue;
}
} else if (_plist_dict_get_bool(parameters, "_OnlyFWComponents")) {
if (!_plist_dict_get_bool(manifest_entry, "Trusted")) {
debug("DEBUG: %s: Skipping '%s' as it is not trusted\n", __func__, key);
continue;
}

if (!_plist_dict_get_bool(info_dict, "IsFirmwarePayload") && !_plist_dict_get_bool(info_dict, "IsSecondaryFirmwarePayload") && !_plist_dict_get_bool(info_dict, "IsFUDFirmware")) {
debug("DEBUG: %s: Skipping '%s' as it is neither firmware nor secondary nor FUD firmware payload\n", __func__, key);
if (!is_fw_payload) {
debug("DEBUG: %s: Skipping '%s' as it is not a firmware payload\n", __func__, key);
continue;
}
}
Expand Down

0 comments on commit 10c15d5

Please sign in to comment.