]> git.decadent.org.uk Git - nfs-utils.git/log
nfs-utils.git
15 years agotext-based mount command: Function to stuff "struct pmap" from mount options
Chuck Lever [Tue, 27 Jan 2009 22:43:29 +0000 (17:43 -0500)]
text-based mount command: Function to stuff "struct pmap" from mount options

Both the text-based mount.nfs command and the umount.nfs command need
to fill in a pmap structure based on string mount options.  Introduce
a shared function that can do this.

Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
Signed-off-by: Steve Dickson <steved@redhat.com>
15 years agotext-based mount command: make po_rightmost() work for N options
Chuck Lever [Tue, 27 Jan 2009 22:41:02 +0000 (17:41 -0500)]
text-based mount command: make po_rightmost() work for N options

Sometimes we need to choose the rightmost option among multiple
different mount options.  For example, we want to find the rightmost
of "proto," "tcp," and "udp".  Or, the rightmost of "vers," "nfsvers,"
"v2," and "v3".

Update po_rightmost() to choose among N options instead of just two.

Signed-off-by: Steve Dickson <steved@redhat.com>
15 years agoshowmount command: Quiesce warning when TI-RPC is disabled
Chuck Lever [Wed, 7 Jan 2009 17:33:09 +0000 (12:33 -0500)]
showmount command: Quiesce warning when TI-RPC is disabled

Make sure nfs_sm_pgmtbl is not compiled if TI-RPC functions are not
available.  This quiesces the following compiler warning:

  showmount.c:53: warning: nfs_sm_pgmtbl defined but not used

Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
Signed-off-by: Steve Dickson <steved@redhat.com>
15 years agoconfigure: Add new build option "--enable-tirpc"
Chuck Lever [Wed, 7 Jan 2009 17:18:11 +0000 (12:18 -0500)]
configure: Add new build option "--enable-tirpc"

Allow easier testing of nfs-utils in legacy environments by providing
a "configure" option to force the build not to use libtirpc, even if
it's present on the build system.  This can also be tried as a
fallback if problems are found with the new TI-RPC-based nfs-utils
code.

The new option is:

  --enable-tirpc          enable use of TI-RPC [default=no]

Build option matrix:

   --disable-tirpc   --disable-ipv6 Default; IPv4 only, glibc RPC
   --disable-tirpc   --enable-ipv6 'configure' will fail
   --enable-tirpc    --disable-ipv6 IPv4 only, TI-RPC
   --enable-tirpc    --enable-ipv6 IPv4 and IPv6, TI-RPC

Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
Signed-off-by: Steve Dickson <steved@redhat.com>
15 years agoconfigure: Remove inet_ntop(3) check from configure.ac
Chuck Lever [Wed, 7 Jan 2009 17:06:14 +0000 (12:06 -0500)]
configure: Remove inet_ntop(3) check from configure.ac

nfs-utils no longer uses inet_ntop(3) so remove checks for it from
configure.ac.

Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
Signed-off-by: Steve Dickson <steved@redhat.com>
15 years agoMerge branch 'master' of git://linux-nfs.org/nfs-utils
Steve Dickson [Wed, 7 Jan 2009 17:03:07 +0000 (12:03 -0500)]
Merge branch 'master' of git://linux-nfs.org/nfs-utils

15 years agoconfigure: use "--disable-uuid" instead of "--without-uuid"
Chuck Lever [Tue, 6 Jan 2009 17:35:15 +0000 (12:35 -0500)]
configure: use "--disable-uuid" instead of "--without-uuid"

Reported by Kevin Coffman and Jonathan Andrews.  Apparently --without-uuid
doesn't work with some older versions of autoconf, so correct the help text
to document the option that actually does the trick.

Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
Signed-off-by: Steve Dickson <steved@redhat.com>
15 years agomount command: Random clean up
Chuck Lever [Tue, 6 Jan 2009 17:12:55 +0000 (12:12 -0500)]
mount command: Random clean up

Fix some documenting comments and an error message in configure.ac.

Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
Signed-off-by: Steve Dickson <steved@redhat.com>
15 years agomount: getport: don't use getaddrinfo(3) on old systems
Chuck Lever [Tue, 6 Jan 2009 17:08:33 +0000 (12:08 -0500)]
mount: getport: don't use getaddrinfo(3) on old systems

Older glibc versions have a getaddrinfo(3) that doesn't support
AI_ADDRCONFIG.  Detect that case and build something else for
getport.c that will work adequately on those systems.

Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
Signed-off-by: Steve Dickson <steved@redhat.com>
15 years agomount command: use gethostbyname(3) when building on old systems
Chuck Lever [Tue, 6 Jan 2009 17:07:04 +0000 (12:07 -0500)]
mount command: use gethostbyname(3) when building on old systems

Glibc's getaddrinfo(3) implementation was added over time.  Some old
versions support AI_ADDRCONFIG, but don't define it in header files.
Some older versions don't support AI_ADDRCONFIG at all.

Let's add specific checks to configure.ac to see that the local
getaddrinfo(3) implementation is complete.  If it isn't, we will make
available a resolver that uses gethostbyname(3) and disable IPv6
entirely.

This patch should apply to 1.1.4 as well as the current nfs-utils repo.
The next patch has a fix for the getaddrinfo(3) call added since 1.1.4
in support/nfs/getport.c.

Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
Signed-off-by: Steve Dickson <steved@redhat.com>
15 years agomount: revert recent fix for build problems on old systems
Chuck Lever [Tue, 6 Jan 2009 17:03:26 +0000 (12:03 -0500)]
mount: revert recent fix for build problems on old systems

Revert the patch that added local definitions of AI_ADDRCONFIG and
friends to utils/mount/network.c.  While old header versions don't
have those flags, even older versions of getaddrinfo(3) don't
support those flags at all.

The result is this error:

  mount.nfs: DNS resolution failed for 10.10.10.10: Bad value for ai_flags

Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
Signed-off-by: Steve Dickson <steved@redhat.com>
15 years agogssd: By default, don't spam syslog when users' credentials expire
Kevin Coffman [Mon, 5 Jan 2009 19:07:05 +0000 (14:07 -0500)]
gssd: By default, don't spam syslog when users' credentials expire

