X-Git-Url: https://git.decadent.org.uk/gitweb/?a=blobdiff_plain;ds=sidebyside;f=utils%2Fmount%2Fstropts.c;h=709f0ff24ed3e4d1fd7382c03de2f42919dcd0ee;hb=e1eccc5fc317f73801522b3b498c6dab67b048d2;hp=069bdc1ca6aa90d6120434890099e0583a7c6ab4;hpb=0e0526cce8127f1c18063ff700f5e4d5c77dc108;p=nfs-utils.git diff --git a/utils/mount/stropts.c b/utils/mount/stropts.c index 069bdc1..709f0ff 100644 --- a/utils/mount/stropts.c +++ b/utils/mount/stropts.c @@ -45,6 +45,7 @@ #include "parse_opt.h" #include "version.h" #include "parse_dev.h" +#include "conffile.h" #ifndef NFS_PROGRAM #define NFS_PROGRAM (100003) @@ -92,6 +93,24 @@ struct nfsmount_info { child; /* forked bg child? */ }; +inline void set_default_version(struct nfsmount_info *mi); +#ifdef MOUNT_CONFIG +inline void set_default_version(struct nfsmount_info *mi) +{ + extern unsigned long config_default_vers; + /* + * Use the default value set in the config file when + * the version has not been explicitly set. + */ + if (mi->version == 0 && config_default_vers) { + if (config_default_vers < 4) + mi->version = config_default_vers; + } +} +#else +inline void set_default_version(struct nfsmount_info *mi) {} +#endif /* MOUNT_CONFIG */ + /* * Obtain a retry timeout value based on the value of the "retry=" option. * @@ -257,7 +276,6 @@ static int nfs_append_sloppy_option(struct mount_options *options) return 0; return 1; } - /* * Set up mandatory non-version specific NFS mount options. * @@ -284,6 +302,12 @@ static int nfs_validate_options(struct nfsmount_info *mi) mi->version = 3; } + /* + * If enabled, see if the default version was + * set in the config file + */ + set_default_version(mi); + if (!nfs_append_sloppy_option(mi->options)) return 0; @@ -604,8 +628,15 @@ static int nfs_try_mount(struct nfsmount_info *mi) if (linux_version_code() > MAKE_VERSION(2, 6, 31)) { errno = 0; result = nfs_try_mount_v4(mi); - if (errno != EPROTONOSUPPORT) - break; + if (errno != EPROTONOSUPPORT) { + /* + * To deal with legacy Linux servers that don't + * automatically export a pseudo root, retry + * ENOENT errors using version 3 + */ + if (errno != ENOENT) + break; + } } case 2: case 3: