diff options
author | Jeff Layton <jlayton@redhat.com> | 2014-01-22 11:17:19 -0500 |
---|---|---|
committer | Steve Dickson <steved@redhat.com> | 2014-01-22 11:17:19 -0500 |
commit | 2f682f25c642fcfe7c511d04bc9d67e732282348 (patch) | |
tree | 6ec60c3a42b303b3eedd5730d42b9ed2dbfb883a /utils/gssd/gssd.c | |
parent | d7ad8bc650b26ceef70b719839b77f1a668ff95e (diff) | |
download | nfs-utils-2f682f25c642fcfe7c511d04bc9d67e732282348.tar.gz nfs-utils-2f682f25c642fcfe7c511d04bc9d67e732282348.tar.xz nfs-utils-2f682f25c642fcfe7c511d04bc9d67e732282348.zip |
gssd: set $HOME to prevent recursion when home dirs are on kerberized NFS mount
Some krb5 routines will attempt to access files in the user's home
directory. This is problematic for gssd when the user's homedir is
on a kerberized NFS mount as it will end up deadlocked.
Fix this by setting $HOME unconditionally to "/".
Fixes this Fedora bug:
https://bugzilla.redhat.com/show_bug.cgi?id=1052902
Reported-by: Enrico Scholz <rh-bugzilla@ensc.de>
Reported-by: nmorey <nmorey@kalray.eu>
Tested-by: Michael Young <m.a.young@durham.ac.uk>
Signed-off-by: Jeff Layton <jlayton@redhat.com>
Signed-off-by: Steve Dickson <steved@redhat.com>
Diffstat (limited to 'utils/gssd/gssd.c')
-rw-r--r-- | utils/gssd/gssd.c | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/utils/gssd/gssd.c b/utils/gssd/gssd.c index fdad153..611ef1a 100644 --- a/utils/gssd/gssd.c +++ b/utils/gssd/gssd.c @@ -46,6 +46,7 @@ #include <unistd.h> #include <err.h> +#include <errno.h> #include <stdio.h> #include <stdlib.h> #include <string.h> @@ -161,6 +162,18 @@ main(int argc, char *argv[]) } } + /* + * Some krb5 routines try to scrape info out of files in the user's + * home directory. This can easily deadlock when that homedir is on a + * kerberized NFS mount. By setting $HOME unconditionally to "/", we + * prevent this behavior in routines that use $HOME in preference to + * the results of getpw*. + */ + if (setenv("HOME", "/", 1)) { + printerr(1, "Unable to set $HOME: %s\n", strerror(errno)); + exit(1); + } + i = 0; ccachesearch[i++] = strtok(ccachedir, ":"); do { |