Martin Leisner [Fri, 25 Jul 2008 18:50:06 +0000 (14:50 -0400)]
showmount issues
The connect_nb() routne returns zero for success and a negative
value for failure which was not being interpreted correctly
by the getport() routine. This patch fixes that problem.
Steve Dickson [Fri, 25 Jul 2008 18:15:47 +0000 (14:15 -0400)]
sm-notify: perform DNS lookup in the background.
If an NFS server has no network connectivity when it reboots,
it will block in sm-notify waiting for DNS lookup for a potentially
large number of hosts. This is not helpful and just annoys the
sysadmin.
So do the DNS lookup in the backgrounded phase of sm-notify,
before sending off the NOTIFY requests.
Acked-by: NeilBrown <neilb@suse.de> Signed-off-by: Steve Dickson <steved@redhat.com>
Neil Brown [Wed, 16 Jul 2008 17:28:52 +0000 (13:28 -0400)]
If portmap is not listening on UDP (as apparently happens with
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>
Neil Brown [Wed, 16 Jul 2008 17:15:46 +0000 (13:15 -0400)]
If an NFS server is only listening on TCP for portmap (as apparently
MS-Windows-Server2003R2SP2 does), mount doesn't cope. There is retry
logic in case the initial choice of version/etc doesn't work, but it
doesn't cope with mountd needing tcp.
So:
Fix probe_port so that a TIMEDOUT error doesn't simply abort
but probes with other protocols (e.g. tcp).
Fix rewrite_mount_options to extract the mountproto option before
doing a probe, then set mountproto (and mount prot) based
on the result.
Signed-off-by: Neil Brown <neilb@suse.de> Signed-off-by: Steve Dickson <steved@redhat.com>
Steve Dickson [Tue, 15 Jul 2008 18:43:00 +0000 (14:43 -0400)]
It appears that a recent glibc update now enforces the requirement for a mode
parameter for open calls with the O_CREAT flag set. nfs-utils support code
defines a function xflock used by exportfs and mountd that calls open with
O_CREAT but no mode parameter. This causes exportfs and mountd to dump core,
with the error message:
*** invalid open64 call: O_CREAT without mode ***:rpc.mountd terminated
Chuck Lever [Tue, 15 Jul 2008 17:51:07 +0000 (13:51 -0400)]
Traditionally the mount command has looked for a ":" to separate the
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>
Chuck Lever [Tue, 15 Jul 2008 17:37:07 +0000 (13:37 -0400)]
Change the append_clientaddr_option() function to support sending either
IPv4 or IPv6 addresses to the kernel via the "clientaddr=" option.
If the mount.nfs4 command can't determine an appropriate callback address,
it used to fail the mount request. This new function simply sends an ANY
address instead, so the mount request succeeds, but delegation is disabled.
Signed-off-by: Chuck Lever <chuck.lever@oracle.com> Signed-off-by: Steve Dickson <steved@redhat.com>
Chuck Lever [Tue, 15 Jul 2008 17:33:32 +0000 (13:33 -0400)]
There are three helpers that convert sockaddr-style addresses to text
addresses, then construct mount options to pass these addresses to the
kernel. The tail of each of these helpers does exactly the same thing,
so introduce a helper that handles the common code.
Magically, the new helper supports IPv6 as well as IPv4.
Signed-off-by: Chuck Lever <chuck.lever@oracle.com> Signed-off-by: Steve Dickson <steved@redhat.com>
Chuck Lever [Tue, 15 Jul 2008 17:31:17 +0000 (13:31 -0400)]
Introduce IPv6-enabled version of get_client_address. The legacy mount
command could use this eventually as well.
If this new function fails to discover an appropriate callback address, it
fills in an ANY address to indicate to the server that it should not call the
client back (ie delegations are disabled in this case).
The user can specify a callback address via the clientaddr= mount option in
this case to enable delegation.
Signed-off-by: Chuck Lever <chuck.lever@oracle.com> Signed-off-by: Steve Dickson <steved@redhat.com>
Chuck Lever [Tue, 15 Jul 2008 17:23:58 +0000 (13:23 -0400)]
Add #include directives for additional header files needed to support IPv6
networking. This is a separate patch so subsequent
patches can be reordered without collision.
Signed-off-by: Chuck Lever <chuck.lever@oracle.com> Signed-off-by: Steve Dickson <steved@redhat.com>
Chuck Lever [Tue, 15 Jul 2008 17:20:01 +0000 (13:20 -0400)]
We want to continue to support building nfs-utils on systems that do not
have IPv6-enabled RPC libraries and headers installed, so add a
./configure switch that allows distros to disable IPv6 functionality.
This patch introduces the nfs-utils autotools configuration to the library
and header dependencies that will be required in subsequent patches.
Later patches can then be reordered more easily if these new dependencies
are added in one heap.
For now, --enable-ipv6 defaults to "no", so this patch should not result in
any behavioral changes to the nfs-utils build process, by default.
Signed-off-by: Chuck Lever <chuck.lever@oracle.com> Signed-off-by: Steve Dickson <steved@redhat.com>
Chuck Lever [Tue, 15 Jul 2008 16:17:19 +0000 (12:17 -0400)]
Currently the "-s" option is ignored by the text-based mount interface. To
notify the kernel that sloppy mount option parsing is needed, add "sloppy"
to the string of mount options passed to the kernel.
The 2.6.23 - 2.6.26 kernels will fail the mount if "sloppy" is present, as
they won't recognize it. To prevent them from ever seeing this option,
have the mount command check the kernel version before appending the option.
Signed-off-by: Chuck Lever <chuck.lever@oracle.com> Signed-off-by: Steve Dickson <steved@redhat.com>
Chuck Lever [Tue, 15 Jul 2008 16:15:29 +0000 (12:15 -0400)]
Lots of parts of nfs-utils already depend on getaddrinfo(3).
We could find each instance where getaddrinfo(3) is invoked, wrap it with
'#ifdef HAVE_GETADDRINFO', and provide equivalent logic without it, but that's
a whole lot of work... and no-one has complained about this so far.
So as a clean-up, let's simply add a hard dependency for it in configure.ac,
and call it a day.
Signed-off-by: Chuck Lever <chuck.lever@oracle.com> Signed-off-by: Steve Dickson <steved@redhat.com>
Chuck Lever [Tue, 15 Jul 2008 15:59:03 +0000 (11:59 -0400)]
The text-based mount command displays the rather inexplicable "mount:
internal error" whenever it encounters a problem that is entirely
unexpected by its designers.
Let's beef that error message up to include instructions about reporting
the problem, and fix the error code returned by the mount option rewriting
logic so that also will no longer report "internal error". An error in there
should generally only occur if there was an invalid mount option specified.
Signed-off-by: Chuck Lever <chuck.lever@oracle.com> Signed-off-by: Steve Dickson <steved@redhat.com>
Ported the create_mtab() routine from util-linux-ng as well
some add_mtab() updates to better hand the instances where
/etc/mtab does not exist or is not writable
Signed-off-by: Christiaan Welvaart <cjw@daneel.dyndns.org> Signed-off-by: Steve Dickson <steved@redhat.com>
The rpc.gssd scans for any suitable kerberos ticket. In cross-realm
environment this may not be the desired behaviour. Therefore a new
option, -R preferred realm, is presented so that the rpc.gssd prefers tickets
from this realm. By default, the default realm is preferred.
Signed-off-by: Lukas Hejtmanek <xhejtman@ics.muni.cz> Signed-off-by: Kevin Coffman <kwc@citi.umich.edu> Signed-off-by: Steve Dickson <steved@redhat.com>
The default expiration of kernel gss contexts is the expiration
of the Kerberos ticket used in its creation. (For contexts
created using the Kerberos mechanism.) Thus kdestroy has
no effect in nullifying the kernel context.
This patch adds -t <timeout> option to rpc.gssd so that the client's
administrator may specify a timeout for expiration of contexts in kernel.
After this timeout, rpc.gssd is consulted to create a new context.
By default, timeout is 0 (i.e., no timeout at all) which follows the
previous behavior.
Signed-off-by: Lukas Hejtmanek <xhejtman@ics.muni.cz> Signed-off-by: Kevin Coffman <kwc@citi.umich.edu> Signed-off-by: Steve Dickson <steved@redhat.com>
gssd_setup_krb5_user_gss_ccache must return an error if no usable cache is
found. Trying to use invalid default cache and continue is not good idea at all.
Signed-off-by: Lukas Hejtmanek <xhejtman@ics.muni.cz> Signed-off-by: Kevin Coffman <kwc@citi.umich.edu> Signed-off-by: Steve Dickson <steved@redhat.com>
Steve Dickson [Wed, 25 Jun 2008 13:23:45 +0000 (09:23 -0400)]
When a FQDN exists in /var/lib/nfs/rmtab it causes
the exportfs command to seg fault due to the nfs_export pointer
not being allocated. Reworking the parentheses in rmtab_read()
so the htype variable is evaluated correctly fix the problem.
Chuck Lever [Mon, 23 Jun 2008 16:52:33 +0000 (12:52 -0400)]
The "mountstats" utility is a Python program that extracts and displays NFS
client performance information from /proc/self/mountstats.
Note that if mountstats is named 'ms-nfsstat' or 'ms-iostat' it offers
slightly different functionality. It needs two man pages and the install
script should provide both commands by installing the script and providing the
other command via a symlink.
Signed-off-by: Chuck Lever <chuck.lever@oracle.com> Signed-off-by: Steve Dickson <steved@redhat.com>
Jeff Layton [Mon, 23 Jun 2008 11:21:52 +0000 (07:21 -0400)]
The nfsstat program reads /proc/net/rpc/* files to gets info about
calls. This info is output as unsigned numbers (at least on any
relatively recent kernel). When nfsstat prints these numbers, they are
printed as signed integers. When the call counters reach 2^31, things
start being printed as negative numbers.
This patch changes nfsstat to read and print all counters as unsigned
integers. Tested by hacking up a kernel to initialize call counters to
2^31+1.
Thanks to Takafumi Miki for the initial version of this patch.
Signed-off-by: Jeff Layton <jlayton@redhat.com> Signed-off-by: Steve Dickson <steved@redhat.com>
Neil Brown [Fri, 6 Jun 2008 19:17:55 +0000 (15:17 -0400)]
nfsstat -m lists all current nfs mounts, with the mount options.
It does this by reading /proc/mounts and looking for mounts of type
"nfs". It really should check for "nfs4" as well.
For simplicity, just check the first 3 characters of the type.
Signed-off-by: NeilBrown <neilb@suse.de> Signed-off-by: Steve Dickson <steved@redhat.com>
Chuck Lever [Fri, 6 Jun 2008 19:06:21 +0000 (15:06 -0400)]
Clean up: instead of passing so many arguments to all the helpers, have
nfsmount_string build a data structure that contains all the arguments, and
pass a pointer to that instead.
Signed-off-by: Chuck Lever <chuck.lever@oracle.com> Signed-off-by: Steve Dickson <steved@redhat.com>
Chuck Lever [Fri, 6 Jun 2008 19:02:18 +0000 (15:02 -0400)]
Steinar Gunderson reports:
"It seems retry= is now additive with the text-based mount interface. In
particular, "mount -o retry=0" still gives a two-minute timeout."
Correct the bug and make retry= option parsing more robust. If parsing
the retry option fails, the option is ignored and a default timeout is
used.
Note that currently the kernel parser ignores the "retry=" option if the
value is a number. If the value contains other characters, the kernel will
choke. A subsequent patch to the kernel will allow any characters as the
value of the retry option (excepting of course ",").
Signed-off-by: Chuck Lever <chuck.lever@oracle.com> Signed-off-by: Steve Dickson <steved@redhat.com>
NeilBrown [Thu, 8 May 2008 09:18:25 +0000 (05:18 -0400)]
If mount.nfs is not installed setuid, an attempt to perform a "user"
or "users" mount will fail with a fairly obscure error message,
typically about getting "permission denied" from the server.
This patch gives a more helpful message in that case.
Signed-off-by: NeilBrown <neilb@suse.de> Signed-off-by: Steve Dickson <steved@redhat.com>