OSDN Git Service

install copy of shell in vendor partition
authorSandeep Patil <sspatil@google.com>
Thu, 13 Apr 2017 01:02:50 +0000 (18:02 -0700)
committerSandeep Patil <sspatil@google.com>
Thu, 13 Apr 2017 21:55:59 +0000 (14:55 -0700)
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>
Android.mk
mkshrc_vendor [new file with mode: 0644]
src/main.c

index 427aea9..01e53aa 100644 (file)
@@ -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 (file)
index 0000000..27d3982
--- /dev/null
@@ -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 "
index ebbadd9..665459c 100644 (file)
@@ -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);