Change the priority of "common" log messages so that syslog doesn't get
slammed/spammed when users' credentials expire, or there is another
common
problem which would cause error messages for all context creation
requests.

Note that this will now require that gssd or svcgssd option "-v" is used
to
debug these common cases.

Original patch from Andrew Pollock <apollock@google.com>.

Signed-off-by: Kevin Coffman <kwc@citi.umich.edu>
Signed-off-by: Steve Dickson <steved@redhat.com>
CC: Andrew Pollock <apollock@google.com>
15 years agoNow that the TCP wrapper actually works, mounts will
Steve Dickson [Sat, 3 Jan 2009 19:08:25 +0000 (14:08 -0500)]
Now that the TCP wrapper actually works, mounts will
be denied with misconfigured DNS configurations. Warnings
will be logged when these types of configurations are
detected.

Signed-off-by: Steve Dickson <steved@redhat.com>
15 years agoTo ensure the hash table of clients has valid
Steve Dickson [Fri, 19 Dec 2008 19:20:14 +0000 (14:20 -0500)]
To ensure the hash table of clients has valid
access rights, check the modification times on
both access files. If one of them have change,
update the hash entry instead of creating a
new entry.

Signed-off-by: Steve Dickson <steved@redhat.com>
15 years agoClients IP address and host names are check on
Steve Dickson [Fri, 19 Dec 2008 19:11:09 +0000 (14:11 -0500)]
Clients IP address and host names are check on
every RPC request, to both mountd and statd
when TCP wrappers are enabled. To help this
process scale better the access rights are stored
in a hash table, which are hashed per IP address,
RPC program and procudure numbers.

Signed-off-by: Steve Dickson <steved@redhat.com>
15 years agoWhen clients are define as IP addresses in /etc/hosts.deny,
Steve Dickson [Fri, 19 Dec 2008 19:09:59 +0000 (14:09 -0500)]
When clients are define as IP addresses in /etc/hosts.deny,
access is allow due to misinterpreting the return value of
hosts_ctl(). This patch reworks that logic which closes
that hole.

Signed-off-by: Steve Dickson <steved@redhat.com>
15 years agostatd: not unlinking host files
Steve Dickson [Wed, 17 Dec 2008 21:41:35 +0000 (16:41 -0500)]
statd: not unlinking host files

Statd is not unlinking host files during SM_UNMON and
SM_UNMON_ALL calls because the given host is still on the run-time
notify list (rtnl) and the check flag is set when xunlink() is
called. But the next thing the caller of xunlink() does is
remove the host from the rtnl list which means the
unlink will never happen.

So this patch removes the check flag from xunlink() since
its not needed and correctly allocates and frees memory
used by xunlink().

Signed-off-by: Steve Dickson <steved@redhat.com>
15 years agosm-notify command: fix a use-after-free bug
Chuck Lever [Wed, 17 Dec 2008 19:42:14 +0000 (14:42 -0500)]
sm-notify command: fix a use-after-free bug

The recv_reply() function was referencing host->ai in a freeaddrinfo(3)
call after it had freed @host.

This is not likely to be harmful in a single-threaded user context,
but it's still bad form, and it will get called out if testing
sm-notify with poisoned free memory.  The less noise, the better we
are able to see real problems.

Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
Signed-off-by: Steve Dickson <steved@redhat.com>
15 years agotext-based mount command: use po_get_numeric() for handling retry
Chuck Lever [Wed, 17 Dec 2008 19:23:43 +0000 (14:23 -0500)]
text-based mount command: use po_get_numeric() for handling retry

Replace the logic in nfs_parse_retry_option() with a call to the new
po_get_numeric() function.

Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
Signed-off-by: Steve Dickson <steved@redhat.com>
15 years agotext-based mount command: add function to parse numeric mount options
Chuck Lever [Wed, 17 Dec 2008 19:21:10 +0000 (14:21 -0500)]
text-based mount command: add function to parse numeric mount options

Introduce a function that is especially for parsing keyword mount options
that take a numeric value.

Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
Signed-off-by: Steve Dickson <steved@redhat.com>
15 years agosvcgssd: use the actual context expiration for cache
Kevin Coffman [Thu, 11 Dec 2008 16:43:31 +0000 (11:43 -0500)]
svcgssd: use the actual context expiration for cache

Instead of sending down an infinite expiration value for the rsi(init) and
rsc(context) cache entries, use a reasonable value for the rsi cache, and
the actual context expiration value for the rsc cache.

Prompted by a proposal from Neil Brown as a result of a complaint of a
server running out of kernel memory when under heavy load of rpcsec_gss
traffic.  Neil's original patch used one minute for the init cache and one
hour for the context cache.  Using the actual expiration time prevents
unnecessary context re-negotiation.

Signed-off-by: Kevin Coffman <kwc@citi.umich.edu>
Signed-off-by: Steve Dickson <steved@redhat.com>
15 years agogssd/svcgssd: add support to retrieve actual context expiration
Kevin Coffman [Thu, 11 Dec 2008 16:39:38 +0000 (11:39 -0500)]
gssd/svcgssd: add support to retrieve actual context expiration

Add some plumbing so that the context expiration can be returned while
serializing the information.  Later patch(es) will actually get the
expiration and pass it down to the kernel.

Signed-off-by: Kevin Coffman <kwc@citi.umich.edu>
Signed-off-by: Steve Dickson <steved@redhat.com>
15 years agomount command: AF_INET6 support for probe_bothports()
Chuck Lever [Thu, 11 Dec 2008 15:30:20 +0000 (10:30 -0500)]
mount command: AF_INET6 support for probe_bothports()

Introduce an AF_INET6 capable probe_bothports() API.  This means replacing
"struct sockaddr_in *" arguments with a "struct sockaddr *" and a socklen_t
arguments.

