diff options
-rw-r--r-- | utils/mount/stropts.c | 68 |
1 files changed, 5 insertions, 63 deletions
diff --git a/utils/mount/stropts.c b/utils/mount/stropts.c index bd127ab..99be0f3 100644 --- a/utils/mount/stropts.c +++ b/utils/mount/stropts.c @@ -322,19 +322,12 @@ static int nfs_is_permanent_error(int error) * Returns a new group of mount options if successful; otherwise * NULL is returned if some failure occurred. */ -static const char *nfs_transport_opttbl[] = { - "udp", - "tcp", - NULL, -}; - static struct mount_options *nfs_rewrite_mount_options(char *str) { struct mount_options *options; char *option, new_option[64]; clnt_addr_t mnt_server = { }; clnt_addr_t nfs_server = { }; - int p; options = po_split(str); if (!options) { @@ -360,64 +353,13 @@ static struct mount_options *nfs_rewrite_mount_options(char *str) memcpy(&mnt_server.saddr, &nfs_server.saddr, sizeof(mnt_server.saddr)); - option = po_get(options, "mountport"); - if (option) - mnt_server.pmap.pm_port = atoi(option); - mnt_server.pmap.pm_prog = MOUNTPROG; - option = po_get(options, "mountvers"); - if (option) - mnt_server.pmap.pm_vers = atoi(option); - option = po_get(options, "mountproto"); - if (option) { - if (strcmp(option, "tcp") == 0) { - mnt_server.pmap.pm_prot = IPPROTO_TCP; - po_remove_all(options, "mountproto"); - } - if (strcmp(option, "udp") == 0) { - mnt_server.pmap.pm_prot = IPPROTO_UDP; - po_remove_all(options, "mountproto"); - } - } + nfs_options2pmap(options, &nfs_server.pmap, &mnt_server.pmap); - option = po_get(options, "port"); - if (option) { - nfs_server.pmap.pm_port = atoi(option); - po_remove_all(options, "port"); - } + /* The kernel NFS client doesn't support changing the RPC program + * number for these services, so reset these fields before probing + * the server's ports. */ nfs_server.pmap.pm_prog = NFS_PROGRAM; - - option = po_get(options, "nfsvers"); - if (option) { - nfs_server.pmap.pm_vers = atoi(option); - po_remove_all(options, "nfsvers"); - } - option = po_get(options, "vers"); - if (option) { - nfs_server.pmap.pm_vers = atoi(option); - po_remove_all(options, "vers"); - } - option = po_get(options, "proto"); - if (option) { - if (strcmp(option, "tcp") == 0) { - nfs_server.pmap.pm_prot = IPPROTO_TCP; - po_remove_all(options, "proto"); - } - if (strcmp(option, "udp") == 0) { - nfs_server.pmap.pm_prot = IPPROTO_UDP; - po_remove_all(options, "proto"); - } - } - p = po_rightmost(options, nfs_transport_opttbl); - switch (p) { - case 1: - nfs_server.pmap.pm_prot = IPPROTO_UDP; - break; - case 2: - nfs_server.pmap.pm_prot = IPPROTO_TCP; - break; - } - po_remove_all(options, "tcp"); - po_remove_all(options, "udp"); + mnt_server.pmap.pm_prog = MOUNTPROG; if (!probe_bothports(&mnt_server, &nfs_server)) { errno = ESPIPE; |