Change to the user's directory after dropping privileges, in case it is only accessible to the user (for example, if it's in NFS with root squashing). Incomplete - we probably need to do the same for rshd and ftpd. diff -up krb5/src/appl/bsd/login.c krb5/src/appl/bsd/login.c --- krb5/src/appl/bsd/login.c 2007-07-11 13:50:34.000000000 -0400 +++ krb5/src/appl/bsd/login.c 2007-07-11 13:50:36.000000000 -0400 @@ -1497,13 +1497,8 @@ int main(argc, argv) } #endif /* USE_PAM */ - if (chdir(pwd->pw_dir) < 0) { - printf("No directory %s!\n", pwd->pw_dir); - if (chdir("/")) - exit(0); - pwd->pw_dir = "/"; - printf("Logging in with home = \"/\".\n"); - } + if (chdir("/")) + exit(0); /* nothing else left to fail -- really log in */ { @@ -1710,6 +1705,14 @@ int main(argc, argv) sleepexit(1); } + if (chdir(pwd->pw_dir) < 0) { + printf("No directory %s!\n", pwd->pw_dir); + if (chdir("/")) + exit(0); + pwd->pw_dir = "/"; + printf("Logging in with home = \"/\".\n"); + } + /* * We are the user now. Re-create the destroyed ccache and * ticket file.