Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 406050bd authored by Tao Bao's avatar Tao Bao
Browse files

Fix the symlink detection when signing TF.zip.

We used to check for 'attr >> 16 == 0xa1ff' (i.e. 0o120777) to detect
symlinks in the input target_files zip (TF.zip). This becomes broken
after we switch to soong_zip, which packs symlinks with 0o120700.

This CL fixes the issue by using stat.S_ISLNK() instead.

Note that we don't need to stage the files with the exact permission
bits as in the input TF.zip. Because this part is covered by mkbootfs
by using the canned or the compiled-in fs_config - as long as the
files/directories are accessible and the symlinks are created.

Bug: 38455129
Test: sign_target_files_apks.py on bullhead TF.zip. Check the
      checksums in SYSTEM/bin/install-recovery.sh.
Change-Id: I51c1fc9a257fb3f18c16c2ed71528abaa6f7d9c9
parent 26d769ea
Loading
Loading
Loading
Loading
+5 −1
Original line number Diff line number Diff line
@@ -93,6 +93,7 @@ import errno
import os
import re
import shutil
import stat
import subprocess
import tempfile
import zipfile
@@ -191,6 +192,9 @@ def ProcessTargetFiles(input_tf_zip, output_tf_zip, misc_info,

  # tmpdir will only be used to regenerate the recovery-from-boot patch.
  tmpdir = tempfile.mkdtemp()
  # We're not setting the permissions precisely as in attr, because that work
  # will be handled by mkbootfs (using the values from the canned or the
  # compiled-in fs_config).
  def write_to_temp(fn, attr, data):
    fn = os.path.join(tmpdir, fn)
    if fn.endswith("/"):
@@ -201,7 +205,7 @@ def ProcessTargetFiles(input_tf_zip, output_tf_zip, misc_info,
      if d and not os.path.exists(d):
        os.makedirs(d)

      if attr >> 16 == 0xa1ff:
      if stat.S_ISLNK(attr >> 16):
        os.symlink(data, fn)
      else:
        with open(fn, "wb") as f: