X-Git-Url: https://git.decadent.org.uk/gitweb/?a=blobdiff_plain;f=utils%2Fmount%2Fnfsumount.c;h=ca9c801bab6f48abd0e7a3d5a9a2a0de058d0a4b;hb=1ca7f42bfa6d4f47c88f82ecc33f2abb3cf92da7;hp=e8814a37e7ad896450bc738c4695eb3179782eda;hpb=53a9b4a2ea971d5718ccfcc2f2825ff9af81cd23;p=nfs-utils.git diff --git a/utils/mount/nfsumount.c b/utils/mount/nfsumount.c index e8814a3..ca9c801 100644 --- a/utils/mount/nfsumount.c +++ b/utils/mount/nfsumount.c @@ -119,6 +119,16 @@ static int del_mtab(const char *spec, const char *node) return EX_FILEIO; } +/* + * Pick up certain mount options used during the original mount + * from /etc/mtab. The basics include the server's IP address and + * the server pathname of the share to unregister. + * + * These options might also describe the mount port, mount protocol + * version, and transport protocol used to punch through a firewall. + * We will need this information to get through the firewall again + * to do the umount. + */ static int do_nfs_umount(const char *spec, char *opts) { char *hostname; @@ -184,6 +194,8 @@ static int do_nfs_umount(const char *spec, char *opts) pmap->pm_vers = atoi(p+10); if (opts && (hasmntopt(&mnt, "udp") || hasmntopt(&mnt, "proto=udp"))) pmap->pm_prot = IPPROTO_UDP; + if (opts && (hasmntopt(&mnt, "tcp") || hasmntopt(&mnt, "proto=tcp"))) + pmap->pm_prot = IPPROTO_TCP; if (!nfs_gethostbyname(hostname, &mnt_server.saddr)) { nfs_error(_("%s: '%s' does not contain a recognized hostname"), @@ -197,7 +209,7 @@ static int do_nfs_umount(const char *spec, char *opts) return EX_USAGE; } - return 0; + return EX_SUCCESS; } static struct option umount_longopts[] = @@ -293,7 +305,7 @@ int nfsumount(int argc, char *argv[]) /* umount might call us twice. The second time there will * be no entry in mtab and we should just exit quietly */ - return 0; + return EX_SUCCESS; only_root: nfs_error(_("%s: You are not permitted to unmount %s"),