Date: Tue, 25 Nov 1997 00:46:53 -0800 (PST) From: Joel.Faedi@esial.u-nancy.fr To: freebsd-gnats-submit@FreeBSD.ORG Subject: bin/5145: no home directory on NFS mounted partition Message-ID: <199711250846.AAA26440@hub.freebsd.org> Resent-Message-ID: <199711250850.AAA26624@hub.freebsd.org>
next in thread | raw e-mail | index | archive | help
>Number: 5145
>Category: bin
>Synopsis: no home directory on NFS mounted partition
>Confidential: no
>Severity: critical
>Priority: high
>Responsible: freebsd-bugs
>State: open
>Class: sw-bug
>Submitter-Id: current-users
>Arrival-Date: Tue Nov 25 00:50:01 PST 1997
>Last-Modified:
>Originator: Joel Faedi
>Organization:
ESIAL - Nancy (France)
>Release: 2.2.5 - 3.0-971123-SNAP
>Environment:
>Description:
login command (used by telnet, rlogin,...) will failed to chdir to
your home directory and login_cap functions will put warning too
in this case:
1) your home direcory is in a NFS mounted partition, which is not
exported with "maproot=root" option
2) your home directory is access protected for "others" (750 for
instance.
>How-To-Repeat:
mount home directories through NFS without maproot=root on server,
chmod 750 ~, try to login.
>Fix:
When you perform "chdir" and "login_getpwclass", be the user who is
trying to connect by using switching euid with "seteuid". Fix /usr/
src/usr/.bin/login/login.c. Here is the diff for 2.2.5 (sames changes
have to be made on 3.0 versions too):
diff -c login.c.LIV login.c
============================
*** login.c.LIV Sun Oct 19 11:35:12 1997
--- login.c Wed Nov 5 16:03:44 1997
***************
*** 155,161 ****
int ask, ch, cnt, fflag, hflag, pflag, quietlog, rootlogin, rval;
int changepass;
time_t warntime;
! uid_t uid;
char *domain, *p, *ep, *salt, *ttyn;
char tbuf[MAXPATHLEN + 2], tname[sizeof(_PATH_TTY) + 10];
char localhost[MAXHOSTNAMELEN];
--- 155,161 ----
int ask, ch, cnt, fflag, hflag, pflag, quietlog, rootlogin, rval;
int changepass;
time_t warntime;
! uid_t uid, euid;
char *domain, *p, *ep, *salt, *ttyn;
char tbuf[MAXPATHLEN + 2], tname[sizeof(_PATH_TTY) + 10];
char localhost[MAXHOSTNAMELEN];
***************
*** 197,202 ****
--- 197,203 ----
fflag = hflag = pflag = 0;
uid = getuid();
+ euid = geteuid();
while ((ch = getopt(argc, argv, "fh:p")) != -1)
switch (ch) {
case 'f':
***************
*** 334,340 ****
--- 335,344 ----
* within the next block. pwd can be NULL since it
* falls back to the "default" class if it is.
*/
+ if (pwd != NULL)
+ (void)seteuid(rootlogin ? 0 : pwd->pw_uid);
lc = login_getpwclass(pwd);
+ seteuid(euid);
#endif /* LOGIN_CAP */
/*
***************
*** 533,538 ****
--- 537,543 ----
#else
quietlog = 0;
#endif
+ (void)seteuid(rootlogin ? 0 : pwd->pw_uid);
if (!*pwd->pw_dir || chdir(pwd->pw_dir) < 0) {
#ifdef LOGIN_CAP
if (login_getcapbool(lc, "requirehome", 0))
***************
*** 544,549 ****
--- 549,555 ----
if (!quietlog || *pwd->pw_dir)
printf("No home directory.\nLogging in with home = \"/\".\n");
}
+ (void)seteuid(euid);
if (!quietlog)
quietlog = access(_PATH_HUSHLOGIN, F_OK) == 0;
>Audit-Trail:
>Unformatted:
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?199711250846.AAA26440>
