commit 72baf6d14f166da0531bfe02273861e1c394c3bd From: Karel Zak <kzak@redhat.com> Added support for the mount -s (sloppy) option Signed-off-by: Karel Zak <kzak@redhat.com> Signed-off-by: Steve Dickson <steved@redhat.com> --- utils/mount/mount.c | 8 ++++++-- utils/mount/nfs4mount.c | 3 ++- utils/mount/nfsmount.c | 19 +++++++++++-------- 3 files changed, 19 insertions(+), 11 deletions(-) diff --git a/utils/mount/mount.c b/utils/mount/mount.c index 05ff90f..13bffbc 100644 --- a/utils/mount/mount.c +++ b/utils/mount/mount.c @@ -44,6 +44,7 @@ char *progname; int nomtab; int verbose; int mounttype; +int sloppy; static struct option longopts[] = { { "fake", 0, 0, 'f' }, @@ -176,7 +177,6 @@ void copy_mntent(struct mntent *ment, nf int add_mtab(char *fsname, char *mount_point, char *fstype, int flags, char *opts, int freq, int passno) { struct mntent ment; - int fd; FILE *mtab; ment.mnt_fsname = fsname; @@ -236,6 +236,7 @@ void mount_usage() printf("\t-w\t\tMount file system read-write\n"); printf("\t-f\t\tFake mount, don't actually mount\n"); printf("\t-n\t\tDo not update /etc/mtab\n"); + printf("\t-s\t\tTolerate sloppy mount options rather than failing.\n"); printf("\t-h\t\tPrint this help\n"); printf("\tversion\t\tnfs4 - NFS version 4, nfs - older NFS version supported\n"); printf("\tnfsoptions\tRefer mount.nfs(8) or nfs(5)\n\n"); @@ -370,7 +371,7 @@ int main(int argc, char *argv[]) return 0; } - while ((c = getopt_long (argc - 2, argv + 2, "rt:vVwfno:h", + while ((c = getopt_long (argc - 2, argv + 2, "rt:vVwfno:hs", longopts, NULL)) != -1) { switch (c) { case 'r': @@ -400,6 +401,9 @@ int main(int argc, char *argv[]) else mount_opts = xstrdup(optarg); break; + case 's': + ++sloppy; + break; case 128: /* bind */ mounttype = MS_BIND; break; diff --git a/utils/mount/nfs4mount.c b/utils/mount/nfs4mount.c index 717ad56..4bc4ffc 100644 --- a/utils/mount/nfs4mount.c +++ b/utils/mount/nfs4mount.c @@ -50,6 +50,7 @@ #define DEFAULT_DIR "/var/lock/subsys" #endif extern int verbose; +extern int sloppy; char *IDMAPLCK = DEFAULT_DIR "/rpcidmapd"; #define idmapd_check() do { \ @@ -335,7 +336,7 @@ int nfs4mount(const char *spec, const ch nocto = !val; else if (!strcmp(opt, "ac")) noac = !val; - else { + else if (!sloppy) { printf(_("unknown nfs mount option: " "%s%s\n"), val ? "" : "no", opt); goto fail; diff --git a/utils/mount/nfsmount.c b/utils/mount/nfsmount.c index 507ccdb..d437036 100644 --- a/utils/mount/nfsmount.c +++ b/utils/mount/nfsmount.c @@ -104,6 +104,7 @@ typedef union { static char errbuf[BUFSIZ]; static char *erreob = &errbuf[BUFSIZ]; extern int verbose; +extern int sloppy; /* Convert RPC errors into strings */ int rpc_strerror(int); @@ -606,13 +607,13 @@ #if NFS_MOUNT_VERSION >= 2 } else if (!strcmp(opt, "namlen")) { if (nfs_mount_version >= 2) data->namlen = val; - else + else if (!sloppy) goto bad_parameter; #endif } else if (!strcmp(opt, "addr")) { /* ignore */; continue; - } else + } else if (!sloppy) goto bad_parameter; sprintf(cbuf, "%s=%s,", opt, opteq+1); } else if (opteq) { @@ -629,7 +630,7 @@ #if NFS_MOUNT_VERSION >= 2 mnt_pmap->pm_prot = IPPROTO_TCP; data->flags |= NFS_MOUNT_TCP; #endif - } else + } else if (!sloppy) goto bad_parameter; #if NFS_MOUNT_VERSION >= 5 } else if (!strcmp(opt, "sec")) { @@ -658,7 +659,7 @@ #if NFS_MOUNT_VERSION >= 5 data->pseudoflavor = AUTH_GSS_SPKMI; else if (!strcmp(secflavor, "spkm3p")) data->pseudoflavor = AUTH_GSS_SPKMP; - else { + else if (!sloppy) { printf(_("Warning: Unrecognized security flavor %s.\n"), secflavor); goto bad_parameter; @@ -677,7 +678,7 @@ #endif goto bad_parameter; } strncpy(data->context, context, NFS_MAX_CONTEXT_LEN); - } else + } else if (!sloppy) goto bad_parameter; sprintf(cbuf, "%s=%s,", opt, opteq+1); } else { @@ -764,9 +765,11 @@ #if NFS_MOUNT_VERSION >= 4 #endif } else { bad_option: - printf(_("Unsupported nfs mount option: " - "%s%s\n"), val ? "" : "no", opt); - goto out_bad; + if (!sloppy) { + printf(_("Unsupported nfs mount option: " + "%s%s\n"), val ? "" : "no", opt); + goto out_bad; + } } sprintf(cbuf, val ? "%s,":"no%s,", opt); }