X-Git-Url: https://git.librecmc.org/?a=blobdiff_plain;f=libbb%2Fsetup_environment.c;h=874a58efa88db973e2160e580b928680fda16962;hb=0aa6ba5d44af32d0bf460c8d92cda686bae64c92;hp=aeb285a53f135f470342508d096670e3a63adb00;hpb=e3752e56a43a823f4aaaa9a4374ccc367417b942;p=oweals%2Fbusybox.git diff --git a/libbb/setup_environment.c b/libbb/setup_environment.c index aeb285a53..874a58efa 100644 --- a/libbb/setup_environment.c +++ b/libbb/setup_environment.c @@ -42,15 +42,9 @@ #define DEFAULT_LOGIN_PATH "/bin:/usr/bin" #define DEFAULT_ROOT_LOGIN_PATH "/usr/sbin:/bin:/usr/bin:/sbin" -static void xsetenv ( const char *key, const char *value ) +void setup_environment(const char *shell, int loginshell, int changeenv, const struct passwd *pw) { - if ( setenv ( key, value, 1 )) - bb_error_msg_and_die (bb_msg_memory_exhausted); -} - -void setup_environment ( const char *shell, int loginshell, int changeenv, const struct passwd *pw ) -{ - if ( loginshell ) { + if (loginshell) { const char *term; /* Change the current working directory to be the home directory @@ -58,36 +52,32 @@ void setup_environment ( const char *shell, int loginshell, int changeenv, const * to change to that directory. There is no "default" home * directory. * Some systems default to HOME=/ - */ - if ( chdir ( pw-> pw_dir )) { - if ( chdir ( "/" )) { - syslog ( LOG_WARNING, "unable to cd to %s' for user %s'\n", pw-> pw_dir, pw-> pw_name ); - bb_error_msg_and_die ( "cannot cd to home directory or /" ); - } - fputs ( "warning: cannot change to home directory\n", stderr ); + */ + if (chdir(pw->pw_dir)) { + xchdir("/"); + fputs("warning: cannot change to home directory\n", stderr); } /* Leave TERM unchanged. Set HOME, SHELL, USER, LOGNAME, PATH. Unset all other environment variables. */ - term = getenv ("TERM"); - clearenv ( ); - if ( term ) - xsetenv ( "TERM", term ); - xsetenv ( "HOME", pw-> pw_dir ); - xsetenv ( "SHELL", shell ); - xsetenv ( "USER", pw-> pw_name ); - xsetenv ( "LOGNAME", pw-> pw_name ); - xsetenv ( "PATH", ( pw-> pw_uid ? DEFAULT_LOGIN_PATH : DEFAULT_ROOT_LOGIN_PATH )); + term = getenv("TERM"); + clearenv(); + if (term) + xsetenv("TERM", term); + xsetenv("HOME", pw->pw_dir); + xsetenv("SHELL", shell); + xsetenv("USER", pw->pw_name); + xsetenv("LOGNAME", pw->pw_name); + xsetenv("PATH", (pw->pw_uid ? DEFAULT_LOGIN_PATH : DEFAULT_ROOT_LOGIN_PATH)); } - else if ( changeenv ) { + else if (changeenv) { /* Set HOME, SHELL, and if not becoming a super-user, - USER and LOGNAME. */ - xsetenv ( "HOME", pw-> pw_dir ); - xsetenv ( "SHELL", shell ); - if ( pw-> pw_uid ) { - xsetenv ( "USER", pw-> pw_name ); - xsetenv ( "LOGNAME", pw-> pw_name ); + USER and LOGNAME. */ + xsetenv("HOME", pw->pw_dir); + xsetenv("SHELL", shell); + if (pw->pw_uid) { + xsetenv("USER", pw->pw_name); + xsetenv("LOGNAME", pw->pw_name); } } } -