diff --git a/app/src/main/java/com/termux/app/TermuxInstaller.java b/app/src/main/java/com/termux/app/TermuxInstaller.java index 304130cd..1c5373ac 100644 --- a/app/src/main/java/com/termux/app/TermuxInstaller.java +++ b/app/src/main/java/com/termux/app/TermuxInstaller.java @@ -183,6 +183,7 @@ final class TermuxInstaller { final byte[] buffer = new byte[8096]; final List> symlinks = new ArrayList<>(50); + final List executables = new ArrayList<>(128); final URL zipUrl = determineZipUrl(bootstrapURL); try (ZipInputStream zipInput = new ZipInputStream(zipUrl.openStream())) { @@ -205,6 +206,12 @@ final class TermuxInstaller { return; } } + } else if (zipEntry.getName().equals("EXECUTABLES.txt")) { + BufferedReader executablesReader = new BufferedReader(new InputStreamReader(zipInput)); + String line; + while ((line = executablesReader.readLine()) != null) { + executables.add(line); + } } else { String zipEntryName = zipEntry.getName(); File targetFile = new File(TERMUX_STAGING_PREFIX_DIR_PATH, zipEntryName); @@ -232,6 +239,19 @@ final class TermuxInstaller { } } + if (!executables.isEmpty()) { + for (String executable : executables) { + //noinspection OctalInteger + try { + Os.chmod(TERMUX_STAGING_PREFIX_DIR + "/" + executable, 0700); + } catch (Throwable t) { + Logger.logError(LOG_TAG, "EXECUTABLES error: " + TERMUX_STAGING_PREFIX_DIR + "/" + executable + t); + } + } + } else { + throw new RuntimeException("Installer: no EXECUTABLES.txt found while extracting environment archive."); + } + if (symlinks.isEmpty()) throw new RuntimeException("No SYMLINKS.txt encountered"); for (Pair symlink : symlinks) {