]> git.decadent.org.uk Git - nfs-utils.git/blobdiff - utils/mount/stropts.c
If an NFS server is only listening on TCP for portmap (as apparently
[nfs-utils.git] / utils / mount / stropts.c
index e4a440890e89ad01b628b4d8aebd4e865e1c8e1f..09fca86d1e1705a72e8a6bfb805a9d861f8fdfb8 100644 (file)
@@ -353,6 +353,17 @@ static struct mount_options *nfs_rewrite_mount_options(char *str)
        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");
+               }
+       }
 
        option = po_get(options, "port");
        if (option) {
@@ -421,6 +432,20 @@ static struct mount_options *nfs_rewrite_mount_options(char *str)
 
        }
 
+       if (mnt_server.pmap.pm_prot == IPPROTO_TCP)
+               snprintf(new_option, sizeof(new_option) - 1,
+                        "mountproto=tcp");
+       else
+               snprintf(new_option, sizeof(new_option) - 1,
+                        "mountproto=udp");
+       if (po_append(options, new_option) == PO_FAILED)
+               goto err;
+
+       snprintf(new_option, sizeof(new_option) - 1,
+                "mountport=%lu", mnt_server.pmap.pm_port);
+       if (po_append(options, new_option) == PO_FAILED)
+               goto err;
+
        errno = 0;
        return options;