Hello community, here is the log from the commit of package nfs-utils for openSUSE:Factory checked in at 2014-03-20 06:53:35 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/nfs-utils (Old) and /work/SRC/openSUSE:Factory/.nfs-utils.new (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "nfs-utils" Changes: -------- --- /work/SRC/openSUSE:Factory/nfs-utils/nfs-utils.changes 2014-02-19 18:55:01.000000000 +0100 +++ /work/SRC/openSUSE:Factory/.nfs-utils.new/nfs-utils.changes 2014-03-20 06:53:37.000000000 +0100 @@ -1,0 +2,19 @@ +Tue Mar 11 00:11:18 UTC 2014 - [email protected] + +- properly rename patches: + udp-fallback.fix -> udp-fallback-fix.patch + fedfs-lib-name -> fedfs-lib-name.patch + gssd-mount-hang-fix -> gssd-mount-hang-fix.patch + +------------------------------------------------------------------- +Sun Mar 9 23:00:19 UTC 2014 - [email protected] + +- Remove "Start-Before: autofs" from nfs.init. This turns + out not to be needed, and is out of place. If anything, + autofs should declare a dependency on nfs. (bnc#861489) +- fedfs-lib-name, nfs-utils.spec + Build with fedfs support so that if fedfs-utils is also + installed, federated-filesystems can be exported. + (FATE#313522) + +------------------------------------------------------------------- Old: ---- gssd-mount-hang-fix udp-fallback.fix New: ---- fedfs-lib-name.patch gssd-mount-hang-fix.patch udp-fallback-fix.patch ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ nfs-utils.spec ++++++ --- /var/tmp/diff_new_pack.ol6mKU/_old 2014-03-20 06:53:38.000000000 +0100 +++ /var/tmp/diff_new_pack.ol6mKU/_new 2014-03-20 06:53:38.000000000 +0100 @@ -34,6 +34,9 @@ %if 0%{?suse_version} >= 1210 BuildRequires: systemd %endif +%if 0%{?suse_version} >= 1310 +BuildRequires: fedfs-utils-devel +%endif Url: http://kernel.org/pub/linux/utils/nfs-utils/ Summary: Support Utilities for Kernel nfsd License: GPL-2.0+ @@ -81,10 +84,13 @@ Patch9: exportfs-exit-with-error-code-if-there-was-any-error.patch # PATCH-FIX_UPSTREAM exportfs-report-failure-if-asked-to-unexport-somethi.patch [email protected] Patch10: exportfs-report-failure-if-asked-to-unexport-somethi.patch -# PATCH-FIX-UPSTREAM gssd-mount-hang-fix bnc#833543 [email protected] -Patch11: gssd-mount-hang-fix -# PATCH-FIX-UPSTREAM udp-fallback.fix bnc#863749 [email protected] -Patch12: udp-fallback.fix +# PATCH-FIX-UPSTREAM gssd-mount-hang-fix.patch bnc#833543 [email protected] +Patch11: gssd-mount-hang-fix.patch +# PATCH-FIX-UPSTREAM udp-fallback-fix.patch bnc#863749 [email protected] +Patch12: udp-fallback-fix.patch +# PATCH-FIX-UPSTREAM fedfs-lib-name.patch [email protected] +Patch13: fedfs-lib-name.patch + Suggests: python-base %description @@ -148,6 +154,7 @@ %patch10 -p1 %patch11 -p1 %patch12 -p1 +%patch13 -p1 cp %{S:6} . %build ++++++ fedfs-lib-name.patch ++++++ >From 878972d60cb55f2bc6e04a0937f81407fbc308fe Mon Sep 17 00:00:00 2001 From: Neil Brown <[email protected]> Date: Wed, 5 Mar 2014 14:55:46 +1100 Subject: [PATCH] mountd: use SONAME fir libnfsjunct when loading with dlopen. The standard for loading shared libraries is to identify them by their "soname" (Which "objdump -x $BINARY | grep SONAME" will report). However mountd currently loads using the "linker name" which should only be used when building new code. Future releases of fedfs-utils will define the soname in the include file, so if that is defined, use it. If not, use the soname of the first version: "libnfsjunct.so.0". This is a slight behavioural change. However all distros known to package fedfs-utils will install "libnfsjunct.so.0" whenever they install the old name of "libnfsjunct.so", and "make install" will install both. So it should not be a noticeable change. Also only test the JP_API_VERSION if it is defined. As the version is embedded in the soname, a secondary test is not needed. Cc: Chuck Lever <[email protected]> Signed-off-by: NeilBrown <[email protected]> --- utils/mountd/cache.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) --- nfs-utils-1.2.8.orig/utils/mountd/cache.c +++ nfs-utils-1.2.8/utils/mountd/cache.c @@ -1055,12 +1055,13 @@ static struct exportent *invoke_junction __func__, error); return NULL; } +#ifdef JP_API_VERSION if (ops->jp_api_version != JP_API_VERSION) { xlog(D_GENERAL, "%s: unrecognized junction API version: %u", __func__, ops->jp_api_version); return NULL; } - +#endif status = ops->jp_init(false); if (status != JP_OK) { xlog(D_GENERAL, "%s: failed to resolve %s: %s", @@ -1107,7 +1108,11 @@ static struct exportent *lookup_junction struct link_map *map; void *handle; - handle = dlopen("libnfsjunct.so", RTLD_NOW); +#ifdef JP_NFSPLUGIN_SONAME + handle = dlopen(JP_NFSPLUGIN_SONAME, RTLD_NOW); +#else + handle = dlopen("libnfsjunct.so.0", RTLD_NOW); +#endif if (handle == NULL) { xlog(D_GENERAL, "%s: dlopen: %s", __func__, dlerror()); return NULL; ++++++ gssd-mount-hang-fix.patch ++++++ From: Neil Brown <[email protected]> Date: Thu, 14 Nov 2013 11:50:38 +1100 Subject: [PATCH] gssd: always reply to rpc-pipe requests from kernel. References: bnc#833543 Sometimes gssd will open a new rpc-pipe but never read requests from it or reply to them. This causes the kernel to wait forever for a reply. In particular, if a filesystem is mounted by IP, and the IP has no hostname recorded in /etc/hosts or DNS, then gssd will not listen to requests and the mount will hang indefinitely. The comment in process_clnt_dir() for the "fail_keep_client:" branch suggests that it is for the case where we couldn't open some subdirectories. However it is currently also taken if reverse DNS lookup fails (as well as some other lookup failures). Those failures should not be treated the same as failure-to-open directories. So this patch causes a failure from read_service_info() to *not* be reported by process_clnt_dir_files. This ensures that insert_clnt_poll() will be called and requests will be handled. In handle_gssd_upcall, the current error path (taken when the mech is not "krb5") does not reply to the upcall. This is wrong. A reply is always appropriate. The only replies which aren't treated as transient errors are EACCES and EKEYEXPIRED, so we return the former. If read_service_info() fails then ->servicename will be NULL which will cause process_krb5_upcall() (quite reasonably) to become confused. So in that case we don't even try to process the up-call but just reply with EACCES. As clp->servicename==NULL is no longer treated as fatal, it is not appropraite to use it to test if read_service_info() has been already called on a client. Instread test clp->prog. Finally, the error path of read_service_info() will close 'fd' if it isn't -1, so when we close it, we should set fd to -1. Signed-off-by: NeilBrown <[email protected]> diff --git a/utils/gssd/gssd_proc.c b/utils/gssd/gssd_proc.c index b48d1637cd36..00b4bc779b7c 100644 --- a/utils/gssd/gssd_proc.c +++ b/utils/gssd/gssd_proc.c @@ -256,6 +256,7 @@ read_service_info(char *info_file_name, char **servicename, char **servername, if ((nbytes = read(fd, buf, INFOBUFLEN)) == -1) goto fail; close(fd); + fd = -1; buf[nbytes] = '\0'; numfields = sscanf(buf,"RPC server: %127s\n" @@ -403,11 +404,10 @@ process_clnt_dir_files(struct clnt_info * clp) return -1; snprintf(info_file_name, sizeof(info_file_name), "%s/info", clp->dirname); - if ((clp->servicename == NULL) && - read_service_info(info_file_name, &clp->servicename, - &clp->servername, &clp->prog, &clp->vers, - &clp->protocol, (struct sockaddr *) &clp->addr)) - return -1; + if (clp->prog == 0) + read_service_info(info_file_name, &clp->servicename, + &clp->servername, &clp->prog, &clp->vers, + &clp->protocol, (struct sockaddr *) &clp->addr); return 0; } @@ -1320,11 +1320,14 @@ handle_gssd_upcall(struct clnt_info *clp) } } - if (strcmp(mech, "krb5") == 0) + if (strcmp(mech, "krb5") == 0 && clp->servername) process_krb5_upcall(clp, uid, clp->gssd_fd, target, service); - else - printerr(0, "WARNING: handle_gssd_upcall: " - "received unknown gss mech '%s'\n", mech); + else { + if (clp->servername) + printerr(0, "WARNING: handle_gssd_upcall: " + "received unknown gss mech '%s'\n", mech); + do_error_downcall(clp->gssd_fd, uid, -EACCES); + } out: free(lbuf); ++++++ nfs.init ++++++ --- /var/tmp/diff_new_pack.ol6mKU/_old 2014-03-20 06:53:39.000000000 +0100 +++ /var/tmp/diff_new_pack.ol6mKU/_new 2014-03-20 06:53:39.000000000 +0100 @@ -15,7 +15,6 @@ # Provides: nfs # Required-Start: $network $portmap # Required-Stop: $network $portmap -# X-Start-Before: +autofs # Default-Start: 3 5 # Default-Stop: 0 1 2 6 # Short-Description: NFS client services ++++++ udp-fallback-fix.patch ++++++ From: NeilBrown <[email protected]> Subject: Fix fallback from tcp to udp References: bnc#863749 Protocol negotiation in mount.nfs does not correctly negotiate with a server which only support NFSv3 and UDP. When mount.nfs attempts an NFSv4 mount and fails with ECONNREFUSED it does not fall back to NFSv3, as this is not recognised as a "does not support NFSv4" error. However ECONNREFUSED is a clear indication that the server doesn't support TCP, and ipso facto does not support NFSv4. So ECONNREFUSED should trigger a fallback from v4 to v2/3. Once we allow that error, NFSv3 is attempted and mount.nfs talks to rpcbind and discovers that UDP should be used for v3 and the mount succeeds. Signed-off-by: NeilBrown <[email protected]> Reported-by: Carsten Ziepke <[email protected]> --- utils/mount/stropts.c | 3 +++ 1 file changed, 3 insertions(+) --- nfs-utils-1.2.8.orig/utils/mount/stropts.c +++ nfs-utils-1.2.8/utils/mount/stropts.c @@ -807,6 +807,9 @@ static int nfs_autonegotiate(struct nfsm /* Linux servers prior to 2.6.25 may return * EPERM when NFS version 4 is not supported. */ goto fall_back; + case ECONNREFUSED: + /* UDP-Only server won't support v4 */ + goto fall_back; default: return result; } -- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
