Skip to content

Commit b7d2a4b

Browse files
Added: Export additional primary TERMUX_* scoped shell environment variables
- TERMUX__ROOTFS - TERMUX__HOME - TERMUX__PREFIX - TERMUX_APP__DATA_DIR (Actual app data directory path assigned by Android for the `com.termux` app returned by `ApplicationInfo`) - TERMUX_APP__LEGACY_DATA_DIR (Expected legacy app data directory path for the `com.termux` app, mainly accessible on primary user `0` and is a symlink/bind mount to/from `TERMUX_APP__DATA_DIR`) - TERMUX_APP__BUILD_DATA_DIR (App data directory path used by `termux-packages` `properties.sh` while building packages and `TermuxConstants.java` while building Termux app) - TERMUX__SE_PROCESS_CONTEXT (SeLinux process context for current process) - TERMUX_APP__SE_FILE_CONTEXT (SeLinux file context for the `TERMUX_APP__DATA_DIR`) - TERMUX_APP__SE_INFO (Termux app seInfo tag found in selinux policy used to set app process and app data files selinux context) This is also required for `libtermux-exec-*-ld-preload.so` `$LD_PRELOAD` library as well for `termux-exec` version `>= 2.0.0`. - termux/termux-exec-package@db738a11 See also https://github.com/termux/termux-packages/blob/96eefda/scripts/properties.sh
1 parent 8440a72 commit b7d2a4b

File tree

1 file changed

+36
-0
lines changed

1 file changed

+36
-0
lines changed

termux-shared/src/main/java/com/termux/shared/shell/TermuxShellUtils.java

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,13 @@
11
package com.termux.shared.shell;
22

33
import android.content.Context;
4+
import android.content.pm.ApplicationInfo;
5+
import android.os.Build;
46

57
import androidx.annotation.NonNull;
68

9+
import com.termux.shared.android.SELinuxUtils;
10+
import com.termux.shared.data.DataUtils;
711
import com.termux.shared.models.errors.Error;
812
import com.termux.shared.termux.TermuxConstants;
913
import com.termux.shared.file.FileUtils;
@@ -57,10 +61,42 @@ public static String[] buildEnvironment(Context currentPackageContext, boolean i
5761
if (TERMUX_API_VERSION_NAME != null)
5862
environment.add("TERMUX_API_VERSION=" + TERMUX_API_VERSION_NAME);
5963

64+
65+
6066
environment.add("TERM=xterm-256color");
6167
environment.add("COLORTERM=truecolor");
68+
69+
try {
70+
ApplicationInfo applicationInfo = currentPackageContext.getPackageManager().getApplicationInfo(
71+
TermuxConstants.TERMUX_PACKAGE_NAME, 0);
72+
if (applicationInfo != null && !applicationInfo.enabled) {
73+
applicationInfo = null;
74+
}
75+
76+
if (applicationInfo != null) {
77+
environment.add("TERMUX_APP__DATA_DIR=" + applicationInfo.dataDir);
78+
environment.add("TERMUX_APP__LEGACY_DATA_DIR=" + "/data/data/" + applicationInfo.packageName);
79+
environment.add("TERMUX_APP__BUILD_DATA_DIR=" + TermuxConstants.TERMUX_INTERNAL_PRIVATE_APP_DATA_DIR_PATH);
80+
81+
environment.add("TERMUX_APP__SE_FILE_CONTEXT=" + SELinuxUtils.getFileContext(applicationInfo.dataDir));
82+
83+
String seInfoUser = PackageUtils.getApplicationInfoSeInfoUserForPackage(applicationInfo);
84+
environment.add("TERMUX_APP__SE_INFO=" + PackageUtils.getApplicationInfoSeInfoForPackage(applicationInfo) +
85+
(DataUtils.isNullOrEmpty(seInfoUser) ? "" : seInfoUser));
86+
}
87+
88+
} catch (final Exception e) {
89+
// Ignore
90+
}
91+
92+
environment.add("TERMUX__ROOTFS=" + TermuxConstants.TERMUX_FILES_DIR_PATH);
6293
environment.add("HOME=" + TermuxConstants.TERMUX_HOME_DIR_PATH);
94+
environment.add("TERMUX__HOME=" + TermuxConstants.TERMUX_HOME_DIR_PATH);
6395
environment.add("PREFIX=" + TermuxConstants.TERMUX_PREFIX_DIR_PATH);
96+
environment.add("TERMUX__PREFIX=" + TermuxConstants.TERMUX_PREFIX_DIR_PATH);
97+
98+
environment.add("TERMUX__SE_PROCESS_CONTEXT=" + SELinuxUtils.getContext());
99+
64100
environment.add("BOOTCLASSPATH=" + System.getenv("BOOTCLASSPATH"));
65101
environment.add("ANDROID_ROOT=" + System.getenv("ANDROID_ROOT"));
66102
environment.add("ANDROID_DATA=" + System.getenv("ANDROID_DATA"));

0 commit comments

Comments
 (0)