Do not chdir(2) until after setuid(2), otherwise "su - username" would fail
when root doesn't have the permission to enter target user's home directory. If set, PAM environment variable HOME will be used in chdir(2) instead of pwd->pw_dir, this allows pam_chroot module to continue to function.
This commit is contained in:
parent
a9a5d47c85
commit
5a8e64ee60
@ -403,12 +403,6 @@ main(int argc, char *argv[])
|
||||
}
|
||||
setpriority(PRIO_PROCESS, 0, prio);
|
||||
|
||||
/* Switch to home directory */
|
||||
if (asthem) {
|
||||
if (chdir(pwd->pw_dir) < 0)
|
||||
errx(1, "no directory");
|
||||
}
|
||||
|
||||
/*
|
||||
* PAM modules might add supplementary groups in pam_setcred(), so
|
||||
* initialize them first.
|
||||
@ -540,6 +534,10 @@ main(int argc, char *argv[])
|
||||
LOGIN_SETENV);
|
||||
if (p)
|
||||
setenv("TERM", p, 1);
|
||||
|
||||
p = pam_getenv(pamh, "HOME");
|
||||
if (chdir(p ? p : pwd->pw_dir) < 0)
|
||||
errx(1, "no directory");
|
||||
}
|
||||
}
|
||||
login_close(lc);
|
||||
|
Loading…
Reference in New Issue
Block a user