]> git.decadent.org.uk Git - nfs-utils.git/log
nfs-utils.git
14 years agoexports: NFSv4 pseudoroot support routines
Steve Dickson [Tue, 1 Dec 2009 12:16:13 +0000 (07:16 -0500)]
exports: NFSv4 pseudoroot support routines

Create v4root exports for each directory that is a parent of an explicit
export.  Give each the minimal security required to traverse to any of
its children.

Signed-off-by: Steve Dickson <steved@redhat.com>
Signed-off-by: J. Bruce Fields <bfields@citi.umich.edu>
14 years agoexports: add new flag for NFSv4 pseudoroot
Steve Dickson [Tue, 1 Dec 2009 11:22:08 +0000 (06:22 -0500)]
exports: add new flag for NFSv4 pseudoroot

Signed-off-by: Steve Dickson <steved@redhat.com>
14 years agomountd: don't require mountpoint in crossmnt case
J. Bruce Fields [Tue, 22 Dec 2009 18:02:08 +0000 (13:02 -0500)]
mountd: don't require mountpoint in crossmnt case

Currently,

mount --bind /path /path

where /path is a subdirectory of a crossmnt export, can cause client
hangs, since the kernel detects that as a mountpoint, but nfs-util's
is_mountpoint() function does not.

I don't see any sure-fire way to detect such mountpoints.  But that's
OK: it's harmless to allow this upcall to succeed even when the
directory is not a mountpoint, so let's just remove this check.

Signed-off-by: J. Bruce Fields <bfields@citi.umich.edu>
14 years agomountd: further split up lookup_export
J. Bruce Fields [Tue, 22 Dec 2009 17:50:26 +0000 (12:50 -0500)]
mountd: further split up lookup_export

More trivial cleanup (no change in functionality) to group logical
operations together into a single function.

Signed-off-by: J. Bruce Fields <bfields@citi.umich.edu>
14 years agomountd: move export lookup into separate function
J. Bruce Fields [Tue, 22 Dec 2009 16:22:58 +0000 (11:22 -0500)]
mountd: move export lookup into separate function

Move this main loop to a separate function, to make it a little easier
to follow the logic of the caller.

Also, instead of waiting till we find an export to do the dns
resolution, do it at the start; it will normally be needed anyway, and
this simplifies the control flow.

Signed-off-by: J. Bruce Fields <bfields@citi.umich.edu>
14 years agoexports: let kernel decide which flags vary by flavor
J. Bruce Fields [Mon, 14 Dec 2009 22:07:19 +0000 (17:07 -0500)]
exports: let kernel decide which flags vary by flavor

Query the kernel to ask which flavors vary by pseudoflavor, and use that
instead of a fixed constant.  To allow the possibility of more flags
varying by pseudoflavor, use the set/clear_flags functions for all
options instead of setting some by hand.

Signed-off-by: J. Bruce Fields <bfields@citi.umich.edu>
14 years agoexports: minor parse_opts cleanup
J. Bruce Fields [Mon, 14 Dec 2009 21:57:47 +0000 (16:57 -0500)]
exports: minor parse_opts cleanup

Move this into a helper function.  (We'll be adding a little more code
here.)

Signed-off-by: J. Bruce Fields <bfields@citi.umich.edu>
14 years agogssd: on krb5 upcall, have gssd send a more granular error code nfs-utils-1-2-2-rc5
Jeff Layton [Tue, 12 Jan 2010 12:32:51 +0000 (07:32 -0500)]
gssd: on krb5 upcall, have gssd send a more granular error code

Currently if a krb5 context expires, GSSAPI authenticated RPC calls
start returning error (-EACCES in particular). This is bad when someone
has a long running job that's doing filesystem ops on a krb5 authenticated
NFS mount and just happens to forget to redo a 'kinit' in time.

The existing gssd always does a downcall with a '-1' error code if there
are problems, and the kernel always ignores this error code. Begin to
fix this by having gssd distinguish between someone that has no
credcache at all, and someone who has an expired one. In the case where
there is an existing credcache, have gssd downcall with an error code of
-EKEYEXPIRED. If there's not a credcache, then downcall with an error of
-EACCES.

We can then have the kernel use this error code to handle these
situations differently.

Signed-off-by: Jeff Layton <jlayton@redhat.com>
Signed-off-by: Steve Dickson <steved@redhat.com>
14 years agoAdded the following files to .gitignore
Steve Dickson [Tue, 12 Jan 2010 11:03:22 +0000 (06:03 -0500)]
Added the following files to .gitignore
 tests/nsm_client/nlm_sm_inter.h
 tests/nsm_client/nlm_sm_inter_clnt.c
 tests/nsm_client/nlm_sm_inter_svc.c
 tests/nsm_client/nlm_sm_inter_xdr.c

Signed-off-by: Steve Dickson <steved@redhat.com>
14 years agonfs-utils: add initial tests for statd that run via "make check"
Jeff Layton [Tue, 12 Jan 2010 01:27:54 +0000 (20:27 -0500)]
nfs-utils: add initial tests for statd that run via "make check"

Leverage the support that automake already has for running tests via
make check. Add a simple test that just checks that the statd mon and
unmon calls actually work.

Adding more tests should be a simple matter of adding new scripts
exit 0 on success and non-zero on fail, and adding those to the
Makefile.am.

Signed-off-by: Jeff Layton <jlayton@redhat.com>
Signed-off-by: Steve Dickson <steved@redhat.com>
14 years agonfs-utils: add statdb_dump utility
Jeff Layton [Tue, 12 Jan 2010 11:00:07 +0000 (06:00 -0500)]
nfs-utils: add statdb_dump utility

To dump contents of statd's monitor DB.

Signed-off-by: Jeff Layton <jlayton@redhat.com>
Signed-off-by: Steve Dickson <steved@redhat.com>
14 years agonfs-utils: introduce new statd testing simulator
Jeff Layton [Tue, 12 Jan 2010 10:55:20 +0000 (05:55 -0500)]
nfs-utils: introduce new statd testing simulator

rpc.statd is often prone to subtle, difficult to detect breakage. When
it has problems, they're often invisible and only manifest themselves
as failed lock recovery.

This program is intended to function as part of a test harness for
statd. It's a multicall binary that serves as a synthetic NSM client
program, and a daemon that can simulate lockd for purposes of testing
the NSM to NLM downcall.

A new top level "tests/" directory is also added to nfs-utils to start
as a repository for automated tests of nfs-utils components.

Signed-off-by: Jeff Layton <jlayton@redhat.com>
Signed-off-by: Steve Dickson <steved@redhat.com>
14 years agonfs-utils: make private cookie to hex conversion a library routine
Jeff Layton [Tue, 12 Jan 2010 00:52:47 +0000 (19:52 -0500)]
nfs-utils: make private cookie to hex conversion a library routine

