$MAIL surprise

Steve VanDevender stevev at darkwing.uoregon.edu
Sat Apr 7 06:14:48 EST 2001


David Terrell writes:
 > Are you sure the real problem isn't that sshd is started with your 
 > environment at runtime?  I recently had a similar problem with inetd.
 > Try starting it like this:
 > 
 > env -i PATH=/some:/reasonable:/subset /usr/local/sbin/sshd

That was my first thought too, and I restarted sshd with "env -i" on
that host and it didn't change anything.  I looked and here's what's in
config.h:

/* Set this to your mail directory if you don't have maillock.h */
#define MAIL_DIRECTORY "/home/staff/stevev"

So then in defines.h this happens:

#ifndef MAIL_DIRECTORY
# define MAIL_DIRECTORY "/var/spool/mail"
#endif

#ifndef MAILDIR
# define MAILDIR MAIL_DIRECTORY
#endif

#if !defined(_PATH_MAILDIR) && defined(MAILDIR)
# define _PATH_MAILDIR MAILDIR
#endif /* !defined(_PATH_MAILDIR) && defined(MAILDIR) */

And finally in session.c this environment variable setting is created:

                snprintf(buf, sizeof buf, "%.200s/%.50s",
                         _PATH_MAILDIR, pw->pw_name);
                child_set_env(&env, &envsize, "MAIL", buf);

And this is what is in configure that gets it all started:

# Check for mail directory (last resort if we cannot get it from headers)
if test ! -z "$MAIL" ; then
        maildir=`dirname $MAIL`
        cat >> confdefs.h <<EOF
#define MAIL_DIRECTORY "$maildir"
EOF

The code in defines.h should use _PATH_MAILDIR if it's defined in the
system headers, but at least in the case of the Solaris and SunOS
systems where I'm seeing this happen, there is no setting for
_PATH_MAILDIR in the system include files.

Like I said before, though, I'm not really arguing that this code or
this approach to finding $MAIL is wrong, but it is surprising.



More information about the openssh-unix-dev mailing list