summaryrefslogtreecommitdiffstats
Commit message (Collapse)AuthorAgeFilesLines
* exports: turn on pseudo exportsSteve Dickson2010-01-132-0/+9
| | | | | | | | If a pseudo root is not defined in the export file, the v4root_needed global variable will be set, signaling v4root_set() create the dynamic pseudo root. Signed-off-by: Steve Dickson <steved@redhat.com>
* exports: hide pseudo exports from clientsSteve Dickson2010-01-131-0/+4
| | | | | | | Don't show pseudo exports when clients ask to see what is exported via the showmount mount command. Signed-off-by: Steve Dickson <steved@redhat.com>
* mountd: prefer non-V4ROOT exports.J. Bruce Fields2010-01-131-0/+5
| | | | | | | | | | | | | | | | | | | If paths A and A/B are both exported, then we have a choice of exports to return for A (or under A but still above A/B): we could return A itself, or we could return a V4ROOT export leading to B. For now, we will always prefer the non-V4ROOT export, whenever that is an option. This will allow clients to reach A/B as long as adminstrators keep to the rule that the security on a parent permits the union of the access permitted on any descendant. In the future we may support more complicated arrangements. (Note: this can't be avoided by simply not creating v4root exports with the same domain and path, because different domains may have some overlap.) Signed-off-by: J. Bruce Fields <bfields@citi.umich.edu>
* exports: NFSv4 pseudoroot support routinesSteve Dickson2010-01-135-2/+199
| | | | | | | | | 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>
* exports: add new flag for NFSv4 pseudorootSteve Dickson2010-01-131-0/+1
| | | | Signed-off-by: Steve Dickson <steved@redhat.com>
* mountd: don't require mountpoint in crossmnt caseJ. Bruce Fields2010-01-131-2/+1
| | | | | | | | | | | | | | | | 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>
* mountd: further split up lookup_exportJ. Bruce Fields2010-01-131-19/+29
| | | | | | | 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>
* mountd: move export lookup into separate functionJ. Bruce Fields2010-01-131-38/+49
| | | | | | | | | | | 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>
* exports: let kernel decide which flags vary by flavorJ. Bruce Fields2010-01-133-27/+75
| | | | | | | | | 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>
* exports: minor parse_opts cleanupJ. Bruce Fields2010-01-131-5/+13
| | | | | | | 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>
* gssd: on krb5 upcall, have gssd send a more granular error codeJeff Layton2010-01-122-19/+24
| | | | | | | | | | | | | | | | | | | | | 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>
* Added the following files to .gitignoreSteve Dickson2010-01-121-0/+4
| | | | | | | | | 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>
* nfs-utils: add initial tests for statd that run via "make check"Jeff Layton2010-01-123-0/+120
| | | | | | | | | | | | | 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>
* nfs-utils: add statdb_dump utilityJeff Layton2010-01-122-0/+105
| | | | | | | To dump contents of statd's monitor DB. Signed-off-by: Jeff Layton <jlayton@redhat.com> Signed-off-by: Steve Dickson <steved@redhat.com>
* nfs-utils: introduce new statd testing simulatorJeff Layton2010-01-127-2/+574
| | | | | | | | | | | | | | | | | 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>
* nfs-utils: make private cookie to hex conversion a library routineJeff Layton2010-01-122-10/+36
| | | | | Signed-off-by: Jeff Layton <jlayton@redhat.com> Signed-off-by: Steve Dickson <steved@redhat.com>
* statd: Use the new nsm_ file.c calls in rpc.statdChuck Lever2010-01-124-246/+57
| | | | | | | | | | 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>
* statd: Use the new nsm_ file.c calls in sm_notifyChuck Lever2010-01-121-225/+63
| | | | | | | | | | | | 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>
* libnsm.a: Introduce common routines to handle persistent storageChuck Lever2010-01-124-1/+886
| | | | | | | | | | | | | | | | | | | | | | | | | | | | 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>
* showmount: Try the highest mount version then fall back to lower onesSteve Dickson2010-01-111-7/+30
| | | | | | | | | | 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>
* mount.nfs: don't use IPv6 unless IPV6_SUPPORTED is setJeff Layton2010-01-041-1/+1
| | | | | | | | | | | | | | 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>
* libnsm.a: Move the sm_inter XDR pieces to libnsm.aChuck Lever2009-12-236-16/+57
| | | | | | | | | | | | | | | | | | | | | 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>
* libexport.a: fix a long-standing typo in name_cmp()Chuck Lever2009-12-231-1/+1
| | | | | | | | | 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>
* statd: replace smn_{get,set}_port() with the shared equivalentsChuck Lever2009-12-121-33/+7
| | | | | | | | | 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>
* statd: squelch compiler warning in sm-notify.cSteve Dickson2009-12-121-3/+7
| | | | | | | | | | | | | | 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>
* gssd: have gssd deal with scopeid field in upcallJeff Layton2009-12-111-25/+35
| | | | | | | | | | | | | | | | 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>
* NFS man page: update nfs(5) with details about IPv6 supportChuck Lever2009-12-111-32/+72
| | | | | | | | | | | 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>
* mount.nfs: Remove nfs_name_to_address()Chuck Lever2009-12-112-22/+2
| | | | | | | 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>
* mount.nfs: Teach umount.nfs to recognize netids in /etc/mtabChuck Lever2009-12-111-4/+11
| | | | | | | | umount.nfs has to detect the correct address family to use when looking up the server. Signed-off-by: Chuck Lever <chuck.lever@oracle.com> Signed-off-by: Steve Dickson <steved@redhat.com>
* mount.nfs: proto=netid forces address family when resolving server namesChuck Lever2009-12-111-8/+23
| | | | | | | | | | | | 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>
* mount.nfs: Fix sockaddr pointer aliasing in stropts.cChuck Lever2009-12-111-13/+19
| | | | | | | | | | | | | | | | | 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>
* mount.nfs: Add new API for getting protocol family from netidsChuck Lever2009-12-112-0/+65
| | | | | | | | 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>
* mount.nfs: make nfs_lookup() globalChuck Lever2009-12-112-2/+14
| | | | | | | | 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>
* mount.nfs: support netids in v2/v3 version/transport negotiationChuck Lever2009-12-111-29/+22
| | | | | | | | | | | | | 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>
* mount.nfs: support netids in nfs_options2pmap()Chuck Lever2009-12-111-22/+6
| | | | | | | | | | | | | 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>
* libnfs.a: Provide shared helpers for managing netidsChuck Lever2009-12-112-7/+97
| | | | | | | | 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>
* mount.nfs: Retry v4 mounts with v3 on ENOENT errorsNeil Brown2009-12-071-2/+3
| | | | | | | | | 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>
* statd: Replace nsm_log() with xlog() in sm-notify commandChuck Lever2009-11-243-105/+67
| | | | | | | | | | | 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>
* statd: Replace note() with xlog() in rpc.statdChuck Lever2009-11-2415-276/+118
| | | | | | | | | | | 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>
* nfs-utils: NFSv4: fix backgroundingHarshula Jayasuriya2009-11-161-10/+15
| | | | | | | | | | | | | | | 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>
* mount options can be lost when using bg optionHarshula Jayasuriya2009-11-162-2/+8
| | | | | | | | | | | | | | | | | | 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>
* relax insecure option on mountdRobert Gordon2009-11-161-2/+1
| | | | | | | | | | | 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>
* mount.nfs: Assume v2/v3 if mount-related options are presentChuck Lever2009-11-161-0/+12
| | | | | | | | 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>
* gssd: process service= attribute in new upcallOlga Kornievskaia2009-11-163-13/+74
| | | | | | | | | | | | | | | | | | | | | | | | | | | 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>
* gssd: process target= attribute in new upcallOlga Kornievskaia2009-11-161-3/+23
| | | | | | | | | | | | | | | | | | | | | | 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>
* gssd: handle new client upcallOlga Kornievskaia2009-11-163-31/+168
| | | | | | | | | | | | | | | | | | | | 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>
* gssd: print full client directory being handledOlga Kornievskaia2009-11-161-2/+2
| | | | | | | | | 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>
* gssd: add upcall support for callback authenticationOlga Kornievskaia2009-11-164-49/+143
| | | | | | | | | | | | | | 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>
* gssd: refactor update_client_list()Olga Kornievskaia2009-11-162-9/+22
| | | | | | | | | 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>
* This patch adds the krb5 hostbased principal, name which theOlga Kornievskaia2009-11-161-7/+87
| | | | | | | | | | | | | | 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>