multiuser: Move setup_environment from login to multiuser_utils.

This commit is contained in:
Augustin Cavalier
2017-07-23 11:07:36 -04:00
parent 0b6c89fb16
commit ec1421184a
3 changed files with 43 additions and 41 deletions
+1 -41
View File
@@ -64,7 +64,7 @@ read_string(char* string, size_t bufferSize)
if (bufferSize > 1) {
string[0] = c;
string++;
bufferSize--;
bufferSize--;
}
}
@@ -133,46 +133,6 @@ login(const char* user, struct passwd** _passwd)
}
static status_t
setup_environment(struct passwd* passwd, bool preserveEnvironment)
{
const char* term = getenv("TERM");
if (!preserveEnvironment) {
static char *empty[1];
environ = empty;
}
// always preserve $TERM
if (term != NULL)
setenv("TERM", term, false);
if (passwd->pw_shell)
setenv("SHELL", passwd->pw_shell, true);
if (passwd->pw_dir)
setenv("HOME", passwd->pw_dir, true);
setenv("USER", passwd->pw_name, true);
pid_t pid = getpid();
if (ioctl(STDIN_FILENO, TIOCSPGRP, &pid) != 0)
return errno;
if (passwd->pw_gid && setgid(passwd->pw_gid) != 0)
return errno;
if (passwd->pw_uid && setuid(passwd->pw_uid) != 0)
return errno;
const char* home = getenv("HOME");
if (home == NULL)
return B_ENTRY_NOT_FOUND;
if (chdir(home) != 0)
return errno;
return B_OK;
}
static const char*
get_from(const char* host)
{
+40
View File
@@ -169,3 +169,43 @@ authenticate_user(const char* prompt, const char* user, passwd** _passwd,
return error;
}
status_t
setup_environment(struct passwd* passwd, bool preserveEnvironment)
{
const char* term = getenv("TERM");
if (!preserveEnvironment) {
static char *empty[1];
environ = empty;
}
// always preserve $TERM
if (term != NULL)
setenv("TERM", term, false);
if (passwd->pw_shell)
setenv("SHELL", passwd->pw_shell, true);
if (passwd->pw_dir)
setenv("HOME", passwd->pw_dir, true);
setenv("USER", passwd->pw_name, true);
pid_t pid = getpid();
if (ioctl(STDIN_FILENO, TIOCSPGRP, &pid) != 0)
return errno;
if (passwd->pw_gid && setgid(passwd->pw_gid) != 0)
return errno;
if (passwd->pw_uid && setuid(passwd->pw_uid) != 0)
return errno;
const char* home = getenv("HOME");
if (home == NULL)
return B_ENTRY_NOT_FOUND;
if (chdir(home) != 0)
return errno;
return B_OK;
}
+2
View File
@@ -22,5 +22,7 @@ status_t authenticate_user(const char* prompt, passwd* passwd, spwd* spwd,
status_t authenticate_user(const char* prompt, const char* user,
passwd** _passwd, spwd** _spwd, int maxTries, bool useStdio);
status_t setup_environment(struct passwd* passwd, bool preserveEnvironment);
#endif // MULTIUSER_UTILS_H