summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSandeep Patil <sspatil@google.com>2017-04-12 18:02:50 -0700
committerSandeep Patil <sspatil@google.com>2017-04-13 14:55:59 -0700
commitc2036115102d80c026b70846812a42204522f9ac (patch)
tree8462bdd959adc36fff632c8b40151dae01713d5e
parent206a07da41e92957ea231a8151ade4a7cc2b81e5 (diff)
downloadplatform_external_mksh-oreo-dev.tar.gz
platform_external_mksh-oreo-dev.tar.bz2
platform_external_mksh-oreo-dev.zip
install copy of shell in vendor partitionandroid-vts-8.0_r2android-vts-8.0_r1oreo-dev
This is to be used by vendor processes. Particularly, vendor shell scripts that get launched as init services. The shell is restricted from running as interactive mode in SEPolicy. Unless it is launched from rooted system shell. The change also adds the ability to override the default $PATH regardless of the environment. Bug: 36463595 Test: Boot sailfish with new shell and ensure all init services exit with status 0 Change-Id: I1eaf2c8a8f6905caf00d53e067add67eaea00e09 Signed-off-by: Sandeep Patil <sspatil@google.com>
-rw-r--r--Android.mk77
-rw-r--r--mkshrc_vendor20
-rw-r--r--src/main.c6
3 files changed, 89 insertions, 14 deletions
diff --git a/Android.mk b/Android.mk
index 427aea9..01e53aa 100644
--- a/Android.mk
+++ b/Android.mk
@@ -24,32 +24,22 @@ LOCAL_MODULE := sh
LOCAL_ADDITIONAL_DEPENDENCIES += $(LOCAL_PATH)/Android.mk
# mksh source files
-LOCAL_SRC_FILES := \
+MKSH_SRC_FILES := \
src/lalloc.c src/edit.c src/eval.c src/exec.c \
src/expr.c src/funcs.c src/histrap.c src/jobs.c \
src/lex.c src/main.c src/misc.c src/shf.c \
src/syn.c src/tree.c src/var.c
-LOCAL_SYSTEM_SHARED_LIBRARIES := libc
-
-LOCAL_C_INCLUDES := $(LOCAL_PATH)/src
-
-# Additional flags first...
-LOCAL_CFLAGS += \
- -DMKSH_DEFAULT_PROFILEDIR=\"/system/etc\" \
- -DMKSHRC_PATH=\"/system/etc/mkshrc\" \
- -DMKSH_DEFAULT_EXECSHELL=\"/system/bin/sh\" \
- -DMKSH_DEFAULT_TMPDIR=\"/data/local\" \
+MKSH_INCLUDES := $(LOCAL_PATH)/src
-# ...then from Makefrag.inc: CFLAGS...
-LOCAL_CFLAGS += \
+MKSH_CFLAGS += \
-Wno-deprecated-declarations \
-fno-asynchronous-unwind-tables \
-fno-strict-aliasing \
-fstack-protector -fwrapv \
# ...and CPPFLAGS.
-LOCAL_CFLAGS += \
+MKSH_CFLAGS += \
-DDEBUG_LEAKS -DMKSH_ASSUME_UTF8 \
-DMKSH_DONT_EMIT_IDSTRING \
-DMKSH_BUILDSH \
@@ -85,4 +75,63 @@ LOCAL_CFLAGS += \
-DHAVE_SYS_ERRLIST_DECL=0 -DHAVE_SYS_SIGLIST_DECL=1 \
-DHAVE_PERSISTENT_HISTORY=0 -DMKSH_BUILD_R=541
+LOCAL_SRC_FILES := $(MKSH_SRC_FILES)
+
+LOCAL_SYSTEM_SHARED_LIBRARIES := libc
+
+LOCAL_C_INCLUDES := $(MKSH_INCLUDES)
+
+# Additional flags first...
+LOCAL_CFLAGS += \
+ -DMKSH_DEFAULT_PROFILEDIR=\"/system/etc\" \
+ -DMKSHRC_PATH=\"/system/etc/mkshrc\" \
+ -DMKSH_DEFAULT_EXECSHELL=\"/system/bin/sh\" \
+ -DMKSH_DEFAULT_TMPDIR=\"/data/local\" \
+
+LOCAL_CFLAGS += $(MKSH_CFLAGS)
+
include $(BUILD_EXECUTABLE)
+
+ifeq ($(PRODUCT_FULL_TREBLE),true)
+# /vendor/etc/mkshrc
+include $(CLEAR_VARS)
+
+LOCAL_MODULE := mkshrc_vendor
+LOCAL_MODULE_STEM := mkshrc
+LOCAL_MODULE_CLASS := ETC
+LOCAL_MODULE_PATH := $(TARGET_OUT_VENDOR_ETC)
+LOCAL_SRC_FILES := $(LOCAL_MODULE)
+include $(BUILD_PREBUILT)
+
+# /vendor/bin/sh
+include $(CLEAR_VARS)
+
+LOCAL_MODULE := sh_vendor
+LOCAL_MODULE_STEM := sh
+LOCAL_ADDITIONAL_DEPENDENCIES += $(LOCAL_PATH)/Android.mk
+LOCAL_MODULE_PATH := $(TARGET_OUT_VENDOR_EXECUTABLES)
+
+# mksh source files
+LOCAL_SRC_FILES := $(MKSH_SRC_FILES)
+
+LOCAL_STATIC_LIBRARIES := libc
+
+LOCAL_C_INCLUDES := $(MKSH_INCLUDES)
+
+# Additional flags first...
+LOCAL_CFLAGS += \
+ -DMKSH_DEFAULT_PROFILEDIR=\"/vendor/etc\" \
+ -DMKSHRC_PATH=\"/vendor/etc/mkshrc\" \
+ -DMKSH_DEFAULT_EXECSHELL=\"/vendor/bin/sh\" \
+ -DMKSH_DEFPATH_OVERRIDE=\"/vendor/bin:/vendor/xbin\" \
+
+LOCAL_CFLAGS += $(MKSH_CFLAGS)
+
+LOCAL_FORCE_STATIC_EXECUTABLE := true
+
+include $(BUILD_EXECUTABLE)
+endif
+
+MKSH_SRC_FILES:=
+MKSH_CFLAGS:=
+MKSH_INCLUDES:=
diff --git a/mkshrc_vendor b/mkshrc_vendor
new file mode 100644
index 0000000..27d3982
--- /dev/null
+++ b/mkshrc_vendor
@@ -0,0 +1,20 @@
+# Copyright (c) 2010, 2012, 2013, 2014
+# Thorsten Glaser <tg@mirbsd.org>
+# This file is provided under the same terms as mksh.
+#-
+# Minimal /system/etc/mkshrc for Android
+#
+# Support: https://launchpad.net/mksh
+
+: ${HOSTNAME:=$(getprop ro.product.device)}
+: ${HOSTNAME:=android}
+export HOSTNAME
+
+if (( USER_ID )); then PS1='$'; else PS1='#'; fi
+PS4='[$EPOCHREALTIME] '; PS1='${|
+ local e=$?
+
+ (( e )) && REPLY+="$e|"
+
+ return $e
+}$HOSTNAME:${PWD:-?} '"$PS1 "
diff --git a/src/main.c b/src/main.c
index ebbadd9..665459c 100644
--- a/src/main.c
+++ b/src/main.c
@@ -362,6 +362,12 @@ main_init(int argc, const char *argv[], Source **sp, struct block **lp)
}
}
+ /* override default PATH regardless of environment */
+#ifdef MKSH_DEFPATH_OVERRIDE
+ vp = global(TPATH);
+ setstr(vp, MKSH_DEFPATH_OVERRIDE, KSH_RETURN_ERROR);
+#endif
+
/* for security */
typeset(initifs, 0, 0, 0, 0);