mirror of
https://git.freebsd.org/src.git
synced 2026-01-11 19:57:22 +00:00
init: Use root's home directory in single-user mode
When starting single-user mode, use the home directory from user root as current directory and for the HOME environment variable. If the directory does not exist, set HOME=/. Also adjust /root/.profile to stop setting HOME, since it should always have been set now. This is intended to keep shell startup files working in single-user mode after /.profile has been removed. Reviewed by: emaste, ivy, kevans MFC after: 1 week Relnotes: yes Differential Revision: https://reviews.freebsd.org/D52527
This commit is contained in:
parent
36edc5014f
commit
779812d669
2 changed files with 11 additions and 5 deletions
|
|
@ -1,6 +1,4 @@
|
|||
#
|
||||
HOME=/root
|
||||
export HOME
|
||||
PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin:~/bin
|
||||
export PATH
|
||||
TERM=${TERM:-xterm}
|
||||
|
|
|
|||
|
|
@ -851,9 +851,9 @@ single_user(void)
|
|||
const char *shell;
|
||||
char *argv[2];
|
||||
struct timeval tv, tn;
|
||||
struct passwd *pp;
|
||||
#ifdef SECURE
|
||||
struct ttyent *typ;
|
||||
struct passwd *pp;
|
||||
static const char banner[] =
|
||||
"Enter root password, or ^D to go multi-user\n";
|
||||
char *clear, *password;
|
||||
|
|
@ -885,6 +885,7 @@ single_user(void)
|
|||
*/
|
||||
open_console();
|
||||
|
||||
pp = getpwnam("root");
|
||||
#ifdef SECURE
|
||||
/*
|
||||
* Check the root password.
|
||||
|
|
@ -892,7 +893,6 @@ single_user(void)
|
|||
* it's the only tty that can be 'off' and 'secure'.
|
||||
*/
|
||||
typ = getttynam("console");
|
||||
pp = getpwnam("root");
|
||||
if (typ && (typ->ty_status & TTY_SECURE) == 0 &&
|
||||
pp && *pp->pw_passwd) {
|
||||
write_stderr(banner);
|
||||
|
|
@ -909,7 +909,6 @@ single_user(void)
|
|||
}
|
||||
}
|
||||
endttyent();
|
||||
endpwent();
|
||||
#endif /* SECURE */
|
||||
|
||||
#ifdef DEBUGSHELL
|
||||
|
|
@ -930,6 +929,15 @@ single_user(void)
|
|||
}
|
||||
#endif /* DEBUGSHELL */
|
||||
|
||||
if (pp != NULL && pp->pw_dir != NULL && *pp->pw_dir != '\0' &&
|
||||
chdir(pp->pw_dir) == 0) {
|
||||
setenv("HOME", pp->pw_dir, 1);
|
||||
} else {
|
||||
chdir("/");
|
||||
setenv("HOME", "/", 1);
|
||||
}
|
||||
endpwent();
|
||||
|
||||
/*
|
||||
* Unblock signals.
|
||||
* We catch all the interesting ones,
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue