You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
61 lines
2.1 KiB
61 lines
2.1 KiB
commit 845c87b67b7bfd60127e23d1df93a94ceb9d3d18 |
|
Author: NeilBrown <neilb@suse.com> |
|
Date: Wed Jul 26 13:51:51 2017 -0400 |
|
|
|
mount: Fix problems with parsing minorversion= |
|
|
|
1/ minorversion=0 is not recognized, as errors from |
|
strtol() are not correctly detected. |
|
2/ when there is an error in the minorversion= value, |
|
no message is presented. |
|
3/ Current code recognizes "minorversion" and sets V_SPECIFIC, |
|
but then because *cptr == '\0', the v_mode is reset to V_GENERAL. |
|
This results in minorversion negotiation, which is not wanted. |
|
|
|
This patch addresses all of these. |
|
|
|
Signed-off-by: NeilBrown <neilb@suse.com> |
|
Signed-off-by: Steve Dickson <steved@redhat.com> |
|
(cherry picked from commit 050153ef6a86ff5ab06ef65be36336824a323779) |
|
|
|
diff --git a/utils/mount/network.c b/utils/mount/network.c |
|
index b2e4374..b64c526 100644 |
|
--- a/utils/mount/network.c |
|
+++ b/utils/mount/network.c |
|
@@ -1283,13 +1283,19 @@ nfs_nfs_version(struct mount_options *options, struct nfs_version *version) |
|
if (!version_val) |
|
goto ret_error; |
|
|
|
- if (!(version->major = strtol(version_val, &cptr, 10))) |
|
+ version->major = strtol(version_val, &cptr, 10); |
|
+ if (cptr == version_val || (*cptr && *cptr != '.')) |
|
goto ret_error; |
|
- |
|
- if (version->major < 4) |
|
+ if (version->major == 4 && *cptr != '.' && |
|
+ (version_val = po_get(options, "minorversion")) != NULL) { |
|
+ version->minor = strtol(version_val, &cptr, 10); |
|
+ i = -1; |
|
+ if (*cptr) |
|
+ goto ret_error; |
|
version->v_mode = V_SPECIFIC; |
|
- |
|
- if (*cptr == '.') { |
|
+ } else if (version->major < 4) |
|
+ version->v_mode = V_SPECIFIC; |
|
+ else if (*cptr == '.') { |
|
version_val = ++cptr; |
|
if (!(version->minor = strtol(version_val, &cptr, 10)) && cptr == version_val) |
|
goto ret_error; |
|
@@ -1303,7 +1309,10 @@ nfs_nfs_version(struct mount_options *options, struct nfs_version *version) |
|
return 1; |
|
|
|
ret_error: |
|
- if (i <= 2 ) { |
|
+ if (i < 0) { |
|
+ nfs_error(_("%s: parsing error on 'minorversion=' option"), |
|
+ progname); |
|
+ } else if (i <= 2 ) { |
|
nfs_error(_("%s: parsing error on 'v' option"), |
|
progname); |
|
} else if (i == 3 ) {
|
|
|