These functions often combine a "struct sockaddr_in" and a "struct pmap" into
a single "clnt_addr_t" argument.  Instead of modifying "clnt_addr_t" and all
the legacy code that uses it, I'm going to create a new probe_bothports() API
for the text-based mount command that takes a "struct sockaddr *" and
sockaddr length, and leave the existing probe_bothports() interface, which
takes "clnt_addr_t" arguments, for legacy use.

Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
Signed-off-by: Steve Dickson <steved@redhat.com>
15 years agomount command: support AF_INET6 in probe_nfsport() and probe_mntport()
Chuck Lever [Thu, 11 Dec 2008 15:28:57 +0000 (10:28 -0500)]
mount command: support AF_INET6 in probe_nfsport() and probe_mntport()

Flesh out support for AF_INET6 in the intermediate helper functions
probe_nfsport() and probe_mntport().

Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
Signed-off-by: Steve Dickson <steved@redhat.com>
15 years agomount command: full support for AF_INET6 addresses in probe_port()
Chuck Lever [Thu, 11 Dec 2008 15:27:34 +0000 (10:27 -0500)]
mount command: full support for AF_INET6 addresses in probe_port()

Now that probe_port() uses an AF_INET6-capable rpcbind query and RPC ping,
finish updating probe_port() to support AF_INET6 addresses fully.

Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
Signed-off-by: Steve Dickson <steved@redhat.com>
15 years agosm-notify: always exiting without any notification
Steve Dickson [Sat, 6 Dec 2008 13:31:29 +0000 (08:31 -0500)]
sm-notify: always exiting without any notification

Added curly brackets around the record_pid() check which
stop sm-notify from exiting when a pid file does not
exist.

Signed-off-by: Steve Dickson <steved@redhat.com>
15 years agomount command: remove local getport() implementation
Chuck Lever [Tue, 2 Dec 2008 12:43:54 +0000 (07:43 -0500)]
mount command: remove local getport() implementation

Eliminate local getport() implementation from utils/mount/network.c, as
it is no longer used.

Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
Signed-off-by: Steve Dickson <steved@redhat.com>
15 years agomount command: Replace clnt_ping() and getport() calls in probe_port()
Chuck Lever [Tue, 2 Dec 2008 12:43:01 +0000 (07:43 -0500)]
mount command: Replace clnt_ping() and getport() calls in probe_port()

Update the mount command's probe_port() function to call the new shared
rpcbind query and RPC ping functions.  This provides immediate support
for
rpcbind v3/v4 queries, and paves the way for supporting AF_INET6 in the
probe_bothports() path.

Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
Signed-off-by: Steve Dickson <steved@redhat.com>
15 years agomount command: Use nfs_error() instead of perror()
Chuck Lever [Tue, 2 Dec 2008 12:40:16 +0000 (07:40 -0500)]
mount command: Use nfs_error() instead of perror()

So we can ensure that error output is directed appropriately, use
nfs_error() instead of perror() in start_statd().

Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
Signed-off-by: Steve Dickson <steved@redhat.com>
15 years agomount command: Use nfs_pmap_getport() in probe_statd()
Chuck Lever [Tue, 2 Dec 2008 12:39:06 +0000 (07:39 -0500)]
mount command: Use nfs_pmap_getport() in probe_statd()

Repace the getport() and clnt_ping() calls in probe_statd() with their
new shared equivalents.

Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
Signed-off-by: Steve Dickson <steved@redhat.com>
16 years agoEnsure statd gets started if required when non-root
Neil Brown [Wed, 26 Nov 2008 17:01:06 +0000 (12:01 -0500)]
Ensure statd gets started if required when non-root
user mounts an NFS filesystem.

The first time an NFS filesystem is mounted, we start statd from
/sbin/mount.nfs.  If this first time is a non-root user doing the
 mount, (thanks to e.g.  the 'users' option in /etc/fstab)
then we need to be sure that the 'setuid' status from mount.nfs
is inherited through to rpc.statd so that it runs as root.

There are two places where we loose our setuid status due to the shell
(/bin/sh) discarding.

1/ mount.nfs uses "system" to run /usr/sbin/start-statd.  This runs a
   shell which is likely to drop privileges.  So change that code to use
  'fork' and 'execl' explicitly.
2/ start-statd is a shell script.  To convince the shell to allow the
  program to run in privileged mode, we need to add a "-p" flag.

We could just call setuid(getuid()) at some appropriate time, and it
might be worth doing that as well, however I think that getting
rid of 'system()' is a good idea and once that is done, the
adding of '-p' is trivial and sufficient.

Signed-off-by: Neil Brown <neilb@suse.de>
Signed-off-by: Steve Dickson <steved@redhat.com>
16 years agogssd: unblock DNOTIFY_SIGNAL in case it was blocked.
Neil Brown [Wed, 26 Nov 2008 13:48:03 +0000 (08:48 -0500)]
gssd:  unblock DNOTIFY_SIGNAL in case it was blocked.

I have a situation where rpc.gssd appears to not be working.
Mount attempts which need to communicate with it block.

I've narrowed down the problem to that fact that all realtime signals
have been blocked.  This means that DNOTIFY_SIGNAL (which is a
realtime signal) is never delivered, so gssd never rescans the
rpc_pipe/nfs directory.

It seems start_kde (or whatever it is called) and all descendants have
these
signals blocked.  xfce seems to do the same thing.  gnome doesn't.

So if you start rpc.gssd from a terminal window while logged in via
KDE, it doesn't behave as expected.

Signed-off-by: Neil Brown <neilb@suse.de>
Signed-off-by: Steve Dickson <steved@redhat.com>
16 years agoshowmount command: support querying IPv6 servers
Chuck Lever [Tue, 25 Nov 2008 13:39:47 +0000 (08:39 -0500)]
showmount command: support querying IPv6 servers

Introduce a version of nfs_get_mount_client() that supports AF_INET6 and
AF_INET server addresses.  If the TI-RPC library is not available when
the showmount command is built, fall back to the legacy RPC user-space
API.

Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
Signed-off-by: Steve Dickson <steved@redhat.com>
16 years agoshowmount command: move logic to acquire RPC client handle out of main()
Chuck Lever [Tue, 25 Nov 2008 13:38:01 +0000 (08:38 -0500)]
showmount command: move logic to acquire RPC client handle out of main()

