X-Git-Url: https://git.decadent.org.uk/gitweb/?a=blobdiff_plain;f=utils%2Fmount%2Fnfsumount.c;h=9d798a2ff347513779b646b88692ae873844b158;hb=25dd860f13b93109dfd54ef8be0bfd91e4353af1;hp=ba2790068dcc79de499939b08d1d86e9972b3639;hpb=19ba81f64447dca205362a119f1e72701438aecc;p=nfs-utils.git diff --git a/utils/mount/nfsumount.c b/utils/mount/nfsumount.c index ba27900..9d798a2 100644 --- a/utils/mount/nfsumount.c +++ b/utils/mount/nfsumount.c @@ -169,24 +169,35 @@ out: static int nfs_umount_do_umnt(struct mount_options *options, char **hostname, char **dirname) { - struct sockaddr_storage address; - struct sockaddr *sap = (struct sockaddr *)&address; + union { + struct sockaddr sa; + struct sockaddr_in s4; + struct sockaddr_in6 s6; + } address; + struct sockaddr *sap = &address.sa; socklen_t salen = sizeof(address); struct pmap nfs_pmap, mnt_pmap; + sa_family_t family; if (!nfs_options2pmap(options, &nfs_pmap, &mnt_pmap)) { nfs_error(_("%s: bad mount options"), progname); return EX_FAIL; } + /* Skip UMNT call for vers=4 mounts */ + if (nfs_pmap.pm_vers == 4) + return EX_SUCCESS; + *hostname = nfs_umount_hostname(options, *hostname); if (!*hostname) { nfs_error(_("%s: out of memory"), progname); return EX_FAIL; } - if (nfs_name_to_address(*hostname, sap, &salen) == 0) - /* nfs_name_to_address reports any errors */ + if (!nfs_mount_proto_family(options, &family)) + return 0; + if (!nfs_lookup(*hostname, family, sap, &salen)) + /* nfs_lookup reports any errors */ return EX_FAIL; if (nfs_advise_umount(sap, salen, &mnt_pmap, dirname) == 0) @@ -336,7 +347,7 @@ int nfsumount(int argc, char *argv[]) char *opt = hasmntopt(&mc->m, "user"); struct passwd *pw; char *comma; - int len; + size_t len; if (!opt) goto only_root; if (opt[4] != '=')