summaryrefslogtreecommitdiffstats
path: root/utils/mount/nfsumount.c
Commit message (Collapse)AuthorAgeFilesLines
* mount: silently fails when bad option values are givenSteve Dickson2010-06-221-3/+1
| | | | | | | | mount.nfs should not only fail when an invalid option values are supplied (as it does), it should also print a diagnostic message identifying the problem Signed-off-by: Steve Dickson <steved@redhat.com>
* mount.nfs: Teach umount.nfs to recognize netids in /etc/mtabChuck Lever2009-12-111-4/+11
| | | | | | | | umount.nfs has to detect the correct address family to use when looking up the server. Signed-off-by: Chuck Lever <chuck.lever@oracle.com> Signed-off-by: Steve Dickson <steved@redhat.com>
* mount.nfs: Support "-t nfs,vers=4" mounts in the kernelChuck Lever2009-09-141-0/+4
| | | | | | | | | | | | | | Support "vers=4" in nfs_nfs_version() Skip UMNT call for "-t nfs -o vers=4" mounts For "-t nfs -o vers=4" mounts, we want to skip v2/v3 version/transport negotiation, but be sure to append the "clientaddr" option. Signed-off-by: Chuck Lever <chuck.lever@oracle.com> Signed-off-by: Steve Dickson <steved@redhat.com> Tested-by: Steve Dickson <steved@redhat.com>
* umount.nfs: Use correct data type in nfsumount()Chuck Lever2009-07-141-1/+1
| | | | | | | | | | | | | Address compiler warning: nfsumount.c: In function nfsumount: nfsumount.c:347: warning: comparison between signed and unsigned The result type of pointer arithmetic and the return type of strlen(3) are both size_t. Signed-off-by: Chuck Lever <chuck.lever@oracle.com> Signed-off-by: Steve Dickson <steved@redhat.com>
* mount.nfs: make nfs_options2pmap return errorsChuck Lever2009-07-141-1/+4
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Up until now, nfs_options2pmap() has been passed mount options that have already gone through the kernel's parser successfully. So, it never had to check for invalid mount option values. However, we are about to pass it options that come right from the user. So nfs_options2pmap() will now need to report an error and fail if it encounters a bogus value for any of the options it cares about. ===== Note that nfs_options2pmap() will allow a bogus value for an option if the same option is specified farther to the right with a useable value. For example, if a user specifies "proto=foo,...,tcp" then nfs_options2pmap() uses "tcp" and ignores "proto=foo". However, if the options are specified in the other order: "tcp,...,proto=foo" then nfs_options2pmap() will fail. This is a simple and unambiguous extension of the "rightmost wins" rule. Since mount.nfs strips out these options out and replaces them with the rpcbind-negotiated options before invoking mount(2), the kernel should never receive bogus values for these options from mount.nfs in such cases. This is probably slightly more flexible behavior than the legacy mount implementation, but should be harmless. All mount options unrelated to pmap are ignored by nfs_options2pmap(). Signed-off-by: Chuck Lever <chuck.lever@oracle.com> Signed-off-by: Steve Dickson <steved@redhat.com>
* umount.nfs: Harden umount.nfs error reportingChuck Lever2009-05-181-8/+9
| | | | | | | | | | Add additional error reporting to nfs_advise_umount(). These messages can be displayed if the "-v" option is specified with umount.nfs. Normally these messages do not appear. Signed-off-by: Chuck Lever <chuck.lever@oracle.com> Signed-off-by: Steve Dickson <steved@redhat.com>
* mount: remove legacy version of nfs_name_to_address()Chuck Lever2009-05-181-1/+1
| | | | | | | | | | | | | | | | | | | | | | | Currently we have two separate copies of nfs_name_to_address() since some older glibc's don't define AI_ADDRCONFIG. This means extra work to build- and run-test both functions when code is changed in this area. It is also the case that gethostbyname(3) is deprecated, and should not be used in new code. Remove the legacy code in favor of always using getaddrinfo(3). We can also get rid of nfs_name_to_address()'s @family argument as well. Note also this addresses a bug in nfsumount.c -- it was calling nfs_name_to_address() with AF_UNSPEC unconditionally, even if the legacy version of nfs_name_to_address(), which doesn't support AF_UNSPEC, was in use. Signed-off-by: Chuck Lever <chuck.lever@oracle.com> Signed-off-by: Steve Dickson <steved@redhat.com>
* umount command: remove do_nfs_umount23 functionChuck Lever2009-02-171-93/+0
| | | | | | | Remove do_nfs_umount23() now that it is unused. Signed-off-by: Chuck Lever <chuck.lever@oracle.com> Signed-off-by: Steve Dickson <steved@redhat.com>
* umount.nfs command: Support AF_INET6 server addressesChuck Lever2009-02-171-4/+99
| | | | | | | | | | | | | | | | | | | | | | | Replace existing mount option parser in nfsumount.c with the new pmap stuffer function nfs_options2pmap(). Mount option parsing for umount.nfs now works the same as it does for mount option rewriting in the text-based mount.nfs command. This adds a number of new features: 1. The new logic supports resolving AF_INET6 server addresses 2. Support is added for the recently introduced "mountaddr" option. 3. Parsing numeric option values is much more careful 4. Option parsing no longer uses xmalloc/xstrdup, so it won't fail silently if memory can't be allocated 5. Mount program number set in /etc/rpc is respected 6. Mount doesn't exit with EX_USAGE if the hostname lookup fails Signed-off-by: Chuck Lever <chuck.lever@oracle.com> Signed-off-by: Steve Dickson <steved@redhat.com>
* If portmap is not listening on UDP (as apparently happens withNeil Brown2008-07-161-4/+15
| | | | | | | | | | | | | | | | | | | MS-Windows-Server2003R2SP2), then nfs mounts have to be mounted with -o mountproto=tcp to succeed. In this case a umount will still try UDP and will fail to contact the server. It will still succeed with the local unmount (after a timeout) but exits with a non-zero exit status. This causes /bin/mount to retry so we get a strange error about the filesystem not being mounted. So: get umount to use tcp if "mountproto=tcp" appears in mtab ignore any failure message from the server that would overwrite a success message from the local umount syscall. Signed-off-by: NeilBrown <neilb@suse.de> Signed-off-by: Steve Dickson <steved@redhat.com>
* Traditionally the mount command has looked for a ":" to separate theChuck Lever2008-07-151-19/+16
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | server's hostname from the export path in the mounted on device name, like this: mount server:/export /mounted/on/dir The server's hostname is "server" and the export path is "/export". You can also substitute a specific IPv4 network address for the server hostname, like this: mount 192.168.0.55:/export /mounted/on/dir Raw IPv6 addresses present a problem, however, because they look something like this: fe80::200:5aff:fe00:30b Note the use of colons. To get around the presence of colons, copy the Solaris convention used for raw NFS server IPv6 addresses, which is to wrap the raw IPv6 address with square brackets. This is also suggested in RFC 4038. Introduce a new device name parser that can support traditional device names and square brackets. Place the parser in a separate source file so both the mount and umount paths can derive the server's hostname and export pathname the same way. Bonus points: add a check for NFS URLs and display an appropriate error message in that case. This is cleaner than failing with "unknown host: nfs". Signed-off-by: Chuck Lever <chuck.lever@oracle.com> Signed-off-by: Steve Dickson <steved@redhat.com>
* Fix version fallback for unmount.Neil Brown2007-10-121-6/+4
| | | | | | | | | | | | | | | | Previously, if the mtab record didn't mention a version, unmount would assume a v3 umount and send an UNMOUNT request accordingly. This is wrong. So remove the 'v3' assumption, and allow probe_port to continue when it gets a version number mis-match. Also there was some overloading of the meaning of pm_vers==0 relating to v4 mounts. As do_nfs_umount is never called for v4, rename it to do_nfs_umount23, and remove v4 handling from there and from nfs_call_umount. Signed-off-by: Neil Brown <neilb@suse.de>
* Don't fail an unmount just because we couldn't contact the NFS server.Neil Brown2007-10-111-2/+1
| | | | | | | If we fail to talk to the NFS server when unmounted a v2 or v3 mount, still do the unmount, but allow the error to propagate up. Signed-off-by: Neil Brown <neilb@suse.de>
* Don't do_nfs_umount() for NFSv4 unmountsChuck Lever2007-09-251-1/+1
| | | | | | | | No need to talk to mountd when unmounting nfs4 filesystems. Signed-off-by: Kevin Coffman <kwc@citi.umich.edu> Acked-by: Chuck Lever <chuck.lever@oracle.com> Signed-off-by: Neil Brown <neilb@suse.de>
* umount.nfs: umount doesn't recognize a busy file systemChuck Lever2007-09-251-3/+7
| | | | | | | | | | umount.nfs shouldn't remove a busy file system from /etc/mtab, and should report and return an error. I also added an extra "goto" to make the flow of control more clear, and to reduce the chance that a future change in this logic will break it. Signed-off-by: Chuck Lever <chuck.lever@oracle.com> Signed-off-by: Neil Brown <neilb@suse.de>
* umount.nfs: Refactor remount logic in umount.nfsChuck Lever2007-09-251-17/+26
| | | | | | | | Clean up: move the remount logic into its own function. This makes it easier to fix a bug in the next patch. Signed-off-by: Chuck Lever <chuck.lever@oracle.com> Signed-off-by: Neil Brown <neilb@suse.de>
* umount.nfs: Fix white space damage in nfsumount.cChuck Lever2007-09-251-58/+58
| | | | | | | Replace leading blanks with tabs in del_mtab(). Signed-off-by: Chuck Lever <chuck.lever@oracle.com> Signed-off-by: Neil Brown <neilb@suse.de>
* mount.nfs: teach [u]mount.nfs[4] to exit with EX_SUCCESS instead of 0Chuck Lever2007-09-251-2/+2
| | | | | | | Use the newly defined EX_SUCCESS exit code in all the right places. Signed-off-by: Chuck Lever <chuck.lever@oracle.com> Signed-off-by: Neil Brown <neilb@suse.de>
* mount.nfs: umount needs to pick up transport option from /etc/mtabChuck Lever2007-08-041-0/+12
| | | | | | | | Now that umount's default transport protocol has become more flexible, it will need to detect both proto=udp and proto=tcp in /etc/mtab. Signed-off-by: Chuck Lever <chuck.lever@oracle.com> Signed-off-by: Neil Brown <neilb@suse.de>
* mount.nfs: Support double-wide characters in printed stringsChuck Lever2007-08-041-11/+11
| | | | | | | | | | | Previous NLS changes missed a spot or two. This patch tries to get most of them, but probably misses a few more. In errors.c:mount_errors() I've removed a period at the end of the error messages; this is consistent with other error messages I've examined. Signed-off-by: Chuck Lever <chuck.lever@oracle.com> Signed-off-by: Neil Brown <neilb@suse.de>
* libnfs.a: eliminate conn.c and conn.hChuck Lever2007-07-301-1/+0
| | | | | | | conn.[ch] are now no longer needed. Clean them out and delete them. Signed-off-by: Chuck Lever <chuck.lever@oracle.com> Signed-off-by: Neil Brown <neilb@suse.de>
* umount.nfs: eliminate a nearly empty header file.Chuck Lever2007-07-301-1/+0
| | | | | | | | Clean-up: move nfsumount() global declaration to nfs_mount.h, and remove nfsumount.h. Signed-off-by: Chuck Lever <chuck.lever@oracle.com> Signed-off-by: Neil Brown <neilb@suse.de>
* umount.nfs: Pass return codes from do_nfs_umount backChuck Lever2007-07-301-3/+4
| | | | | | | Do we really care about these return codes? Signed-off-by: Chuck Lever <chuck.lever@oracle.com> Signed-off-by: Neil Brown <neilb@suse.de>
* umount.nfs: Make do_nfs_mount use conventional EX_ style return codesChuck Lever2007-07-301-12/+26
| | | | | | | | | do_nfs_mount() should return EX_ style return codes and not 1 or 0 in order to distinguish between usage errors and other problems (such as EX_FILEIO or RPC errors). Signed-off-by: Chuck Lever <chuck.lever@oracle.com> Signed-off-by: Neil Brown <neilb@suse.de>
* umount.nfs: make _nfsumount() staticChuck Lever2007-07-301-3/+3
| | | | | | | | | | | _nfsumount() is never called outside of nfsumount.c. Also give it a more conventional name. Note that it's return code is ignored. That will be addressed in a subsequent patch. Signed-off-by: Chuck Lever <chuck.lever@oracle.com> Signed-off-by: Neil Brown <neilb@suse.de>
* umount.nfs: make del_mtab() a static functionChuck Lever2007-07-301-1/+1
| | | | | | | Clean-up: del_mtab() isn't used outside of nfsumount.c. Signed-off-by: Chuck Lever <chuck.lever@oracle.com> Signed-off-by: Neil Brown <neilb@suse.de>
* umount.nfs: move nfs_call_umount to network.cChuck Lever2007-07-301-37/+0
| | | | | | | | | nfs_call_umount() is shared by nfsmount.c and nfsumount.c, and manages a network function (building the RPC umount call to the server's MNT daemon). So move it to network.c with other network-related functions. Signed-off-by: Chuck Lever <chuck.lever@oracle.com> Signed-off-by: Neil Brown <neilb@suse.de>
* umount.nfs: make umount_usage() staticChuck Lever2007-07-301-1/+6
| | | | | | | No good reason to export umount_usage. Make it static. Signed-off-by: Chuck Lever <chuck.lever@oracle.com> Signed-off-by: Neil Brown <neilb@suse.de>
* umount.nfs: make umount.nfs use UDP by defaultChuck Lever2007-07-301-1/+0
| | | | | | | | mount.nfs currently uses UDP by default when calling a MNT server. Make umount.nfs do the same. Signed-off-by: Chuck Lever <chuck.lever@oracle.com> Signed-off-by: Neil Brown <neilb@suse.de>
* umount.nfs: some umount.nfs error return codes are confusingChuck Lever2007-07-301-5/+5
| | | | | | | | | | umount.nfs should return the standard EX_ mount return codes. At some point in the past, it was returning 0 for failure and 1 for success, and some of these have been changed and some haven't. See if we can rectify this. Signed-off-by: Chuck Lever <chuck.lever@oracle.com> Signed-off-by: Neil Brown <neilb@suse.de>
* Add -Wstrict-prototypes to compiler args, and fix warnings caused.Neil Brown2007-07-291-1/+1
|
* mount.nfs: White space clean upChuck Lever2007-07-201-1/+0
| | | | | Signed-off-by: Chuck Lever <chuck.lever@oracle.com> Signed-off-by: Neil Brown <neilb@suse.de>
* mount.nfs: Use nfs_error in nfsmount.c, nfsumount.c, and nfs4mount.cChuck Lever2007-07-201-11/+9
| | | | | | | Clean up. - fprintf becomes nfs_error Signed-off-by: Chuck Lever <chuck.lever@oracle.com> Signed-off-by: Neil Brown <neilb@suse.de>
* mount.nfs: Error handling clean-upChuck Lever2007-07-201-3/+3
| | | | | | | | | o Use nfs_error( _() ) instead of fprintf(stderr, o Use the mount return code macros instead of bare integers o Free mount_point after it has been canonicalized Signed-off-by: Chuck Lever <chuck.lever@oracle.com> Signed-off-by: Neil Brown <neilb@suse.de>
* mount.nfs: Move network functions into a common source moduleChuck Lever2007-07-201-3/+1
| | | | | | | | Separate network oriented functions from filesystem oriented functions, for general cleanliness. Signed-off-by: Chuck Lever <chuck.lever@oracle.com> Signed-off-by: Neil Brown <neilb@suse.de>
* mount.nfs: Always preset nfs_mount_versionChuck Lever2007-07-201-3/+0
| | | | | | | | | | | | nfs_mount_version is a global integer that is set based on a guess about which nfs_mount_data version is appropriate for the kernel we're running on. Make it always available and have the correct value before calling mount and unmount so they don't have to worry about setting it themselves. Signed-off-by: Chuck Lever <chuck.lever@oracle.com> Signed-off-by: Neil Brown <neilb@suse.de>
* mount.nfs: Create a common source module for reporting mount errorsChuck Lever2007-07-201-25/+2
| | | | | | | Clean up, and pre-requisite for subsequent fixes. Signed-off-by: Chuck Lever <chuck.lever@oracle.com> Signed-off-by: Neil Brown <neilb@suse.de>
* umount should succeed even if we cannot contact the server.Neil Brown2007-03-201-4/+3
| | | | | | Failure to tell mountd about the unmount should not be classes and an error and DEFINTELY should not stop the filesystem from being unmounted.
* Build mount.nfs by default, and install setuidNeil Brown2007-03-201-1/+6
| | | | Also fix a few bugs that came up in initial testing.
* mount.nfs - make sure program name in error message is correct.Neil Brown2007-03-201-0/+1
| | | | | | getopt_long uses argv[0] in error messages. So it it is given argv+2 for example, we need to make sure that argv[2] has the correct program name.
* umount.nfs - more strict checks on command line args.Neil Brown2007-03-201-0/+11
| | | | | Reject if there are non-flag args, Reject if the filesystem is not an NFS filesystem.
* Clean up of some error messages.Amit Gud2007-03-191-1/+1
| | | | | Signed-off-by: Steve Dickson <steved@redhat.com> Signed-off-by: Neil Brown <neilb@suse.de>
* Fix a 'const' misuse warning.Neil Brown2007-03-161-1/+1
|
* Support unmount by not privileged usersNeil Brown2007-03-161-0/+31
| | | | Providing user=username or users is listed in mtab.
* Remove nfs_mntent_t in favour of struct mntentNeil Brown2007-03-161-1/+1
| | | | They are identical and the later allows us to use hasmntent.
* On "umount --lazy", don't tell the server we have unmounted.Neil Brown2007-03-161-6/+7
| | | | | | Because, ofcourse, we haven't. When we do finally let-go of the mount, the server won't get told, but the same would happen on a crash, and the server just has to cope.
* Further tidyup of nfs_umount.Neil Brown2007-03-161-65/+16
| | | | | | | | | | | | | | - remove non-used arguments from del_mtab. - Don't try to pass a "host:/path" string to umount. It used to be possible to umount("/dev/whatever"). It has never been possible to umount("host:/path"). - Don't try to read /proc/mounts first. Some mount options (mount_vers) are only stored in /etc/mtab, not in /proc/mounts. So we have to prefer /etc/mtab as getmntXbackwards do. - Only every call one of getmnt{dir,dev}backwards, depending on whether 'spec' looks like a path name or a host:/path. - Don't call _nfsumount unless we have a host:/path, or del_mtab unless we have a path name.
* Rename add_mtab2() to del_mtab()Wei Yongjun2007-03-161-3/+3
| | | | | | | add_mtab2 is used to remove an entry from mtab, rename it to del_mtab. Signed-off-by: Wei Yongjun <yjwei@nanjing-fnst.com> Signed-off-by: Neil Brown <neilb@suse.de>
* Use correct UMNT protocol to do umountWei Yongjun2007-03-161-25/+29
| | | | | | | | | | | | | This patch do following things: 1. When unmounting, we should try /proc/mounts first. Only then in /etc/mtab if it wasn't found. 2. Reject name passed to us which is not starts with a '/' or not contains a ':' 3. Fix the method to get UMNT protocol Signed-off-by: Wei Yongjun <yjwei@nanjing-fnst.com> Signed-off-by: Neil Brown <neilb@suse.de>
* Fix nfs4 umount to not used umount procedureWei Yongjun2007-03-161-27/+13
| | | | | | | | | | | This fix umount.nfs4's BUG, patch cleanup some useless code. 1. Combine nfs3_umount() and nfs2_umount() to nfs_umount() 2. If it is a nfs4 remote file system or unkown mount version, do not probe remote mount port and not send UMNT request wich is not necessary Signed-off-by: Wei Yongjun <yjwei@nanjing-fnst.com> Signed-off-by: Neil Brown <neilb@suse.de>