--- /dev/null
+--- utils/gssd/krb5_util.c 2008-10-17 14:20:09.000000000 +0000
++++ utils/gssd/krb5_util.c 2008-11-22 13:52:42.000000000 +0000
+@@ -115,9 +115,7 @@
+ #include <errno.h>
+ #include <time.h>
+ #include <gssapi/gssapi.h>
+-#ifdef USE_PRIVATE_KRB5_FUNCTIONS
+ #include <gssapi/gssapi_krb5.h>
+-#endif
+ #include <krb5.h>
+ #include <rpc/auth_gss.h>
+
+@@ -927,9 +927,37 @@
+ {
+ krb5_error_code ret;
+ krb5_creds creds;
+- krb5_cc_cursor cur;
+ int found = 0;
+
++#ifdef HAVE_HEIMDAL
++ krb5_creds pattern;
++ krb5_const_realm client_realm;
++
++ krb5_cc_clear_mcred(&pattern);
++
++ client_realm = krb5_principal_get_realm (context, principal);
++
++ ret = krb5_make_principal (context, &pattern.server,
++ client_realm, KRB5_TGS_NAME, client_realm,
++ NULL);
++ if (ret)
++ krb5_err (context, 1, ret, "krb5_make_principal");
++ pattern.client = principal;
++
++ ret = krb5_cc_retrieve_cred (context, ccache, 0, &pattern, &creds);
++ krb5_free_principal (context, pattern.server);
++ if (ret) {
++ if (ret == KRB5_CC_END)
++ return 1;
++ krb5_err (context, 1, ret, "krb5_cc_retrieve_cred");
++ }
++
++ found = creds.times.endtime > time(NULL);
++
++ krb5_free_cred_contents (context, &creds);
++#else
++ krb5_cc_cursor cur;
++
+ ret = krb5_cc_start_seq_get(context, ccache, &cur);
+ if (ret)
+ return 0;
+@@ -949,6 +977,7 @@
+ krb5_free_cred_contents(context, &creds);
+ }
+ krb5_cc_end_seq_get(context, ccache, &cur);
++#endif
+
+ return found;
+ }
+@@ -995,6 +1024,9 @@
+ }
+ krb5_free_principal(context, principal);
+ err_princ:
++#ifdef HAVE_HEIMDAL
++#define KRB5_TC_OPENCLOSE 0x00000001
++#endif
+ krb5_cc_set_flags(context, ccache, KRB5_TC_OPENCLOSE);
+ krb5_cc_close(context, ccache);
+ err_cache:
--- /dev/null
+--- nfs-utils-1.0.8/Makefile.am~ 2006-03-28 02:53:30.000000000 +0200
++++ nfs-utils-1.0.8/Makefile.am 2006-05-08 13:24:32.000000000 +0200
+@@ -46,8 +46,6 @@
+ touch $(DESTDIR)$(statedir)/rmtab; chmod 644 $(DESTDIR)$(statedir)/rmtab
+ mkdir -p $(DESTDIR)$(statedir)/sm $(DESTDIR)$(statedir)/sm.bak
+ touch $(DESTDIR)$(statedir)/state
+- chmod go-rwx $(DESTDIR)$(statedir)/sm $(DESTDIR)$(statedir)/sm.bak $(DESTDIR)$(statedir)/state
+- -chown $(statduser) $(DESTDIR)$(statedir)/sm $(DESTDIR)$(statedir)/sm.bak $(DESTDIR)$(statedir)/state
+
+ uninstall-hook:
+ rm $(DESTDIR)$(statedir)/xtab
--- /dev/null
+diff -NaurwB nfs-utils-1.1.2.orig/aclocal/kerberos5.m4 nfs-utils-1.1.2/aclocal/kerberos5.m4
+--- nfs-utils-1.1.2.orig/aclocal/kerberos5.m4 2008-03-14 16:46:29.000000000 +0100
++++ nfs-utils-1.1.2/aclocal/kerberos5.m4 2008-06-12 17:13:51.000000000 +0200
+@@ -1,112 +1,48 @@
+-dnl Checks for Kerberos
+-dnl NOTE: while we intend to do generic gss-api, currently we
+-dnl have a requirement to get an initial Kerberos machine
+-dnl credential. Thus, the requirement for Kerberos.
+-dnl The Kerberos gssapi library will be dynamically loaded?
+ AC_DEFUN([AC_KERBEROS_V5],[
++ K5CONFIG="krb5-config"
+ AC_MSG_CHECKING(for Kerberos v5)
+- AC_ARG_WITH(krb5,
+- [AC_HELP_STRING([--with-krb5=DIR], [use Kerberos v5 installation in DIR])],
++ AC_ARG_WITH(krb5-config,
++ [AC_HELP_STRING([--with-krb5-config=PATH], [Full Path to krb5-config.])],
+ [ case "$withval" in
+ yes|no)
+- krb5_with=""
++ K5CONFIG="krb5-config"
+ ;;
+ *)
+- krb5_with="$withval"
++ K5CONFIG="$withval"
+ ;;
+ esac ]
+ )
+
+- for dir in $krb5_with /usr /usr/kerberos /usr/local /usr/local/krb5 \
+- /usr/krb5 /usr/heimdal /usr/local/heimdal /usr/athena ; do
+- dnl This ugly hack brought on by the split installation of
+- dnl MIT Kerberos on Fedora Core 1
+- K5CONFIG=""
+- if test -f $dir/bin/krb5-config; then
+- K5CONFIG=$dir/bin/krb5-config
+- elif test -f "/usr/kerberos/bin/krb5-config"; then
+- K5CONFIG="/usr/kerberos/bin/krb5-config"
+- elif test -f "/usr/lib/mit/bin/krb5-config"; then
+- K5CONFIG="/usr/lib/mit/bin/krb5-config"
+- fi
+ if test "$K5CONFIG" != ""; then
+ KRBCFLAGS=`$K5CONFIG --cflags`
+ KRBLIBS=`$K5CONFIG --libs gssapi`
+- K5VERS=`$K5CONFIG --version | head -n 1 | awk '{split($(4),v,"."); if (v@<:@"3"@:>@ == "") v@<:@"3"@:>@ = "0"; print v@<:@"1"@:>@v@<:@"2"@:>@v@<:@"3"@:>@ }'`
+- AC_DEFINE_UNQUOTED(KRB5_VERSION, $K5VERS, [Define this as the Kerberos version number])
+- if test -f $dir/include/gssapi/gssapi_krb5.h -a \
+- \( -f $dir/lib/libgssapi_krb5.a -o \
+- -f $dir/lib64/libgssapi_krb5.a -o \
+- -f $dir/lib64/libgssapi_krb5.so -o \
+- -f $dir/lib/libgssapi_krb5.so \) ; then
++ if $K5CONFIG --version | grep -q -e heimdal; then
++ K5VERS=`$K5CONFIG --version | head -n 1 | cut -f2 -d ' ' | tr -d '.'`
++ AC_DEFINE(HAVE_HEIMDAL, 1, [Define this if you have Heimdal Kerberos libraries])
++ gssapi_lib=gssapi
++ KRBIMPL="heimdal"
++ elif $K5CONFIG --vendor | grep -q -e Massachusetts; then
++ K5VERS=`$K5CONFIG --version | head -n 1 | cut -f4 -d ' ' | tr -d '.'`
+ AC_DEFINE(HAVE_KRB5, 1, [Define this if you have MIT Kerberos libraries])
+- KRBDIR="$dir"
+- dnl If we are using MIT K5 1.3.1 and before, we *MUST* use the
+- dnl private function (gss_krb5_ccache_name) to get correct
+- dnl behavior of changing the ccache used by gssapi.
+- dnl Starting in 1.3.2, we *DO NOT* want to use
+- dnl gss_krb5_ccache_name, instead we want to set KRB5CCNAME
+- dnl to get gssapi to use a different ccache
+ if test $K5VERS -le 131; then
+ AC_DEFINE(USE_GSS_KRB5_CCACHE_NAME, 1, [Define this if the private function, gss_krb5_cache_name, must be used to tell the Kerberos library which credentials cache to use. Otherwise, this is done by setting the KRB5CCNAME environment variable])
+ fi
+ gssapi_lib=gssapi_krb5
+- break
+- dnl The following ugly hack brought on by the split installation
+- dnl of Heimdal Kerberos on SuSe
+- elif test \( -f $dir/include/heim_err.h -o\
+- -f $dir/include/heimdal/heim_err.h \) -a \
+- -f $dir/lib/libroken.a; then
+- AC_DEFINE(HAVE_HEIMDAL, 1, [Define this if you have Heimdal Kerberos libraries])
+- KRBDIR="$dir"
+- gssapi_lib=gssapi
+- break
+- fi
+- fi
+- done
+- dnl We didn't find a usable Kerberos environment
+- if test "x$KRBDIR" = "x"; then
+- if test "x$krb5_with" = "x"; then
+- AC_MSG_ERROR(Kerberos v5 with GSS support not found: consider --disable-gss or --with-krb5=)
++ KRBIMPL="mit-krb5"
+ else
+- AC_MSG_ERROR(Kerberos v5 with GSS support not found at $krb5_with)
+- fi
++ AC_MSG_ERROR(Unknown Kerberos 5 Implementation. Is neither heimdal or mit-krb5.)
++ KRBIMPL="unknown"
+ fi
+- AC_MSG_RESULT($KRBDIR)
+-
+- dnl Check if -rpath=$(KRBDIR)/lib is needed
+- echo "The current KRBDIR is $KRBDIR"
+- if test "$KRBDIR/lib" = "/lib" -o "$KRBDIR/lib" = "/usr/lib" \
+- -o "$KRBDIR/lib" = "//lib" -o "$KRBDIR/lib" = "/usr//lib" ; then
+- KRBLDFLAGS="";
+- elif /sbin/ldconfig -p | grep > /dev/null "=> $KRBDIR/lib/"; then
+- KRBLDFLAGS="";
+- else
+- KRBLDFLAGS="-Wl,-rpath=$KRBDIR/lib"
++ AC_DEFINE_UNQUOTED(KRB5_VERSION, $K5VERS, [Define this as the Kerberos version number])
+ fi
++ AC_MSG_RESULT($KRBIMPL)
+
+- dnl Now check for functions within gssapi library
+- AC_CHECK_LIB($gssapi_lib, gss_krb5_export_lucid_sec_context,
+- AC_DEFINE(HAVE_LUCID_CONTEXT_SUPPORT, 1, [Define this if the Kerberos GSS library supports gss_krb5_export_lucid_sec_context]), ,$KRBLIBS)
+- AC_CHECK_LIB($gssapi_lib, gss_krb5_set_allowable_enctypes,
+- AC_DEFINE(HAVE_SET_ALLOWABLE_ENCTYPES, 1, [Define this if the Kerberos GSS library supports gss_krb5_set_allowable_enctypes]), ,$KRBLIBS)
+- AC_CHECK_LIB($gssapi_lib, gss_krb5_ccache_name,
+- AC_DEFINE(HAVE_GSS_KRB5_CCACHE_NAME, 1, [Define this if the Kerberos GSS library supports gss_krb5_ccache_name]), ,$KRBLIBS)
+-
+- dnl Check for newer error message facility
+- AC_CHECK_LIB($gssapi_lib, krb5_get_error_message,
+- AC_DEFINE(HAVE_KRB5_GET_ERROR_MESSAGE, 1, [Define this if the function krb5_get_error_message is available]), ,$KRBLIBS)
++ AC_CHECK_LIB($gssapi_lib, gss_krb5_export_lucid_sec_context, AC_DEFINE(HAVE_LUCID_CONTEXT_SUPPORT, 1, [Define this if the Kerberos GSS library supports gss_krb5_export_lucid_sec_context]), ,$KRBLIBS)
++ AC_CHECK_LIB($gssapi_lib, gss_krb5_set_allowable_enctypes, AC_DEFINE(HAVE_SET_ALLOWABLE_ENCTYPES, 1, [Define this if the Kerberos GSS library supports gss_krb5_set_allowable_enctypes]), ,$KRBLIBS)
++ AC_CHECK_LIB($gssapi_lib, gss_krb5_ccache_name, AC_DEFINE(HAVE_GSS_KRB5_CCACHE_NAME, 1, [Define this if the Kerberos GSS library supports gss_krb5_ccache_name]), ,$KRBLIBS)
++ AC_CHECK_LIB($gssapi_lib, krb5_get_error_message, AC_DEFINE(HAVE_KRB5_GET_ERROR_MESSAGE, 1, [Define this if the function krb5_get_error_message is available]), ,$KRBLIBS)
++ AC_CHECK_LIB($gssapi_lib, krb5_get_init_creds_opt_set_addressless, AC_DEFINE(HAVE_KRB5_GET_INIT_CREDS_OPT_SET_ADDRESSLESS, 1, [Define this if the function krb5_get_init_creds_opt_set_addressless is available]), ,$KRBLIBS)
+
+- dnl Check for function to specify addressless tickets
+- AC_CHECK_LIB($gssapi_lib, krb5_get_init_creds_opt_set_addressless,
+- AC_DEFINE(HAVE_KRB5_GET_INIT_CREDS_OPT_SET_ADDRESSLESS, 1, [Define this if the function krb5_get_init_creds_opt_set_addressless is available]), ,$KRBLIBS)
+-
+- dnl If they specified a directory and it didn't work, give them a warning
+- if test "x$krb5_with" != "x" -a "$krb5_with" != "$KRBDIR"; then
+- AC_MSG_WARN(Using $KRBDIR instead of requested value of $krb5_with for Kerberos!)
+- fi
+-
+- AC_SUBST([KRBDIR])
+ AC_SUBST([KRBLIBS])
+ AC_SUBST([KRBCFLAGS])
+ AC_SUBST([KRBLDFLAGS])
--- /dev/null
+Index: nfs-utils-1.1.0/utils/gssd/context_lucid.c
+===================================================================
+--- nfs-utils-1.1.0.orig/utils/gssd/context_lucid.c
++++ nfs-utils-1.1.0/utils/gssd/context_lucid.c
+@@ -48,8 +48,10 @@
+ #include "context.h"
+
+ #ifndef OM_uint64
++#ifndef GSSAPI_GSSAPI_H_
+ typedef uint64_t OM_uint64;
+ #endif
++#endif
+
+ static int
+ write_lucid_keyblock(char **p, char *end, gss_krb5_lucid_key_t *key)
+@@ -171,10 +173,10 @@ serialize_krb5_ctx(gss_ctx_id_t ctx, gss
+ int retcode = 0;
+
+ printerr(2, "DEBUG: %s: lucid version!\n", __FUNCTION__);
+- maj_stat = gss_export_lucid_sec_context(&min_stat, &ctx,
++ maj_stat = gss_krb5_export_lucid_sec_context(&min_stat, &ctx,
+ 1, &return_ctx);
+ if (maj_stat != GSS_S_COMPLETE) {
+- pgsserr("gss_export_lucid_sec_context",
++ pgsserr("gss_krb5_export_lucid_sec_context",
+ maj_stat, min_stat, &krb5oid);
+ goto out_err;
+ }
+@@ -198,9 +200,9 @@ serialize_krb5_ctx(gss_ctx_id_t ctx, gss
+ else
+ retcode = prepare_krb5_rfc_cfx_buffer(lctx, buf);
+
+- maj_stat = gss_free_lucid_sec_context(&min_stat, ctx, return_ctx);
++ maj_stat = gss_krb5_free_lucid_sec_context(&min_stat, return_ctx);
+ if (maj_stat != GSS_S_COMPLETE) {
+- pgsserr("gss_export_lucid_sec_context",
++ pgsserr("gss_krb5_free_lucid_sec_context",
+ maj_stat, min_stat, &krb5oid);
+ printerr(0, "WARN: failed to free lucid sec context\n");
+ }
+Index: nfs-utils-1.1.0/utils/gssd/krb5_util.c
+===================================================================
+--- nfs-utils-1.1.0.orig/utils/gssd/krb5_util.c
++++ nfs-utils-1.1.0/utils/gssd/krb5_util.c
+@@ -1317,13 +1317,13 @@ limit_krb5_enctypes(struct rpc_gss_sec *
+ * list of supported enctypes, use local default here.
+ */
+ if (krb5_enctypes == NULL)
+- maj_stat = gss_set_allowable_enctypes(&min_stat, credh,
+- &krb5oid, num_enctypes, enctypes);
++ maj_stat = gss_krb5_set_allowable_enctypes(&min_stat, credh,
++ num_enctypes, enctypes);
+ else
+- maj_stat = gss_set_allowable_enctypes(&min_stat, credh,
+- &krb5oid, num_krb5_enctypes, krb5_enctypes);
++ maj_stat = gss_krb5_set_allowable_enctypes(&min_stat, credh,
++ num_krb5_enctypes, krb5_enctypes);
+
+ if (maj_stat != GSS_S_COMPLETE) {
+- pgsserr("gss_set_allowable_enctypes",
++ pgsserr("gss_krb5_set_allowable_enctypes",
+ maj_stat, min_stat, &krb5oid);
+ gss_release_cred(&min_stat, &credh);
+ return -1;
--- /dev/null
+diff -ur nfs-utils-1.2.0/aclocal/rpcsec_vers.m4 nfs-utils-1.2.0-pkg/aclocal/rpcsec_vers.m4
+--- nfs-utils-1.2.0/aclocal/rpcsec_vers.m4 2009-06-02 16:43:05.000000000 +0200
++++ nfs-utils-1.2.0-pkg/aclocal/rpcsec_vers.m4 2009-06-30 15:48:36.603210573 +0200
+@@ -1,7 +1,7 @@
+ dnl Checks librpcsec version
+ AC_DEFUN([AC_RPCSEC_VERSION], [
+
+- PKG_CHECK_MODULES([GSSGLUE], [libgssglue >= 0.1])
++ PKG_CHECK_MODULES([GSSGLUE], [libgssglue >= 0.1], , [PKG_CHECK_MODULES([GSSGLUE], [heimdal-gssapi])])
+
+ dnl TI-RPC replaces librpcsecgss
+ if test "$enable_tirpc" = no; then
--- /dev/null
+--- nfs-utils-1.1.4/Makefile.am~ 2009-03-05 12:29:46.000000000 +0100
++++ nfs-utils-1.1.4/Makefile.am 2009-03-05 12:44:46.000000000 +0100
+@@ -54,8 +54,8 @@
+ touch $(DESTDIR)$(statedir)/xtab; chmod 644 $(DESTDIR)$(statedir)/xtab
+ touch $(DESTDIR)$(statedir)/etab; chmod 644 $(DESTDIR)$(statedir)/etab
+ touch $(DESTDIR)$(statedir)/rmtab; chmod 644 $(DESTDIR)$(statedir)/rmtab
+- mkdir -p $(DESTDIR)$(statedir)/sm $(DESTDIR)$(statedir)/sm.bak
+- touch $(DESTDIR)$(statedir)/state
++ mkdir -p $(DESTDIR)$(statedir)/statd/sm $(DESTDIR)$(statedir)/statd/sm.bak
++ touch $(DESTDIR)$(statedir)/statd/state
+
+ uninstall-hook:
+ rm $(DESTDIR)$(statedir)/xtab
+--- nfs-utils-1.2.2/support/nsm/file.c~ 2010-02-18 13:35:00.000000000 +0100
++++ nfs-utils-1.2.2/support/nsm/file.c 2010-02-24 17:27:51.635249268 +0100
+@@ -95,8 +95,8 @@
+ /*
+ * Some distributions place statd's files in a subdirectory
+ */
+-#define NSM_PATH_EXTENSION
+-/* #define NSM_PATH_EXTENSION "/statd" */
++/* #define NSM_PATH_EXTENSION */
++#define NSM_PATH_EXTENSION "/statd"
+
+ #define NSM_DEFAULT_STATEDIR NFS_STATEDIR NSM_PATH_EXTENSION
+
+--- nfs-utils-1.2.2/utils/statd/statd.man~ 2010-02-18 13:35:00.000000000 +0100
++++ nfs-utils-1.2.2/utils/statd/statd.man 2010-02-24 17:30:05.097124679 +0100
+@@ -232,7 +232,7 @@
+ If this option is not specified,
+ .B rpc.statd
+ uses
+-.I /var/lib/nfs
++.I /var/lib/nfs/statd
+ by default.
+ .IP
+ After starting,
+@@ -365,13 +365,13 @@
+ will operate.
+ .SH FILES
+ .TP 2.5i
+-.I /var/lib/nfs/sm
++.I /var/lib/nfs/statd/sm
+ directory containing monitor list
+ .TP 2.5i
+-.I /var/lib/nfs/sm.bak
++.I /var/lib/nfs/statd/sm.bak
+ directory containing notify list
+ .TP 2.5i
+-.I /var/lib/nfs/state
++.I /var/lib/nfs/statd/state
+ NSM state number for this host
+ .TP 2.5i
+ .I /var/run/run.statd.pid
+--- nfs-utils-1.2.2/utils/statd/sm-notify.man~ 2010-02-18 13:35:00.000000000 +0100
++++ nfs-utils-1.2.2/utils/statd/sm-notify.man 2010-02-24 17:30:27.917124808 +0100
+@@ -186,7 +186,7 @@
+ If this option is not specified,
+ .B sm-notify
+ uses
+-.I /var/lib/nfs
++.I /var/lib/nfs/statd
+ by default.
+ .IP
+ After starting,
+@@ -287,13 +287,13 @@
+ command supports sending notification only via datagram transport protocols.
+ .SH FILES
+ .TP 2.5i
+-.I /var/lib/nfs/sm
++.I /var/lib/nfs/statd/sm
+ directory containing monitor list
+ .TP 2.5i
+-.I /var/lib/nfs/sm.bak
++.I /var/lib/nfs/statd/sm.bak
+ directory containing notify list
+ .TP 2.5i
+-.I /var/lib/nfs/state
++.I /var/lib/nfs/statd/state
+ NSM state number for this host
+ .TP 2.5i
+ .I /proc/sys/fs/nfs/nsm_local_state
--- /dev/null
+--- nfs-utils-1.0.12/utils/mount/nfs4mount.c~ 2007-03-31 22:46:53.438974675 +0200
++++ nfs-utils-1.0.12/utils/mount/nfs4mount.c 2007-03-31 22:52:34.162391396 +0200
+@@ -52,7 +52,7 @@
+ extern int verbose;
+ extern int sloppy;
+
+-char *IDMAPLCK = DEFAULT_DIR "/rpcidmapd";
++char *IDMAPLCK = DEFAULT_DIR "/idmapd";
+ #define idmapd_check() do { \
+ if (access(IDMAPLCK, F_OK)) { \
+ printf(_("Warning: rpc.idmapd appears not to be running.\n" \
+@@ -60,7 +60,7 @@
+ } \
+ } while(0);
+
+-char *GSSDLCK = DEFAULT_DIR "/rpcgssd";
++char *GSSDLCK = DEFAULT_DIR "/gssd";
+ #define gssd_check() do { \
+ if (access(GSSDLCK, F_OK)) { \
+ printf(_("Warning: rpc.gssd appears not to be running.\n")); \
--- /dev/null
+--- nfs-utils-1.1.5/utils/mount/mount.c~ 2009-03-05 12:42:56.000000000 +0100
++++ nfs-utils-1.1.5/utils/mount/mount.c 2009-05-20 16:44:08.581980119 +0200
+@@ -94,6 +94,7 @@
+ { "sync", 0, 0, MS_SYNCHRONOUS}, /* synchronous I/O */
+ { "async", 0, 1, MS_SYNCHRONOUS}, /* asynchronous I/O */
+ { "dirsync", 0, 0, MS_DIRSYNC}, /* synchronous directory modifications */
++ { "union", 0, 0, MS_UNION }, /* Union mount */
+ { "remount", 0, 0, MS_REMOUNT}, /* Alter flags of mounted FS */
+ { "bind", 0, 0, MS_BIND }, /* Remount part of tree elsewhere */
+ { "rbind", 0, 0, MS_BIND|MS_REC }, /* Idem, plus mounted subtrees */
+--- nfs-utils-1.1.5/utils/mount/mount_constants.h~ 2009-03-05 12:42:56.000000000 +0100
++++ nfs-utils-1.1.5/utils/mount/mount_constants.h 2009-05-20 16:42:50.292974566 +0200
+@@ -21,6 +21,9 @@
+ if we have a stack or plain mount - mount atop of it, forming a stack. */
+ #define MS_OVER 0x200 /* 512 */
+ #endif
++#ifndef MS_UNION
++#define MS_UNION 0x100 /* 256: Mount on top of a union */
++#endif
+ #ifndef MS_NOATIME
+ #define MS_NOATIME 0x400 /* 1024: Do not update access times. */
+ #endif
--- /dev/null
+# TODO
+# - should unmount /proc/fs/nfsd and /var/lib/nfs/rpc_pipefs at package
+# uninstall (or in service nfs stop)
+#
+# Conditional build:
+%bcond_with krb5 # build with MIT Kerberos (+libgssglue) instead of Heimdal
+%bcond_without tirpc # use librpcsecgss instead of libtirpc
+#
+Summary: Kernel NFS server
+Summary(pl.UTF-8): Działający na poziomie jądra serwer NFS
+Summary(pt_BR.UTF-8): Os utilitários para o cliente e servidor NFS do Linux
+Summary(ru.UTF-8): Утилиты для NFS и демоны поддержки для NFS-сервера ядра
+Summary(uk.UTF-8): Утиліти для NFS та демони підтримки для NFS-сервера ядра
+Name: nfs-utils
+Version: 1.2.3
+Release: 2
+License: GPL v2
+Group: Networking/Daemons
+Source0: http://www.kernel.org/pub/linux/utils/nfs/%{name}-%{version}.tar.bz2
+# Source0-md5: 1131dc5f27c4f3905a6e7ee0d594fd4d
+#Source1: ftp://ftp.linuxnfs.sourceforge.org/pub/nfs/nfs.doc.tar.gz
+Source1: nfs.doc.tar.gz
+# Source1-md5: ae7db9c61c5ad04f83bb99e5caed73da
+Source2: nfs.init
+Source3: nfslock.init
+Source4: nfsfs.init
+Source5: rpcidmapd.init
+Source6: rpcgssd.init
+Source7: rpcsvcgssd.init
+Source8: nfs.sysconfig
+Source9: nfslock.sysconfig
+Source10: nfsfs.sysconfig
+Patch0: %{name}-install.patch
+Patch1: %{name}-statdpath.patch
+Patch2: %{name}-subsys.patch
+Patch3: %{name}-union-mount.patch
+Patch4: %{name}-kerberos-ac.patch
+Patch5: %{name}-no_libgssapi.patch
+Patch6: %{name}-pkgconfig_ac.patch
+Patch7: %{name}-heimdal_functions.patch
+URL: http://nfs.sourceforge.net/
+BuildRequires: autoconf >= 2.59
+BuildRequires: automake
+BuildRequires: cpp
+BuildRequires: libblkid-devel
+BuildRequires: libcap-devel
+BuildRequires: libevent-devel >= 1.2
+BuildRequires: libnfsidmap-devel >= 0.21-3
+BuildRequires: libtool
+BuildRequires: libwrap-devel
+BuildRequires: pkgconfig
+%if %{with tirpc}
+BuildRequires: libtirpc-devel >= 1:0.1.10-4
+%else
+BuildRequires: librpcsecgss-devel >= 0.16
+%endif
+%if %{with krb5}
+BuildRequires: krb5-devel >= 1.6
+BuildRequires: libgssglue-devel >= 0.1
+%else
+BuildRequires: heimdal-devel >= 1.0
+%endif
+# lucid context fields mismatch with current version of spkm3.h
+BuildConflicts: gss_mech_spkm3-devel
+Requires(post): fileutils
+Requires(post): sed >= 4.0
+Requires(post,preun): /sbin/chkconfig
+Requires: %{name}-common = %{version}-%{release}
+Requires: rc-scripts >= 0.4.1.5
+Requires: rpcbind >= 0.1.7
+Requires: setup >= 2.4.6-7
+Provides: nfsdaemon
+Obsoletes: knfsd
+Obsoletes: nfs-server
+Obsoletes: nfsdaemon
+Conflicts: kernel < 2.2.5
+Conflicts: krb5-common < 1.7
+ExcludeArch: armv4l
+BuildRoot: %{tmpdir}/%{name}-%{version}-root-%(id -u -n)
+
+%description
+This is the *new* kernel NFS server and related tools. It provides a
+much higher level of performance than the traditional Linux user-land
+NFS server.
+
+%description -l pl.UTF-8
+To jest *nowy* działający na poziomie jądra serwer NFS oraz związane z
+nim narzędzia. Serwer ten dostarcza znacznie większą wydajność niż
+tradycyjny, działający na poziomie użytkownika serwer NFS.
+
+%description -l pt_BR.UTF-8
+O pacote nfs-utils provê os utilitários para o cliente e servidor NFS
+do Linux.
+
+%description -l ru.UTF-8
+Пакет nfs-utils предоставляет демона для NFS-сервера, включенного в
+ядро, и сопутствующие утилиты, которые обеспечивают намного большую
+производительность, чем традиционные Linux NFS-сервера, используемые
+большинством пользователей.
+
+%description -l uk.UTF-8
+Пакет nfs-utils надає демона для NFS-сервера, вбудованого в ядро, та
+супутні утиліти, які забезпечують набагато більшу продуктивність, ніж
+традиційні Linux NFS-сервери, які використовує більшість користувачів.
+
+%package clients
+Summary: Clients for connecting to a remote NFS server
+Summary(pl.UTF-8): Klienci do łączenia się ze zdalnym serwerem NFS
+Group: Networking
+Requires(post,preun): /sbin/chkconfig
+Requires: %{name}-common = %{version}-%{release}
+Requires: psmisc
+Requires: rc-scripts
+Provides: nfs-server-clients
+Provides: nfsclient
+Obsoletes: knfsd-clients
+Obsoletes: nfs-server-clients
+Obsoletes: nfsclient
+Conflicts: krb5-common < 1.7
+
+%description clients
+The nfs-server-clients package contains the showmount program.
+Showmount queries the mount daemon on a remote host for information
+about the NFS (Network File System) server on the remote host. For
+example, showmount can display the clients which are mounted on that
+host. This package is not needed to mount NFS volumes.
+
+%description clients -l pl.UTF-8
+Pakiet zawiera program showmount służący do odpytywania serwera NFS.
+Showmount pyta demona na zdalnej maszynie o informacje NFS na zdalnym
+hoście. Na przykład, showmount potrafi pokazać klientów, którzy są
+zamountowani na tym serwerze. Ten pakiet nie jest konieczny do
+zamountowania zasobów NFS.
+
+%package lock
+Summary: Programs for NFS file locking
+Summary(pl.UTF-8): Programy do obsługi blokowania plików poprzez NFS (lock)
+Group: Networking
+Requires(post,preun): /sbin/chkconfig
+Requires: rc-scripts
+Requires: rpcbind >= 0.1.7
+Provides: group(rpcstatd)
+Provides: nfslockd
+Provides: user(rpcstatd)
+Obsoletes: knfsd-lock
+Obsoletes: nfslockd
+
+%description lock
+The nfs-lock pacage contains programs which support the NFS file lock.
+Install nfs-lock if you want to use file lock over NFS.
+
+%description lock -l pl.UTF-8
+Ten pakiet zawiera programy umożliwiające wykonywanie blokowania
+plików (file locking) poprzez NFS.
+
+%package common
+Summary: Common programs for NFS
+Summary(pl.UTF-8): Wspólne programy do obsługi NFS
+Group: Networking
+Requires: libnfsidmap >= 0.21-3
+Conflicts: mount < 2.13-0.pre7.1
+
+%description common
+Common programs for NFS.
+
+%description common -l pl.UTF-8
+Wspólne programy do obsługi NFS.
+
+%prep
+%setup -q -a1
+%patch0 -p1
+%patch1 -p1
+%patch2 -p1
+%patch3 -p1
+%patch4 -p1
+%if %{without krb5}
+%patch5 -p1
+%patch6 -p1
+%patch7 -p0
+%endif
+
+%build
+%{__libtoolize}
+%{__aclocal} -I aclocal
+%{__autoconf}
+%{__autoheader}
+%{__automake}
+%configure \
+ --enable-nfsv3 \
+ --enable-nfsv4 \
+ --enable-gss \
+ --enable-mount \
+ --%{?with_tirpc:en}%{!?with_tirpc:dis}able-tirpc \
+ --enable-ipv6 \
+ --with-statedir=/var/lib/nfs \
+ --with-statduser=rpcstatd \
+ --with-start-statd=%{_sbindir}/start-statd \
+ --with-tcp-wrappers \
+ --with-krb5-config=%{_bindir}/krb5-config
+
+%{__make} all
+
+%install
+rm -rf $RPM_BUILD_ROOT
+install -d $RPM_BUILD_ROOT%{_sysconfdir}/{rc.d/init.d,sysconfig} \
+ $RPM_BUILD_ROOT%{_var}/lib/nfs/{rpc_pipefs,v4recovery}
+
+%{__make} install \
+ DESTDIR=$RPM_BUILD_ROOT
+
+cat >$RPM_BUILD_ROOT%{_sbindir}/start-statd <<EOF
+#!/bin/sh
+# mount.nfs calls this script when mounting a filesystem with locking
+# enabled, but when statd does not seem to be running (based on
+# /var/run/rpc.statd.pid).
+exec /sbin/service nfslock start
+EOF
+
+sed -e "s|#!/bin/bash|#!/bin/sh|" utils/gssd/gss_destroy_creds > $RPM_BUILD_ROOT%{_sbindir}/gss_destroy_creds
+
+mv $RPM_BUILD_ROOT%{_sbindir}/rpcdebug $RPM_BUILD_ROOT/sbin
+
+install %{SOURCE2} $RPM_BUILD_ROOT/etc/rc.d/init.d/nfs
+install %{SOURCE3} $RPM_BUILD_ROOT/etc/rc.d/init.d/nfslock
+install %{SOURCE4} $RPM_BUILD_ROOT/etc/rc.d/init.d/nfsfs
+install %{SOURCE5} $RPM_BUILD_ROOT/etc/rc.d/init.d/idmapd
+install %{SOURCE6} $RPM_BUILD_ROOT/etc/rc.d/init.d/gssd
+install %{SOURCE7} $RPM_BUILD_ROOT/etc/rc.d/init.d/svcgssd
+install %{SOURCE8} $RPM_BUILD_ROOT/etc/sysconfig/nfsd
+install %{SOURCE9} $RPM_BUILD_ROOT/etc/sysconfig/nfslock
+install %{SOURCE10} $RPM_BUILD_ROOT/etc/sysconfig/nfsfs
+
+> $RPM_BUILD_ROOT%{_var}/lib/nfs/rmtab
+> $RPM_BUILD_ROOT%{_sysconfdir}/exports
+
+rm $RPM_BUILD_ROOT%{_mandir}/man8/rpc.{mountd,nfsd,statd,sm-notify}.8
+rm $RPM_BUILD_ROOT%{_mandir}/man8/rpc.{svcgssd,gssd,idmapd}.8
+echo ".so mountd.8" > $RPM_BUILD_ROOT%{_mandir}/man8/rpc.mountd.8
+echo ".so nfsd.8" > $RPM_BUILD_ROOT%{_mandir}/man8/rpc.nfsd.8
+echo ".so statd.8" > $RPM_BUILD_ROOT%{_mandir}/man8/rpc.statd.8
+echo ".so sm-notify.8" > $RPM_BUILD_ROOT%{_mandir}/man8/rpc.sm-notify.8
+echo ".so gssd.8" > $RPM_BUILD_ROOT%{_mandir}/man8/rpc.gssd.8
+echo ".so idmapd.8" > $RPM_BUILD_ROOT%{_mandir}/man8/rpc.idmapd.8
+echo ".so svcgssd.8" > $RPM_BUILD_ROOT%{_mandir}/man8/rpc.svcgssd.8
+
+touch $RPM_BUILD_ROOT/var/lib/nfs/xtab
+
+ln -sf /bin/true $RPM_BUILD_ROOT/sbin/fsck.nfs
+
+cp -a nfs html
+
+%clean
+rm -rf $RPM_BUILD_ROOT
+
+%post
+/sbin/chkconfig --add nfs
+%service nfs restart "NFS daemon"
+/sbin/chkconfig --add svcgssd
+%service svcgssd restart "RPC svcgssd"
+
+%preun
+if [ "$1" = "0" ]; then
+ %service nfs stop
+ /sbin/chkconfig --del nfs
+ %service svcgssd stop
+ /sbin/chkconfig --del svcgssd
+fi
+
+%post clients
+/sbin/chkconfig --add nfsfs
+%service nfsfs restart
+/sbin/chkconfig --add gssd
+%service gssd restart "RPC gssd"
+
+%preun clients
+if [ "$1" = "0" ]; then
+ %service nfsfs stop
+ /sbin/chkconfig --del nfsfs
+ %service gssd stop
+ /sbin/chkconfig --del gssd
+fi
+
+%pre lock
+%groupadd -g 191 rpcstatd
+%useradd -u 191 -d /var/lib/nfs/statd -s /bin/false -c "RPC statd user" -g rpcstatd rpcstatd
+
+%post lock
+/sbin/chkconfig --add nfslock
+%service nfslock restart "RPC statd"
+
+%preun lock
+if [ "$1" = "0" ]; then
+ %service nfslock stop
+ /sbin/chkconfig --del nfslock
+fi
+
+%postun lock
+if [ "$1" = "0" ]; then
+ %userremove rpcstatd
+ %groupremove rpcstatd
+fi
+
+%post common
+/sbin/chkconfig --add idmapd
+%service idmapd restart "RPC idmapd"
+
+%preun common
+if [ "$1" = "0" ]; then
+ %service idmapd stop
+ /sbin/chkconfig --del idmapd
+fi
+
+%triggerpostun -- %{name} < 1.1.0-0.rc1.1
+/sbin/chkconfig nfs reset
+/sbin/chkconfig svcgssd reset
+
+%triggerpostun lock -- %{name}-lock < 1.1.0-0.rc1.1
+/sbin/chkconfig nfslock reset
+
+%triggerpostun clients -- %{name}-clients < 1.1.0-0.rc1.1
+if [ -f /etc/sysconfig/nfsclient.rpmsave ]; then
+ mv -f /etc/sysconfig/nfsfs{,.rpmnew}
+ mv -f /etc/sysconfig/nfsclient.rpmsave /etc/sysconfig/nfsfs
+fi
+/sbin/chkconfig nfsfs reset
+/sbin/chkconfig gssd reset
+
+%triggerpostun common -- %{name}-common < 1.1.0-0.rc1.1
+/sbin/chkconfig idmapd reset
+
+%files
+%defattr(644,root,root,755)
+%doc ChangeLog README html
+%attr(755,root,root) /sbin/rpcdebug
+%attr(755,root,root) /sbin/fsck.nfs
+%attr(755,root,root) %{_sbindir}/exportfs
+%attr(755,root,root) %{_sbindir}/rpc.mountd
+%attr(755,root,root) %{_sbindir}/rpc.nfsd
+%attr(755,root,root) %{_sbindir}/rpc.svcgssd
+%attr(755,root,root) %{_sbindir}/nfsstat
+
+%attr(754,root,root) /etc/rc.d/init.d/nfs
+%attr(754,root,root) /etc/rc.d/init.d/svcgssd
+
+%attr(664,root,fileshare) %config(noreplace) %verify(not md5 mtime size) %{_sysconfdir}/exports
+%config(noreplace) %verify(not md5 mtime size) /etc/sysconfig/nfsd
+%config(noreplace) %verify(not md5 mtime size) %{_var}/lib/nfs/xtab
+%config(noreplace) %verify(not md5 mtime size) %{_var}/lib/nfs/etab
+%config(noreplace) %verify(not md5 mtime size) %{_var}/lib/nfs/rmtab
+
+%{_mandir}/man5/exports.5*
+%{_mandir}/man7/nfsd.7*
+%{_mandir}/man8/exportfs.8*
+%{_mandir}/man8/mountd.8*
+%{_mandir}/man8/nfsd.8*
+%{_mandir}/man8/nfsstat.8*
+%{_mandir}/man8/rpc.mountd.8*
+%{_mandir}/man8/rpc.nfsd.8*
+%{_mandir}/man8/rpc.svcgssd.8*
+%{_mandir}/man8/rpcdebug.8*
+%{_mandir}/man8/svcgssd.8*
+
+%files lock
+%defattr(644,root,root,755)
+%attr(700,rpcstatd,rpcstatd) %dir %{_var}/lib/nfs/statd
+%attr(700,rpcstatd,rpcstatd) %dir %{_var}/lib/nfs/statd/sm
+%attr(700,rpcstatd,rpcstatd) %dir %{_var}/lib/nfs/statd/sm.bak
+%attr(600,rpcstatd,rpcstatd) %config(noreplace) %verify(not md5 mtime size) %{_var}/lib/nfs/statd/state
+%attr(755,root,root) %{_sbindir}/rpc.statd
+%attr(755,root,root) %{_sbindir}/sm-notify
+%attr(755,root,root) %{_sbindir}/start-statd
+%attr(754,root,root) /etc/rc.d/init.d/nfslock
+%config(noreplace) %verify(not md5 mtime size) /etc/sysconfig/nfslock
+%{_mandir}/man8/rpc.sm-notify.8*
+%{_mandir}/man8/rpc.statd.8*
+%{_mandir}/man8/sm-notify.8*
+%{_mandir}/man8/statd.8*
+
+%files clients
+%defattr(644,root,root,755)
+%attr(754,root,root) /etc/rc.d/init.d/nfsfs
+%config(noreplace) %verify(not md5 mtime size) /etc/sysconfig/nfsfs
+%attr(4755,root,root) /sbin/mount.nfs
+%attr(4755,root,root) /sbin/umount.nfs
+%attr(4755,root,root) /sbin/mount.nfs4
+%attr(4755,root,root) /sbin/umount.nfs4
+%attr(755,root,root) %{_sbindir}/mountstats
+%attr(755,root,root) %{_sbindir}/nfsiostat
+%attr(755,root,root) %{_sbindir}/showmount
+%attr(755,root,root) %{_sbindir}/rpc.gssd
+%attr(754,root,root) /etc/rc.d/init.d/gssd
+%{_mandir}/man8/gssd.8*
+%{_mandir}/man8/mount.nfs.8*
+%{_mandir}/man8/mountstats.8*
+%{_mandir}/man8/nfsiostat.8*
+%{_mandir}/man8/rpc.gssd.8*
+%{_mandir}/man8/showmount.8*
+%{_mandir}/man8/umount.nfs.8*
+
+%files common
+%defattr(644,root,root,755)
+%attr(755,root,root) %{_sbindir}/gss_clnt_send_err
+%attr(755,root,root) %{_sbindir}/gss_destroy_creds
+%attr(755,root,root) %{_sbindir}/rpc.idmapd
+%attr(754,root,root) /etc/rc.d/init.d/idmapd
+%dir %{_var}/lib/nfs
+%dir %{_var}/lib/nfs/rpc_pipefs
+%dir %{_var}/lib/nfs/v4recovery
+%{_mandir}/man5/nfs.5*
+%{_mandir}/man8/idmapd.8*
+%{_mandir}/man8/rpc.idmapd.8*
--- /dev/null
+#!/bin/sh
+#
+# nfs This shell script takes care of starting and stopping
+# the NFS services.
+#
+# chkconfig: 345 13 81
+# description: NFS is a popular protocol for file sharing across TCP/IP \
+# networks. This service provides NFS server functionality, \
+# which is configured via the /etc/exports file.
+# probe: true
+
+# Source function library
+. /etc/rc.d/init.d/functions
+
+# Get network config
+. /etc/sysconfig/network
+
+# Get service configs
+[ -f /etc/sysconfig/nfslock ] && . /etc/sysconfig/nfslock
+[ -f /etc/sysconfig/nfsd ] && . /etc/sysconfig/nfsd
+
+[ -n "$NFSv2" ] || NFSv2="yes"
+[ -n "$NFSv3" ] || NFSv3="yes"
+[ -n "$NFSv4" ] || NFSv4="yes"
+
+# Check that networking is up.
+if is_yes "${NETWORKING}"; then
+ if [ ! -f /var/lock/subsys/network -a "$1" != stop -a "$1" != status ]; then
+ msg_network_down "NFS daemon"
+ exit 1
+ fi
+else
+ exit 0
+fi
+
+if [ "$1" != "stop" ]; then
+ check_portmapper || { nls "Error: portmap isn't running" && exit 0; }
+fi
+
+start() {
+ # Check if the service is already running?
+ if [ -f /var/lock/subsys/nfs ]; then
+ msg_already_running "NFS daemon"
+ return
+ fi
+
+ if ! grep -q nfsd /proc/mounts ; then
+ modprobe -s nfsd > /dev/null 2>&1
+ run_cmd "Mounting /proc/fs/nfsd filesystem" mount -t nfsd nfsd /proc/fs/nfsd
+ fi
+
+ # Set the ports lockd should listen on
+ if [ -n "$LOCKD_TCPPORT" ]; then
+ /sbin/sysctl -w fs.nfs.nlm_tcpport=$LOCKD_TCPPORT >/dev/null 2>&1
+ fi
+ if [ -n "$LOCKD_UDPPORT" ]; then
+ /sbin/sysctl -w fs.nfs.nlm_udpport=$LOCKD_UDPPORT >/dev/null 2>&1
+ fi
+
+ for vers in 2 3 4 ; do
+ is_yes $(eval echo \$NFSv$vers) || \
+ RPCMOUNTOPTIONS="$RPCMOUNTOPTIONS --no-nfs-version $vers"
+ done
+
+ [ -n "$MOUNTD_PORT" ] && RPCMOUNTOPTIONS="$RPCMOUNTOPTIONS -p $MOUNTD_PORT"
+
+ # Start daemons.
+ msg_starting "NFS exportfs"
+ daemon /usr/sbin/exportfs -r
+ msg_starting "NFS mountd"
+ daemon /usr/sbin/rpc.mountd $RPCMOUNTOPTIONS
+ msg_starting "NFS daemon"
+ daemon /usr/sbin/rpc.nfsd $RPCNFSDCOUNT
+ touch /var/lock/subsys/nfs
+}
+
+stop() {
+ if [ ! -f /var/lock/subsys/nfs ]; then
+ msg_not_running "NFS"
+ return
+ fi
+
+ # Stop daemons.
+ msg_stopping "NFS daemon"
+ killproc nfsd -QUIT
+ msg_stopping "NFS mountd"
+ killproc rpc.mountd
+ msg_stopping "NFS exportfs"
+ daemon /usr/sbin/exportfs -au
+ rm -f /var/lock/subsys/nfs
+}
+
+RETVAL=0
+# See how we were called.
+case "$1" in
+ start)
+ start
+ ;;
+ stop)
+ stop
+ ;;
+ restart)
+ stop
+ start
+ /sbin/service idmapd status >/dev/null && /sbin/service idmapd reload
+ /sbin/service svcgssd status >/dev/null && /sbin/service svcgssd restart
+ ;;
+ reload|force-reload)
+ if [ -f /var/lock/subsys/nfs ]; then
+ msg_reloading "NFS"
+ busy
+ /usr/sbin/exportfs -r
+ [ $? -ne 0 ] && RETVAL=7
+ if [ $RETVAL -eq 0 ]; then
+ ok
+ /sbin/service idmapd status >/dev/null && /sbin/service idmapd reload
+ /sbin/service svcgssd status >/dev/null && /sbin/service svcgssd restart
+ else
+ died
+ fi
+ else
+ msg_not_running "NFS"
+ exit 7
+ fi
+ ;;
+ probe)
+ if [ ! -f /var/lock/subsys/nfs ]; then
+ echo start
+ exit 0
+ fi
+ /sbin/pidof rpc.mountd >/dev/null 2>&1; MOUNTD="$?"
+ /sbin/pidof nfsd >/dev/null 2>&1; NFSD="$?"
+ if [ $MOUNTD = 1 -o $NFSD = 1 ]; then
+ echo restart
+ exit 0
+ fi
+ if [ /etc/exports -nt /var/lock/subsys/nfs ]; then
+ echo reload
+ exit 0
+ fi
+ ;;
+ status)
+ echo "Configured NFS exports:"
+ grep -v "^#" /etc/exports
+ echo
+ echo "Active NFS exports:"
+ /usr/sbin/exportfs -v
+ echo
+ status rpc.mountd
+ RETVAL=$?
+ status nfsd
+ RET=$?
+ [ $RETVAL -eq 0 ] && RETVAL=$RET
+ ;;
+ *)
+ msg_usage "$0 {start|stop|restart|reload|force-reload|probe|status}"
+ exit 3
+esac
+
+exit $RETVAL
--- /dev/null
+# Set nice level for rpc.mountd and rpc.nfsd
+SERVICE_RUN_NICE_LEVEL="+0"
+
+# Number of NFSD servers to start
+RPCNFSDCOUNT=8
+
+# NFS versions to use (default all-yes)
+NFSv2="yes"
+NFSv3="yes"
+NFSv4="yes"
+
+# Port mount should listen on (default is portmap assigned)
+#MOUNTD_PORT=
+
+# Options for NFS rpc.mountd
+#RPCMOUNTOPTIONS=""
+
+# Uncomment if you want to use secure NFSv4 exports
+#SECURE_NFS="yes"
+
+# List of kernel modules to use for secure NFS
+#SECURE_NFS_MODS="des rpcsec_gss_krb5"
+
+# Options for NFSv4 server-side rpcsec_gss daemon
+#RPCSVCGSSOPTIONS=
+
+# Options for NFSv4 ID <-> Name Mapper (idmapd)
+#RPCIDMAPOPTIONS=
--- /dev/null
+#!/bin/sh
+#
+# nfsfs Mount NFS filesystems.
+#
+# chkconfig: 345 16 80
+# description: Mounts and unmounts all Network File System (NFS) \
+# mount points.
+
+# Source networking configuration.
+if [ ! -f /etc/sysconfig/network ]; then
+ exit 0
+fi
+
+# Source function library.
+. /etc/rc.d/init.d/functions
+
+# Get network config
+. /etc/sysconfig/network
+
+# Get service config
+[ -f /etc/sysconfig/nfsfs ] && . /etc/sysconfig/nfsfs
+[ -f /etc/sysconfig/nfslock ] && . /etc/sysconfig/nfslock
+
+# Check that networking is up.
+if is_yes "${NETWORKING}"; then
+ if [ ! -f /var/lock/subsys/network -a "$1" != stop -a "$1" != status ]; then
+ msg_network_down nfsfs
+ exit 1
+ fi
+else
+ exit 0
+fi
+
+if [ "$1" != "stop" ]; then
+ check_portmapper || { nls "Error: portmap isn't running" && exit 0; }
+fi
+
+if [ -z "$NFSUMOUNT_IGNORE" ]; then
+ NFSUMOUNT_IGNORE="/ /usr"
+fi
+
+start() {
+ if [ -f /var/lock/subsys/nfsfs ]; then
+ msg_already_running "NFSFS"
+ return
+ fi
+
+ # Set the ports lockd should listen on
+ if [ -n "$LOCKD_TCPPORT" ]; then
+ /sbin/sysctl -w fs.nfs.nlm_tcpport=$LOCKD_TCPPORT >/dev/null 2>&1
+ fi
+ if [ -n "$LOCKD_UDPPORT" ]; then
+ /sbin/sysctl -w fs.nfs.nlm_udpport=$LOCKD_UDPPORT >/dev/null 2>&1
+ fi
+
+ # Special case /usr first
+ if ! awk '{ if ($2 == "/usr" && $3 ~ /^nfs(4$|$)/ && $4 !~ /noauto/) exit 1}' /etc/fstab; then
+ run_cmd "Mounting /usr filesystem" mount /usr
+ # In case of /usr over NFS idmapd, gssd and lockd may not start
+ # check if they're running and try to start them if not
+ /sbin/service idmapd status >/dev/null || /sbin/service idmapd start
+ /sbin/service gssd status >/dev/null || /sbin/service gssd start
+ /sbin/service nfslock status >/dev/null || /sbin/service nfslock start
+ fi
+ run_cmd "Mounting NFS filesystems" mount -a -t nfs,nfs4
+ touch /var/lock/subsys/nfsfs
+}
+
+stop() {
+ if [ -f /proc/mounts ]; then
+ fsfile="/proc/mounts"
+ else
+ fsfile="/etc/mtab"
+ fi
+
+ show "Unmounting NFS filesystems"
+ busy
+ retry=3
+ remaining=$(awk -v ig="^($NFSUMOUNT_IGNORE)$" 'BEGIN { gsub(/[\t ]+/, "|", ig); } \
+ $3 ~ /^nfs(4$|$)/ && $2 !~ ig {print $2}' $fsfile)
+ while [ -n "$remaining" -a $retry -gt 0 ]; do
+ fuser -msk -TERM `awk -v ig="^($NFSUMOUNT_IGNORE)$" 'BEGIN { gsub(/[\t ]+/, "|", ig); } \
+ $3 ~ /^nfs(4$|$)/ && $2 !~ ig {print $2}' $fsfile`
+ sleep 2
+ fuser -msk -KILL `awk -v ig="^($NFSUMOUNT_IGNORE)$" 'BEGIN { gsub(/[\t ]+/, "|", ig); } \
+ $3 ~ /^nfs(4$|$)/ && $2 !~ ig {print $2}' $fsfile`
+ # Sort filesystems to unmount in reverse order
+ rem=""
+ for r in $(awk -v ig="^($NFSUMOUNT_IGNORE)$" 'BEGIN { gsub(/[\t ]+/, "|", ig); } \
+ $3 ~ /^nfs(4$|$)/ && $2 !~ ig {print $2}' $fsfile) ; do
+ rem="$r $rem"
+ done
+ for fs in $rem ; do
+ umount $fs
+ done
+ remaining=$(awk -v ig="^($NFSUMOUNT_IGNORE)$" 'BEGIN { gsub(/[\t ]+/, "|", ig); } \
+ $3 ~ /^nfs(4$|$)/ && $2 !~ ig {print $2}' $fsfile)
+ retry=$(($retry-1))
+ done
+ ok
+ rm -f /var/lock/subsys/nfsfs
+}
+
+# See how we were called.
+case "$1" in
+ start)
+ start
+ ;;
+ stop)
+ stop
+ ;;
+ restart)
+ stop
+ start
+ ;;
+ reload|force-reload)
+ mount -a -t nfs,nfs4
+ ;;
+ status)
+ if [ -f /proc/mounts ]; then
+ echo "Configured NFS mountpoints:"
+ grep -v '^#' /etc/fstab | \
+ awk '{ if ($3 ~ /^nfs(4$|$)/ && $4 !~ /noauto/) print $2}'
+ echo "Active NFS mountpoints:"
+ grep -v '^#' /proc/mounts | \
+ awk '{ if ($3 ~ /^nfs(4$|$)/ && $4 !~ /noauto/) print $2}'
+ else
+ echo "/proc filesystem unavailable"
+ fi
+ ;;
+ *)
+ msg_usage "$0 {start|stop|restart|reload|force-reload|status}"
+ exit 3
+esac
+
+exit 0
--- /dev/null
+# Options for NFSv4 ID <-> Name Mapper (idmapd)
+#RPCIDMAPOPTIONS=
+
+# Uncomment if you want to use secure NFSv4 exports
+#SECURE_NFS="yes"
+
+# List of kernel modules to use for secure NFS
+#SECURE_NFS_MODS="des rpcsec_gss_krb5"
+
+# Options for NFSv4 rpcsec_gss daemon
+#RPCGSSOPTIONS=
+
+# Space separated list of mount points that init script should not even
+# try to umount because it will not work
+# May contain regular expressions (ex. "/dev/union/.*")
+NFSUMOUNT_IGNORE="/ /usr"
+
+# Enable if you don't want rpm upgrade to remount Your NFS mounts
+# By default is on, because it's really dangerous to remount i.e. /home
+RPM_SKIP_AUTO_RESTART=yes
--- /dev/null
+#!/bin/sh
+#
+# nfslock This shell script takes care of starting and stopping
+# the NSM status monitor - rpc.statd
+#
+# chkconfig: 345 14 82
+# description: The rpc.statd server implements the NSM \
+# (Network Status Monitor) RPC protocol. \
+# It is used by the NFS file locking service, lockd \
+# to implement lock recovery when the NFS server \
+# machine crashes and reboots.
+# probe: true
+
+# Source function library.
+. /etc/rc.d/init.d/functions
+
+# Get network config
+. /etc/sysconfig/network
+
+# Get service config
+[ -f /etc/sysconfig/nfslock ] && . /etc/sysconfig/nfslock
+
+# Check that networking is up.
+if is_yes "${NETWORKING}"; then
+ if [ ! -f /var/lock/subsys/network -a "$1" != stop -a "$1" != status ]; then
+ msg_network_down "RPC statd"
+ exit 1
+ fi
+else
+ exit 0
+fi
+
+if [ "$1" != "stop" ]; then
+ check_portmapper || { nls "Error: portmap isn't running" && exit 0; }
+fi
+
+# /usr may be on NFS, fail silently, nfsfs will start it
+[ -x /usr/sbin/rpc.statd ] || exit 0
+
+start() {
+ # Check if the service is already running?
+ if [ -f /var/lock/subsys/nfslock ]; then
+ msg_already_running "RPC statd"
+ return
+ fi
+
+ # Set the ports lockd should listen on
+ if [ -n "$LOCKD_TCPPORT" ]; then
+ /sbin/sysctl -w fs.nfs.nlm_tcpport=$LOCKD_TCPPORT >/dev/null 2>&1
+ fi
+ if [ -n "$LOCKD_UDPPORT" ]; then
+ /sbin/sysctl -w fs.nfs.nlm_udpport=$LOCKD_UDPPORT >/dev/null 2>&1
+ fi
+
+ [ -n "$STATD_PORT" ] && STATDOPTS="$STATDOPTS -p $STATD_PORT"
+ [ -n "$STATD_OUTPORT" ] && STATDOPTS="$STATDOPTS -o $STATD_OUTPORT"
+
+ # Start daemons.
+ # Don't put sm-notify here, statd will run it when started
+ msg_starting "RPC statd"
+ daemon /usr/sbin/rpc.statd $STATDOPTS
+ RETVAL=$?
+ [ $RETVAL -eq 0 ] && touch /var/lock/subsys/nfslock
+}
+
+stop() {
+ if [ ! -f /var/lock/subsys/nfslock ]; then
+ msg_not_running "RPC statd"
+ return
+ fi
+
+ # Reset the lockd ports if they were set
+ if [ -n "$LOCKD_TCPPORT" ]; then
+ /sbin/sysctl -w fs.nfs.nlm_tcpport=0 >/dev/null 2>&1
+ fi
+ if [ -n "$LOCKD_UDPPORT" ]; then
+ /sbin/sysctl -w fs.nfs.nlm_udpport=0 >/dev/null 2>&1
+ fi
+ # Stop daemons.
+ msg_stopping "RPC statd"
+ killproc rpc.statd
+ rm -f /var/lock/subsys/nfslock
+}
+
+RETVAL=0
+# See how we were called.
+case "$1" in
+ start)
+ start
+ ;;
+ stop)
+ stop
+ ;;
+ restart|force-reload)
+ stop
+ start
+ ;;
+ probe)
+ if [ ! -f /var/lock/subsys/nfslock ]; then
+ echo start
+ exit 0
+ fi
+ /sbin/pidof rpc.statd >/dev/null 2>&1; STATD="$?"
+ if [ $STATD = 1 ]; then
+ echo restart
+ exit 0
+ fi
+ ;;
+ status)
+ status rpc.statd
+ exit $?
+ ;;
+ *)
+ msg_usage "$0 {start|stop|restart|force-reload|probe|status}"
+ exit 3
+esac
+
+exit $RETVAL
--- /dev/null
+# Define nice level for rpc.statd daemon
+SERVICE_RUN_NICE_LEVEL="+0"
+
+# TCP and UDP ports lockd should listen on (default is portmap assigned)
+#LOCKD_TCPPORT=
+#LOCKD_UDPPORT=
+
+# Port for rpc.statd to listen on (default is portmap assigned)
+#STATD_PORT=
+
+# Port for rpc.statd to send outgoing status requests from
+#STATD_OUTPORT=
+
+# Options for rpc.statd.
+#STATDOPTS=
--- /dev/null
+#!/bin/sh
+#
+# gssd Start up and shut down RPCSEC GSS daemon
+#
+# chkconfig: 345 15 81
+# description: Starts user-level daemon that manages RPCSEC GSS contexts \
+# for the NFSv4 client.
+
+# Source function library.
+. /etc/rc.d/init.d/functions
+
+# Get network config
+. /etc/sysconfig/network
+
+# Check that networking is up.
+if is_yes "${NETWORKING}"; then
+ if [ ! -f /var/lock/subsys/network -a "$1" != stop -a "$1" != status ]; then
+ msg_network_down "RPC gssd"
+ exit 1
+ fi
+else
+ exit 0
+fi
+
+if [ "$1" != "stop" ]; then
+ check_portmapper || { nls "Error: portmap isn't running" && exit 0; }
+fi
+
+# Get service config
+[ -f /etc/sysconfig/nfsfs ] && . /etc/sysconfig/nfsfs
+
+is_yes "${SECURE_NFS}" || exit 0
+
+# List of kernel modules to load
+[ -z "${SECURE_NFS_MODS}" ] && SECURE_NFS_MODS="des rpcsec_gss_krb5"
+
+# /usr may be on NFS, fail silently, nfsfs will start it
+[ -x /usr/sbin/rpc.gssd ] || exit 0
+
+start() {
+ # Check if the service is already running?
+ if [ -f /var/lock/subsys/gssd ]; then
+ msg_already_running "RPC gssd"
+ return
+ fi
+
+ if ! grep -q rpc_pipefs /proc/mounts; then
+ modprobe sunrpc >/dev/null 2>&1
+ run_cmd "Mounting /var/lib/nfs/rpc_pipefs filesystem" \
+ mount -t rpc_pipefs rpc_pipefs /var/lib/nfs/rpc_pipefs
+ fi
+ # Load rpcsec modules
+ for i in ${SECURE_NFS_MODS}; do
+ _modprobe single die $i
+ done
+ msg_starting "RPC gssd"
+ daemon rpc.gssd $RPCGSSOPTIONS
+ RETVAL=$?
+ [ $RETVAL = 0 ] && touch /var/lock/subsys/gssd
+}
+
+stop() {
+ if [ ! -f /var/lock/subsys/gssd ]; then
+ msg_not_running "RPC gssd"
+ return
+ fi
+
+ msg_stopping "RPC gssd"
+ killproc rpc.gssd
+ rm -f /var/lock/subsys/gssd
+}
+
+# See how we were called.
+RETVAL=0
+case "$1" in
+ start)
+ start
+ ;;
+ stop)
+ stop
+ ;;
+ restart|reload)
+ stop
+ start
+ ;;
+ status)
+ status rpc.gssd
+ RETVAL=$?
+ ;;
+ *)
+ msg_usage "$0 {start|stop|restart|status}"
+ exit 1
+esac
+
+exit $RETVAL
--- /dev/null
+#!/bin/sh
+#
+# idmapd Start up and shut down RPC name to UID/GID mapper
+#
+# chkconfig: 345 12 83
+# description: Starts user-level daemon for NFSv4 that maps user \
+# names to UID and GID numbers.
+
+# Source function library.
+. /etc/rc.d/init.d/functions
+
+# Get network config
+. /etc/sysconfig/network
+
+# Check that networking is up.
+if is_yes "${NETWORKING}"; then
+ if [ ! -f /var/lock/subsys/network -a "$1" != stop -a "$1" != status ]; then
+ msg_network_down "RPC idmapd"
+ exit 1
+ fi
+else
+ exit 0
+fi
+
+# Get service config
+[ -f /etc/sysconfig/nfsfs ] && . /etc/sysconfig/nfsfs
+[ -f /etc/sysconfig/nfsd ] && . /etc/sysconfig/nfsd
+
+# /usr may be on NFS, fail silently, nfsfs will start it
+[ -x /usr/sbin/rpc.idmapd ] || exit 0
+
+# Find out what the current runlevel dir is
+RUNLEVELDIR=$(cat /var/run/runlevel.dir)
+
+start() {
+ # Check if the service is already running?
+ if [ -f /var/lock/subsys/idmapd ]; then
+ msg_already_running "RPC idmapd"
+ return
+ fi
+
+ # This is whacko, but we need /proc/fs/nfsd mounted before
+ # starting idmapd on NFS server
+ if [ -e "$RUNLEVELDIR"/S*nfs ]; then
+ if ! grep -q nfsd /proc/mounts ; then
+ modprobe nfsd > /dev/null 2>&1
+ run_cmd "Mounting /proc/fs/nfsd filesystem" mount -t nfsd nfsd /proc/fs/nfsd
+ fi
+ fi
+ if ! grep -q rpc_pipefs /proc/mounts; then
+ modprobe sunrpc >/dev/null 2>&1
+ run_cmd "Mounting /var/lib/nfs/rpc_pipefs filesystem" \
+ mount -t rpc_pipefs rpc_pipefs /var/lib/nfs/rpc_pipefs
+ fi
+
+ msg_starting "RPC idmapd"
+ daemon /usr/sbin/rpc.idmapd $RPCIDMAPOPTIONS
+ RETVAL=$?
+ [ $RETVAL -eq 0 ] && touch /var/lock/subsys/idmapd
+}
+
+stop() {
+ if [ ! -f /var/lock/subsys/idmapd ]; then
+ msg_not_running "RPC idmapd"
+ return
+ fi
+
+ msg_stopping "RPC idmapd"
+ killproc rpc.idmapd
+ rm -f /var/lock/subsys/idmapd
+}
+
+# See how we were called.
+RETVAL=0
+case "$1" in
+ start)
+ start
+ ;;
+ stop)
+ stop
+ ;;
+ restart)
+ stop
+ start
+ ;;
+ reload)
+ if [ -f /var/lock/subsys/idmapd ]; then
+ msg_reloading "RPC idmapd"
+ killproc rpc.idmapd -HUP
+ RETVAL=$?
+ else
+ msg_not_running "RPC idmapd"
+ exit 7
+ fi
+ ;;
+ status)
+ status rpc.idmapd
+ RETVAL=$?
+ ;;
+ *)
+ msg_usage "$0 {start|stop|restart|reload|status}"
+ exit 1
+esac
+
+exit $RETVAL
--- /dev/null
+#!/bin/sh
+#
+# svcgssd Start up and shut down RPCSEC GSS daemon
+#
+# chkconfig: 345 12 82
+# description: Starts user-level daemon that manages RPCSEC GSS contexts \
+# for the NFSv4 server.
+
+# Source function library.
+. /etc/rc.d/init.d/functions
+
+# Get network config
+. /etc/sysconfig/network
+
+# Check that networking is up.
+if is_yes "${NETWORKING}"; then
+ if [ ! -f /var/lock/subsys/network -a "$1" != stop -a "$1" != status ]; then
+ msg_network_down "RPC svcgssd"
+ exit 1
+ fi
+else
+ exit 0
+fi
+
+if [ "$1" != "stop" ]; then
+ check_portmapper || { nls "Error: portmap isn't running" && exit 0; }
+fi
+
+# Get service config
+[ -f /etc/sysconfig/nfsd ] && . /etc/sysconfig/nfsd
+
+is_yes "${SECURE_NFS}" || exit 0
+
+# List of kernel modules to load
+[ -z "${SECURE_NFS_MODS}" ] && SECURE_NFS_MODS="des rpcsec_gss_krb5"
+
+start() {
+ # Check if the service is already running?
+ if [ -f /var/lock/subsys/svcgssd ]; then
+ msg_already_running "RPC svcgssd"
+ return
+ fi
+
+ # We need /proc/fs/nfsd mounted before starting svcgssd
+ if ! grep -q nfsd /proc/mounts ; then
+ modprobe nfsd > /dev/null 2>&1
+ run_cmd "Mounting /proc/fs/nfsd filesystem" mount -t nfsd nfsd /proc/fs/nfsd
+ fi
+ # Load rpcsec modules
+ for i in ${SECURE_NFS_MODS} ; do
+ _modprobe single die $i
+ done
+ msg_starting "RPC svcgssd"
+ daemon /usr/sbin/rpc.svcgssd $RPCSVCGSSOPTIONS
+ RETVAL=$?
+ [ $RETVAL = 0 ] && touch /var/lock/subsys/svcgssd
+}
+
+stop() {
+ if [ ! -f /var/lock/subsys/svcgssd ]; then
+ msg_not_running "RPC svcgssd"
+ return
+ fi
+
+ msg_stopping "RPC svcgssd"
+ killproc rpc.svcgssd
+ rm -f /var/lock/subsys/svcgssd
+}
+
+# See how we were called.
+RETVAL=0
+case "$1" in
+ start)
+ start
+ ;;
+ stop)
+ stop
+ ;;
+ restart|reload)
+ stop
+ start
+ ;;
+ status)
+ status rpc.svcgssd
+ RETVAL=$?
+ ;;
+ *)
+ msg_usage "$0 {start|stop|restart|status}"
+ exit 1
+esac
+
+exit $RETVAL