commit 7f9cc56de079b1c53f912fc2abe31203e79782f4 From: Steve Dickson <steved@redhat.com> Stop v4 umounts from ping remote mountds Signed-off-by: Steve Dickson <steved@redhat.com> --- utils/mount/nfsumount.c | 59 ++++++++++++++++++++++------------------------- 1 files changed, 27 insertions(+), 32 deletions(-) diff --git a/utils/mount/nfsumount.c b/utils/mount/nfsumount.c index 5894e3a..bb06341 100644 --- a/utils/mount/nfsumount.c +++ b/utils/mount/nfsumount.c @@ -19,6 +19,7 @@ #include <stdio.h> #include <errno.h> +#include <unistd.h> #include <getopt.h> #include <mntent.h> #include <sys/mount.h> @@ -333,7 +334,7 @@ void umount_usage() int nfsumount(int argc, char *argv[]) { - int c, ret; + int c, ret, v4=0; char *spec; struct mntentchn *mc; @@ -371,39 +372,33 @@ int nfsumount(int argc, char *argv[]) mc = getmntdirbackward(spec, NULL); if (!mc) mc = getmntdevbackward(spec, NULL); - if (!mc && verbose) - printf(_("Could not find %s in mtab\n"), spec); - - if(mc) { - if(contains(mc->m.mnt_opts, "user") && getuid() != 0) { - struct passwd *pw = getpwuid(getuid()); - if(!pw || strcmp(pw->pw_name, get_value(mc->m.mnt_opts, "user="))) { - fprintf(stderr, "%s: permission denied to unmount %s\n", - progname, spec); - exit(1); - } - } else { - if(!contains(mc->m.mnt_opts, "users") && getuid() != 0) { - fprintf(stderr, "%s: only root can unmount %s from %s\n", - progname, mc->m.mnt_fsname, mc->m.mnt_dir); - exit(1); - } - } - - ret = 0; - if(!force && !lazy) - ret = _nfsumount(mc->m.mnt_fsname, mc->m.mnt_opts); - if(!ret) - ret = add_mtab2(mc->m.mnt_fsname, mc->m.mnt_dir, - mc->m.mnt_type, mc->m.mnt_opts, mc); + if (mc == NULL) { + fprintf(stderr, "%s: Unable to find '%s' in mount table\n", + progname, spec); + exit(1); } - else { - ret = 0; - if(!force && !lazy) - ret = _nfsumount(spec, NULL); - if(!ret) - ret = add_mtab2(spec, spec, spec, spec, NULL); + if(contains(mc->m.mnt_opts, "user") && getuid() != 0) { + struct passwd *pw = getpwuid(getuid()); + if(!pw || strcmp(pw->pw_name, get_value(mc->m.mnt_opts, "user="))) { + fprintf(stderr, "%s: permission denied to unmount %s\n", + progname, spec); + exit(1); + } + } else { + if(!contains(mc->m.mnt_opts, "users") && getuid() != 0) { + fprintf(stderr, "%s: only root can unmount %s from %s\n", + progname, mc->m.mnt_fsname, mc->m.mnt_dir); + exit(1); + } } + v4 = contains(mc->m.mnt_type, "nfs4"); + + ret = 0; + if(!force && !lazy && !v4) + ret = _nfsumount(mc->m.mnt_fsname, mc->m.mnt_opts); + if(!ret) + ret = add_mtab2(mc->m.mnt_fsname, mc->m.mnt_dir, + mc->m.mnt_type, mc->m.mnt_opts, mc); return(ret); }