self.script.append('delete("/system/bin/backuptool.sh");')
self.script.append('delete("/system/bin/backuptool.functions");')
+ def ValidateSignatures(self, command):
+ if command == "cleanup":
+ self.script.append('delete("/system/bin/otasigcheck.sh");')
+ else:
+ self.script.append('package_extract_file("system/bin/otasigcheck.sh", "/tmp/otasigcheck.sh");')
+ self.script.append('package_extract_file("META-INF/org/cyanogenmod/releasekey", "/tmp/releasekey");')
+ self.script.append('set_metadata("/tmp/otasigcheck.sh", "uid", 0, "gid", 0, "mode", 0755);')
+ self.script.append('run_program("/tmp/otasigcheck.sh");')
+ ## Hax: a failure from run_program doesn't trigger an abort, so have it change the key value and check for "INVALID"
+ self.script.append('sha1_check(read_file("/tmp/releasekey"),"7241e92725436afc79389d4fc2333a2aa8c20230") && abort("Can\'t install this package on top of incompatible data. Please try another package or run a factory reset");')
+
def ShowProgress(self, frac, dur):
"""Update the progress bar, advancing it over 'frac' over the next
'dur' seconds. 'dur' may be zero to advance it via SetProgress
device_specific.FullOTA_InstallBegin()
+ script.Mount("/data")
+ script.ValidateSignatures("data")
+ script.Unmount("/data")
+
if OPTIONS.backuptool:
script.Mount("/system")
script.RunBackup("backup")
common.CheckSize(boot_img.data, "boot.img", OPTIONS.info_dict)
common.ZipWriteStr(output_zip, "boot.img", boot_img.data)
+ script.ValidateSignatures("cleanup")
+
if OPTIONS.backuptool:
script.ShowProgress(0.02, 10)
script.RunBackup("restore")