Date: Fri, 7 Apr 2000 10:07:40 -0400 (EDT) From: Andrew Gallatin <gallatin@cs.duke.edu> To: FreeBSD-gnats-submit@freebsd.org Subject: bin/17843: ftpd fails to set cwd with mode 700 NFS mounted home dirs Message-ID: <200004071407.KAA33916@grasshopper.cs.duke.edu>
next in thread | raw e-mail | index | archive | help
>Number: 17843 >Category: bin >Synopsis: ftpd fails to set cwd with mode 700 NFS mounted home dirs >Confidential: no >Severity: serious >Priority: medium >Responsible: freebsd-bugs >State: open >Quarter: >Keywords: >Date-Required: >Class: sw-bug >Submitter-Id: current-users >Arrival-Date: Fri Apr 7 07:10:01 PDT 2000 >Closed-Date: >Last-Modified: >Originator: Andrew Gallatin >Release: FreeBSD 4.0-RELEASE i386 >Organization: >Environment: NFS mounted home directories, server mapping 0 to something other than 0 >Description: ftpd will currently fail to set the CWD when logging in if a user's home directory is mode 700 & it is mounted over NFS & the NFS server is not mapping root to 0 >How-To-Repeat: ftp into such a setup. Eg: % ftp 192.233.54.149 Connected to 192.233.54.149. 220 spe149.testdrive.compaq.com FTP server (Version 6.00LS) ready. Name (192.233.54.149:gallatin): gallatin 331 Password required for gallatin. Password: 230- No directory! Logging in with home=/ 230 User gallatin logged in. Remote system type is UNIX. Using binary mode to transfer files. >Fix: Index: libexec/ftpd//ftpd.c =================================================================== RCS file: /home/ncvs/src/libexec/ftpd/ftpd.c,v retrieving revision 1.62 diff -u -r1.62 ftpd.c --- libexec/ftpd//ftpd.c 2000/02/10 19:51:30 1.62 +++ libexec/ftpd//ftpd.c 2000/04/07 13:55:40 @@ -1287,14 +1287,29 @@ goto bad; } } else if (chdir(pw->pw_dir) < 0) { - if (chdir("/") < 0) { - reply(530, "User %s: can't change directory to %s.", - pw->pw_name, pw->pw_dir); + /* + * We may have failed to chdir if the user's home + * directory is mounted over NFS & it is unreadable by + * this machines superuser (eg. mode x00) -- set the + * uid & try again. + */ + + if (seteuid((uid_t)pw->pw_uid) < 0) { + reply(550, "Can't set uid."); goto bad; - } else - lreply(230, "No directory! Logging in with home=/"); + } + + if (chdir(pw->pw_dir) < 0) { + if (chdir("/") < 0) { + reply(530, "User %s: can't change directory to %s.", + pw->pw_name, pw->pw_dir); + goto bad; + } else + lreply(230, "No directory! Logging in with home=/"); + } } - if (seteuid((uid_t)pw->pw_uid) < 0) { + if (((uid_t)pw->pw_uid != geteuid()) && + seteuid((uid_t)pw->pw_uid) < 0) { reply(550, "Can't set uid."); goto bad; } >Release-Note: >Audit-Trail: >Unformatted: To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-bugs" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200004071407.KAA33916>