Hello community, here is the log from the commit of package nfs-utils for openSUSE:Factory checked in at 2013-11-15 13:29:45 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 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 2013-10-22 10:20:48.000000000 +0200 +++ /work/SRC/openSUSE:Factory/.nfs-utils.new/nfs-utils.changes 2013-11-15 13:29:46.000000000 +0100 @@ -1,0 +2,14 @@ +Wed Nov 6 02:06:45 UTC 2013 - [email protected] + +- nfs-utils.spec: add various systemd macros to make + sure init scripts are registered properly + bnc#845475 +- nfs.int, nfsserver.init: run gssd on server as well + as on client. This is needed for NFSv4.0 callbacks. + bnc#845269 +- exportfs-exit-with-error-code-if-there-was-any-error.patch +- exportfs-report-failure-if-asked-to-unexport-somethi.patch + Return good error code from exportfs. + bnc#846064 + +------------------------------------------------------------------- New: ---- exportfs-exit-with-error-code-if-there-was-any-error.patch exportfs-report-failure-if-asked-to-unexport-somethi.patch ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ nfs-utils.spec ++++++ --- /var/tmp/diff_new_pack.aeq4u2/_old 2013-11-15 13:29:47.000000000 +0100 +++ /var/tmp/diff_new_pack.aeq4u2/_new 2013-11-15 13:29:47.000000000 +0100 @@ -31,6 +31,9 @@ BuildRequires: pkgconfig BuildRequires: sqlite3-devel BuildRequires: tcpd-devel +%if 0%{?suse_version} >= 1210 +BuildRequires: systemd +%endif Url: http://kernel.org/pub/linux/utils/nfs-utils/ Summary: Support Utilities for Kernel nfsd License: GPL-2.0+ @@ -39,6 +42,7 @@ Release: 0 BuildRoot: %{_tmppath}/%{name}-%{version}-build PreReq: %fillup_prereq %insserv_prereq +%{?systemd_requires} BuildRoot: %{_tmppath}/%{name}-%{version}-build Source0: http://kernel.org/pub/linux/utils/nfs-utils/%{version}/nfs-utils-%{version}.tar.bz2 # Download does not work: @@ -73,6 +77,10 @@ Patch7: skip-on-ENOENT.patch # PATCH-FIX-UPSTREAM mountd-fix-bug-affecting-exports-of-dirs-with-64bit-.patch [email protected] Patch8: mountd-fix-bug-affecting-exports-of-dirs-with-64bit-.patch +# PATCH-FIX-UPSTREAM exportfs-exit-with-error-code-if-there-was-any-error.patch [email protected] +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 Suggests: python-base %description @@ -131,6 +139,8 @@ %patch6 -p1 %patch7 -p1 %patch8 -p1 +%patch9 -p1 +%patch10 -p1 cp %{S:6} . %build @@ -194,6 +204,7 @@ %pre -n nfs-client useradd -r -c 'NFS statd daemon' \ -s /sbin/nologin -d /var/lib/nfs -g nogroup statd &> /dev/null || : +%service_add_pre nfs %post -n nfs-client chown statd:nogroup /var/lib/nfs @@ -211,20 +222,27 @@ %{fillup_and_insserv -n nfs nfs} # %set_permissions /sbin/mount.nfs +%service_add_post nfs %preun -n nfs-client %stop_on_removal nfs +%service_del_preun nfs %postun -n nfs-client %restart_on_update nfs [ -x /sbin/mkinitrd_setup ] && mkinitrd_setup %insserv_cleanup +%service_del_postun nfs %verifyscript -n nfs-client %verify_permissions -e /sbin/mount.nfs +%pre -n nfs-kernel-server +%service_add_pre nfsserver + %preun -n nfs-kernel-server %stop_on_removal nfsserver +%service_del_preun nfsserver %post -n nfs-kernel-server ### migrate from /var/lock/subsys @@ -237,10 +255,12 @@ fi ### %{fillup_and_insserv nfsserver} +%service_add_post nfsserver %postun -n nfs-kernel-server %restart_on_update nfsserver %insserv_cleanup +%service_del_postun nfsserver %files -n nfs-client %defattr(-,root,root) ++++++ exportfs-exit-with-error-code-if-there-was-any-error.patch ++++++ >From e10ddcb9d913f7938fc37c72568eea4e8287ade4 Mon Sep 17 00:00:00 2001 From: Neil Brown <[email protected]> Date: Mon, 21 Oct 2013 17:40:55 +1100 Subject: [PATCH] exportfs: exit with error code if there was any error. Reference: bnc#846064 exportfs currently exits with a non-zero error for some errors, but not for others. It does this by having various support routines set the global variable "export_errno". Change this to have 'xlog' set export_errno if an ERROR is reported. That way all errors will be caught. Note that the exit error code is changed from 22 (EINVAL) to the more traditional '1'. Signed-off-by: NeilBrown <[email protected]> --- support/include/exportfs.h | 3 --- support/include/xlog.h | 1 + support/nfs/exports.c | 6 ------ support/nfs/xlog.c | 4 ++++ utils/exportfs/exportfs.c | 2 -- 5 files changed, 5 insertions(+), 11 deletions(-) --- nfs-utils-1.2.8.orig/support/include/exportfs.h +++ nfs-utils-1.2.8/support/include/exportfs.h @@ -179,7 +179,4 @@ struct export_features { struct export_features *get_export_features(void); void fix_pseudoflavor_flags(struct exportent *ep); -/* Record export error. */ -extern int export_errno; - #endif /* EXPORTFS_H */ --- nfs-utils-1.2.8.orig/support/include/xlog.h +++ nfs-utils-1.2.8/support/include/xlog.h @@ -35,6 +35,7 @@ struct xlog_debugfac { int df_fac; }; +extern int export_errno; void xlog_open(char *progname); void xlog_stderr(int on); void xlog_syslog(int on); --- nfs-utils-1.2.8.orig/support/nfs/exports.c +++ nfs-utils-1.2.8/support/nfs/exports.c @@ -47,8 +47,6 @@ struct flav_info flav_map[] = { const int flav_map_size = sizeof(flav_map)/sizeof(flav_map[0]); -int export_errno; - static char *efname = NULL; static XFILE *efp = NULL; static int first; @@ -132,7 +130,6 @@ getexportent(int fromkernel, int fromexp } if (ok < 0) { xlog(L_ERROR, "expected client(options...)"); - export_errno = EINVAL; return NULL; } first = 0; @@ -152,7 +149,6 @@ getexportent(int fromkernel, int fromexp ok = getexport(exp, sizeof(exp)); if (ok < 0) { xlog(L_ERROR, "expected client(options...)"); - export_errno = EINVAL; return NULL; } } @@ -172,7 +168,6 @@ getexportent(int fromkernel, int fromexp *opt++ = '\0'; if (!(sp = strchr(opt, ')')) || sp[1] != '\0') { syntaxerr("bad option list"); - export_errno = EINVAL; return NULL; } *sp = '\0'; @@ -567,7 +562,6 @@ parseopts(char *cp, struct exportent *ep flname, flline, opt); bad_option: free(opt); - export_errno = EINVAL; return -1; } } else if (strncmp(opt, "anongid=", 8) == 0) { --- nfs-utils-1.2.8.orig/support/nfs/xlog.c +++ nfs-utils-1.2.8/support/nfs/xlog.c @@ -38,6 +38,8 @@ static int logmask = 0; /* What will b static char log_name[256]; /* name of this program */ static int log_pid = -1; /* PID of this program */ +int export_errno = 0; + static void xlog_toggle(int sig); static struct xlog_debugfac debugnames[] = { { "general", D_GENERAL, }, @@ -189,6 +191,8 @@ void xlog(int kind, const char* fmt, ...) { va_list args; + if (kind & (L_ERROR|D_GENERAL)) + export_errno = 1; va_start(args, fmt); xlog_backend(kind, fmt, args); --- nfs-utils-1.2.8.orig/utils/exportfs/exportfs.c +++ nfs-utils-1.2.8/utils/exportfs/exportfs.c @@ -103,8 +103,6 @@ main(int argc, char **argv) xlog_stderr(1); xlog_syslog(0); - export_errno = 0; - while ((c = getopt(argc, argv, "afhio:ruv")) != EOF) { switch(c) { case 'a': ++++++ exportfs-report-failure-if-asked-to-unexport-somethi.patch ++++++ >From 609bce0c7efde1875d1477d96fe1f359b6403005 Mon Sep 17 00:00:00 2001 From: Neil Brown <[email protected]> Date: Mon, 28 Oct 2013 14:40:15 +1100 Subject: [PATCH] exportfs: report failure if asked to unexport something not exported. Reference: bnc#846064 Currently if exportfs is asked to unexport something that is not exported it silently succeeds. This is not ideal, particularly for scripting situations. So report an error unless the unexport was successful. Reported-by: Tony Asleson <[email protected]> Signed-off-by: NeilBrown <[email protected]> --- utils/exportfs/exportfs.c | 4 ++++ 1 file changed, 4 insertions(+) --- nfs-utils-1.2.8.orig/utils/exportfs/exportfs.c +++ nfs-utils-1.2.8/utils/exportfs/exportfs.c @@ -345,6 +345,7 @@ unexportfs(char *arg, int verbose) char *path; char *hname = arg; int htype; + int success = 0; if ((path = strchr(arg, ':')) != NULL) *path++ = '\0'; @@ -391,7 +392,10 @@ unexportfs(char *arg, int verbose) #endif exp->m_xtabent = 0; exp->m_mayexport = 0; + success = 1; } + if (!success) + xlog(L_ERROR, "Could not find %s to unexport.\n", arg); freeaddrinfo(ai); } ++++++ nfs.init ++++++ --- /var/tmp/diff_new_pack.aeq4u2/_old 2013-11-15 13:29:47.000000000 +0100 +++ /var/tmp/diff_new_pack.aeq4u2/_new 2013-11-15 13:29:47.000000000 +0100 @@ -31,6 +31,8 @@ IDMAPD_CLIENT_STATE=/run/nfs/nfs-rpc.idmapd IDMAPD_SERVER_STATE=/run/nfs/nfsserver-rpc.idmapd +GSSD_CLIENT_STATE=/run/nfs/nfs-rpc.gssd +GSSD_SERVER_STATE=/run/nfs/nfsserver-rpc.gssd if [ -z "$RPC_PIPEFS_DIR" ]; then RPC_PIPEFS_DIR=/var/lib/nfs/rpc_pipefs @@ -163,7 +165,7 @@ /sbin/modprobe rpcsec_gss_$flavor done mount_rpc_pipefs - startproc $GSSD_BIN $ignore_dns $GSSD_OPTIONS + startproc $GSSD_BIN $ignore_dns $GSSD_OPTIONS -p $RPC_PIPEFS_DIR return $? } @@ -175,7 +177,7 @@ if checkproc $IDMAPD_BIN && test -f $IDMAPD_SERVER_STATE; then killproc -HUP $IDMAPD_BIN else - startproc $IDMAPD_BIN + startproc $IDMAPD_BIN -p $RPC_PIPEFS_DIR return $? fi } @@ -220,6 +222,7 @@ rc_status -v rc_exit } + echo $GSSD_BIN > $GSSD_CLIENT_STATE fi # start idmapd @@ -291,9 +294,12 @@ umount -alt nfs,nfs4 # stop gssd - if checkproc $GSSD_BIN; then - echo -n " gssd" - killproc $GSSD_BIN + if test ! -f $GSSD_SERVER_STATE ; then + if checkproc $GSSD_BIN; then + echo -n " gssd" + killproc $GSSD_BIN + fi + rm -f $GSSD_CLIENT_STATE fi # stop idmapd @@ -314,7 +320,10 @@ fi fi - umount_rpc_pipefs + # umount rpc_pipefs only if not needed by server + if [ ! -f $GSSD_SERVER_STATE -a ! -f $IDMAPD_SERVER_STATE ]; then + umount_rpc_pipefs + fi rc_status -v fi ++++++ nfsserver.init ++++++ --- /var/tmp/diff_new_pack.aeq4u2/_old 2013-11-15 13:29:47.000000000 +0100 +++ /var/tmp/diff_new_pack.aeq4u2/_new 2013-11-15 13:29:47.000000000 +0100 @@ -52,12 +52,15 @@ # XXX: there should be separate init scripts for these really SVCGSSD_BIN=/usr/sbin/rpc.svcgssd +GSSD_BIN=/usr/sbin/rpc.gssd IDMAPD_BIN=/usr/sbin/rpc.idmapd NFSD_BIN=/usr/sbin/rpc.nfsd IDMAPD_CLIENT_STATE=/run/nfs/nfs-rpc.idmapd IDMAPD_SERVER_STATE=/run/nfs/nfsserver-rpc.idmapd NFSD_BIND_MOUNTS=/run/nfs/bind.mounts +GSSD_CLIENT_STATE=/run/nfs/nfs-rpc.gssd +GSSD_SERVER_STATE=/run/nfs/nfsserver-rpc.gssd NEED_SVCGSSD=no NEED_IDMPAPD=no @@ -152,13 +155,26 @@ return $? } +do_start_gssd() { + if ! checkproc $GSSD_BIN; then + case $NFS_GSSD_AVOID_DNS in + [Nn]*) ignore_dns=-D ;; + [Yy]*) ignore_dns= ;; + * ) ignore_dns=-D + esac + mount_rpc_pipefs + startproc $GSSD_BIN $ignore_dns $GSSD_OPTIONS -p $RPC_PIPEFS_DIR + return $? + fi +} + do_start_idmapd() { mount_rpc_pipefs if checkproc $IDMAPD_BIN && test -f $IDMAPD_CLIENT_STATE; then killproc -HUP $IDMAPD_BIN else - startproc $IDMAPD_BIN + startproc $IDMAPD_BIN -p $RPC_PIPEFS_DIR return $? fi } @@ -196,13 +212,19 @@ fi nfs4_bind_mounts - # svcgssd; idmapd + # svcgssd; gssd; idmapd if [ "$NEED_SVCGSSD" = yes ]; then echo -n " svcgssd" do_start_svcgssd || { - rc_status -v + rc_status -v rc_exit } + echo -n " gssd" + do_start_gssd || { + rc_status -v + rc_exit + } + echo $GSSD_BIN > $GSSD_SERVER_STATE fi if [ "$NEED_IDMAPD" = yes ]; then echo -n " idmapd" @@ -277,6 +299,15 @@ rc_status -v rc_exit } + # kill only if not needed by client anymore + if [ ! -f $GSSD_CLIENT_STATE ]; then + echo -n " gssd" + killproc $GSSD_BIN || { + rc_status -v + rc_exit + } + fi + rm -f $GSSD_SERVER_STATE fi # idmap if [ "$NEED_IDMAPD" = yes ]; then @@ -287,11 +318,15 @@ fi rm -f $IDMAPD_SERVER_STATE fi + # umount rpc_pipefs only if not needed by client + if [ ! -f $GSSD_CLIENT_STATE -a ! -f $IDMAPD_CLIENT_STATE ] ; then + umount_rpc_pipefs + fi # umount nfsd fs check_for_nfsdfs if [ "$HAVE_NFSDFS" = "yes" -a -f /proc/fs/nfsd/exports ] ; then - umount /proc/fs/nfsd - rc_status + umount /proc/fs/nfsd + rc_status fi nfs4_unbind_mounts # @@ -337,6 +372,9 @@ echo -n " svcgssd" checkproc $SVCGSSD_BIN rc_status -v + echo -n " gssd" + checkproc $GSSD_BIN + rc_status -v fi if [ "$NEED_IDMAPD" = yes ]; then echo -n " idmapd" -- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