In preparation to support IPv6 in the showmount command, extract the
logic that parses/acquires the target hostname and converts it into an RPC
client handle to contact the remote mountd service, and move it into its
own function.

Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
Signed-off-by: Steve Dickson <steved@redhat.com>
16 years agoshowmount command: Remove unused local getport() implementation
Chuck Lever [Tue, 25 Nov 2008 13:35:10 +0000 (08:35 -0500)]
showmount command: Remove unused local getport() implementation

Clean up: remove showmount.c's local getport() implementation, now that
the showmount command uses the shared one.

Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
Signed-off-by: Steve Dickson <steved@redhat.com>
16 years agoshowmount command: call nfs_getport instead of local getport
Chuck Lever [Tue, 25 Nov 2008 13:15:51 +0000 (08:15 -0500)]
showmount command: call nfs_getport instead of local getport

Have the showmount command invoke the shared nfs_getport() function
instead of its own local version.  This gives the showmount command
immediate support for querying via rpcbindv3/v4 in addition to
portmapper, and sets the stage for AF_INET6 support in showmount.

Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
Signed-off-by: Steve Dickson <steved@redhat.com>
16 years agoAdded support/nfs/getport.c
Steve Dickson [Tue, 18 Nov 2008 17:59:41 +0000 (12:59 -0500)]
Added support/nfs/getport.c

Signed-off-by: Steve Dickson <steved@redhat.com>
16 years agoIntroduce rpcbind client utility functions
Chuck Lever [Mon, 17 Nov 2008 21:13:48 +0000 (16:13 -0500)]
Introduce rpcbind client utility functions

It turns out that at least the mount command and the showmount command
need to query a server's rpcbind daemon.  They need to query over
AF_INET6 as well as AF_INET.

libtirpc provides an rpcbind query capability with the rpcb_getaddr(3)
interface, but it takes a hostname and netconfig entry rather than a
sockaddr and a protocol type, and always uses a lengthy timeout.  The
former is important to the mount command because it sometimes must
operate using a specific port and IP address rather than depending on
rpcbind and DNS to convert a [hostname, RPC program, netconfig] tuple
to a [socket address, port number, transport protocol] tuple.

The rpcb_getaddr(3) API also always uses a privileged port (at least
for setuid root executables like mount.nfs), which is not required for
an rpcbind query.  This can exhaust the local system's reserved port
space quickly.

This patch provides a reserved-port-friendly AF_INET6-capable rpcbind
query C API that can be shared among commands and tools in nfs-utils,
and allows a query to a specified socket address and port rather than
a hostname.

In addition to an rpcbind query interface, this patch also provides a
facility to ping the remote RPC service to ensure that it is operating
as advertised by rpcbind.  It's useful to combine an RPC ping with an
rpcbind query because in many cases, components of nfs-utils already
ping an RPC service immediately after receiving a successful GETPORT
result.

There are also a handful of utility routines provided, such as a
functions that can map between [sockaddr, port] and a universal
address.

I've made an attempt to make these new functions build and operate on
systems that do not have libtirpc.

Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
Signed-off-by: Steve Dickson <steved@redhat.com>
16 years agoAdd AF_INET6-capable API to acquire an RPC CLIENT *
Chuck Lever [Mon, 17 Nov 2008 21:08:03 +0000 (16:08 -0500)]
Add AF_INET6-capable API to acquire an RPC CLIENT *

Provide a simple interface that any component of nfs-utils can use to acquire
an RPC CLIENT *.  This is an AF_INET6-enabled API, and can also handle
PF_LOCAL sockets if libtirpc is present on the system.

When libtirpc is not available, legacy RPC services will be used instead,
and an attempt to connect to an AF_INET6 address will fail.

Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
Signed-off-by: Steve Dickson <steved@redhat.com>
16 years agoGet rid of empty AUTHORS file
Jan Engelhardt [Tue, 21 Oct 2008 13:34:58 +0000 (09:34 -0400)]
Get rid of empty AUTHORS file

build: remove redundant AUTHORS file

One can use the --foreign automake option to make it not enforce
presence of an AUTHORS file.

Signed-off-by: Jan Engelhardt <jengelh@medozas.de>
Signed-off-by: Steve Dickson <steved@redhat.com>
16 years agoRelease 1.1.4 nfs-utils-1-1-4
Steve Dickson [Fri, 17 Oct 2008 14:20:09 +0000 (10:20 -0400)]
Release 1.1.4

Signed-off-by: Steve Dickson <steved@redhat.com>
16 years agosm-notify should exit as soon as its determined
Phil Endecott [Tue, 14 Oct 2008 18:36:58 +0000 (14:36 -0400)]
sm-notify should exit as soon as its determined
there are no hosts to notify. This also decreases
start up time by a few seconds.

Signed-off-by: Steve Dickson <steved@redhat.com>
16 years agorpcgen: include sys/ioctl.h on linux systems
Mike Frysinger [Wed, 8 Oct 2008 15:08:55 +0000 (11:08 -0400)]
rpcgen: include sys/ioctl.h on linux systems

The rpcgen tool included with nfs-utils will generate calls to ioctl() but not
actually generate the sys/ioctl.h header include.  Attached patch should fix
this.

Signed-off-by: Mike Frysinger <vapier@gentoo.org>
Signed-off-by: Steve Dickson <steved@redhat.com>
16 years agonfs(5): Clarify behavior of the mountproto= and proto= options
Chuck Lever [Wed, 8 Oct 2008 14:59:53 +0000 (10:59 -0400)]
nfs(5): Clarify behavior of the mountproto= and proto= options

Document the interaction between the mountproto= and the proto= mount
options in a new subsection of nfs(5).

Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
Signed-off-by: Steve Dickson <steved@redhat.com>
16 years agonfs-utils: make makesock() static
Chuck Lever [Wed, 8 Oct 2008 14:45:12 +0000 (10:45 -0400)]
nfs-utils: make makesock() static