Signed-off-by: Jeff Layton <jlayton@redhat.com>
Signed-off-by: Steve Dickson <steved@redhat.com>
14 years agostatd: Use the new nsm_ file.c calls in rpc.statd
Chuck Lever [Tue, 12 Jan 2010 00:13:59 +0000 (19:13 -0500)]
statd: Use the new nsm_ file.c calls in rpc.statd

Replace open-coded accesses to on-disk NSM information in rpc.statd
with calls to the new API.

Behavior should be much the same as it was before.

Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
Signed-off-by: Steve Dickson <steved@redhat.com>
14 years agostatd: Use the new nsm_ file.c calls in sm_notify
Chuck Lever [Tue, 12 Jan 2010 00:10:49 +0000 (19:10 -0500)]
statd: Use the new nsm_ file.c calls in sm_notify

Replace open-coded accesses to on-disk NSM data with calls to the new
libnsm.a API.

One major change is that sync(2) is no longer called when the NSM
state number is updated at boot time.  Otherwise sm-notify should
behave much the same as it did before.

Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
Signed-off-by: Steve Dickson <steved@redhat.com>
14 years agolibnsm.a: Introduce common routines to handle persistent storage
Chuck Lever [Tue, 12 Jan 2010 00:08:10 +0000 (19:08 -0500)]
libnsm.a: Introduce common routines to handle persistent storage

rpc.statd and sm-notify access the same set of files under
/var/lib/nfs/statd, but both have their own code base to handle this.
They should share this code.

In addition, the on-disk format used by statd and friends is
considered a formal interface, so this new code will codify the API
and provide documentation for it.

The shared code handles switching from the default parent statd
directory, reducing privileges at start-up, and managing the NSM
state files, in addition to handling normal operations on the
monitored host and notification lists on disk.

The new code is simply a copy of the same logic that was used in
rpc.statd and sm-notify, but wrapped in a nice API.  There should be
minimal behavioral and no on-disk format changes with the new
libnsm.a code.

The new code is more careful to check for bad corner cases.
Occassionally this code may not allow an operation that was permitted
in the past, but hopefully the error reporting has improved enough
that it should be easy to track down any problems.

Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
Signed-off-by: Steve Dickson <steved@redhat.com>
14 years agoshowmount: Try the highest mount version then fall back to lower ones nfs-utils-1-2-2-rc4
Steve Dickson [Mon, 11 Jan 2010 23:26:41 +0000 (18:26 -0500)]
showmount: Try the highest mount version then fall back to lower ones

Showmount should try the highest mount version first then fall
back to the lower ones when the server returns a RPC_PROGVERSMISMATCH
error. The idea being not using the lower mount versions will begin
the process of moving away from NFSv2 support.

