1
0
mirror of https://gitlab.com/fdroid/fdroidserver.git synced 2024-10-03 17:50:11 +02:00

install_ndk: cleanup tempdir

This commit is contained in:
Jochen Sprickerhof 2022-11-25 12:41:52 +01:00
parent b285603e43
commit 4a6ccae71a
No known key found for this signature in database
GPG Key ID: 5BFFDCC258E69433

View File

@ -4253,47 +4253,48 @@ def _install_ndk(ndk):
raise FDroidException("NDK %s not found" % ndk) raise FDroidException("NDK %s not found" % ndk)
ndk_base = os.path.join(config['sdk_path'], 'ndk') ndk_base = os.path.join(config['sdk_path'], 'ndk')
logging.info(_('Downloading %s') % url) logging.info(_('Downloading %s') % url)
zipball = os.path.join( with tempfile.TemporaryDirectory(prefix='android-ndk-') as ndk_dir:
tempfile.mkdtemp(prefix='android-ndk-'), zipball = os.path.join(
os.path.basename(url) ndk_dir,
) os.path.basename(url)
net.download_file(url, zipball) )
calced = sha256sum(zipball) net.download_file(url, zipball)
if sha256 != calced: calced = sha256sum(zipball)
raise FDroidException('SHA-256 %s does not match expected for %s (%s)' % (calced, url, sha256)) if sha256 != calced:
logging.info(_('Unzipping to %s') % ndk_base) raise FDroidException('SHA-256 %s does not match expected for %s (%s)' % (calced, url, sha256))
with zipfile.ZipFile(zipball) as zipfp: logging.info(_('Unzipping to %s') % ndk_base)
for info in zipfp.infolist(): with zipfile.ZipFile(zipball) as zipfp:
permbits = info.external_attr >> 16 for info in zipfp.infolist():
if stat.S_ISLNK(permbits): permbits = info.external_attr >> 16
link = os.path.join(ndk_base, info.filename) if stat.S_ISLNK(permbits):
link_target = zipfp.read(info).decode() link = os.path.join(ndk_base, info.filename)
link_dir = os.path.dirname(link) link_target = zipfp.read(info).decode()
os.makedirs(link_dir, 0o755, True) # ensure intermediate directories are created link_dir = os.path.dirname(link)
os.symlink(link_target, link) os.makedirs(link_dir, 0o755, True) # ensure intermediate directories are created
os.symlink(link_target, link)
real_target = os.path.realpath(link) real_target = os.path.realpath(link)
if not real_target.startswith(ndk_base): if not real_target.startswith(ndk_base):
os.remove(link) os.remove(link)
logging.error(_('Unexpected symlink target: {link} -> {target}') logging.error(_('Unexpected symlink target: {link} -> {target}')
.format(link=link, target=real_target)) .format(link=link, target=real_target))
elif stat.S_ISDIR(permbits) or stat.S_IXUSR & permbits: elif stat.S_ISDIR(permbits) or stat.S_IXUSR & permbits:
zipfp.extract(info.filename, path=ndk_base) zipfp.extract(info.filename, path=ndk_base)
os.chmod(os.path.join(ndk_base, info.filename), 0o755) # nosec bandit B103 os.chmod(os.path.join(ndk_base, info.filename), 0o755) # nosec bandit B103
else: else:
zipfp.extract(info.filename, path=ndk_base) zipfp.extract(info.filename, path=ndk_base)
os.chmod(os.path.join(ndk_base, info.filename), 0o644) # nosec bandit B103 os.chmod(os.path.join(ndk_base, info.filename), 0o644) # nosec bandit B103
os.remove(zipball) os.remove(zipball)
for extracted in glob.glob(os.path.join(ndk_base, '*')): for extracted in glob.glob(os.path.join(ndk_base, '*')):
version = get_ndk_version(extracted) version = get_ndk_version(extracted)
if os.path.basename(extracted) != version: if os.path.basename(extracted) != version:
ndk_dir = os.path.join(ndk_base, version) ndk_dir = os.path.join(ndk_base, version)
os.rename(extracted, ndk_dir) os.rename(extracted, ndk_dir)
if 'ndk_paths' not in config: if 'ndk_paths' not in config:
config['ndk_paths'] = dict() config['ndk_paths'] = dict()
config['ndk_paths'][ndk] = ndk_dir config['ndk_paths'][ndk] = ndk_dir
logging.info(_('Set NDK {release} ({version}) up') logging.info(_('Set NDK {release} ({version}) up')
.format(release=ndk, version=version)) .format(release=ndk, version=version))
"""Derived from https://gitlab.com/fdroid/android-sdk-transparency-log/-/blob/master/checksums.json""" """Derived from https://gitlab.com/fdroid/android-sdk-transparency-log/-/blob/master/checksums.json"""