Clean up:  The makesock() function can become static since it is only used in
rpcmisc.c, where it is defined.  Fix some minor nits while we're in the area:

 o  Move it so we can remove it's forward declaration.

 o  Get rid of unneeded newlines in the xlog() format strings.

 o  Use htonl(INADDR_ANY) instead of INADDR_ANY to initialize sin_addr.
    Should make no run-time difference, but is slightly more proper,
    as the standard definition of INADDR_ANY is in host byte-order.

 o  Remove the parentheses in the "return" statements.

Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
Signed-off-by: Steve Dickson <steved@redhat.com>
16 years agonfs-utils: Clean up support/nfs/rpcmisc.c:closedown()
Chuck Lever [Wed, 8 Oct 2008 14:42:41 +0000 (10:42 -0400)]
nfs-utils: Clean up support/nfs/rpcmisc.c:closedown()

Clean up: update closedown()'s synopsis to modern C style, and move the
function so we can remove the forward declaration.

Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
Signed-off-by: Steve Dickson <steved@redhat.com>
16 years agoCleaned up the wording in the rpc.nfsd(8) manpage
Steve Dickson [Wed, 1 Oct 2008 18:36:25 +0000 (14:36 -0400)]
Cleaned up the wording in the rpc.nfsd(8) manpage
(BZ: https://bugzilla.linux-nfs.org/show_bug.cgi?id=159)

Signed-off-by: Steve Dickson <steved@redhat.com>
16 years agoCleared up a contradiction in the export(5) man page
Steve Dickson [Wed, 1 Oct 2008 18:30:12 +0000 (14:30 -0400)]
Cleared up a contradiction in the export(5) man page
(BZ: https://bugzilla.linux-nfs.org/show_bug.cgi?id=161)

Signed-off-by: Steve Dickson <steved@redhat.com>
16 years agomountd: change "unknown host" error message to "unmatched host"
Jeff Layton [Mon, 29 Sep 2008 14:20:57 +0000 (10:20 -0400)]
mountd: change "unknown host" error message to "unmatched host"

mount request from unknown host 10.11.14.99 for /export

The hosts are listed in DNS with proper reverse records, so the reason
why the host is "unknown" isn't clear. This patch just changes the
wording of this error to hopefully make it more clear why the mount
request was rejected. This also makes this error message use a format
more similar to the other error messages in auth_authenticate().

Signed-off-by: Jeff Layton <jlayton@redhat.com>
Signed-off-by: Steve Dickson <steved@redhat.com>
16 years agonfs(5): Replace the term "netid" in mount option descriptions
Chuck Lever [Mon, 29 Sep 2008 11:52:40 +0000 (07:52 -0400)]
nfs(5): Replace the term "netid" in mount option descriptions

TI-RPC introduced the concept of "netid" which is a string that is
mapped to a set of transport capabilities via a netconfig database.
RPC services register a netid and bindaddr with their local rpcbind
daemon to advertise their ability to support particular transports.

Mike Eisler noted that the use of the term "netid" in nfs(5) is not
appropriate, since Linux does not treat the value of the proto= or
mountproto= options as a netid proper, but rather to select a
particular transport capability provided locally on the client.

The Linux NFS client currently uses a simple internal mapping between
these names and its own transport capabilities rather than using the
names as part of an rpcbind query, thus these strings are really not
netids.  They are more akin to what TI-RPC calls "protocol names".

Remove the term "netid" from nfs(5) for now.

Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
Cc: Mike Eisler <mike.eisler@netapp.com>
Signed-off-by: Steve Dickson <steved@redhat.com>
16 years agonfs(5): Replace the term "netid" in mount option descriptions
Chuck Lever [Mon, 29 Sep 2008 11:34:59 +0000 (07:34 -0400)]
nfs(5): Replace the term "netid" in mount  option descriptions

Mike Eisler noted that the use of the term "netid" in the descriptions
of the "proto=" option is not appropriate, since Linux does not allow
"udp6" or "tcp6".

Replaced the term "netid" with "transport" in nfs(5).

Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
Signed-off-by: Tom Talpey <Thomas.Talpey@netapp.com>
Signed-off-by: Steve Dickson <steved@redhat.com>
16 years agorpc.statd: Stop overloading sockfd in utils/statd/rmtcall.c
Chuck Lever [Fri, 26 Sep 2008 20:16:09 +0000 (16:16 -0400)]
rpc.statd: Stop overloading sockfd in utils/statd/rmtcall.c

The Linux kernel's lockd requires that rpc.statd perform notification
callbacks from a privileged source port.  To guarantee rpc.statd gets a
privileged source port but runs unprivileged, it calls
statd_get_socket() then drops root privileges before starting it's svc
request processing loop.

Statd's svc request loop is the only caller of the process_foo()
functions in utils/statd/rmtcall.c, but one of them,
process_notify_list() attempts to invoke statd_get_socket() again.

In today's code, this is unneeded because statd_get_socket() is always
invoked before my_svc_run().  However, if it ever succeeded, it would
get an unprivileged source port anyway, causing the kernel to reject
all subsequent requests from statd.

Thus the process_notify_list() function should not ever call
statd_get_socket() because root privileges have been dropped by this
point, and statd_get_socket() wouldn't get a privileged source port,
causing the kernel to reject all subsequent SM_NOTIFY requests.

So all of the process_foo functions in utils/statd/rmtcall.c should use
the global sockfd instead of a local copy, as it already has a
privileged source port.

I've seen some unexplained behavior where statd starts making calls to
the kernel via an unprivileged port.  This could be one way that might
occur.

Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
Signed-off-by: Steve Dickson <steved@redhat.com>
16 years agorpc.statd: Use __func__ in dprintf
Chuck Lever [Fri, 26 Sep 2008 20:14:49 +0000 (16:14 -0400)]
rpc.statd: Use __func__ in dprintf

Clean up: The named function in many of the debugging messages in
utils/statd/rmtcall.c is out of date.  To prevent this from happening
in the future, replace these with __func__.

Also, note() and dprintf() do not require a terminating '\n' in their
format string.  So make all invocations consistent.

Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
Signed-off-by: Steve Dickson <steved@redhat.com>
16 years agorpc.statd: Clean up: replace "if (!(foo = rtnl))".
Chuck Lever [Fri, 26 Sep 2008 20:13:45 +0000 (16:13 -0400)]
rpc.statd: Clean up: replace "if (!(foo = rtnl))".

Static code checkers flag this kind of thing because it's easy to
confuse with "if (!(foo == rtnl))".  In one of these cases, the
combination of evaluation and assignment isn't even necessary.

While we are in the neighborhood, remove an extra argument to note() that is
not called for in the passed-in format string.

Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
Signed-off-by: Steve Dickson <steved@redhat.com>
16 years agonfs-utils: whitespace clean ups in support/nfs/rpcmisc.c
Chuck Lever [Fri, 26 Sep 2008 20:12:49 +0000 (16:12 -0400)]
nfs-utils: whitespace clean ups in support/nfs/rpcmisc.c

Clean up: fix a few spurious white space issues in support/nfs/rpcmisc.c.

Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
Signed-off-by: Steve Dickson <steved@redhat.com>
16 years agonfs-utils: Remove excess log reporting
Chuck Lever [Fri, 26 Sep 2008 20:11:57 +0000 (16:11 -0400)]
nfs-utils: Remove excess log reporting

Clean up: The makesock() function already reports an error if it can't
create a socket.  Remove the redundant error check and logging done in
rpc_init() after a makesock() call.

Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
Signed-off-by: Steve Dickson <steved@redhat.com>
16 years agonfs-utils: make makesock() static
Chuck Lever [Fri, 26 Sep 2008 20:10:48 +0000 (16:10 -0400)]
nfs-utils: make makesock() static

Clean up:  The makesock() function can become static since it is only used in
rpcmisc.c, where it is defined.  Fix some minor nits while we're in the area:

 o  Move it so we can remove it's forward declaration.

 o  Get rid of unneeded newlines in the xlog() format strings.

 o  Use htonl(INADDR_ANY) instead of INADDR_ANY to initialize sin_addr.
    Should make no run-time difference, but is slightly more proper,
    as the standard definition of INADDR_ANY is in host byte-order.

 o  Remove the parentheses in the "return" statements.

Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
Signed-off-by: Steve Dickson <steved@redhat.com>
16 years agoshowmount: destroy RPC client when finished
Chuck Lever [Fri, 26 Sep 2008 20:03:27 +0000 (16:03 -0400)]
showmount: destroy RPC client when finished

Clean up: call clnt_destroy() in the showmount command as needed to
destroy the RPC client properly (and close the associated socket) before
the program exits.

Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
Signed-off-by: Steve Dickson <steved@redhat.com>
16 years agonfs-utils: remove disabled code from support/nfs/rpcmisc.c
Chuck Lever [Fri, 26 Sep 2008 17:28:10 +0000 (13:28 -0400)]
nfs-utils: remove disabled code from support/nfs/rpcmisc.c

After some recent discussions, we want to rely on the kernel's network
layer to autotune socket buffers.  Since this code is already disabled in
support/nfs/rpcmisc.c (and has been for some time), let's just remove it.

Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
Signed-off-by: Steve Dickson <steved@redhat.com>
16 years agonfs-utils: Remove unused function rpc_svcrun()
Chuck Lever [Fri, 26 Sep 2008 17:27:23 +0000 (13:27 -0400)]
nfs-utils: Remove unused function rpc_svcrun()

Clean up: remove function that has been disabled (via #if 0) for almost a
decade.

Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
Signed-off-by: Steve Dickson <steved@redhat.com>
16 years agonfs-utils: remove unused function rpc_logcall()
Chuck Lever [Fri, 26 Sep 2008 17:26:23 +0000 (13:26 -0400)]
nfs-utils: remove unused function rpc_logcall()

Clean up: Eliminate rpc_logcall(), which has no callers.

Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
Signed-off-by: Steve Dickson <steved@redhat.com>
16 years agosm-notify command: use static function definitions
Chuck Lever [Fri, 26 Sep 2008 17:25:19 +0000 (13:25 -0400)]
sm-notify command: use static function definitions

Clean up.

The sm-notify command is built from a single source file.
Some of its internal functions are appropriately defined as static.

However, some are declared static, but defined as global.  Some are
declared and defined as global.  None of them are used outside of
utils/statd/sm-notify.c.

Make all the internal functions in utils/statd/sm-notify.cstatic.

Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
Signed-off-by: Steve Dickson <steved@redhat.com>
16 years agosm-notify command: replace nsm_address typedef
Chuck Lever [Fri, 26 Sep 2008 17:24:24 +0000 (13:24 -0400)]
sm-notify command: replace nsm_address typedef

Clean up: replace "typedef struct sockaddr_storage nsm_address" with
standard socket address types.  This makes sm-notify.c consistent with other
parts of nfs-utils, and with typical network application coding conventions.

Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
Signed-off-by: Steve Dickson <steved@redhat.com>
16 years agosm-notify command: clean up error logging
Chuck Lever [Fri, 26 Sep 2008 17:23:18 +0000 (13:23 -0400)]
sm-notify command: clean up error logging

Clean up a few issues with logging in sm-notify.c.

Sometimes in sm-notify, when a system call fails the problem is reported
to stderr but not logged, and then usually sm-notify exits.  In cases like
this, there are probably more hosts to notify, but sm-notify dies silently.

Make sure these errors are logged, and that the log messages explain the
nature of the problem.

Also, if sm-notify exits prematurely, make sure this is always reported at
the LOG_ERR level, not at the LOG_WARNING level.

Remove a couple of unnecessary '\n' in the arguments of nsm_log() calls --
nsm_log() already appends an '\n' to the message.

Finally, use exit() consistently in main().

Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
Signed-off-by: Steve Dickson <steved@redhat.com>
16 years agosm-notify command: getaddrinfo(3) addrinfo leak
Chuck Lever [Fri, 26 Sep 2008 17:21:43 +0000 (13:21 -0400)]
sm-notify command: getaddrinfo(3) addrinfo leak

Make sure the results of getaddrinfo(3) are properly freed in notify().

Note this is a one-time addrinfo allocation that would be automatically
freed when sm-notify exits anyway, so this is more of a nit than a real
bug fix.

Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
Signed-off-by: Steve Dickson <steved@redhat.com>
16 years agosm-notify command: include <config.h>
Chuck Lever [Fri, 26 Sep 2008 17:20:49 +0000 (13:20 -0400)]
sm-notify command: include <config.h>

Clean up: Include config.h as other source files do; instead of using
"config.h" use the HAVE_CONFIG_H macro and include <config.h>.

Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
Signed-off-by: Steve Dickson <steved@redhat.com>
16 years agoshowmount command: clean up error returns from connect_nb()
Chuck Lever [Fri, 26 Sep 2008 17:18:11 +0000 (13:18 -0400)]
showmount command: clean up error returns from connect_nb()

Clean up connect_nb() in the showmount command.

Sometimes it returns -1 on error, and sometimes a negative errno.  On error,
it should always return one of these or the other, not both.

Similar functions in other parts of nfs-utils return -1 on error, and set
errno; so let's do that here too.

Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
Signed-off-by: Steve Dickson <steved@redhat.com>
16 years agorpc.statd: eliminate --secure_statd
Chuck Lever [Fri, 26 Sep 2008 16:42:45 +0000 (12:42 -0400)]
rpc.statd: eliminate --secure_statd

Clean up: Remove RESTRICTED_STATD to help make IPv6 changes simpler.
We keep the code behind RESTRICTED_STATD, and toss anything that is
compiled out when it is set.

RESTRICTED_STATD was added almost 10 years ago in response to CERT
CERT CA-99.05, which addresses exposures in rpc.statd that might allow
an attacker to take advantage of buffer overflows in rpc.statd while it
is running in privileged mode.

These days, I can't think of a reason why anyone would want to run
rpc.statd without setting RESTRICTED_STATD.  In addition, I don't
think rpc.statd is ever tested without it.

Removing RESTRICTED_STATD will get rid of some address storage and
comparison issues that will make IPv6 support simpler.  Plus it will
make our test matrix smaller!

Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
Acked-by: Neil Brown <neilb@suse.de>
Signed-off-by: Steve Dickson <steved@redhat.com>
16 years agorpc.tatd: refactor check to see if call is from loopback address
Chuck Lever [Fri, 26 Sep 2008 16:39:13 +0000 (12:39 -0400)]
rpc.tatd: refactor check to see if call is from loopback address

Refactor common logic to check if SM_FOO request is from loopback
address.

We'll have to do something about this for IPv6.  On IPv6-capable
systems, there will be only one AF_INET6 listener.  The loopback caller
will get either an IPv6 loopback address, or a mapped IPv4 loopback --
either way this will be an AF_INET6 address.

Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
Acked-by: Neil Brown <neilb@suse.de>
Signed-off-by: Steve Dickson <steved@redhat.com>
16 years agomount: enable retry for nfs23 to set the correct protocol for mount.
Neil Brown [Thu, 28 Aug 2008 15:32:33 +0000 (11:32 -0400)]
mount: enable retry for nfs23 to set the correct protocol for mount.

Use a connected port when talking to portmap via UDP.

This allows us to get ICMP errors reported back so we can avoid
timeouts.  Also catch the error (RPC_CANTRECV) properly in getport.

Signed-off-by: NeilBrown <neilb@suse.de>
Signed-off-by: Steve Dickson <steved@redhat.com>
16 years agoRemove idmapd.conf
J. Bruce Fields [Thu, 28 Aug 2008 15:25:29 +0000 (11:25 -0400)]
Remove idmapd.conf

The example idmapd.conf file is kept in libnfsidmap now, which is what's
responsible for parsing it anyway.

Signed-off-by: J. Bruce Fields <bfields@citi.umich.edu>
Signed-off-by: Steve Dickson <steved@redhat.com>
16 years agoDetermine supported pseudoflavors from export
J. Bruce Fields [Thu, 28 Aug 2008 15:23:05 +0000 (11:23 -0400)]
Determine supported pseudoflavors from export

Instead of using a static list of supported flavors, we should be taking
the list from the export.

Signed-off-by: J. Bruce Fields <bfields@citi.umich.edu>
Signed-off-by: Steve Dickson <steved@redhat.com>
16 years agoMinor mountd.c cleanup
J. Bruce Fields [Thu, 28 Aug 2008 15:20:58 +0000 (11:20 -0400)]
Minor mountd.c cleanup

I find it more readable to have the normal (non-error) case unindented,
and to keep conditionals relatively simple, as is the usual kernel
style.  Fix some inconsistent indentation while we're there.

Signed-off-by: J. Bruce Fields <bfields@citi.umich.edu>
Signed-off-by: Steve Dickson <steved@redhat.com>
16 years agoRemove redundant m_path field
J. Bruce Fields [Thu, 28 Aug 2008 15:17:34 +0000 (11:17 -0400)]
Remove redundant m_path field

Contrary to the comment above its definition, the field m_path always
has the same value as e_path: the *only* modifications of m_path are all
of the form:

strncpy(exp->m_export.m_path, exp->m_export.e_path,
sizeof (exp->m_export.m_path) - 1);
exp->m_export.m_path[sizeof (exp->m_export.m_path) - 1] = '\0';

So m_path is always just a copy of e_path.  In places where we need to
store a path to a submount of a CROSSMNT-exported filesystem, as in
cache.c, we just use a local variable.

Signed-off-by: J. Bruce Fields <bfields@citi.umich.edu>
Signed-off-by: Steve Dickson <steved@redhat.com>
16 years agoStop exportfs warning about needing fsid, when we actually have one
David Woodhouse [Thu, 28 Aug 2008 15:07:53 +0000 (11:07 -0400)]
Stop exportfs warning about needing fsid, when we actually have one

Signed-off-by: David Woodhouse <David.Woodhouse@intel.com>
Signed-off-by: Steve Dickson <steved@redhat.com>
16 years agoUse fsid from statfs for UUID if blkid can't cope (or not used)
David Woodhouse [Thu, 28 Aug 2008 15:05:17 +0000 (11:05 -0400)]
Use fsid from statfs for UUID if blkid can't cope (or not used)

Signed-off-by: David Woodhouse <David.Woodhouse@intel.com>
Signed-off-by: Steve Dickson <steved@redhat.com>
16 years agoExplicit UUID handling doesn't require blkid; factor out get_uuid_blkdev()
David Woodhouse [Thu, 28 Aug 2008 14:56:57 +0000 (10:56 -0400)]
Explicit UUID handling doesn't require blkid; factor out get_uuid_blkdev()

Signed-off-by: David Woodhouse <David.Woodhouse@intel.com>
Signed-off-by: Steve Dickson <steved@redhat.com>
16 years agoFix handling of explicit uuid
David Woodhouse [Thu, 28 Aug 2008 14:29:54 +0000 (10:29 -0400)]
Fix handling of explicit uuid

Fix a couple of bugs which show up if you try to explicitly set a
16-byte UUID when exporting a file system. First, exportfs cuts the
first two bytes off the UUID and writes something invalid to etab.
Second, mountd writes the _ascii_ form of the UUID to the kernel,
instead of converting it to hex.

Signed-off-by: David Woodhouse <David.Woodhouse@intel.com>
Signed-off-by: Steve Dickson <steved@redhat.com>
16 years agomount issue with Mac OSX and --manage-gids, client hangs
Neil Brown [Wed, 27 Aug 2008 20:30:19 +0000 (16:30 -0400)]
mount issue with Mac OSX and --manage-gids, client hangs

Make sure are zero len group list is sent down to the
kernel when the gids do not exist on the server.

Tested-by: Alex Samad <alex@samad.com.au>
Signed-off-by: Neil Brown <neilb@suse.de>
Signed-off-by: Steve Dickson <steved@redhat.com>
16 years agomount.nfs command: old glibc missing some flags
Chuck Lever [Thu, 31 Jul 2008 09:24:18 +0000 (05:24 -0400)]
mount.nfs command: old glibc missing some flags

Old versions of glibc (< 2.4) have a getaddrinfo(3) implementation, but
do not include public definitions of the AI_V4MAPPED, AI_ALL, and
AI_ADDRCONFIG flags because it was believed that these flags were not
standardized.  However, these flags have standard definitions both in
POSIX 1003 and in RFCs, and were thus included in later releases of
glibc.

To allow the mount.nfs command to build on systems with these older
versions of glibc, add conditional definitions for these flags in
utils/mount/network.c.

Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
Signed-off-by: Steve Dickson <steved@redhat.com>
16 years agoRelease 1.1.3 nfs-utils-1-1-3
Steve Dickson [Sun, 27 Jul 2008 21:01:45 +0000 (17:01 -0400)]
Release 1.1.3

Signed-off-by: Steve Dickson <steved@redhat.com>
16 years agoshowmount issues
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.

Signed-off-by: Steve Dickson <steved@redhat.com>
16 years agonfs(5) man page: Add documentation for the "mountproto=" option
Chuck Lever [Fri, 25 Jul 2008 18:31:18 +0000 (14:31 -0400)]
nfs(5) man page: Add documentation for the "mountproto=" option

Looks like mountproto= was never documented in nfs(5).  Add a paragraph
that describes it in the "nfs mount options" section.

Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
Signed-off-by: Steve Dickson <steved@redhat.com>
16 years agosm-notify: perform DNS lookup in the background.
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>
16 years agoIf portmap is not listening on UDP (as apparently happens with
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>
16 years agoIf an NFS server is only listening on TCP for portmap (as apparently
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>
16 years agoIt appears that a recent glibc update now enforces the requirement for a mode
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

Signed-off-by: Steve Dickson <steved@redhat.com>
16 years agoClean up: Include the bare minimum of legacy RPC headers in
Chuck Lever [Tue, 15 Jul 2008 17:59:00 +0000 (13:59 -0400)]
Clean up: Include the bare minimum of legacy RPC headers in
utils/mount/network.h.

Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
Signed-off-by: Steve Dickson <steved@redhat.com>
16 years agoClean up: remove unneeded headers from utils/mount/stropts.c.
Chuck Lever [Tue, 15 Jul 2008 17:57:10 +0000 (13:57 -0400)]
Clean up: remove unneeded headers from utils/mount/stropts.c.

Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
Signed-off-by: Steve Dickson <steved@redhat.com>
16 years agoClean up: rename a couple of functions in utils/mount/stropts.c to match
Chuck Lever [Tue, 15 Jul 2008 17:55:36 +0000 (13:55 -0400)]
Clean up: rename a couple of functions in utils/mount/stropts.c to match
the naming convention of the others.

Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
Signed-off-by: Steve Dickson <steved@redhat.com>
16 years agoClean up: remove unused IPv4-only functions used by the text-based mount
Chuck Lever [Tue, 15 Jul 2008 17:53:50 +0000 (13:53 -0400)]
Clean up: remove unused IPv4-only functions used by the text-based mount
command.

Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
Signed-off-by: Steve Dickson <steved@redhat.com>
16 years agoTraditionally the mount command has looked for a ":" to separate the
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>
16 years agoChange the fix_mounthost_option() function to support resolving IPv6
Chuck Lever [Tue, 15 Jul 2008 17:38:53 +0000 (13:38 -0400)]
Change the fix_mounthost_option() function to support resolving IPv6
addresses.

Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
Signed-off-by: Steve Dickson <steved@redhat.com>
16 years agoChange the append_clientaddr_option() function to support sending either
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>
16 years agoChange the append_addr_option() function to support sending either IPv4
Chuck Lever [Tue, 15 Jul 2008 17:34:49 +0000 (13:34 -0400)]
Change the append_addr_option() function to support sending either IPv4
or IPv6 addresses to the kernel via the "addr=" option.

Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
Signed-off-by: Steve Dickson <steved@redhat.com>
16 years agoThere are three helpers that convert sockaddr-style addresses to text
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>
16 years agoIntroduce IPv6-enabled version of get_client_address. The legacy mount
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>
16 years agoIntroduce two new functions to convert a sockaddr to a presentation format
Chuck Lever [Tue, 15 Jul 2008 17:27:15 +0000 (13:27 -0400)]
Introduce two new functions to convert a sockaddr to a presentation format
string and back.

Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
Signed-off-by: Steve Dickson <steved@redhat.com>
16 years agoAdd #include directives for additional header files needed to support IPv6
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>
16 years agoWe want to continue to support building nfs-utils on systems that do not
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>