Reviewed-by: Chuck Lever <chuck.lever@oracle.com>
Signed-off-by: Steve Dickson <steved@redhat.com>
14 years agomount.nfs: don't use IPv6 unless IPV6_SUPPORTED is set
Jeff Layton [Mon, 4 Jan 2010 20:42:51 +0000 (15:42 -0500)]
mount.nfs: don't use IPv6 unless IPV6_SUPPORTED is set
Commit 1f3fae1fb25168aac187ff1881738c8ad53a8763 made mount.nfs start
looking up and trying to use IPv6 addresses when mount.nfs was built
against libtirpc (even when --enable-ipv6 wasn't specified).

The problem seems to be that nfs_nfs_proto_family() is basing the family
on HAVE_LIBTIRPC. I think it should be basing it on IPV6_SUPPORTED
instead.

Signed-off-by: Jeff Layton <jlayton@redhat.com>
Acked-by: Chuck Lever <chuck.lever@oracle.com>
Signed-off-by: Steve Dickson <steved@redhat.com>
14 years agolibnsm.a: Move the sm_inter XDR pieces to libnsm.a
Chuck Lever [Wed, 23 Dec 2009 16:29:19 +0000 (11:29 -0500)]
libnsm.a: Move the sm_inter XDR pieces to libnsm.a

Clean up: Move the .x file and the generated C source for NSM to
libnsm.a, echoing the architecture of mountd and exportfs.  This makes
the NSM protocol definitions, data types, and XDR routines available
to be shared across nfs-utils.

This simplifies the addition of other NSM-related code (for example
for testing or providing clustering support), and also provides
public data type definitions that can be used to make sense of the
contents of statd's on-disk database.

Because sim_sm_inter.x still resides in utils/statd, I've left some
rpcgen build magic in utils/statd/Makefile.am.

This is an internal organization change only.  This patch should not
affect code behavior in any way.

Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
Signed-off-by: Steve Dickson <steved@redhat.com>
14 years agolibexport.a: fix a long-standing typo in name_cmp()
Chuck Lever [Wed, 23 Dec 2009 16:18:17 +0000 (11:18 -0500)]
libexport.a: fix a long-standing typo in name_cmp()

Not sure what "(!*a || !a == ',')" means... but just a few lines later
is
"(!*a || *a == ',')".  I think "a is '\0' or ','" is what was intended.

Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
Signed-off-by: Steve Dickson <steved@redhat.com>
14 years agostatd: replace smn_{get,set}_port() with the shared equivalents nfs-utils-1-2-2-rc3
Chuck Lever [Fri, 11 Dec 2009 17:36:42 +0000 (12:36 -0500)]
statd: replace smn_{get,set}_port() with the shared equivalents

Use shared sockaddr port management functions instead of duplicating
this functionality in sm-notify.  This is now easy because sm-notify
is linked with libnfs.a, where nfs_{get,set}_port() reside.

Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
Signed-off-by: Steve Dickson <steved@redhat.com>
14 years agostatd: squelch compiler warning in sm-notify.c
Steve Dickson [Fri, 11 Dec 2009 17:34:34 +0000 (12:34 -0500)]
statd: squelch compiler warning in sm-notify.c

Clean up:  Get rid of a false positive compiler warning, seen with
-Wextra.

sm-notify.c: In function ¿record_pid¿:
sm-notify.c:690: warning: comparison between signed and unsigned integer
expressions

Document some ignored return codes while we're here.

Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
Signed-off-by: Steve Dickson <steved@redhat.com>
14 years agogssd: have gssd deal with scopeid field in upcall
Jeff Layton [Fri, 11 Dec 2009 18:05:06 +0000 (13:05 -0500)]
gssd: have gssd deal with scopeid field in upcall

Recent kernels (2.6.32) have started displaying the scopeid for some
addresses in the upcall. gssd doesn't know how to deal with them. Change
gssd to use getaddrinfo instead of inet_pton since that can deal with
scopeid's in addresses. That also allows us to elminate the port
conversion in read_service_info.

If getaddrinfo returns an address with a non-zero sin6_scope_id however,
reject it. getnameinfo ignores that field and just uses the sin6_addr
part when resolving. But, two addresses that differ only in
sin6_scope_id could refer to completely different hosts.

Signed-off-by: Jeff Layton <jlayton@redhat.com>
Signed-off-by: Steve Dickson <steved@redhat.com>
14 years agoNFS man page: update nfs(5) with details about IPv6 support nfs-utils-1-2-2-rc2
Chuck Lever [Fri, 11 Dec 2009 15:53:13 +0000 (10:53 -0500)]
NFS man page: update nfs(5) with details about IPv6 support

Add details to nfs(5) about how to specify raw IPv6 addresses when
mounting an
NFS server.  Mounting via an IPv6 NFS server via hostname should work as
it
does with IPv4.

Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
Signed-off-by: Steve Dickson <steved@redhat.com>
14 years agomount.nfs: Remove nfs_name_to_address()
Chuck Lever [Fri, 11 Dec 2009 15:52:21 +0000 (10:52 -0500)]
mount.nfs: Remove nfs_name_to_address()

Clean up:  nfs_name_to_address() has no more callers.

Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
Signed-off-by: Steve Dickson <steved@redhat.com>
14 years agomount.nfs: Teach umount.nfs to recognize netids in /etc/mtab
Chuck Lever [Fri, 11 Dec 2009 15:50:13 +0000 (10:50 -0500)]
mount.nfs: Teach umount.nfs to recognize netids in /etc/mtab

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>
14 years agomount.nfs: proto=netid forces address family when resolving server names
Chuck Lever [Fri, 11 Dec 2009 15:48:24 +0000 (10:48 -0500)]
mount.nfs: proto=netid forces address family when resolving server names

Using the netid settings, determine the correct address family to use
for NFS and MNT server name resolution.  Use this family when
resolving the server name for the addr= and mountaddr= options.

This patch assumes the kernel can recognize a netid, instead of a
protocol name, as the value of the proto= options.

Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
Signed-off-by: Steve Dickson <steved@redhat.com>
14 years agomount.nfs: Fix sockaddr pointer aliasing in stropts.c
Chuck Lever [Fri, 11 Dec 2009 15:46:06 +0000 (10:46 -0500)]
mount.nfs: Fix sockaddr pointer aliasing in stropts.c

Using a sockaddr_storage and casting a sockaddr pointer to it breaks
C's aliasing rules.

See:

  https://bugzilla.redhat.com/show_bug.cgi?id=448743

Replacing sockaddr_storage makes this code less likely to break when
optimized by gcc.  It also saves a significant amount of stack space
by replacing a 130 byte structure with a union that is less than 32
bytes.

Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
Signed-off-by: Steve Dickson <steved@redhat.com>
14 years agomount.nfs: Add new API for getting protocol family from netids
Chuck Lever [Fri, 11 Dec 2009 15:44:34 +0000 (10:44 -0500)]
mount.nfs: Add new API for getting protocol family from netids

Introduce a couple of new functions that extract the protocol family
from the value of the proto= and mountproto= mount options.

Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
Signed-off-by: Steve Dickson <steved@redhat.com>
14 years agomount.nfs: make nfs_lookup() global
Chuck Lever [Fri, 11 Dec 2009 15:41:45 +0000 (10:41 -0500)]
mount.nfs: make nfs_lookup() global

Expose a DNS query API that allows callers to request DNS results from
a specific address family.

Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
Signed-off-by: Steve Dickson <steved@redhat.com>
14 years agomount.nfs: support netids in v2/v3 version/transport negotiation
Chuck Lever [Fri, 11 Dec 2009 15:38:50 +0000 (10:38 -0500)]
mount.nfs: support netids in v2/v3 version/transport negotiation

When rewriting mount options during v2/v3 negotiation, restore the
correct netids, rather than protocol names, in the rewritten protocol
options.  If TI-RPC is not available, the traditional behavior is
preserved.

This patch assumes the kernel can recognize a netid, instead of a
protocol name, as the value of the proto= options.

Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
Signed-off-by: Steve Dickson <steved@redhat.com>
14 years agomount.nfs: support netids in nfs_options2pmap()
Chuck Lever [Fri, 11 Dec 2009 15:37:02 +0000 (10:37 -0500)]
mount.nfs: support netids in nfs_options2pmap()

When parsing mount options in nfs_options2pmap(), treat the value of
proto= (and mountproto=) as a netid by looking it up in local
netconfig and protocol databases to convert it to a protocol number.
If TI-RPC is not available, the traditional behavior is preserved.

The meaning of the "udp" and "tcp" mount options is not affected by
this change.

Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
Signed-off-by: Steve Dickson <steved@redhat.com>
14 years agolibnfs.a: Provide shared helpers for managing netids
Chuck Lever [Fri, 11 Dec 2009 15:34:42 +0000 (10:34 -0500)]
libnfs.a: Provide shared helpers for managing netids

Introduce a couple of shared functions that can convert netids to
protocol numbers and families, and back.

Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
Signed-off-by: Steve Dickson <steved@redhat.com>
14 years agomount.nfs: Retry v4 mounts with v3 on ENOENT errors
Neil Brown [Mon, 7 Dec 2009 22:23:48 +0000 (17:23 -0500)]
mount.nfs: Retry v4 mounts with v3 on ENOENT errors

Retry v4 mounts with a v3 mount when the version
is not explicitly specified and the mount fails
with ENOENT. The will help deal with Linux servers
that do not automatically export a pseudo root

Signed-off-by: Steve Dickson <steved@redhat.com>
15 years agostatd: Replace nsm_log() with xlog() in sm-notify command
Chuck Lever [Tue, 24 Nov 2009 14:08:29 +0000 (09:08 -0500)]
statd: Replace nsm_log() with xlog() in sm-notify command

To facilitate code sharing between statd and sm-notify (and with other
components of nfs-utils), replace sm-notify's nsm_log() with xlog().

Since opt_quiet is used in only a handful of insignificant cases, it
is removed.

Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
Signed-off-by: Steve Dickson <steved@redhat.com>
15 years agostatd: Replace note() with xlog() in rpc.statd
Chuck Lever [Tue, 24 Nov 2009 13:36:20 +0000 (08:36 -0500)]
statd: Replace note() with xlog() in rpc.statd

To facilitate code sharing between statd and sm-notify (and with other
components of nfs-utils), replace sm-notify's nsm_log() with xlog().

Since opt_quiet is used in only a handful of insignificant cases, it
is removed.

Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
Signed-off-by: Steve Dickson <steved@redhat.com>
15 years agonfs-utils: NFSv4: fix backgrounding
Harshula Jayasuriya [Mon, 16 Nov 2009 18:42:08 +0000 (13:42 -0500)]
nfs-utils: NFSv4: fix backgrounding

he nfsmount() function checks if !bg before running
switch(rpc_createerr.cf_stat). On the other hand, the nfs4mount()
function does not, and results in exiting the loop on the first
iteration even with the bg mount option.

NOTE: This and the previous patch ("nfs-utils: mount options can be lost
when using bg option") are relevant to non text-based mount options.

See https://bugzilla.redhat.com/show_bug.cgi?id=529370 for details.

Signed-off-by: Harshula Jayasuriya <harshula@redhat.com>
Signed-off-by: Steve Dickson <steved@redhat.com>
15 years agomount options can be lost when using bg option
Harshula Jayasuriya [Mon, 16 Nov 2009 18:39:35 +0000 (13:39 -0500)]
mount options can be lost when using bg option

When mounting an NFS export *without* the "bg" option, try_mount() is
called only once. Before calling it, the variables mount_opts and
extra_opts are set up. Then try_mount() calls nfsmount(), the latter
assumes that the aforementioned variables can be modified. Most
significantly, it allows the variable extra_opts to be modified.

When the "bg" mount option is used *and* the first try_mount() attempt
fails, it daemonizes the process and calls try_mount() again,
unfortunately, we've lost the required mount options in the variable
extra_opts.

See https://bugzilla.redhat.com/show_bug.cgi?id=529370 for details.

Signed-off-by: Harshula Jayasuriya <harshula@redhat.com>
Signed-off-by: Steve Dickson <steved@redhat.com>
15 years agorelax insecure option on mountd
Robert Gordon [Mon, 16 Nov 2009 18:25:02 +0000 (13:25 -0500)]
relax insecure option on mountd

In nfs-utils 1.2.0, I noticed that the insecure option validates that
the client port is a
subset of IPPORT_RESERVED as opposed to just validating it is a valid
reserved port. The following proposed patch would correct that issue.

Acked-by: Jeff Layton <jlayton@redhat.com>
Signed-off-by: Robert Gordon <rbg@openrbg.com>
Signed-off-by: Steve Dickson <steved@redhat.com>
15 years agomount.nfs: Assume v2/v3 if mount-related options are present
Chuck Lever [Mon, 16 Nov 2009 17:53:01 +0000 (12:53 -0500)]
mount.nfs: Assume v2/v3 if mount-related options are present

Don't try NFSv4 if any MNT protocol related options were
presented by the user.

Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
Signed-off-by: Steve Dickson <steved@redhat.com>
15 years agogssd: process service= attribute in new upcall nfs-utils-1-2-2-rc1
Olga Kornievskaia [Mon, 16 Nov 2009 14:44:03 +0000 (09:44 -0500)]
gssd: process service= attribute in new upcall

Add processing of the "service=" attribute in the new gssd upcall.

If "service" is specified, then the kernel is indicating that
we must use machine credentials for this request.  (Regardless
of the uid value or the setting of root_uses_machine_creds.)
If the service value is "*", then any service name can be used.
Otherwise, it specifies the service name that should be used.
(For now, the values of service will only be "*" or "nfs".)

Restricting gssd to use "nfs" service name is needed for when
the NFS server is doing a callback to the NFS client.  In this
case, the NFS server has to authenticate itself as "nfs" --
even if there are other service keys such as "host" or "root"
in the keytab.

Another case when the kernel may specify the service attribute
is when gssd is being asked to create the context for a
SETCLIENT_ID operation.  In this case, machine credentials
must be used for the authentication.  However, the service name
used for this case is not important.

Signed-off-by: Olga Kornievskaia <aglo@citi.umich.edu>
Signed-off-by: Kevin Coffman <kwc@citi.umich.edu>
Signed-off-by: Steve Dickson <steved@redhat.com>
15 years agogssd: process target= attribute in new upcall
Olga Kornievskaia [Mon, 16 Nov 2009 14:27:22 +0000 (09:27 -0500)]
gssd: process target= attribute in new upcall

Add processing of the "target=" attribute in the new gssd upcall.
Information in this field is used to construct the gss service name
of the server for which gssd will create a context .

This, along with the next patch handling "service=", is needed
for callback security.

For Kerberos, the NFS client will use a service principal present
in its keytab during authentication of the SETCLIENT_ID operation.
When establishing the context for the callback, the gssd on the
NFS server will attempt to authenticate the callback against the
principal name used by the client.

Note: An NFS client machine must have a keytab for the callback
authentication to succeed.

Signed-off-by: Olga Kornievskaia <aglo@citi.umich.edu>
Signed-off-by: Kevin Coffman <kwc@citi.umich.edu>
Signed-off-by: Steve Dickson <steved@redhat.com>
15 years agogssd: handle new client upcall
Olga Kornievskaia [Mon, 16 Nov 2009 14:25:22 +0000 (09:25 -0500)]
gssd: handle new client upcall

Add support for handling the new client-side upcall.  The kernel,
beginning with 2.6.29, will attempt to use a new pipe, "gssd",
which can be used for upcalls for all gss mechanisms.

The new upcall is text-based with an <attribute>=<value> format.
Attribute/value pairs are separated by a space, and terminated
with a new-line character.

The intial version has two required attributes,
mech=<gss_mechanism_name> and uid=<user's_UID_number>, and two
optional attributes, target=<gss_target_name> and service=<value>.

Future kernels may add new attribute/value pairs.

Signed-off-by: Olga Kornievskaia <aglo@citi.umich.edu>
Signed-off-by: Kevin Coffman <kwc@citi.umich.edu>
Signed-off-by: Steve Dickson <steved@redhat.com>
15 years agogssd: print full client directory being handled
Olga Kornievskaia [Mon, 16 Nov 2009 14:18:42 +0000 (09:18 -0500)]
gssd: print full client directory being handled

For convenience, add the full name of the upcall pipe being processed.
(Distinquishes between "normal" upcall, and a callback upcall.)

Signed-off-by: Olga Kornievskaia <aglo@citi.umich.edu>
Signed-off-by: Kevin Coffman <kwc@citi.umich.edu>
Signed-off-by: Steve Dickson <steved@redhat.com>
15 years agogssd: add upcall support for callback authentication
Olga Kornievskaia [Mon, 16 Nov 2009 14:15:25 +0000 (09:15 -0500)]
gssd: add upcall support for callback authentication

Change the processing so that all subdirectories within the rpc_pipefs
directory are treated equally.  Any "clnt" directories that show up
within any of them are processed.  (As suggested by Bruce Fields.)

Note that the callback authentication will create a new "nfs4d_cb"
subdirectory.  Only new kernels (2.6.29) will create this new directory.
(The need for this directory will go away with NFSv4.1 where the
callback can be done on the same connection as the fore-channel.)

Signed-off-by: Kevin Coffman <kwc@citi.umich.edu>
Signed-off-by: Steve Dickson <steved@redhat.com>
15 years agogssd: refactor update_client_list()
Olga Kornievskaia [Mon, 16 Nov 2009 14:14:31 +0000 (09:14 -0500)]
gssd: refactor update_client_list()

Split out the processing for a pipe to a separate routine.  The next
patch adds a new pipe to be processed.

Signed-off-by: Olga Kornievskaia <aglo@citi.umich.edu>
Signed-off-by: Kevin Coffman <kwc@citi.umich.edu>
Signed-off-by: Steve Dickson <steved@redhat.com>
15 years agoThis patch adds the krb5 hostbased principal, name which the
Olga Kornievskaia [Mon, 16 Nov 2009 14:12:22 +0000 (09:12 -0500)]
This patch adds the krb5 hostbased principal, name which the
nfs client used to authenticate, to the svcgssd downcall
information.  This information is needed for the callback
authentication.

When estabishing the callback, nfsd will pass the principal
name in the upcall to the gssd.  gssd will acquire a service
ticket for the specified principal name.

Signed-off-by: Olga Kornievskaia <aglo@citi.umich.edu>
Signed-off-by: Kevin Coffman <kwc@citi.umich.edu>
Signed-off-by: Steve Dickson <steved@redhat.com>
15 years agoRemove the AI_ADDRCONFIG hint flag to getaddrinfo() when it's
Steve Dickson [Thu, 12 Nov 2009 19:16:12 +0000 (14:16 -0500)]
Remove the AI_ADDRCONFIG hint flag to getaddrinfo() when it's
call by nfsd to set up the file descriptors that are
sent to the kernel. The flag causes the getaddrinfo()
to fail, with EAI_NONAME, when there is not a non-loopback
network interface configured.

Signed-off-by: Steve Dickson <steved@redhat.com>
15 years agoRelease 1.2.1 nfs-utils-1-2-1
Steve Dickson [Wed, 4 Nov 2009 11:13:56 +0000 (06:13 -0500)]
Release 1.2.1

Signed-off-by: Steve Dickson <steved@redhat.com>
15 years agoFixed configuration error when --disable-mount was used.
Steve Dickson [Tue, 3 Nov 2009 20:11:09 +0000 (15:11 -0500)]
Fixed configuration error when --disable-mount was used.

Signed-off-by: Steve Dickson <steved@redhat.com>
15 years agomount: Fix po_join() call site in nfs_try_mount_v4()
Chuck Lever [Tue, 3 Nov 2009 16:19:08 +0000 (11:19 -0500)]
mount: Fix po_join() call site in nfs_try_mount_v4()

Make sure the copied options string is freed in case po_join() fails.

Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
Signed-off-by: Steve Dickson <steved@redhat.com>
15 years agomount.nfs: Assume v2/v3 if mount-related options are present
Chuck Lever [Tue, 3 Nov 2009 16:16:30 +0000 (11:16 -0500)]
mount.nfs: Assume v2/v3 if mount-related options are present

Don't try NFSv4 if any MNT protocol related options were presented by
the user.

Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
Signed-off-by: Steve Dickson <steved@redhat.com>
15 years agoMade some aesthetic changes to the code that sets
Steve Dickson [Tue, 3 Nov 2009 15:37:36 +0000 (10:37 -0500)]
Made some aesthetic changes to the code that sets
the defaults that were a result of the code review.

Signed-off-by: Steve Dickson <steved@redhat.com>
15 years agoRetry v4 mounts with a v3 mount when the version
Steve Dickson [Tue, 3 Nov 2009 14:49:03 +0000 (09:49 -0500)]
Retry v4 mounts with a v3 mount when the version
is not explicitly specified and the mount fails
with ENOENT. The will help deal with Linux servers
that do not automatically export a pseudo root

Signed-off-by: Steve Dickson <steved@redhat.com>
15 years agoAdded wrappers around the setting of default values
Steve Dickson [Tue, 27 Oct 2009 19:47:27 +0000 (15:47 -0400)]
Added wrappers around the setting of default values
from the config file which will be compiled out
when the config file is not enabled.

Signed-off-by: Steve Dickson <steved@redhat.com>
15 years agoAdded the defaultproto and defaultvers variable to the mount nfs-utils-1-2-1-rc7
Steve Dickson [Thu, 22 Oct 2009 19:35:54 +0000 (15:35 -0400)]
Added the defaultproto and defaultvers variable to the mount
configuration file.

Signed-off-by: Steve Dickson <steved@redhat.com>
15 years agoUse the default protocol and version values, when they
Steve Dickson [Sat, 17 Oct 2009 13:26:18 +0000 (09:26 -0400)]
Use the default protocol and version values, when they
are set in the configuration file, to start the negation
with the server

Signed-off-by: Steve Dickson <steved@redhat.com>
15 years agoIntroducing the parsing of both 'defaultvers' and 'defaultproto'
Steve Dickson [Sat, 17 Oct 2009 13:16:18 +0000 (09:16 -0400)]
Introducing the parsing of both 'defaultvers' and 'defaultproto'
config variables which will be used to set the the default
version and network protocol.

A global variable will be set for each option with the
corresponding value. The value will be used as the
initial value in the server negation.

Signed-off-by: Steve Dickson <steved@redhat.com>
15 years agoMake sure all protocol version options are checked in check_vers()
Steve Dickson [Fri, 9 Oct 2009 17:22:27 +0000 (13:22 -0400)]
Make sure all protocol version options are checked in check_vers()

Signed-off-by: Steve Dickson <steved@redhat.com>
15 years agoMake the network transports value in the mount
Steve Dickson [Fri, 9 Oct 2009 17:14:52 +0000 (13:14 -0400)]
Make the network transports value in the mount
config file case sensitive, since they are in the
mount command's parsing code.

Signed-off-by: Steve Dickson <steved@redhat.com>
15 years agoThere are a number of different mount options that can be
Steve Dickson [Fri, 9 Oct 2009 13:19:39 +0000 (09:19 -0400)]
There are a number of different mount options that can be
used to set the protocol version on the command line. The
config file code needs to know about each option so the
command line value will override the config file value.

Signed-off-by: Steve Dickson <steved@redhat.com>
15 years agomount: Support negotiation between v4, v3, and v2 nfs-utils-1-2-1-rc6
Chuck Lever [Tue, 29 Sep 2009 14:38:52 +0000 (10:38 -0400)]
mount: Support negotiation between v4, v3, and v2

When negotiating between v3 and v2, mount.nfs first tries v3, then v2.
Take the same approach for v4: try v4 first, then v3, then v2, in
order to get the highest NFS version both the client and server
support.

No MNT request is needed for v4.  Since we want to avoid an rpcbind
query for the v4 attempt, just go straight for mount(2) without a MNT
request or rpcbind negotiation first.  If the server reports that v4
is not supported, try lower versions.

The decisions made by the fg/bg retry loop have nothing to do with
version negotation.  To avoid a layering violation, mount.nfs's
multi-version negotiation strategy is wholly encapsulated within
nfs_try_mount().  Thus, code duplication between nfsmount_fg(),
nfsmount_parent(), and nfsmount_child() is avoided.

For now, negotiating version 4 is supported only on kernels that can
handle the vers=4 option on type "nfs" file systems.  At some point
we could also allow mount.nfs to switch to an "nfs4" file system in
this case.

Since mi->version == 0 can now mean v2, v3, or v4, limit the versions
tried for RDMA mounts.  Today, only version 3 supports RDMA.

Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
Signed-off-by: Steve Dickson <steved@redhat.com>
15 years agoThe user's mount options and the set of versions to try should not
Chuck Lever [Tue, 29 Sep 2009 14:38:05 +0000 (10:38 -0400)]
The user's mount options and the set of versions to try should not
change over the course of mount retries.

With this patch, each version-specific mount attempt is compartment-
alized, and starts from the user's original mount options each time.
Thus these attempts can now be safely performed in any order,
depending on what the user has requested, what the server advertises,
and what is up and running at any given point.

Don't regress the fix in commit 23c1a452.  For v2/v3 negotation, only
the user's mount options are written to /etc/mtab, and not any options
that were negotiated by mount.nfs.  There's no way to guarantee that
the server configuration will be the same at umount time as it was at
mount time.

Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
Signed-off-by: Steve Dickson <steved@redhat.com>
15 years agomount.nfs: Keep server's address in nfsmount_info
Chuck Lever [Tue, 29 Sep 2009 14:37:12 +0000 (10:37 -0400)]
mount.nfs: Keep server's address in nfsmount_info

We want to pass the server's address around.  Put it in the mount
context structure.

Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
Signed-off-by: Steve Dickson <steved@redhat.com>
15 years agomount.nfs: Add API to duplicate a mount option list
Chuck Lever [Tue, 29 Sep 2009 14:36:19 +0000 (10:36 -0400)]
mount.nfs: Add API to duplicate a mount option list

Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
Signed-off-by: Steve Dickson <steved@redhat.com>
15 years agonfs-utils: nfs-iostat.py autofs cleanup and option to sort by ops/s nfs-utils-1-2-1-rc5
Lans Carstensen [Tue, 15 Sep 2009 18:42:47 +0000 (14:42 -0400)]
nfs-utils: nfs-iostat.py autofs cleanup and option to sort by ops/s

Adds --sort option to display mount point stats sorted by ops/s
Adds --list=<n> option to only display stats for first <n> mount points
E.g. the use of "--sort --list=1" should be useful in seeing stats for
only the mountpoint with the highest ops/s.

Signed-off-by: Lans Carstensen <Lans.Carstensen@dreamworks.com>
Signed-off-by: Steve Dickson <steved@redhat.com>
15 years agonfs-utils: nfs-iostat.py autofs cleanup and option to sort by ops/s
Lans Carstensen [Tue, 15 Sep 2009 18:41:46 +0000 (14:41 -0400)]
nfs-utils: nfs-iostat.py autofs cleanup and option to sort by ops/s

Introduce optparse for managing command usage/help and the statistics
options. This change helps more cleanly add new options such as --sort
while preserving the iostat-like interval, count, and mount point
positional arguments.

Signed-off-by: Lans Carstensen <Lans.Carstensen@dreamworks.com>
Signed-off-by: Steve Dickson <steved@redhat.com>
15 years agonfs-utils: nfs-iostat.py autofs cleanup and option to sort by ops/s
Lans Carstensen [Tue, 15 Sep 2009 18:31:35 +0000 (14:31 -0400)]
nfs-utils: nfs-iostat.py autofs cleanup and option to sort by ops/s

Update list of mount points at each interval and check for differences
when producing comparative stats.  This ensures proper stats collection
for autofs mountpoints.

Signed-off-by: Lans Carstensen <Lans.Carstensen@dreamworks.com>
Signed-off-by: Steve Dickson <steved@redhat.com>
15 years agonfs-utils: nfs-iostat.py autofs cleanup and option to sort by ops/s
Lans Carstensen [Tue, 15 Sep 2009 18:30:50 +0000 (14:30 -0400)]
nfs-utils: nfs-iostat.py autofs cleanup and option to sort by ops/s

Conforms Python path to the LSB 3.2+ standard of /usr/bin/python
http://refspecs.freestandards.org/LSB_3.2.0/LSB-Languages/LSB-Languages/pylocation.html
Per SteveD this is also required for proper rpm dep resolution during
builds

Signed-off-by: Lans Carstensen <Lans.Carstensen@dreamworks.com>
Signed-off-by: Steve Dickson <steved@redhat.com>
15 years agoidmapd: rearm event handler after error in nfsdcb()
Jeff Layton [Mon, 14 Sep 2009 18:06:53 +0000 (14:06 -0400)]
idmapd: rearm event handler after error in nfsdcb()

A couple of years ago, Bruce committed a patch to make knfsd send
unsigned uid's and gid's to idmapd, rather than signed values. Part
of that earlier discussion is here:

http://linux-nfs.org/pipermail/nfsv4/2007-December/007321.html

While this fixed the immediate problem, it doesn't appear that anything
was ever done to make idmapd continue working when it gets a bogus
upcall.

idmapd uses libevent for its main event handling loop. When idmapd gets
an upcall from knfsd it will service the request and then rearm the
event by calling event_add on the event structure again.

When it hits an error though, it returns in most cases w/o rearming the
event. That prevents idmapd from servicing any further requests from
knfsd.

I've made another change too. If an error is encountered while reading
the channel file, this patch has it close and reopen the file prior to
rearming the event.

I've not been able to test this patch directly, but I have tested a
backport of it to earlier idmapd code and verified that it did prevent
idmapd from hanging when it got a badly formatted upcall from knfsd.

Signed-off-by: Jeff Layton <jlayton@redhat.com>
Signed-off-by: Steve Dickson <steved@redhat.com>
15 years agomount.nfs: Support "-t nfs,vers=4" mounts in the kernel
Chuck Lever [Mon, 14 Sep 2009 17:55:36 +0000 (13:55 -0400)]
mount.nfs: Support "-t nfs,vers=4" mounts in the kernel
    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>
15 years agoIPv6 support for nfsd was finished before some of the other daemons
Jeff Layton [Mon, 14 Sep 2009 17:24:00 +0000 (13:24 -0400)]
IPv6 support for nfsd was finished before some of the other daemons
(mountd and statd in particular). That could be a problem in the future
if someone were to boot a kernel that supports IPv6 serving with an
older nfs-utils. For now, hardcode the IPv6 switch into the off position
until the other daemons are functional.

Signed-off-by: Steve Dickson <steved@redhat.com>
15 years agoGssd blindly caches machine credentials
Lukas Hejtmanek [Thu, 27 Aug 2009 15:42:24 +0000 (11:42 -0400)]
Gssd blindly caches machine credentials

We have a problem with rpc.gssd which blindly caches machine credentials.
E.g., if someone deletes /tmp/krb5cc_machine_REALM, rpc.gss does not create
new one until the old one expires. Also, it has problems with clock skew, if
time goes back and gssd thinks that machine credentials are not expired yet.

The following patch tries to use cache but in case of failure, it tries it
again without cache. Any comments?

Signed-off-by: Lukas Hejtmanek <xhejtman@ics.muni.cz>
Acked-by: Kevin Coffman <kwc@citi.umich.edu>
Signed-off-by: Steve Dickson <steved@redhat.com>
15 years agoCleaned up some warnings in the mount config file code.
Steve Dickson [Thu, 27 Aug 2009 15:31:08 +0000 (11:31 -0400)]
Cleaned up some warnings in the mount config file code.

Signed-off-by: Steve Dickson <steved@redhat.com>
15 years agoDon't give client an empty flavor list
J. Bruce Fields [Mon, 24 Aug 2009 12:20:10 +0000 (08:20 -0400)]
Don't give client an empty flavor list

In the absence of an explicit sec= option on an export, rpc.mountd
is returning a zero-length flavor list to clients in the MOUNT results.

The linux client doesn't seem to mind, but the Solaris client
(reasonably enough) is giving up; the symptom is a "security mode
does not match" error on mount.

We could modify the export-parsing code to ensure the secinfo array
is nonzero.  But I think it's slightly simpler to handle this default
case in the implementation of the MOUNT call.  This is more-or-less the
same thing the kernel does when mountd passes it an export without any
security flavors specified.

Thanks to Tom Haynes for bug report and diagnosis.

Signed-off-by: J. Bruce Fields <bfields@citi.umich.edu>
Signed-off-by: Steve Dickson <steved@redhat.com>
15 years agoCleaned up parsing errors to hopeful be more precise nfs-utils-1-2-1-rc4
Steve Dickson [Mon, 17 Aug 2009 12:50:04 +0000 (08:50 -0400)]
Cleaned up parsing errors to hopeful be more precise

Also had mount_config_init() call xlog_open() so
the program name is set on xlog() calls.

Signed-off-by: Steve Dickson <steved@redhat.com>
15 years agoAdded support for line comments parsing which should
Benny Halevy [Mon, 17 Aug 2009 11:12:03 +0000 (07:12 -0400)]
Added support for line comments parsing which should
help with readability with in the configuration file.

Signed-off-by: Steve Dickson <steved@redhat.com>
15 years agoNow that only the Section names are case-insensitive
Steve Dickson [Fri, 7 Aug 2009 18:34:42 +0000 (14:34 -0400)]
Now that only the Section names are case-insensitive
the mount code has to make sure the the mount options
given to the kernel are in the correct case.

Fixed a couple of warnings on #ifndefs

Signed-off-by: Steve Dickson <steved@redhat.com>
15 years agoThe example nfsmount.conf file
Steve Dickson [Wed, 5 Aug 2009 21:07:21 +0000 (17:07 -0400)]
The example nfsmount.conf file

Signed-off-by: Steve Dickson <steved@redhat.com>
15 years agoThe new nfsmount.conf(5) man page and the update to
Steve Dickson [Sun, 16 Aug 2009 21:05:56 +0000 (17:05 -0400)]
The new nfsmount.conf(5) man page and the update to
the nfs(5) man page

Signed-off-by: Steve Dickson <steved@redhat.com>
15 years agoAdded hooks to the mount command that allow
Steve Dickson [Fri, 7 Aug 2009 18:29:07 +0000 (14:29 -0400)]
Added hooks to the mount command that allow
mount options to be set in a configuration file

Signed-off-by: Steve Dickson <steved@redhat.com>
15 years agoSupport routines used to read sections from the configuration file
Steve Dickson [Wed, 5 Aug 2009 20:17:38 +0000 (16:17 -0400)]
Support routines used to read sections from the configuration file
and parse them into comma separated mount options.

Signed-off-by: Steve Dickson <steved@redhat.com>
15 years agoAdds '--enable-mountconfig' configuration flag that will
Steve Dickson [Wed, 5 Aug 2009 20:10:01 +0000 (16:10 -0400)]
Adds '--enable-mountconfig' configuration flag that will
enabled mount to read from a configuration file.
The default value is disabled (or no)

Adds '--with-mountfile' configuration flag that is used when
mountconf is enabled to define the configuration file name.
The default is /etc/nfsmount.conf.

Signed-off-by: Steve Dickson <steved@redhat.com>
15 years agoAdded an conditional argument to the Section names
Steve Dickson [Wed, 5 Aug 2009 20:02:33 +0000 (16:02 -0400)]
Added an conditional argument to the Section names
with the format being:
   [ Section <"argument"> ]
This will help group similar functioning Section
together. The argument is conditional but must be
surrounded by the '"' characters.

The new conf_get_section() interface can used
to locate a Section by its Section name and/or
argument.

Signed-off-by: Steve Dickson <steved@redhat.com>
15 years agoMake Section names case-insensitive which should
Steve Dickson [Wed, 5 Aug 2009 19:53:36 +0000 (15:53 -0400)]
Make Section names case-insensitive which should
help in locating them resulting in make the config
files a bit less error prone

Signed-off-by: Steve Dickson <steved@redhat.com>
15 years agoTaught conf_parse_line() to ignore spaces in the
Steve Dickson [Mon, 9 Mar 2009 17:55:25 +0000 (13:55 -0400)]
Taught conf_parse_line() to ignore spaces in the
 '[section]' parsing and before the assignment statements

Signed-off-by: Steve Dickson <steved@redhat.com>
15 years agoMove idmapd's configuration file parsing routines into
Steve Dickson [Wed, 5 Aug 2009 19:47:05 +0000 (15:47 -0400)]
Move idmapd's configuration file parsing routines into
the shared libnfs.a library, making them available to\
other daemons and programs.

Signed-off-by: Steve Dickson <steved@redhat.com>
15 years agoAugment nfs4 stats to cover new nfs41 client and
Benny Halevy [Sun, 16 Aug 2009 20:39:07 +0000 (16:39 -0400)]
Augment nfs4 stats to cover new nfs41 client and
server operations' stats.

Signed-off-by: Benny Halevy <bhalevy@panasas.com>
Signed-off-by: Steve Dickson <steved@redhat.com>
15 years agonfs(5): Remove trailing blanks
Chuck Lever [Sun, 16 Aug 2009 20:31:31 +0000 (16:31 -0400)]
nfs(5): Remove trailing blanks

Clean up: eliminate trailing blanks in utils/mount/nfs.man.

Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
Signed-off-by: Steve Dickson <steved@redhat.com>
15 years agonfs(5): Add description of lookupcache mount option
Chuck Lever [Sun, 16 Aug 2009 20:23:36 +0000 (16:23 -0400)]
nfs(5): Add description of lookupcache mount option

See kernel commit 7973c1f1.

Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
Signed-off-by: Steve Dickson <steved@redhat.com>
15 years agoSince
J. Bruce Fields [Sun, 16 Aug 2009 20:18:17 +0000 (16:18 -0400)]
Since

2d77e3a27b7b211f303f.. "Fix bug when both crossmnt and fsid are set"

Subexports automatically created by "crossmnt" get the NFSEXP_FSID flag
cleared.  That flag should also be cleared in the
security-flavor-specific flag fields.  Otherwise the kernel detects the
inconsistent flags and rejects the export.

The symptoms are clients hanging the first time they export a filesystem
mounted under a filesystem that was exported with something like:

/exports *(crossmnt,fsid=0,sec=krb5)

Signed-off-by: J. Bruce Fields <bfields@citi.umich.edu>
Signed-off-by: Steve Dickson <steved@redhat.com>
15 years agoAdd some clarification about the purpose of the program, info about the nfs-utils-1-2-1-rc3
Jeff Layton [Fri, 14 Aug 2009 17:42:22 +0000 (13:42 -0400)]
Add some clarification about the purpose of the program, info about the
--debug and --syslog options, and a note about how it behaves when
TI-RPC support is built in.

Signed-off-by: Steve Dickson <steved@redhat.com>
15 years agonfs-utils: add IPv6 support to nfsd
Jeff Layton [Fri, 14 Aug 2009 17:37:12 +0000 (13:37 -0400)]
nfs-utils: add IPv6 support to nfsd

Add support for handing off IPv6 sockets to the kernel for nfsd. One of
the main goals here is to not change the behavior of options and not to
add any new ones, so this patch attempts to do that.

We also don't want to break anything in the event that someone has an
rpc.nfsd program built with IPv6 capability, but the knfsd doesn't
support IPv6. Ditto for the cases where IPv6 is either not compiled in
or is compiled in and blacklisted.

Signed-off-by: Jeff Layton <jlayton@redhat.com>
Signed-off-by: Steve Dickson <steved@redhat.com>
15 years agoAllow nfssvc_setfds to properly deal with AF_INET6.
Jeff Layton [Fri, 14 Aug 2009 17:33:02 +0000 (13:33 -0400)]
Allow nfssvc_setfds to properly deal with AF_INET6.

IPv6 sockets for knfsd can't be allowed to accept IPv4 packets. Set the
correct option to prevent that from occurring on IPv6 sockets.

Signed-off-by: Jeff Layton <jlayton@redhat.com>
Signed-off-by: Steve Dickson <steved@redhat.com>
15 years agonfs-utils: convert nfssvc_setfds to use getaddrinfo
Jeff Layton [Fri, 14 Aug 2009 17:30:04 +0000 (13:30 -0400)]
nfs-utils: convert nfssvc_setfds to use getaddrinfo

Convert nfssvc_setfds to use getaddrinfo. Change the args that it takes
and fix up nfssvc function to pass in the proper args. The things that
nfssvc has to do to call the new nfssvc_setfds is a little cumbersome
for now, but that will eventually be cleaned up in a later patch.

nfs-utils: break up the nfssvc interface

Currently, the only public interface to the routines in nfssvc.c is
nfssvc(). This means that we do an awful lot of work after closing
stderr that could be done while it's still available.

Add prototypes to the header so that more functions in nfssvc.c can be
called individually, and change the nfsd program to call those routines
individually.

Signed-off-by: Steve Dickson <steved@redhat.com>
15 years agonfs-utils: move check for active knfsd to helper function
Jeff Layton [Sat, 1 Aug 2009 11:31:36 +0000 (07:31 -0400)]
nfs-utils: move check for active knfsd to helper function

nfssvc_setfds checks to see if knfsd is already running. Move this
check to a helper function. Eventually the nfsd code will call this
directly.

Signed-off-by: Jeff Layton <jlayton@redhat.com>
Signed-off-by: Steve Dickson <steved@redhat.com>
15 years agonfs-utils: declare a static common buffer for nfssvc.c routines
Jeff Layton [Sat, 1 Aug 2009 11:21:26 +0000 (07:21 -0400)]
nfs-utils: declare a static common buffer for nfssvc.c routines

Several of the routines in nfssvc.c declare a buffer for strings. Use a
shared static buffer instead to keep it off of the stack. Also, the
buffer allocated in some places is *really* large. BUFSIZ is generally
8k. These routines don't need nearly that much.

Signed-off-by: Jeff Layton <jlayton@redhat.com>
Signed-off-by: Steve Dickson <steved@redhat.com>
15 years agonfs-utils: clean up NFSCTL_* macros for handling protocol bits
Jeff Layton [Sat, 1 Aug 2009 11:20:38 +0000 (07:20 -0400)]
nfs-utils: clean up NFSCTL_* macros for handling protocol bits

They are a little hard to follow currently. Clean them up and add new
macros that can set these bits in addition to the ones that unset them.

Also add a new macro that reports when any valid protocol bit is set.

Signed-off-by: Jeff Layton <jlayton@redhat.com>
Signed-off-by: Steve Dickson <steved@redhat.com>
15 years agonfs-utils: convert rpc.nfsd to use xlog()
Jeff Layton [Sat, 1 Aug 2009 10:27:40 +0000 (06:27 -0400)]
nfs-utils: convert rpc.nfsd to use xlog()

...and add --debug and --syslog options.

With the switch to xlog(), it becomes trivial to add debug messages, so
add an option to turn them on when requested.

Also, rpc.nfsd isn't a proper daemon per-se, so it makes more sense to
log errors to stderr where possible. Usually init scripts take care of
redirecting stderr output to syslog anyway.

For those that don't, add a --syslog option that forces all output to go
to syslog instead. Note that even with this option, errors encountered
during option processing will still go to stderr.

Signed-off-by: Jeff Layton <jlayton@redhat.com>
Signed-off-by: Steve Dickson <steved@redhat.com>
15 years agonfs-utils: clean up option parsing in nfsd.c
Jeff Layton [Sat, 1 Aug 2009 10:26:40 +0000 (06:26 -0400)]
nfs-utils: clean up option parsing in nfsd.c

Minor formatting nits.

Signed-off-by: Jeff Layton <jlayton@redhat.com>
Signed-off-by: Steve Dickson <steved@redhat.com>