Sophie

Sophie

distrib > Mandriva > 2007.1 > x86_64 > by-pkgid > ec1353c51cf2bd4d46fb842cdb5d4cdc > files > 6

nfs-utils-1.0.12-13mdv2007.1.src.rpm

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);
 		}