Module Name:    src
Committed By:   mlelstv
Date:           Sat Jun 29 05:08:35 UTC 2013

Modified Files:
        src/usr.bin/su: su_pam.c

Log Message:
Change to home directory only after setting the full user context
to avoid issues with NFS or other user-mapped mounts that don't
give root the privilege to chdir there.


To generate a diff of this commit:
cvs rdiff -u -r1.18 -r1.19 src/usr.bin/su/su_pam.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/usr.bin/su/su_pam.c
diff -u src/usr.bin/su/su_pam.c:1.18 src/usr.bin/su/su_pam.c:1.19
--- src/usr.bin/su/su_pam.c:1.18	Thu Jun 20 20:54:02 2013
+++ src/usr.bin/su/su_pam.c	Sat Jun 29 05:08:35 2013
@@ -1,4 +1,4 @@
-/*	$NetBSD: su_pam.c,v 1.18 2013/06/20 20:54:02 christos Exp $	*/
+/*	$NetBSD: su_pam.c,v 1.19 2013/06/29 05:08:35 mlelstv Exp $	*/
 
 /*
  * Copyright (c) 1988 The Regents of the University of California.
@@ -39,7 +39,7 @@ __COPYRIGHT("@(#) Copyright (c) 1988\
 #if 0
 static char sccsid[] = "@(#)su.c	8.3 (Berkeley) 4/2/94";*/
 #else
-__RCSID("$NetBSD: su_pam.c,v 1.18 2013/06/20 20:54:02 christos Exp $");
+__RCSID("$NetBSD: su_pam.c,v 1.19 2013/06/29 05:08:35 mlelstv Exp $");
 #endif
 #endif /* not lint */
 
@@ -493,8 +493,6 @@ out:
 				err(EXIT_FAILURE, "setting user context");
 			if (p)
 				(void)setenv("TERM", p, 1);
-			if (gohome && chdir(pwd->pw_dir) == -1)
-				errx(EXIT_FAILURE, "no directory");
 		}
 
 		if (asthem || pwd->pw_uid) {
@@ -552,6 +550,13 @@ out:
 	if (setusercontext(lc, pwd, pwd->pw_uid, setwhat) == -1)
 		err(EXIT_FAILURE, "setusercontext");
 
+	if (!asme) {
+		if (asthem) {
+			if (gohome && chdir(pwd->pw_dir) == -1)
+				errx(EXIT_FAILURE, "no directory");
+		}
+	}
+
 	(void)execv(shell, np);
 	err(EXIT_FAILURE, "%s", shell);
 done:

Reply via email to