X-Git-Url: https://git.decadent.org.uk/gitweb/?p=nfs-utils.git;a=blobdiff_plain;f=utils%2Fmount%2Fstropts.c;h=99be0f3844023a35f975f6473aea41085432ba88;hp=bd127ab6bc017e8e9fef2c267666c752571b555c;hb=9d5ee403d5d4fd27ea41a674ca2e99ca1daa9f25;hpb=ff4f8ea366103d9b82cd2d9f8ced2426215d62b4 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;