commit 684cf4a5e0e84a1367690d7ecf4882cbdf4f3228 Author: Prem Karat Date: Thu Jun 30 07:29:20 2011 -0400 mount.nfs: Fix for the bug in v1.2.4 that breaks mount.nfs commit 30ebf047 failed to include these changes that breaks mount.nfs. mount.nfs will continue to work fine with these changes Signed-off-by: Steve Dickson commit 057d2add27d1e05fed3ae7206ee043b6c1fda45a Author: NeilBrown Date: Tue Jun 28 13:24:33 2011 -0400 Do not compile unnecessary files when the libmount code is enable Signed-off-by: Steve Dickson commit 30ebf04700654deddbf5f57d95e84ec69cea8610 Author: Prem Karat Date: Tue Jun 28 11:53:40 2011 -0400 mount.nfs: Don't hard code source and destination Currently souce and destination parameters should be passed as first and second paramter while using mount.nfs. This patch allows them to be passed anywhere while mounting. Current functionality is mount.nfs source destn -o This patch will allow to do this mount.nfs -o source destn or mount.nfs -o source -o destn Signed-off-by: Prem Karat Signed-off-by: Steve Dickson commit b3e190c4adfc9ec47567c968bd000d282d07b05e Author: NeilBrown Date: Tue Jun 28 11:36:31 2011 -0400 mount: improve signal management when locking mtab As mount.nfs can run setuid it must be careful about how the user can interact with in. In particular it needs to ensure it does not respond badly to any signals that the user might be able to generate. This is particularly an issue while updating /etc/mtab (when that is not linked to /proc/mounts). If the user can generate a signal which kills mount.nfs while /etc/mtab is locked, then it will leave the file locked, and could possibly corrupt mtab (particularly if 'ulimit 1' was previously issued). Currently lock_mtab does set some handlers for signals, but not enough. It arranges for every signal up to (but not including) SIGCHLD to cause mount.nfs to unlock mdadm promptly exit ... even if the default behaviour would be to ignore the signal. SIGALRM is handled specially, and signals after SIGCHLD are left with their default behaviour. This includes for example SIGXFSZ which can be generated by the user running "ulimit 1". So: change this so that some signals are left unchanged, SIGALRM is handled as required, and all signals that the user can generate are explicitly ignored. The remainder still cause mount.nfs to print a message, unlock mtab, and exit. Signed-off-by: NeilBrown Signed-off-by: Steve Dickson commit a99b7846e2abec5e26ab6b764b921d79559e0a0f Author: J. Bruce Fields Date: Mon Jun 27 12:31:07 2011 -0400 mountd: move fsidtype-specific code to helpers Now we can move these big switch statements into helper functions. Signed-off-by: J. Bruce Fields Signed-off-by: Steve Dickson commit e6559fd0b7b63f5d152d33d598dc74d78df30ecb Author: J. Bruce Fields Date: Mon Jun 27 12:30:36 2011 -0400 mountd: gather fsid information into one struct A large part of nfsd_fh() is concerned with extracting fsid-type-specific information from the fsid, then matching that information with information from the export list and the filesystem. Moving all that information into one struct will allow some further simplifications. Signed-off-by: J. Bruce Fields Signed-off-by: Steve Dickson commit 13a0a61d037f2cc09e7997a96ce5822b9317883b Author: J. Bruce Fields Date: Mon Jun 27 12:29:51 2011 -0400 mountd: prefer explicit subexports over crossmnt parents If a parent is exported with crossmnt, and if a child is also explicitly exported, then both exports could potentially produce matches in this loop; that isn't a bug. Instead of warning and ignoring the second match we find, we should instead prefer whichever export is deeper in the tree, so that children's options can override those of their parents. Reported-by: Olga Kornievskaia Signed-off-by: J. Bruce Fields Signed-off-by: Steve Dickson commit f8d26c1db9a260597828685c7f62e1b29e78285f Author: Jeff Layton Date: Wed Jun 22 15:52:55 2011 -0400 manpage: add section on character class matches to exports(5) Signed-off-by: Jeff Layton Signed-off-by: Steve Dickson commit cb6676aea5bcfcbeaf868e53177eff51f4efe9a8 Author: James Pearson Date: Wed Jun 22 15:51:47 2011 -0400 nfs-utils: remove possibly false statement from exports.man A very minor change suggested by J. Bruce Fields to remove the statement that exporting to a single host or IP address is the "most common format" - as it probably isn't. Signed-off-by: James Pearson Signed-off-by: Steve Dickson commit 7d71ff8e3825a7f8c2d5c9b5b9344e95e7aa1392 Author: Jeff Layton Date: Wed Jun 22 15:51:02 2011 -0400 manpage: add info about IPv6 configuration to exports(5) The parts of the exports(5) manpage that discuss IP addressing neglect IPv6 configuration. Update to include info on how to export to IPv6 subnets and addresses, and add a line demonstrating that to the EXAMPLE section. Signed-off-by: Jeff Layton Signed-off-by: Steve Dickson commit 545ea1098089d6396d5a70111ec231c4de967faa Author: Benny Halevy Date: Wed Jun 22 15:44:17 2011 -0400 nfsstat: reorder nfs4 stats for 2.6.39 Signed-off-by: Benny Halevy Signed-off-by: Steve Dickson commit c7ce7a4674ad446bee4dd3baf90155ce6b216816 Author: Mi Jinlong Date: Wed Jun 22 15:41:27 2011 -0400 libexport.a: fix using bad index for loop at cltsetup() In cltsetup(), when checking the address, use clp's naddr for index, instead of cltarg's naddr, which it's always zero there. Signed-off-by: Mi Jinlong Signed-off-by: Steve Dickson commit b50ad13298b3e9519a9bdecb8c146c9ecf39cef8 Author: Jeff Layton Date: Wed Jun 22 14:51:38 2011 -0400 nfs: fix host_reliable_addrinfo According to Neil Brown: The point of the word 'reliable' is to check that the name we get really does belong to the host in question - ie that both the forward and reverse maps agree. But the new code doesn't do that check at all. Rather it simply maps the address to a name, then discards the address and maps the name back to a list of addresses and uses that list of addresses as "where the request came from" for permission checking. This bug is exploitable via the following scenario and could allow an attacker access to data that they shouldn't be able to access. Suppose you export a filesystem to some subnet or FQDN and also to a wildcard or netgroup, and I know the details of this (maybe showmount -e tells me) Suppose further that I can get IP packets to your server.. Then I create a reverse mapping for my ipaddress to a domain that I own, say "black.hat.org", and a forward mapping from that domain to my IP address, and one of your IP addresses. Then I try to mount your filesystem. The IP address gets correctly mapped to "black.hat.org" and then mapped to both my IP address and your IP address. Then you search through all of your exports and find that one of the addresses: yours - is allowed to access the filesystem. So you create an export based on the addrinfo you have which allows my IP address the same access as your IP address. Fix this by instead using the forward lookup of the hostname just to verify that the original address is in the list. Then do a numeric lookup using the address and stick the hostname in the ai_canonname. Reviewed-by: NeilBrown Signed-off-by: Jeff Layton Signed-off-by: Steve Dickson commit 7235a2164aabfd8dba1f7e1577047bda45053db0 Author: James Pearson Date: Tue Jun 7 16:25:13 2011 -0400 exports: Clearly Defining Exports Priorities Added some verbiage to the exports(5) man page that clearly explains the precedence around how exports will work with regard to netgroups. Signed-off-by: Steve Dickson commit a36f2437caffb23c68fdc0900544d59198bd52b6 Author: Neil Brown Date: Tue Jun 7 13:18:55 2011 -0400 Document "-n" for svcgssd The svcgssd man page doesn't mention the "-n" flag. Signed-off-by: NeilBrown Signed-off-by: Steve Dickson commit 40aed2c3fb5164195a9975ae7f15ebd4b992839d Author: Pavel Shilovsky Date: Tue Jun 7 13:18:13 2011 -0400 mountd: Fix missing varialble assignment in auth_unix_gid When we get into auth_unix_gid at the second time, groups_len is not 0 and ngroups variable leave as 0. Then we use ngroups in getgrouplist that fails in this case. This patch fixes it. Signed-off-by: Pavel Shilovsky Signed-off-by: Steve Dickson commit 8935933dedcd820c2fb3dddff8b79fd5841dc217 Author: Benny Halevy Date: Mon May 23 08:37:17 2011 -0400 nfsstat: reorder nfs4 stats for 2.6.38 and up match order in 2.6.38, 2.6.39 (-rc3) and development tree while at it, get rid of obsolete ds_write and ds_commit Signed-off-by: Benny Halevy Signed-off-by: Steve Dickson commit 27dcd8a775024160e741cce53e4a402eaac3501d Author: NeilBrown Date: Mon May 23 08:23:51 2011 -0400 supress socket error when address family is not supported From: Suresh Jayaraman It was observed that when ipv6 module was not loaded and cannot be auto-loaded, when starting NFS server, the following error occurs: "rpc.nfsd: unable to create inet6 TCP socket: errno 97 (Address family not supported by protocol)" This is obviously a true message, but does not represent an "error" when ipv6 is not enabled. Rather, it is an expected condition. As such, it can be confusing / misleading / distracting to display it in this scenario. This patch instead of throwing error when a socket call fails with EAFNOSUPPORT, makes it as a NOTICE. Signed-off-by: Suresh Jayaraman Signed-off-by: Neil Brown Signed-off-by: Steve Dickson commit 7a802337bfc92d0b30fe94dbd0fa231990a26161 Author: NeilBrown Date: Mon May 23 08:19:57 2011 -0400 Remove risk of nfs_addmntent corrupting mtab nfs_addmntent is used to append directly to /etc/mtab. If the write partially fail, e.g. due to RLIMIT_FSIZE, truncate back to original size and return an error. See also https://bugzilla.redhat.com/show_bug.cgi?id=697975 (CVE-2011-1749) CVE-2011-1749 nfs-utils: mount.nfs fails to anticipate RLIMIT_FSIZE Signed-off-by: NeilBrown Signed-off-by: Steve Dickson commit 56f537535190d034039570bafd9a0de71b79b8f1 Author: Ben Myers Date: Mon May 23 08:07:00 2011 -0400 exportfs: getexportent interprets -test-client- as default options With commit 1374c3861abdc66f3a1410e26cc85f86760b51dd Neil added a -test-client- export to test the exportability of filesystems when exportfs is run. When using the old cache controls (i.e. /proc/fs/nfsd is not mounted) exportfs will read /proc/fs/nfs/exports to process existing exports and find these test client entries. The dash at the beginning of -test-client- will be cause getexportent to look for default options in the rest of the string, which test-client- will not match: exportfs: /proc/fs/nfs/exports:1: unknown keyword "test-client-(rw" This patch resolves that problem (as Steve suggested) by not processing any default options if we are reading the list of existing exports from the kernel. Default options are converted to individual exports by exportfs so the kernel won't have any regardless. Signed-off-by: Ben Myers Signed-off-by: Steve Dickson commit c8e802c036a3f0fcd4481dae8b3ec09fb71f4118 Author: Jim Rees Date: Wed May 18 12:42:02 2011 -0400 Removed compilation warnings from mountd/cache.c Commit 5604b35a6 introduced a number of missing initializer warnings that were missed. This patch removes those warnings. Signed-off-by: Steve Dickson commit 68f7938c85258a8c54b13169dcdeae61cc1bf286 Author: Steve Dickson Date: Tue Apr 26 13:32:35 2011 -0400 nfsstat: Output headings mislabled The badclnt and badauth headers were reversed when the server side rpc stats (-s -o rpc) were displayed. Signed-off-by: Steve Dickson commit 2e4a7e9b50a641dc8640a5dd911ee4a2f0b2c073 Author: Steve Dickson Date: Tue Apr 19 12:31:30 2011 -0400 rpc.svcgssd: Segmentation fault on error Commit 544ed73d introduced a regression that caused rpc.svcgssd to seg fault on "Wrong principal in request" errors in gss_accept_sec_context() Signed-off-by: Steve Dickson commit 5604b35a61e22930873ffc4e9971002f578e7978 Author: Sean Finney Date: Tue Apr 19 11:04:35 2011 -0400 nfs-utils: Increase the stdio file buffer size for procfs files Previously, when writing to /proc/net/rpc/*/channel, if a cache line were larger than the default buffer size (likely 1024 bytes), mountd and svcgssd would split writes into a number of buffer-sized writes. Each of these writes would get an EINVAL error back from the kernel procfs handle (it expects line-oriented input and does not account for multiple/split writes), and no cache update would occur. When such behavior occurs, NFS clients depending on mountd to finish the cache operation would block/hang, or receive EPERM, depending on the context of the operation. This is likely to happen if a user is a member of a large (~100-200) number of groups. Instead, every fopen() on the procfs files in question is followed by a call to setvbuf(), using a per-file dedicated buffer of RPC_CHAN_BUF_SIZE length. Really, mountd should not be using stdio-style buffered file operations on files in /proc to begin with. A better solution would be to use internally managed buffers and calls to write() instead of these stdio calls, but that would be a more extensive change; so this is proposed as a quick and not-so-dirty fix in the meantime. Signed-off-by: Sean Finney Signed-off-by: Steve Dickson commit 9274e94db85bac04e170414cb8e0f4be271cde90 Author: Sean Finney Date: Tue Apr 19 11:05:47 2011 -0400 mountd: Use a dynamic buffer for storing lists of gid's Previously, in auth_unix_gid, group lists were stored in an array of hard-coded length 100, and in the situation that the group lists for a particular call were too large, the array was swapped with a dynamically allocated/freed buffer. For environments where users are commonly in a large number of groups, this isn't an ideal approach. Instead, use malloc/realloc to grow the list on an as-needed basis. Signed-off-by: Sean Finney Signed-off-by: Steve Dickson commit a99269230a0e77e7bed4fa31c9547f0d61c7f206 Author: Karel Zak Date: Wed Apr 6 12:39:21 2011 -0400 mount: add --enable-libmount-mount This patch allows to link mount.nfs with libmount from util-linux >= v2.19. The new libmount based code is enabled by CONFIG_LIBMOUNT and is stored in mount_libmount.c. The old code is not affected by this change. The libmount does not have officially stable API yet, so the --enable-libmount-mount is marked as experimental in the configure help output. The ./configure option is the same as we use in util-linux to enable support for libmount in mount(8). The addr= (and some other options necessary for remount/umount) are stored to /etc/mtab or to /dev/.mount/utab. The utab file is *private* libmount file. It's possible that some mount options (for example user=) will be moved to kernel, so the utab will not be necessary. About libmount: * supports systems without and with regular /etc/mtab * does not store VFS and FS mount options in userspace * manages user= option and evaluate permissions * parses VFS mount options and generate MS_* flags * parses /etc/{fstab,mtab}, /proc/mounts or /proc/self/mountinfo * long-term goal is to use the same code in all mount. helpers Note, use LIBMOUNT_DEBUG=0xffff mount.nfs foo:/path /path to debug the library. On systems with util-linux v2.19 the findmnt(8) command uses libmount to list all/selected mount points: $ findmnt /path $ findmnt --mtab /path the --mtab appends userspace mount options (e.g. user=) to the output. CC: Chuck Lever Signed-off-by: Karel Zak Signed-off-by: Steve Dickson commit c01e5ca6179b8f5b041605d9bbd75a0f76812d54 Author: Karel Zak Date: Wed Apr 6 11:36:40 2011 -0400 mount: move generic functions to utils.c and network.c Move generic code that could be shared between standard mount.nfs and libmount version to utils.c and network.c. CC: Chuck Lever Signed-off-by: Karel Zak Signed-off-by: Steve Dickson commit d6c1b35c6b40243bfd6fba2591c9f8f2653078c0 Author: Kevin Coffman Date: Wed Apr 6 11:25:03 2011 -0400 nfs-utils: Add support to svcgssd to limit the negotiated enctypes Recent versions of Kerberos libraries negotiate and use an "acceptor subkey". This negotiation does not consider that a service may have limited the encryption keys in its keytab. A patch (http://src.mit.edu/fisheye/changelog/krb5/?cs=24603) has been added to the MIT Kerberos code to allow an application to indicate that it wants to limit the encryption types negotiated. (This functionality has been available on the client/initiator side for a while. The new patch adds this support to the server/acceptor side.) This patch adds support to read a recently added nfsd proc file to determine the encryption types supported by the kernel and calls the function to limit encryption types negotiated for the acceptor subkey. Signed-off-by: Kevin Coffman Signed-off-by: Steve Dickson commit 73840ef610accf4cf667427bc64805377c0d8394 Author: Chuck Lever Date: Wed Apr 6 10:53:57 2011 -0400 exports: add a configurable time-to-live for the kernel cache entries From: Trond Myklebust The fedfs ldap server will specify a ttl for its entries. Signed-off-by: Trond Myklebust This is a refactoring change only. There should be no change in behavior. Original patch had updates to utils/mountd/junctions.c, which no longer exists. These are not included here. Create a macro for the default cache TTL, which is used in several places besides the export cache. Make e_ttl unsigned. Signed-off-by: Chuck Lever Signed-off-by: Steve Dickson commit 38e4c685410885a6d464ddd44eff4fd5e7f8459f Author: Chuck Lever Date: Wed Apr 6 10:49:52 2011 -0400 statd: Remove vestigial "-w" option from man page synopsis The synopsis of rpc.statd in its man page lists "-w" as a valid option. There is currently no support in the source code for a "-w" option. BugLink: https://bugzilla.linux-nfs.org/show_bug.cgi?id=199 Signed-off-by: Chuck Lever Signed-off-by: Steve Dickson commit b57cd77c13831051ad974ae027d96cd88a8d0c59 Author: Chuck Lever Date: Wed Apr 6 10:48:38 2011 -0400 mount.nfs: Don't leak socket in nfs_ca_sockname() Ensure the test socket is always closed before nfs_ca_sockname() returns. Otherwise it's orphaned. BugLink: https://bugzilla.linux-nfs.org/show_bug.cgi?id=197 Signed-off-by: Chuck Lever Signed-off-by: Steve Dickson commit 502eef09d8050ffb87d394397c2780e1ef042d68 Author: Steve Dickson Date: Wed Apr 6 10:46:06 2011 -0400 Removed a warning from v4root.c v4root.c:176:9: warning: variable 'ret' set but not used Signed-off-by: Steve Dickson commit c2fa189a0467c25666f014cf9ff2576a9f54d682 Author: Steve Dickson Date: Wed Apr 6 10:39:10 2011 -0400 Removed a warning from exportfs.c exportfs.c:280:29: warning: 'exp' may be used uninitialized in this function Signed-off-by: Steve Dickson commit b98ae9df8c4904289c9390288325058b24caa423 Author: Steve Dickson Date: Wed Apr 6 10:36:30 2011 -0400 Removed a warning from conffile.c conffile.c:258:19: warning: 'j' may be used uninitialized in this function Signed-off-by: Steve Dickson commit 012e1a4bf2a002e8cd4d5be3478bfa20a91cbfed Author: Masatake YAMATO Date: Mon Mar 7 08:36:19 2011 -0500 Update man pages for /etc/exports.d Man page updates for /etc/exports.d. Signed-off-by: Masatake YAMATO Signed-off-by: Steve Dickson commit c7427b57e2be8ef0d57ad0618d4590c062b130f5 Author: Masatake YAMATO Date: Mon Mar 7 08:18:51 2011 -0500 Read /etc/exports.d/*.export as extra export files This patch adding a capability to read /etc/exports.d/*.exports as extra export files to exportfs. If one wants to add or remove an export entry in a script, currently one may have to use sed or something tool for adding or removing the line for the entry in /etc/exports file. With the patch, adding and removing an entry from a script is much easier. cat< Signed-off-by: Steve Dickson commit edb9b7f2ab9806afb9af31eabeb505fe454c51df Author: Steve Dickson Date: Sat Mar 5 16:17:01 2011 -0500 Cleaned up a warning in rpcdispatch.c rpcdispatch.c:40:20: warning: comparison between signed and unsigned integer expressions Signed-off-by: Steve Dickson commit 930323817b61877d61fb8ef57229013daa2e6091 Author: Steve Dickson Date: Sat Mar 5 16:13:01 2011 -0500 mount: Remove MOUNT_CONFIG warnings The following changes are needed to remove compile warnings when MOUNT_CONFIG is not defined Signed-off-by: Steve Dickson commit 3ef3dc8f1e87ba7a6eaa3c2a6965aff6c80ba414 Author: Chuck Lever Date: Thu Mar 3 17:26:33 2011 -0500 mount: Recognize zero as a valid value for the port= option While zero is not a valid IP port number, zero does represent a valid value for "port=". It means "query rpcbind to discover the actual non-zero port number to use". So the parsing functions that handle "port=" should not flag zero as an invalid value. Signed-off-by: Chuck Lever Signed-off-by: Steve Dickson commit b3a4dbfb61dad59829f5191d727267b2ea45937a Author: Mi Jinlong Date: Wed Feb 9 11:29:42 2011 -0500 Gssd: modify wrong err message at handle_gssd_upcall Modify wrong err message at handle_gssd_upcall when sscanf encryption types fail. Signed-off-by: Mi Jinlong Signed-off-by: Steve Dickson commit 45e4597bd570ed40221f51887cde7d7f096f55e7 Author: Jason Gunthorpe Date: Wed Feb 9 11:27:19 2011 -0500 Support AD style kerberos automatically in rpc.gss An Active Directory KDC will only grant a TGT for UPNs, getting a TGT for SPNs is not possible: $ kinit -k host/ib5@ADS.ORCORP.CA kinit: Client not found in Kerberos database while getting initial credentials The correct thing to do for machine credentials is to get a TGT for the computer UPN $@REALM: $ kinit -k IB5\$ $ klist 12/22/10 11:43:47 12/22/10 21:43:47 krbtgt/ADS.ORCORP.CA@ADS.ORCORP.CA Samba automatically creates /etc/krb5.keytab entry for the computer UPN, this patch makes gssd_refresh_krb5_machine_credential prefer it above the SPNs if it is present. The net result is that nfs client works automatically out of the box if samba has been used to setup kerberos via 'net ads join' 'net ads keytab create' Tested using Windows Server 2003 R2 as the AD server. Signed-off-by: Jason Gunthorpe Signed-off-by: Steve Dickson commit 730f6986f86873513fa021a450eb55ccd0f2fbff Author: Steve Dickson Date: Wed Jan 26 07:49:19 2011 -0500 Fixed segfault in rpc.mountd A unallocated piece of memory, instead of a NULL point, was being used to initialize a ->next point in the mount link list which caused a segfault after a few remote accesses via the showmount command. Signed-off-by: Steve Dickson commit 544ed73d5ab27c1390833d5cf93b9585c151667d Author: Steve Dickson Date: Fri Jan 14 10:12:28 2011 -0500 Improve debugging in svcgssd Added in gss_display_error() which translates the GSS error into the actual GSS macro name. Currently only the translation of these errors are logged. Since those translations are buried deep in the kerberos library code, having the actual GSS macro name makes it easier to follow the code. Moved the nfs4_init_name_mapping() call into main() so if debug is enabled the DNS name and realms will be logged during start up. Signed-off-by: Steve Dickson commit 57be18b9ab08148a1cc9d5af588119885720be8b Author: Mi Jinlong Date: Tue Jan 4 11:16:45 2011 -0500 libnsm.a: modify return value to false from 0 at nsm_drop_privileges() At nsm_drop_privileges(), for improving readability, unify the return value. Signed-off-by: Mi Jinlong Signed-off-by: Steve Dickson commit 5c498280fd9353ded3ea169841079bdae23418e2 Author: Chuck Lever Date: Mon Dec 13 14:50:45 2010 -0500 libnsm.a: sm-notify sometimes ignores monitored hosts Monitored host information is stored in files under /var/lib/nfs. When visiting entries in the monitored hosts directory, libnsm.a examines the value of dirent.d_type to determine if an entry is a regular file. According to readdir(3), the d_type field is not supported by all file system types. My root file system happens to be one where d_type isn't supported. Typical installations that use an ext-derived root file system are not exposed to this issue, but those who use xfs, for instance, are. On such file systems, not only are remote peers not notified of reboots, but the NSM state number is never incremented. A statd warm restart would not re-monitor any hosts that were monitored before the restart. When writing support/nsm/file.c, I copied the use of d_type from the original statd code, so this has likely been an issue for some time. Replace the use of d_type in support/nsm/file.c with a call to lstat(2). It's extra code, but is guaranteed to work on all file system types. Note there is a usage of d_type in gssd. I'll let gssd and rpcpipefs experts decide whether that's worth changing. Fix for: https://bugzilla.linux-nfs.org/show_bug.cgi?id=193 Signed-off-by: Chuck Lever Signed-off-by: Steve Dickson commit 089df7c754d9ebab0a7b804f396626ac95fee2e6 Author: Chuck Lever Date: Mon Dec 13 14:47:42 2010 -0500 libnsm.a: Replace __attribute_noinline__ Replace the __attribute_noinline__ form with __attribute__((__noinline__)). Even though the compiler didn't complain about __attribute_malloc__, also replace those in order to maintain consistent style throughout the source file. Fix for: https://bugzilla.linux-nfs.org/show_bug.cgi?id=194 Reported-by: "Gabor Z. Papp" Signed-off-by: Chuck Lever Signed-off-by: Steve Dickson commit 7869a76207d3f4b3bd4ab57b4a7a8807ac2ff0c6 Author: Chuck Lever Date: Mon Dec 13 14:36:15 2010 -0500 sm-notify: Make use of AI_NUMERICSERV conditional Gabor Papp reports nfs-utils-1.2.3 doesn't build on his system that uses glibc-2.2.5: make[3]: Entering directory `/home/gzp/src/nfs-utils-1.2.3/utils/statd' gcc -DHAVE_CONFIG_H -I. -I../../support/include -D_GNU_SOURCE -Wall -Wextra -Wstrict-prototypes -pipe -g -O2 -MT sm-notify.o -MD -MP -MF .deps/sm-notify.Tpo -c -o sm-notify.o sm-notify.c sm-notify.c: In function 'smn_bind_address': sm-notify.c:247: error: 'AI_NUMERICSERV' undeclared (first use in this function) sm-notify.c:247: error: (Each undeclared identifier is reported only once sm-notify.c:247: error: for each function it appears in.) make[3]: *** [sm-notify.o] Error 1 According to the getaddrinfo(3) man page, AI_NUMERICSERV is available only since glibc 2.3.4. getaddrinfo(3) seems to convert strings containing a number to the right port value without the use of AI_NUMERICSERV, so I think we can survive on older glibc's without it. It will allow admins to specify service names as well as port numbers on those versions. There are uses of AI_NUMERICSERV in gssd and in nfs_svc_create(). The one in nfs_svc_create() is behind HAVE_LIBTIRPC, and the other is a issue only for those who want to deploy Kerberos -- likely in both cases, a more modern glibc will be present. I'm going to leave those two. Fix for: https://bugzilla.linux-nfs.org/show_bug.cgi?id=195 Reported-by: "Gabor Z. Papp" Signed-off-by: Chuck Lever Signed-off-by: Steve Dickson commit e8dbaddc8465dcd07b53f8e80a537703dd0248ca Author: Sid Moore Date: Fri Dec 3 09:19:06 2010 -0500 rpc.mountd: Checking RPC Procedure ID before process it Signed-off-by: Steve Dickson commit 3c6973c595d62dc6452967d50ae8abe69f9f8bad Author: Mi Jinlong Date: Mon Nov 29 10:59:10 2010 -0500 libnfs.a: fix a bug when parse section's arg When parsing section's arg at configure file, the pointer should stop when fetch ']', and give the warning message. Signed-off-by: Steve Dickson commit 86f7be64cafd17d4a3f164603484eaedb4757431 Author: Harshula Jayasuriya Date: Mon Nov 22 11:22:31 2010 -0500 nfs-utils: nfsstat: has_stats() does not function correctly for NFSv4 client stats The NFSv4 client procs/ops in "struct rpc_procinfo nfs4_procedures" is used to generate the NFS client stats interface: ------------------------------------------------------------ net 0 0 0 0 rpc 15 0 0 proc2 18 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 proc3 22 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 2 1 0 proc4 42 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ------------------------------------------------------------ Note, for proc4, the number 42. That is the number of stats that follow on the same line. Currently nfsstat's has_stats() relies on this number to be equal to CLTPROC4_SZ. Unfortunately this is not the case. I have changed has_stats() not to rely on these two values being equal. This should also allow nfsstat to work with different kernel versions that expose a different number of NFS client ops. * Fix has_stats() * Stop print_clnt_list() printing server stats! * Describe the option -3 and -4 completely in the nfsstat manpage. Signed-off-by: Harshula Jayasuriya Signed-off-by: Steve Dickson commit 0868dcccb9a3bf3d022a32ff31311fe371484e77 Author: Steve Dickson Date: Sat Nov 20 15:01:21 2010 -0500 Enable nfsidmap to compile Only enable the compilation of nfsidmap when libnfsidmap support it. Signed-off-by: Steve Dickson commit 6f07548141e710767d425e119d9823691293771d Author: Bryan Schumaker Date: Fri Nov 19 12:01:10 2010 -0500 Add the new nfsidmap program This patch adds the nfsidmap program to nfs-utils. This program is called by the nfs idmapper through request-keys to map between uid / user name and gid / group name. Signed-off-by: Bryan Schumaker Signed-off-by: Trond Myklebust Signed-off-by: Steve Dickson commit 409487978593de13ae36be0ee56d8111ad6b3319 Author: Steve Dickson Date: Mon Nov 22 11:33:37 2010 -0500 Removed a couple warnings from utils/mount/stropts.c stropts.c:740:6: warning: 'ret' may be used uninitialized in this function stropts.c:653:6: warning: 'ret' may be used uninitialized in this function Signed-off-by: Steve Dickson commit f4968a724c1d4162a8e2b9f6a19c460cc56c95f7 Author: Chuck Lever Date: Fri Oct 29 12:56:21 2010 -0400 nfs(5): Document remount behavior It appears that, for a long while, NFS "remount" mounts have completely wiped the existing mount options in /etc/mtab for a given mount point. This is a problem for umount.nfs, since it reads its options out of /etc/mtab to find out how to do the unmount. The mount(8) command provides the NFS mount subcommand with the mount options to perform the remount. There are four cases to consider: 1. Both the device and mount directory are specified on the command line, and the target mount point is in /etc/fstab 2. Only one of the device and mount directory is specified on the command line, and the target mount point is in /etc/fstab 3. Both the device and mount directory are specified on the command line, and the target mount point is not in /etc/fstab 4. Only one of the device and mount directory is specified on the command line, and the target mount point is not in /etc/fstab Currently only case 4 works correctly. In that case, mount(8) provides the correct set of mount options to the mount.nfs subcommand and it can update /etc/mtab correctly. Cases 1 and 3 replace all mount options in /etc/mtab with the options provided on the command line during a remount. Case 2 replaces the mount options in /etc/mtab with a mix of options from /etc/fstab and /etc/mtab. Cases 1 and 3 are historical behavior. Basically this is a formal interface to allow administrators to replace the mount options in /etc/mtab completely, instead of merging in new ones. The present patch documents that behavior in nfs(5), and provides best practice for remounting NFS mount points. There are near-term plans to address case 2 by fixing mount(8) (provided by utils-linux-ng in most distributions). This is a partial fix for: https://bugzilla.linux-nfs.org/show_bug.cgi?id=188 Signed-off-by: Chuck Lever Signed-off-by: Steve Dickson commit 6d1a82b005994f759f2c847c0354413a24643da5 Author: Chuck Lever Date: Thu Oct 28 13:15:22 2010 -0400 nfs(5): Grammar and style fixes Clean up grammar and style issues introduced by recent updates. Also, I'm not certain inappropriate options are always ignored. Signed-off-by: Chuck Lever Signed-off-by: Steve Dickson commit ab2cdb859f738a25e2567a2ec674cfa78a0a175d Author: Chuck Lever Date: Thu Oct 28 13:13:19 2010 -0400 mount.nfs: mnt_freq and mnt_pass are always zero Clean up. No need to pass constant zeros to add_mtab() from its only call site. Ensure that initialization of a struct mntent is consistent in both places that it is done. Signed-off-by: Chuck Lever Signed-off-by: Steve Dickson commit bc4a0c42570d5620cc1bb32428e16b9c9b5f3863 Author: Chuck Lever Date: Thu Oct 28 13:10:48 2010 -0400 mount.nfs: Fix memory leak in nfs_sys_mount() This appears to have been left behind by last year's adjustments to how the extra_opts string is constructed. Signed-off-by: Chuck Lever Signed-off-by: Steve Dickson commit 1f237ac72e6f563908b350e11fd2bb866c003028 Author: Chuck Lever Date: Thu Oct 28 13:09:38 2010 -0400 mount: Fix compiler warning in nfs_parse_retry_option() stropts.c: In function nfs_parse_retry_option: stropts.c:131: warning: conversion to unsigned int from long int may alter its value Make it more clear what the second argument is for, and flag the switch fallthrough case. Signed-off-by: Chuck Lever Signed-off-by: Steve Dickson commit 1ea2c3be33f2eb4630c5cdb78edf2bb670b294ab Author: Chuck Lever Date: Thu Oct 28 12:12:12 2010 -0400 nfs-utils: Remove all uses of AI_ADDRCONFIG It was reported that, if only "lo" is up, mount.nfs 127.0.0.1:/export /mount fails with "Name or service not known". "man 3 getaddrinfo" says this: If hints.ai_flags includes the AI_ADDRCONFIG flag, then IPv4 addresses are returned in the list pointed to by res only if the local system has at least one IPv4 address configured, and IPv6 addresses are only returned if the local system has at least one IPv6 address configured. The man page oversimplifies here. A review of glibc shows that getaddrinfo(3) explicitly ignores loopback addresses when deciding whether an IPv4 or IPv6 address is configured. This behavior around loopback is a problem not just for mount.nfs, but also for RPC daemons that have to start up before a system's networking is fully configured and started. Given the history of other problems with AI_ADDRCONFIG and the unpredictable behavior it introduces, let's just remove it everywhere in nfs-utils. This fix addresses: https://bugzilla.linux-nfs.org/show_bug.cgi?id=191 Signed-off-by: Chuck Lever Signed-off-by: Steve Dickson commit f8e315543b7f1db7f37a4bfe8ede3020cef62868 Author: Jeff Layton Date: Thu Oct 28 09:18:33 2010 -0400 nfs-utils: fix default value for --enable-tirpc We need $enable_tirpc to be a tristate. 'yes' means that someone explicitly requested building with tirpc. 'no' means that it was explicitly disabled. Anything else means that no one specified a value. Fix it by setting the value to a blank string so that the default is properly undefined. Reported-by: Chuck Lever Signed-off-by: Jeff Layton Signed-off-by: Steve Dickson commit c62d756402509ca5d07c1fd4d2e5a9d78dc4171b Author: Steve Dickson Date: Tue Oct 19 15:54:35 2010 -0400 Updated rpc.mountd man page Updated the rpc.mountd man page to no longer reference v3 as the "newer" version and also mentioned v4 as a supported version. Signed-off-by: Steve Dickson commit 79e9079e9af4e5c2aa1d77815df1147b26876eb8 Author: Steve Dickson Date: Tue Oct 19 15:54:04 2010 -0400 Cleared up the sync option in exportfs man page Signed-off-by: Steve Dickson commit 6f228ea26be06572de245aed5496aaa122cca5a8 Author: Steve Dickson Date: Fri Oct 15 17:20:28 2010 -0400 Removed duplicate entries in export man page The man page's paragraphs about "refer=" and "replicas=" each appear twice. Signed-off-by: Steve Dickson commit 849b7072a04975bb5da09245fbcacb0cb754a909 Author: Chuck Lever Date: Thu Oct 14 10:33:25 2010 -0400 mountd: Clear mountd registrations at start up Clear stale MNT registrations before mountd tries to create fresh listeners, to ensure that mountd starts. This is also what statd does. Signed-off-by: Chuck Lever Signed-off-by: Steve Dickson commit 93dcf64cc4a9e67f693aea35c8193428015f4a30 Author: Chuck Lever Date: Wed Oct 13 13:57:52 2010 -0400 behavior as file systems that use the monolithic /sbin/mount command. See the MS_NOMTAB macro in utils-linux-ng/mount/mount.c. Note that mount(8) has MS_USERS and MS_USER in the "nomtab" category as well, but mount.nfs needs to record those values so that unmounting a user-mounted NFS file system can work. While we're here, fix some white space damage in fix_opts_string(). This is a partial fix for: https://bugzilla.linux-nfs.org/show_bug.cgi?id=188 Signed-off-by: Chuck Lever Signed-off-by: Steve Dickson commit dc08c702a6c7f824f317af561f491635ee898a71 Author: Chuck Lever Date: Wed Oct 13 13:55:10 2010 -0400 umount.nfs: Distinguish between nfs4 and nfs mounts Neil Brown reports that umount.nfs is still confused by "-t nfs -o vers=4" mounts. /etc/mtab can be confused. /proc/mounts is authoritative on the fstype of a mount. Have umount.nfs consult it to determine which mechanism to use for unmounting. The code to read /proc/mounts was lifted from the nfsstat command. The code introduced by this patch may look like belt-n-suspenders, but we have two use cases to consider: 1. Old kernels don't support the "vers=4" mount option, so umount.nfs must look for the "nfs4" fstype 2. Upcoming kernels may eliminate support the "nfs4" fstype, so umount.nfs must look for the "vers=4" mount option Thus this logic checks for "nfs4" first then looks for the NFS version setting. Note that we could handle unmounting entirely in the kernel, but that won't help older kernels that have this issue. See: https://bugzilla.linux-nfs.org/show_bug.cgi?id=189 Signed-off-by: Chuck Lever Signed-off-by: Steve Dickson commit 17962b82afb68ca8e6b0d3f432d36c6c7c4980ea Author: Chuck Lever Date: Wed Oct 13 13:01:51 2010 -0400 mount.nfs: mountproto does not support RDMA Clean up. Our client does not support the MNT protocol on RDMA. nfs_mount_protocol() isn't invoked for RDMA mounts (they are shunted off before nfs_options2pmap() is invoked). But in case it ever is, it should return the expected response. Signed-off-by: Chuck Lever Signed-off-by: Steve Dickson commit 73c61fa5cd114fa6eae0e095724ed63aa66a4a6b Author: NeilBrown Date: Wed Oct 13 12:08:41 2010 -0400 gcc complained: client.c: In function 'init_netmask6': client.c:181:1: warning: no return statement in function returning non-void and Suse' build system complained I: Program returns random data in a function E: nfs-utils no-return-in-nonvoid-function client.c:181 when I built without --enable-ipv6 Reviewed-by: Chuck Lever Signed-off-by: NeilBrown Signed-off-by: Steve Dickson commit 7e90281b88c05b01c61152b54a0cf2faec45b09c Author: Chuck Lever Date: Wed Oct 13 12:02:32 2010 -0400 mount.nfs: Eliminate compiler warnings in utils/mount/network.c Clean up. network.c: In function get_socket: network.c:431: warning: dereferencing type-punned pointer might break strict-aliasing rules network.c: In function probe_bothports: network.c:759: warning: dereferencing type-punned pointer might break strict-aliasing rules network.c:762: warning: dereferencing type-punned pointer might break strict-aliasing rules network.c: In function nfs_probe_statd: network.c:775: warning: dereferencing type-punned pointer might break strict-aliasing rules network.c: In function nfs_call_umount: network.c:904: warning: dereferencing type-punned pointer might break strict-aliasing rules network.c: In function nfs_ca_sockname: network.c:1106: warning: dereferencing type-punned pointer might break strict-aliasing rules network.c:1112: warning: dereferencing type-punned pointer might break strict-aliasing rules Signed-off-by: Chuck Lever Signed-off-by: Steve Dickson commit 57385cf87790c0cbdfddfccdde66bd2c8da45923 Author: Chuck Lever Date: Wed Oct 13 11:59:30 2010 -0400 mount.nfs: Eliminate compiler warning in utils/mount/parse_opt.c parse_opt.c: In function po_rightmost: parse_opt.c:517: warning: conversion to int from unsigned int may change the sign of the result "i" contains the function's result value, so it should be defined as the same type as the function's return type. Signed-off-by: Chuck Lever Signed-off-by: Steve Dickson commit 1ee10ef034cbca86da4df271ac4097a948e7ab59 Author: Chuck Lever Date: Wed Oct 13 11:58:27 2010 -0400 mount.nfs: Eliminate compiler warning in utils/mount/nfsumount.c Clean up. nfsumount.c:374: warning: ISO C forbids omitting the middle term of a ?: expression This is also probably harmless, but let's make the code unambiguous. Signed-off-by: Chuck Lever Signed-off-by: Steve Dickson commit e9c97e4f7075e563d7a442ca8298ac56bafba0d5 Author: Chuck Lever Date: Wed Oct 13 11:56:58 2010 -0400 mount.nfs: Eliminate compiler warning in utils/mount/nfsumount.c Clean up. nfsumount.c:265: warning: no previous prototype for nfsumount It's also a good idea if the compiler can ensure that the prototype in nfsmount.h matches the actual function defined in nfsumount.c. Signed-off-by: Chuck Lever Signed-off-by: Steve Dickson commit e2b6d9cbaf20df26dd371a715fce3ae158f37126 Author: Chuck Lever Date: Wed Oct 13 11:54:49 2010 -0400 mount.nfs: Eliminate compiler warnings in utils/mount/mount.c Clean up. mount.c: In function parse_opt: mount.c:354: warning: conversion to size_t from int may change the sign of the result mount.c:354: warning: conversion to int from size_t may change the sign of the result mount.c:359: warning: conversion to size_t from int may change the sign of the result mount.c:359: warning: conversion to int from size_t may change the sign of the result mount.c: In function parse_opts: mount.c:374: warning: conversion to int from size_t may change the sign of the result mount.c:377: warning: conversion to size_t from int may change the sign of the result Character string lengths are usually size_t anyway. We can easily avoid the implicit type cast here. Signed-off-by: Chuck Lever Signed-off-by: Steve Dickson commit 013e8ec9ffb9f28f97e58299719023faf846a029 Author: Chuck Lever Date: Wed Oct 13 11:53:44 2010 -0400 mount.nfs: Eliminate compiler warning in utils/mount/mount.c Clean up. mount.c: At top level: mount.c:324: warning: no previous prototype for ?mount_usage? mount_usage() has no callers outside of utils/mount/mount.c and no prototype is provided in a header file. Make it static. Signed-off-by: Chuck Lever Signed-off-by: Steve Dickson commit 47480475c99335c1203e81662f815b62573c19e8 Author: Chuck Lever Date: Wed Oct 13 11:50:57 2010 -0400 mount.nfs: Eliminate compiler warnings in utils/mount/version.h Clean up. In file included from mount.c:50: version.h: In function linux_version_code: version.h:48: warning: conversion to unsigned int from int may change the sign of the result version.h:48: warning: conversion to unsigned int from int may change the sign of the result version.h:48: warning: conversion to unsigned int from int may change the sign of the result Signed-off-by: Chuck Lever Signed-off-by: Steve Dickson commit 00885013dccbe00f5cc4e19223cf18e85a8e616a Author: Chuck Lever Date: Wed Oct 13 11:44:23 2010 -0400 mount.nfs: Eliminate compiler warning in utils/mount/mount.c Clean up. In file included from mount.c:41: mount_config.h:35: warning: no previous prototype for mount_config_opts Functions defined in include files are usually declared as "static inline," eliminating the need for a forward declaration. While I was there, I also fixed the macro that prevents including mount_config.h multiple times, and fixed some white space damage. Signed-off-by: Chuck Lever Signed-off-by: Steve Dickson commit ffa577350b03ddd421d455a8cd4cff86e3718264 Author: Chuck Lever Date: Wed Oct 13 11:38:22 2010 -0400 mount.nfs: Eliminate compiler warnings Clean up. fstab.c: In function ?lock_mtab?: fstab.c:385: warning: declaration of ?errsv? shadows a previous local fstab.c:367: warning: shadowed declaration is here fstab.c:407: warning: declaration of ?errsv? shadows a previous local fstab.c:367: warning: shadowed declaration is here fstab.c:417: warning: declaration of ?tries? shadows a previous local fstab.c:325: warning: shadowed declaration is here fstab.c:422: warning: declaration of ?errsv? shadows a previous local fstab.c:367: warning: shadowed declaration is here These are probably harmless. Reusing a variable name, however, is a little confusing to follow when reading the code. Signed-off-by: Chuck Lever Signed-off-by: Steve Dickson commit 5fe118b838254023d83424c5010ae73a91ec267d Author: Trond Myklebust Date: Wed Oct 13 11:27:21 2010 -0400 export: Ensure that we free struct exportent->e_uuid Currently, the exportent->e_uuid is initialised in support/nfs/exports.c:parseopts(), but it is never freed. Also ensure that exportent->e_uuid is duplicated correctly in dupexportent(). Adjusted to account for the new export_free() helper. Also, e_uuid points to memory that is always allocated with strdup(3), not with xstrdup(). Thus it must be freed via free(3) and not via xfree(). Signed-off-by: Trond Myklebust Signed-off-by: Chuck Lever Signed-off-by: Steve Dickson commit 656028f9925f5817c5a37565d27159973db84ec3 Author: Chuck Lever Date: Wed Oct 13 11:22:07 2010 -0400 libnfs.a: Allow multiple RPC listeners to share listener port number Normally, when "-p" is not specified on the mountd command line, the TI-RPC library chooses random port numbers for each listener. If a port number _is_ specified on the command line, all the listeners will get the same port number, so SO_REUSEADDR needs to be set on each socket. Thus we can't let TI-RPC create the listener sockets for us in this case; we must create them ourselves and then set SO_REUSEADDR (and other socket options) by hand. Different versions of the same RPC program have to share the same listener and SVCXPRT, so we have to cache xprts we create, and re-use them when additional requests for registration come from the application. Though it doesn't look like it, this fix was "copied" from the legacy rpc_init() function. It's more complicated for TI-RPC, of course, since a TI-RPC application can set up listeners with a nearly arbitrary number of address families and socket types, not just the two listeners that legacy RPC applications can set up (one for AF_INET UDP and one for AF_INET TCP). See: https://bugzilla.linux-nfs.org/show_bug.cgi?id=190 Signed-off-by: Chuck Lever Signed-off-by: Steve Dickson commit 1296be71ebae4c0d7da61cc1077d97562d3bc549 Author: Steve Dickson Date: Wed Oct 13 10:17:58 2010 -0400 nfs-utils: Fixed typo in NFS man page Chuck pointed out there was a grammar typo in addition to the spelling typo. Here is a revised version of the patch. Signed-off-by: Jim Rees Signed-off-by: Steve Dickson commit 9afbdbad4436df6f7a5a501c6e4db04c3a5bbb08 Author: Steve Dickson Date: Wed Oct 13 10:15:12 2010 -0400 Fix style nits in atomicio.c Signed-off-by: Jim Rees Signed-off-by: Steve Dickson commit c117b7a1f29db65d139824ba5bab2a58bf5609e2 Author: Steve Dickson Date: Wed Oct 13 10:09:53 2010 -0400 nfs-utils: Move common code into support There are several source files and headers present in the ./utils/idmapd directory which are also usable in a doimapd daemon. Because of this we move that support into the support directory such that it can be shared by both daemons. Signed-off-by: Jim Rees Signed-off-by: Steve Dickson commit 8c217b9623c8304608196aeb2f7360abfdf987c8 Author: Suresh Jayaraman Date: Wed Sep 29 07:14:14 2010 -0400 The kernel 2.6.37 has a add new mount option: local_lock. Document the new option in the nfs(5) man page. Signed-off-by: Suresh Jayaraman Signed-off-by: Steve Dickson commit 554df6bc8456c6971c1c597f70d3b9131e4e5e11 Author: Steve Dickson Date: Tue Sep 28 08:24:16 2010 -0400 Revert "nfs-iostat.py: don't wait for an extra interval when given a count" This reverts commit 837796686ad8f9178c7b6855ada728a53ae511e3.