Marcel Telka
2024-04-09 6a5ea3217f4517958e4901ca6b141c2dec53ccb6
tools/userland-mangler
@@ -33,6 +33,7 @@
import re
import subprocess
import shutil
import stat
import pkg.fmri
@@ -272,6 +273,9 @@
                                # package instead of the new version.
                                shutil.copy2(src, dest)
                                # Make sure we do have write permission before we try to modify the file
                                os.chmod(dest, os.stat(dest).st_mode | stat.S_IWUSR)
                                # Mangle the copy by deleting the tag if there is nothing left to keep
                                # or replacing the value if there is something left.
                                elfcmd = "dyn:delete %s" % element.lower()
@@ -296,8 +300,15 @@
                             re.MULTILINE|re.DOTALL)
        return cddl_re.sub('', text)
def mangle_path(manifest, action, src, dest):
def do_ctfconvert(converter, file):
        args = [converter, '-i', '-m', '-k', file]
        print(*args, file=sys.stderr)
        subprocess.call(args)
def mangle_path(manifest, action, src, dest, ctfconvert):
        if elf.is_elf_object(src):
                if ctfconvert is not None:
                        do_ctfconvert(ctfconvert, src)
                mangle_elf(manifest, action, src, dest)
        else:
                # a 'text' document (script, man page, config file, ...
@@ -325,7 +336,7 @@
#
# mangler.bypass = (true|false)
#
def mangle_paths(manifest, search_paths, destination):
def mangle_paths(manifest, search_paths, destination, ctfconvert):
        for action in manifest.gen_actions_by_type("file"):
                bypass = action.attrs.pop('mangler.bypass', 'false').lower()
                if bypass == 'true':
@@ -347,7 +358,8 @@
                        if directory != destination:
                                src = os.path.join(directory, path)
                                if os.path.isfile(src):
                                        mangle_path(manifest, action, src, dest)
                                        mangle_path(manifest, action,
                                                    src, dest, ctfconvert)
                                        break
def load_manifest(manifest_file):
@@ -368,10 +380,11 @@
        search_paths = []
        destination = None
        manifests = []
        ctfconvert = None
        try:
                opts, args = getopt.getopt(sys.argv[1:], "D:d:m:",
                        ["destination=", "search-directory=", "manifest="])
                opts, args = getopt.getopt(sys.argv[1:], "c:D:d:m:",
                        ["ctf=", "destination=", "search-directory=", "manifest="])
        except getopt.GetoptError as err:
                print(str(err))
                usage()
@@ -389,6 +402,8 @@
                                usage()
                        else:
                                manifests.append(manifest)
                elif opt in [ "-c", "--ctf" ]:
                        ctfconvert = arg
                else:
                        usage()
@@ -396,7 +411,7 @@
                usage()
        for manifest in manifests:
                mangle_paths(manifest, search_paths, destination)
                mangle_paths(manifest, search_paths, destination, ctfconvert)
                print(manifest)
        sys.exit(0)