sh: Do not stat() $MAIL/$MAILPATH in non-interactive shells.

These may be NFS mounted, and we should not touch them unless we are going
to do something useful with the information.
This commit is contained in:
Jilles Tjoelker 2010-02-06 22:57:24 +00:00
parent 243cecf517
commit 5706357661
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=203576
4 changed files with 38 additions and 1 deletions

View File

@ -157,6 +157,8 @@ main(int argc, char *argv[])
out2fmt_flush("sh: cannot determine working directory\n");
if (getpwd() != NULL)
setvar ("PWD", getpwd(), VEXPORT);
if (iflag)
chkmail(1);
if (argv[0] && argv[0][0] == '-') {
state = 1;
read_profile("/etc/profile");

View File

@ -337,8 +337,13 @@ setvareq(char *s, int flags)
/*
* We could roll this to a function, to handle it as
* a regular variable function callback, but why bother?
*
* Note: this assumes iflag is not set to 1 initially.
* As part of init(), this is called before arguments
* are looked at.
*/
if (vp == &vmpath || (vp == &vmail && ! mpathset()))
if ((vp == &vmpath || (vp == &vmail && ! mpathset())) &&
iflag == 1)
chkmail(1);
if ((vp->flags & VEXPORT) && localevar(s)) {
change_env(s, 1);

View File

@ -0,0 +1,15 @@
# $FreeBSD$
# Test that a non-interactive shell does not access $MAIL.
goodfile=/var/empty/sh-test-goodfile
mailfile=/var/empty/sh-test-mailfile
T=$(mktemp sh-test.XXXXXX) || exit
MAIL=$mailfile ktrace -i -f "$T" sh -c "[ -s $goodfile ]" 2>/dev/null
if ! grep -q $goodfile "$T"; then
# ktrace problem
rc=0
elif ! grep -q $mailfile "$T"; then
rc=0
fi
rm "$T"
exit ${rc:-3}

View File

@ -0,0 +1,15 @@
# $FreeBSD$
# Test that an interactive shell accesses $MAIL.
goodfile=/var/empty/sh-test-goodfile
mailfile=/var/empty/sh-test-mailfile
T=$(mktemp sh-test.XXXXXX) || exit
MAIL=$mailfile ktrace -i -f "$T" sh +m -i </dev/null >/dev/null 2>&1
if ! grep -q $goodfile "$T"; then
# ktrace problem
rc=0
elif grep -q $mailfile "$T"; then
rc=0
fi
rm "$T"
exit ${rc:-3}