diff --git a/src/finit.c b/src/finit.c index 5f8e97db..495cdc69 100644 --- a/src/finit.c +++ b/src/finit.c @@ -39,6 +39,7 @@ #include #endif #include +#include #ifdef _LIBITE_LITE # include #else @@ -622,6 +623,15 @@ int main(int argc, char *argv[]) return EX_NOPERM; } + /* + * Sanity check critical environment variables. We need PATH + * and SHELL for early commands like mount in fs_init(). + */ + if (!checkenv("PATH")) + setenv("PATH", _PATH_STDPATH, 1); + if (!checkenv("SHELL")) + setenv("SHELL", _PATH_BSHELL, 1); + /* * Need /dev, /proc, and /sys for console=, remount and cgroups */ diff --git a/src/helpers.h b/src/helpers.h index 1302f905..0af260d4 100644 --- a/src/helpers.h +++ b/src/helpers.h @@ -82,6 +82,17 @@ pid_t run_sh (char *tty, int noclear, int nowait, struct rlimit rlimi pid_t run_bg (char *cmd, char *args[]); int run_parts (char *dir, char *cmd, const char *env[], int progress, int sysv); + +static inline int checkenv(const char *env) +{ + const char *val = getenv(env); + + if (!val || !val[0]) + return 0; + + return 1; +} + static inline int dprint(int fd, const char *s, size_t len) { size_t loop = 3;