--- nfs-utils-1.0.10.orig/utils/exportfs/exports.man
+++ nfs-utils-1.0.10/utils/exportfs/exports.man
@@ -29,6 +29,9 @@
 the export name using a backslash followed by the character code as three
 octal digits.
 .PP
+To apply changes to this file, run exportfs \-ra or /etc/init.d/nfs-kernel-server
+reload (the latter being a distribution-specific extension).
+.PP
 .SS Machine Name Formats
 NFS clients may be specified in a number of ways:
 .IP "single host
@@ -402,8 +405,11 @@
 .TP
 .IR root_squash
 Map requests from uid/gid 0 to the anonymous uid/gid. Note that this does
-not apply to any other uids that might be equally sensitive, such as user
-.IR bin .
+not apply to any other uids or gids that might be equally sensitive, such as
+user
+.IR bin 
+or group
+.IR staff .
 .TP
 .IR no_root_squash
 Turn off root squashing. This option is mainly useful for diskless clients.
--- nfs-utils-1.0.10.orig/utils/mountd/mountd.c
+++ nfs-utils-1.0.10/utils/mountd/mountd.c
@@ -558,7 +558,7 @@
 
 	/* Parse the command line options and arguments. */
 	opterr = 0;
-	while ((c = getopt_long(argc, argv, "o:n:Fd:f:p:P:hH:N:V:vs:t:", longopts, NULL)) != EOF)
+	while ((c = getopt_long(argc, argv, "o:nFd:f:p:P:hH:N:V:vs:t:", longopts, NULL)) != EOF)
 		switch (c) {
 		case 'o':
 			descriptors = atoi(optarg);
--- nfs-utils-1.0.10.orig/utils/nfsstat/nfsstat.man
+++ nfs-utils-1.0.10/utils/nfsstat/nfsstat.man
@@ -14,36 +14,36 @@
 displays statistics kept about NFS client and server activity.
 .SH OPTIONS
 .TP
-.B -s, --server
+.B \-s, \-\-server
 Print only server-side statistics. The default is to print both server and
 client statistics.
 .TP
-.B -c, --client
+.B \-c, \-\-client
 Print only client-side statistics.
 .TP
-.B -n, --nfs
+.B \-n, \-\-nfs
 Print only NFS statistics. The default is to print both NFS and RPC
 information.
 .TP
-.B -2
+.B \-2
 Print only NFS v2 statistics. The default is to only print information
 about the versions of \fBNFS\fR that have non-zero counts.
 .TP
-.B -3
+.B \-3
 Print only NFS v3 statistics. 
 .TP
-.B -4
+.B \-4
 Print only NFS v4 statistics. 
 .TP
-.B -m, --mounted
+.B \-m, \-\-mounted
 Print information about each of the mounted \fBNFS\fR file systems.
 
 If this option is used, all other options are ignored.
 .TP
-.B -r, --rpc
+.B \-r, \-\-rpc
 Print only RPC statistics.
 .TP
-.BI -o " facility
+.BI \-o " facility
 Display statistics for the specified facility, which must be one of:
 .RS
 .TP
@@ -69,27 +69,27 @@
 Display all of the above facilities.
 .RE
 .TP
-.B -v, --verbose
-This is equivalent to \fB-o all\fR.
+.B \-v, \-\-verbose
+This is equivalent to \fB\-o all\fR.
 .SH EXAMPLES
 .TP
-.B nfsstat -o all -234
+.B nfsstat \-o all \-234
 Show all information about all versions of \fBNFS\fR.
 .TP
-.B nfsstat --verbose -234
+.B nfsstat \-\-verbose \-234
 Same as above.
 .TP
-.B nfsstat -o all
+.B nfsstat \-o all
 Show all information about about active versions of \fBNFS\fR.
 .TP
-.B nfsstat --nfs --server -3
+.B nfsstat \-\-nfs \-\-server \-3
 Show statistics for \fBNFS\fR version 3 server.
 .TP
-.B nfsstat -m
+.B nfsstat \-m
 Show information about mounted \fBNFS\fR filesystems.
 .\" --------------------- DISPLAY --------------------------------
 .SH DISPLAY
-The \fBFlags\fR output from the \fB-m\fR option is the same as the
+The \fBFlags\fR output from the \fB\-m\fR option is the same as the
 flags give to the \fBmount\fR command.
 .\" --------------------- FILES ----------------------------------
 .SH FILES
@@ -111,11 +111,11 @@
 .BR nfs (5).
 .\" ---------------------- BUGS ----------------------------------
 .SH BUGS
-The default output has be changed.  To get the old default output you must run \fBnfsstat --auto -2\fR.
+The default output has be changed.  To get the old default output you must run \fBnfsstat \-\-auto \-2\fR.
 .P
-The function of the \fB-v\fR and \fB-a\fR options have changed. The \fB-a\fR option
-is now reserved for future use. The \fB-v\fR does what the \fB-a\fR option used to do,
-and the new \fB-[234]\fR options replace the \fB-v\fR option.
+The function of the \fB\-v\fR and \fB\-a\fR options have changed. The \fB\-a\fR option
+is now reserved for future use. The \fB\-v\fR does what the \fB\-a\fR option used to do,
+and the new \fB\-[234]\fR options replace the \fB\-v\fR option.
 .P
 The \fBDisplay\fR section should be more complete.
 .P
--- nfs-utils-1.0.10.orig/utils/rquotad/rquota.h
+++ nfs-utils-1.0.10/utils/rquotad/rquota.h
@@ -0,0 +1,155 @@
+/*
+ * Please do not edit this file.
+ * It was generated using rpcgen.
+ */
+
+#ifndef _RQUOTA_H_RPCGEN
+#define _RQUOTA_H_RPCGEN
+
+#include <rpc/rpc.h>
+
+#ifndef IXDR_GET_INT32
+#define IXDR_GET_INT32(buf) IXDR_GET_LONG((buf))
+#endif
+#ifndef IXDR_PUT_INT32
+#define IXDR_PUT_INT32(buf, v) IXDR_PUT_LONG((buf), (v))
+#endif
+#ifndef IXDR_GET_U_INT32
+#define IXDR_GET_U_INT32(buf) IXDR_GET_U_LONG((buf))
+#endif
+#ifndef IXDR_PUT_U_INT32
+#define IXDR_PUT_U_INT32(buf, v) IXDR_PUT_U_LONG((buf), (v))
+#endif
+#define RQ_PATHLEN 1024
+
+struct getquota_args {
+	char *gqa_pathp;
+	int gqa_uid;
+};
+typedef struct getquota_args getquota_args;
+#ifdef __cplusplus 
+extern "C" bool_t xdr_getquota_args(XDR *, getquota_args*);
+#elif __STDC__ 
+extern  bool_t xdr_getquota_args(XDR *, getquota_args*);
+#else /* Old Style C */ 
+bool_t xdr_getquota_args();
+#endif /* Old Style C */ 
+
+
+struct ext_getquota_args {
+	char *gqa_pathp;
+	int gqa_type;
+	int gqa_id;
+};
+typedef struct ext_getquota_args ext_getquota_args;
+#ifdef __cplusplus 
+extern "C" bool_t xdr_ext_getquota_args(XDR *, ext_getquota_args*);
+#elif __STDC__ 
+extern  bool_t xdr_ext_getquota_args(XDR *, ext_getquota_args*);
+#else /* Old Style C */ 
+bool_t xdr_ext_getquota_args();
+#endif /* Old Style C */ 
+
+
+struct rquota {
+	int rq_bsize;
+	bool_t rq_active;
+	u_int rq_bhardlimit;
+	u_int rq_bsoftlimit;
+	u_int rq_curblocks;
+	u_int rq_fhardlimit;
+	u_int rq_fsoftlimit;
+	u_int rq_curfiles;
+	u_int rq_btimeleft;
+	u_int rq_ftimeleft;
+};
+typedef struct rquota rquota;
+#ifdef __cplusplus 
+extern "C" bool_t xdr_rquota(XDR *, rquota*);
+#elif __STDC__ 
+extern  bool_t xdr_rquota(XDR *, rquota*);
+#else /* Old Style C */ 
+bool_t xdr_rquota();
+#endif /* Old Style C */ 
+
+
+enum gqr_status {
+	Q_OK = 1,
+	Q_NOQUOTA = 2,
+	Q_EPERM = 3,
+};
+typedef enum gqr_status gqr_status;
+#ifdef __cplusplus 
+extern "C" bool_t xdr_gqr_status(XDR *, gqr_status*);
+#elif __STDC__ 
+extern  bool_t xdr_gqr_status(XDR *, gqr_status*);
+#else /* Old Style C */ 
+bool_t xdr_gqr_status();
+#endif /* Old Style C */ 
+
+
+struct getquota_rslt {
+	gqr_status status;
+	union {
+		rquota gqr_rquota;
+	} getquota_rslt_u;
+};
+typedef struct getquota_rslt getquota_rslt;
+#ifdef __cplusplus 
+extern "C" bool_t xdr_getquota_rslt(XDR *, getquota_rslt*);
+#elif __STDC__ 
+extern  bool_t xdr_getquota_rslt(XDR *, getquota_rslt*);
+#else /* Old Style C */ 
+bool_t xdr_getquota_rslt();
+#endif /* Old Style C */ 
+
+
+#define RQUOTAPROG ((u_int32_t)100011)
+#define RQUOTAVERS ((u_int32_t)1)
+
+#ifdef __cplusplus
+#define RQUOTAPROC_GETQUOTA ((u_int32_t)1)
+extern "C" getquota_rslt * rquotaproc_getquota_1(getquota_args *, CLIENT *);
+extern "C" getquota_rslt * rquotaproc_getquota_1_svc(getquota_args *, struct svc_req *);
+#define RQUOTAPROC_GETACTIVEQUOTA ((u_int32_t)2)
+extern "C" getquota_rslt * rquotaproc_getactivequota_1(getquota_args *, CLIENT *);
+extern "C" getquota_rslt * rquotaproc_getactivequota_1_svc(getquota_args *, struct svc_req *);
+
+#elif __STDC__
+#define RQUOTAPROC_GETQUOTA ((u_int32_t)1)
+extern  getquota_rslt * rquotaproc_getquota_1(getquota_args *, CLIENT *);
+extern  getquota_rslt * rquotaproc_getquota_1_svc(getquota_args *, struct svc_req *);
+#define RQUOTAPROC_GETACTIVEQUOTA ((u_int32_t)2)
+extern  getquota_rslt * rquotaproc_getactivequota_1(getquota_args *, CLIENT *);
+extern  getquota_rslt * rquotaproc_getactivequota_1_svc(getquota_args *, struct svc_req *);
+
+#else /* Old Style C */ 
+#define RQUOTAPROC_GETQUOTA ((u_int32_t)1)
+extern  getquota_rslt * rquotaproc_getquota_1();
+extern  getquota_rslt * rquotaproc_getquota_1_svc();
+#define RQUOTAPROC_GETACTIVEQUOTA ((u_int32_t)2)
+extern  getquota_rslt * rquotaproc_getactivequota_1();
+extern  getquota_rslt * rquotaproc_getactivequota_1_svc();
+#endif /* Old Style C */ 
+#define EXT_RQUOTAVERS ((u_int32_t)2)
+
+#ifdef __cplusplus
+extern "C" getquota_rslt * rquotaproc_getquota_2(ext_getquota_args *, CLIENT *);
+extern "C" getquota_rslt * rquotaproc_getquota_2_svc(ext_getquota_args *, struct svc_req *);
+extern "C" getquota_rslt * rquotaproc_getactivequota_2(ext_getquota_args *, CLIENT *);
+extern "C" getquota_rslt * rquotaproc_getactivequota_2_svc(ext_getquota_args *, struct svc_req *);
+
+#elif __STDC__
+extern  getquota_rslt * rquotaproc_getquota_2(ext_getquota_args *, CLIENT *);
+extern  getquota_rslt * rquotaproc_getquota_2_svc(ext_getquota_args *, struct svc_req *);
+extern  getquota_rslt * rquotaproc_getactivequota_2(ext_getquota_args *, CLIENT *);
+extern  getquota_rslt * rquotaproc_getactivequota_2_svc(ext_getquota_args *, struct svc_req *);
+
+#else /* Old Style C */ 
+extern  getquota_rslt * rquotaproc_getquota_2();
+extern  getquota_rslt * rquotaproc_getquota_2_svc();
+extern  getquota_rslt * rquotaproc_getactivequota_2();
+extern  getquota_rslt * rquotaproc_getactivequota_2_svc();
+#endif /* Old Style C */ 
+
+#endif /* !_RQUOTA_H_RPCGEN */
--- nfs-utils-1.0.10.orig/utils/rquotad/rquota_xdr.c
+++ nfs-utils-1.0.10/utils/rquotad/rquota_xdr.c
@@ -0,0 +1,215 @@
+/*
+ * Please do not edit this file.
+ * It was generated using rpcgen.
+ */
+
+#include "rquota.h"
+
+bool_t
+xdr_getquota_args(xdrs, objp)
+	XDR *xdrs;
+	getquota_args *objp;
+{
+
+	 if (!xdr_string(xdrs, &objp->gqa_pathp, RQ_PATHLEN)) {
+		 return (FALSE);
+	 }
+	 if (!xdr_int(xdrs, &objp->gqa_uid)) {
+		 return (FALSE);
+	 }
+	return (TRUE);
+}
+
+bool_t
+xdr_ext_getquota_args(xdrs, objp)
+	XDR *xdrs;
+	ext_getquota_args *objp;
+{
+
+	 if (!xdr_string(xdrs, &objp->gqa_pathp, RQ_PATHLEN)) {
+		 return (FALSE);
+	 }
+	 if (!xdr_int(xdrs, &objp->gqa_type)) {
+		 return (FALSE);
+	 }
+	 if (!xdr_int(xdrs, &objp->gqa_id)) {
+		 return (FALSE);
+	 }
+	return (TRUE);
+}
+
+bool_t
+xdr_rquota(xdrs, objp)
+	XDR *xdrs;
+	rquota *objp;
+{
+
+
+	 if (xdrs->x_op == XDR_ENCODE) {
+		int32_t *buf = XDR_INLINE(xdrs,10 * BYTES_PER_XDR_UNIT);
+		if (buf == NULL) {
+		 if (!xdr_int(xdrs, &objp->rq_bsize)) {
+			 return (FALSE);
+		 }
+		 if (!xdr_bool(xdrs, &objp->rq_active)) {
+			 return (FALSE);
+		 }
+		 if (!xdr_u_int(xdrs, &objp->rq_bhardlimit)) {
+			 return (FALSE);
+		 }
+		 if (!xdr_u_int(xdrs, &objp->rq_bsoftlimit)) {
+			 return (FALSE);
+		 }
+		 if (!xdr_u_int(xdrs, &objp->rq_curblocks)) {
+			 return (FALSE);
+		 }
+		 if (!xdr_u_int(xdrs, &objp->rq_fhardlimit)) {
+			 return (FALSE);
+		 }
+		 if (!xdr_u_int(xdrs, &objp->rq_fsoftlimit)) {
+			 return (FALSE);
+		 }
+		 if (!xdr_u_int(xdrs, &objp->rq_curfiles)) {
+			 return (FALSE);
+		 }
+		 if (!xdr_u_int(xdrs, &objp->rq_btimeleft)) {
+			 return (FALSE);
+		 }
+		 if (!xdr_u_int(xdrs, &objp->rq_ftimeleft)) {
+			 return (FALSE);
+		 }
+
+	  }
+	  else {
+		 (void) IXDR_PUT_INT32(buf,objp->rq_bsize);
+		 (void) IXDR_PUT_BOOL(buf,objp->rq_active);
+		 (void) IXDR_PUT_U_INT32(buf,objp->rq_bhardlimit);
+		 (void) IXDR_PUT_U_INT32(buf,objp->rq_bsoftlimit);
+		 (void) IXDR_PUT_U_INT32(buf,objp->rq_curblocks);
+		 (void) IXDR_PUT_U_INT32(buf,objp->rq_fhardlimit);
+		 (void) IXDR_PUT_U_INT32(buf,objp->rq_fsoftlimit);
+		 (void) IXDR_PUT_U_INT32(buf,objp->rq_curfiles);
+		 (void) IXDR_PUT_U_INT32(buf,objp->rq_btimeleft);
+		 (void) IXDR_PUT_U_INT32(buf,objp->rq_ftimeleft);
+	  }
+
+ 	 return (TRUE);
+	} else if (xdrs->x_op == XDR_DECODE) {
+		int32_t *buf = XDR_INLINE(xdrs,10 * BYTES_PER_XDR_UNIT);
+		if (buf == NULL) {
+		 if (!xdr_int(xdrs, &objp->rq_bsize)) {
+			 return (FALSE);
+		 }
+		 if (!xdr_bool(xdrs, &objp->rq_active)) {
+			 return (FALSE);
+		 }
+		 if (!xdr_u_int(xdrs, &objp->rq_bhardlimit)) {
+			 return (FALSE);
+		 }
+		 if (!xdr_u_int(xdrs, &objp->rq_bsoftlimit)) {
+			 return (FALSE);
+		 }
+		 if (!xdr_u_int(xdrs, &objp->rq_curblocks)) {
+			 return (FALSE);
+		 }
+		 if (!xdr_u_int(xdrs, &objp->rq_fhardlimit)) {
+			 return (FALSE);
+		 }
+		 if (!xdr_u_int(xdrs, &objp->rq_fsoftlimit)) {
+			 return (FALSE);
+		 }
+		 if (!xdr_u_int(xdrs, &objp->rq_curfiles)) {
+			 return (FALSE);
+		 }
+		 if (!xdr_u_int(xdrs, &objp->rq_btimeleft)) {
+			 return (FALSE);
+		 }
+		 if (!xdr_u_int(xdrs, &objp->rq_ftimeleft)) {
+			 return (FALSE);
+		 }
+
+	  }
+	  else {
+		 objp->rq_bsize = IXDR_GET_INT32(buf);
+		 objp->rq_active = IXDR_GET_BOOL(buf);
+		 objp->rq_bhardlimit = IXDR_GET_U_INT32(buf);
+		 objp->rq_bsoftlimit = IXDR_GET_U_INT32(buf);
+		 objp->rq_curblocks = IXDR_GET_U_INT32(buf);
+		 objp->rq_fhardlimit = IXDR_GET_U_INT32(buf);
+		 objp->rq_fsoftlimit = IXDR_GET_U_INT32(buf);
+		 objp->rq_curfiles = IXDR_GET_U_INT32(buf);
+		 objp->rq_btimeleft = IXDR_GET_U_INT32(buf);
+		 objp->rq_ftimeleft = IXDR_GET_U_INT32(buf);
+	  }
+	 return(TRUE);
+	}
+
+	 if (!xdr_int(xdrs, &objp->rq_bsize)) {
+		 return (FALSE);
+	 }
+	 if (!xdr_bool(xdrs, &objp->rq_active)) {
+		 return (FALSE);
+	 }
+	 if (!xdr_u_int(xdrs, &objp->rq_bhardlimit)) {
+		 return (FALSE);
+	 }
+	 if (!xdr_u_int(xdrs, &objp->rq_bsoftlimit)) {
+		 return (FALSE);
+	 }
+	 if (!xdr_u_int(xdrs, &objp->rq_curblocks)) {
+		 return (FALSE);
+	 }
+	 if (!xdr_u_int(xdrs, &objp->rq_fhardlimit)) {
+		 return (FALSE);
+	 }
+	 if (!xdr_u_int(xdrs, &objp->rq_fsoftlimit)) {
+		 return (FALSE);
+	 }
+	 if (!xdr_u_int(xdrs, &objp->rq_curfiles)) {
+		 return (FALSE);
+	 }
+	 if (!xdr_u_int(xdrs, &objp->rq_btimeleft)) {
+		 return (FALSE);
+	 }
+	 if (!xdr_u_int(xdrs, &objp->rq_ftimeleft)) {
+		 return (FALSE);
+	 }
+	return (TRUE);
+}
+
+bool_t
+xdr_gqr_status(xdrs, objp)
+	XDR *xdrs;
+	gqr_status *objp;
+{
+
+	 if (!xdr_enum(xdrs, (enum_t *)objp)) {
+		 return (FALSE);
+	 }
+	return (TRUE);
+}
+
+bool_t
+xdr_getquota_rslt(xdrs, objp)
+	XDR *xdrs;
+	getquota_rslt *objp;
+{
+
+	 if (!xdr_gqr_status(xdrs, &objp->status)) {
+		 return (FALSE);
+	 }
+	switch (objp->status) {
+	case Q_OK:
+		 if (!xdr_rquota(xdrs, &objp->getquota_rslt_u.gqr_rquota)) {
+			 return (FALSE);
+		 }
+		break;
+	case Q_NOQUOTA:
+		break;
+	case Q_EPERM:
+		break;
+	default:
+		return (FALSE);
+	}
+	return (TRUE);
+}
--- nfs-utils-1.0.10.orig/utils/showmount/showmount.man
+++ nfs-utils-1.0.10/utils/showmount/showmount.man
@@ -21,7 +21,7 @@
 The output from
 .B showmount
 is designed to
-appear as though it were processed through ``sort -u''.
+appear as though it were processed through ``sort \-u''.
 .SH OPTIONS
 .TP
 .BR \-a " or " \-\-all
--- nfs-utils-1.0.10.orig/debian/bzero.patch
+++ nfs-utils-1.0.10/debian/bzero.patch
@@ -0,0 +1,11 @@
+--- nfs-utils-1.0.9.orig/support/nfs/svc_socket.c
++++ nfs-utils-1.0.9/support/nfs/svc_socket.c
+@@ -35,6 +35,8 @@
+ # define __close(f)		close ((f))
+ #endif
+ 
++#define __bzero(d,n)		memset((d),'\0',(n))
++
+ static int
+ svc_socket (u_long number, int type, int protocol, int reuse)
+ {
--- nfs-utils-1.0.10.orig/debian/control
+++ nfs-utils-1.0.10/debian/control
@@ -0,0 +1,57 @@
+Source: nfs-utils
+Priority: standard
+Section: net
+Maintainer: Anibal Monsalve Salazar <anibal@debian.org>
+Uploaders: Steinar H. Gunderson <sesse@debian.org>, Daniel Baumann <daniel@debian.org>
+Build-Depends: debhelper (>= 5), libwrap0-dev, libevent-dev, libnfsidmap-dev, libkrb5-dev, libgssapi-dev, librpcsecgss-dev, perl, pkg-config
+Build-Conflicts: librpcsecgss-dev (= 0.14-1)
+Standards-Version: 3.7.2
+
+Package: nfs-kernel-server
+Priority: optional
+Architecture: any
+Depends: nfs-common (>= 1:1.0.8-1), ucf, lsb-base (>= 1.3-9ubuntu3), ${shlibs:Depends}
+Provides: knfs, nfs-server
+Conflicts: knfs, nfs-server
+Replaces: knfs, nfs-server
+Description: Kernel NFS server support
+ Use this package if you want to use the kernel-mode NFS server.
+ The user-mode NFS server in the "nfs-user-server" package is slower
+ and less featureful but easier to debug than the kernel-mode server.
+ .
+ Upstream: SourceForge project "nfs", CVS module nfs-utils.
+ .
+  Homepage: http://nfs.sourceforge.net/
+
+Package: nfs-common
+Architecture: any
+Depends: portmap, adduser, ucf, lsb-base (>= 1.3-9ubuntu3), netbase (>= 4.24), ${shlibs:Depends}
+Provides: nfs-client
+Conflicts: nfs-client
+Replaces: nfs-client, nfs-kernel-server (<< 1:1.0.7-5)
+Description: NFS support files common to client and server
+ Use this package on any machine that uses NFS, either as client or
+ server.  Programs included: lockd, statd, showmount, nfsstat, gssd
+ and idmapd.
+ .
+ Upstream: SourceForge project "nfs", CVS module nfs-utils.
+ .
+  Homepage: http://nfs.sourceforge.net/
+
+Package: nhfsstone
+Priority: extra
+Architecture: any
+Depends: nfs-common, ${shlibs:Depends}
+Replaces: nfs-kernel-server
+Description: NFS benchmark program
+ nhfsstone (pronounced n-f-s-stone, the "h" is silent) is used on a
+ NFS client to generate an artificial load with a particular mix of
+ NFS operations. It reports the average response time of the server
+ in milliseconds per call and the load in calls per second. The
+ program adjusts its calling patterns based on the client's kernel
+ NFS statistics and the elapsed time. Load can be generated over a
+ given time or number of NFS calls.
+ .
+ Upstream: SourceForge project "nfs", CVS module nfs-utils.
+ .
+  Homepage: http://nfs.sourceforge.net/
--- nfs-utils-1.0.10.orig/debian/rules
+++ nfs-utils-1.0.10/debian/rules
@@ -0,0 +1,65 @@
+#!/usr/bin/make -f
+# Sample debian/rules that uses debhelper. GNU copyright 1997 by Joey Hess.
+
+DEB_BUILD_GNU_TYPE	:= $(shell dpkg-architecture -qDEB_BUILD_GNU_TYPE)
+DEB_HOST_GNU_TYPE	:= $(shell dpkg-architecture -qDEB_HOST_GNU_TYPE)
+DEB_HOST_ARCH		:= $(shell dpkg-architecture -qDEB_HOST_ARCH)
+DEB_HOST_ARCH_OS	:= $(shell dpkg-architecture -qDEB_HOST_ARCH_OS)
+
+# Temporary root
+DEBTMP	:= $(shell pwd)/debian/tmp
+
+build: build-stamp
+build-stamp:
+	dh_testdir
+ifeq ($(DEB_HOST_ARCH),ia64)
+	patch -p1 < debian/bzero.patch
+endif
+	CFLAGS="-g -O2 -Wall" ./configure \
+		--mandir='$${prefix}/share/man' \
+		--enable-secure-statd 
+	$(MAKE)
+	touch build-stamp
+
+clean:
+	dh_testdir
+	dh_testroot
+	rm -f build-stamp
+	rm -rf $(DEBTMP)
+	-$(MAKE) distclean
+	dh_clean
+
+binary-indep: build
+binary-arch: build
+	dh_testdir
+	dh_testroot
+	dh_clean -k
+	dh_installdirs
+	mkdir $(DEBTMP)
+	$(MAKE) DESTDIR='$(DEBTMP)' install
+	dh_install
+	
+	# Fix up the manpages
+	for f in lockd statd showmount; do \
+	  perl -pi -e "s#/usr(/sbin/(rpc\\.)?$$f)#\$$1#g" \
+	    debian/tmp/usr/share/man/man8/$$f.8; \
+	done;
+	
+	dh_installdocs -A
+	dh_installdocs -pnfs-common debian/README.Debian.nfsv4
+	install -m 0755 debian/nfs-common.init debian/nfs-common/etc/init.d/nfs-common
+	install -m 0755 debian/nfs-kernel-server.init debian/nfs-kernel-server/etc/init.d/nfs-kernel-server
+	dh_installman
+	dh_link
+	dh_installchangelogs ChangeLog
+	dh_strip
+	dh_compress
+	dh_fixperms
+	dh_installdeb
+	dh_shlibdeps
+	dh_gencontrol
+	dh_md5sums
+	dh_builddeb
+
+binary: binary-indep binary-arch
+.PHONY: build clean binary-indep binary-arch binary
--- nfs-utils-1.0.10.orig/debian/changelog
+++ nfs-utils-1.0.10/debian/changelog
@@ -0,0 +1,1055 @@
+nfs-utils (1:1.0.10-2) unstable; urgency=low
+
+  * Remove leftover log file from the .diff.gz.
+  * Build package with -O2; it got lost somewhere along the way.
+  * Replace - by \- in man pages (exports, nfsstat, showmount) where
+    appropriate.
+  * Add Required-Stop to the nfs-common and nfs-kernel-server init script
+    blocks to match the Required-Start directives.
+  * Finally remove DH_VERBOSE=1 from debian/rules.
+  * Add a reference to Trond Myklebust's client patch sets in
+    README.Debian.nfsv4.
+  * Handle issues with the nfs entries missing in /etc/services. (Closes:
+    #392276).
+    * Depend on netbase (>= 4.24), to make sure we have a version that has the
+      entries in the first place.
+    * Document that the entries might be missing still in README.Debian.nfsv4
+      (in case the user refused to replace a modified version of
+      /etc/services), and that they might need re-adding.
+    * Make the init script check that the lines are there before starting
+      rpc.gssd, and refer to the README otherwise.
+
+ -- Steinar H. Gunderson <sesse@debian.org>  Wed, 11 Oct 2006 15:15:49 +0200
+
+nfs-utils (1:1.0.10-1) unstable; urgency=low
+
+  * New upstream release.
+    * Fixes issues with missing write_oid() function. (Closes: #386117)
+  * Drop versioned dependency on libnfsidmap1, now that libnfsidmap-dev has
+    fixed shlibs. This makes it possible to build against libnfsidmap2.
+    (Closes: #386116)
+  * Update README.Debian.nfsv4.
+    * Remove the part about a patched mount; the NFSv4 patch has been enabled
+      in mount for some time.
+    * Note that the special export structure might go away in the future.
+    * Note that you will need idmapd and possibly gssd/svcgssd enabled.
+
+ -- Steinar H. Gunderson <sesse@debian.org>  Wed,  6 Sep 2006 00:30:32 +0200
+
+nfs-utils (1:1.0.9-12) unstable; urgency=low
+
+  * Really remove dependency on sysvinit.
+
+ -- Steinar H. Gunderson <sesse@debian.org>  Tue,  5 Sep 2006 13:59:29 +0200
+
+nfs-utils (1:1.0.9-11) unstable; urgency=low
+
+  * In the exports man page, document that there might be sensitive non-root
+    gids as well as uids, for instance gid staff. (Closes: #385377)
+  * Remove unnecessary dependency on sysvinit, in line with the Ubuntu
+    packages.
+  * Change the versioned build-dependency on librpcsecgss-dev (>= 0.14-2)
+    to a build-conflict on 0.14-1, as that is the only version, and it's
+    easier for backports and other distributions without the new version of
+    librpcsecgss.
+
+ -- Steinar H. Gunderson <sesse@debian.org>  Thu, 31 Aug 2006 01:53:45 +0200
+
+nfs-utils (1:1.0.9-10) unstable; urgency=low
+
+  * The -n option (short option for --no-tcp) to rpc.mountd was set
+    to take a parameter, even though --no-tcp doesn't take any, the
+    parameter is never used and the help doesn't mention any. Remove
+    the colon after 'n' in the getopt string to fix it.
+  * Add a versioned dependency from nfs-common to libnfsidmap1 (>= 0.16-3)
+    temporarily, to work around #384688.
+
+ -- Steinar H. Gunderson <sesse@debian.org>  Sat, 26 Aug 2006 03:29:09 +0200
+
+nfs-utils (1:1.0.9-9) unstable; urgency=medium
+
+  * Patched svc_socket.c to define __bzero only on ia64.
+    Closes: #384552.
+ 
+ -- Anibal Monsalve Salazar <anibal@debian.org>  Fri, 25 Aug 2006 11:45:07 +1000
+
+nfs-utils (1:1.0.9-8) unstable; urgency=medium
+
+  * In the init scripts, don't attempt to use pid files; the daemons don't
+    leave them, and --make-pidfile gives wrong pid files since all the daemons
+    fork by themselves. Thus, multiple invocations of "start" could leave
+    multiple daemons lying around, which could cause all sorts of problems.
+
+ -- Steinar H. Gunderson <sesse@debian.org>  Thu, 17 Aug 2006 17:24:11 +0200
+
+nfs-utils (1:1.0.9-7) unstable; urgency=low
+
+  * New sourceful upload to force rebuild against librpcsecgss3, to get all
+    architectures in sync and make sure rpc.gssd actually has a proper library
+    to link against.
+  * Build-depend against librpcsecgss-dev (>= 0.14-2), since that's when
+    the package name bump happened.
+
+ -- Steinar H. Gunderson <sesse@debian.org>  Sat, 12 Aug 2006 19:55:35 +0200
+
+nfs-utils (1:1.0.9-6) unstable; urgency=low
+
+  * Enable idmapd by default if we find an /etc/exports file, as NFSv4 exports
+    need idmapd. (See the init script for the complete reasoning). Also start
+    nfs-common on initial installation of nfs-kernel-server, as we don't want
+    to reboot or restart nfs-common manually just to get idmapd working the
+    first time. (Closes: #381366)
+
+ -- Steinar H. Gunderson <sesse@debian.org>  Mon,  7 Aug 2006 21:27:37 +0200
+
+nfs-utils (1:1.0.9-5) unstable; urgency=low
+
+  * Put rpc.svcgssd back into place; removing it was obviously not what
+    upstream intended to do after all. (Closes: #378686)
+    * Add rpc.svcgssd to nfs-kernel-server.install.
+    * Add the svcgssd(8) man page, as well as the rpc.svcgssd(8) symlink.
+    * Add NEED_SVCGSSD and RPCSECGSSDOPTS options to nfs-kernel-server.default.
+    * Start and rpc.svcgssd in the nfs-kernel-server init script. Currently,
+      no autodetection is done; you'll need to enable it manually. (We can't
+      start it regardless, since it bombs out if there is no adequate nfs/*
+      entry in the keytab.)
+  * Remove obsolete RPCGSSDOPTS option from the nfs-kernel-server init script.
+
+ -- Steinar H. Gunderson <sesse@debian.org>  Wed, 19 Jul 2006 14:06:33 +0200
+
+nfs-utils (1:1.0.9-4) unstable; urgency=low
+
+  * Remove versioned dependency on coreutils, as we don't use it indirectly,
+    only via ucf (so the dependency should be there). This makes the package
+    somewhat easier to backport to sarge.
+  * Remove the word "Debian" from our patch against the exports(5) man page,
+    as Debian is not the only distribution using these packages.
+
+ -- Steinar H. Gunderson <sesse@debian.org>  Sun, 16 Jul 2006 01:59:13 +0200
+
+nfs-utils (1:1.0.9-3) unstable; urgency=low
+
+  * Don't automatically assume that the kernel is modular if /sbin/modprobe
+    is available, check for /proc/modules as well; patch from Nicolas
+    Trecourt. (Closes: #377685)
+
+ -- Steinar H. Gunderson <sesse@debian.org>  Thu, 13 Jul 2006 21:39:08 +0200
+
+nfs-utils (1:1.0.9-2) unstable; urgency=low
+
+  * Merge changes from 1.0.9-1 and 1.0.9pre1-4:
+    * Disable mount.nfs once again; it's not ready for regular use according
+      to upstream.
+    * Revert mount options patch to mount.nfs; it's irrelevant as long as we
+      don't install the binary.
+  * Install the new rpcdebug program.
+  * Remove the {mount,umount}.nfs manpages.
+
+ -- Steinar H. Gunderson <sesse@debian.org>  Sun,  9 Jul 2006 00:16:54 +0200
+
+nfs-utils (1:1.0.9-1) unstable; urgency=high
+
+  * Updated co-mantainer mail address.
+  * New upstream release.
+    - Added 'mount.nfs' utility which can be used as a mount helper
+      to mount nfs filesystems. It does not yet support 'user' mounts.
+    - Makefile/autoconf tidyups
+    - No compiles with no warnings
+    - deleted debian/* at request of debian maintainer
+    - deleted assorted other unused files
+    - mountd can be run multi-threaded for configurations with many hundreds
+      of clients (mountd -t 20).  Default is single-threaded
+    - Support for selection NFS version to be exported, and protocol to
+      use.  This requires kernel patches that should be in linux 2.6.19.
+    - Use 65534 rather than -2 for default anon.  This makes no difference in many
+      cases, but is important in some.
+    - New utility 'rpcdebug' for controlled kernel 'debug' options for nfs and nfsd.
+    - nfsstat reports NFSv4 operation statistics that should be available in
+      linux 2.6.18.
+    - assorted other fixes
+
+ -- Anibal Monsalve Salazar <anibal@debian.org>  Sat, 08 Jul 2006 14:26:40 +1000
+
+nfs-utils (1:1.0.8+1.0.9pre1-4) unstable; urgency=low
+
+  * Back out having separate mount.nfs; this is in line with upstream, who
+    wants to delay this to 1.0.10. 
+    * No longer install {mount,umount}.{nfs,nfs4} to /sbin.
+    * Revert patch applied in -3.
+
+ -- Steinar H. Gunderson <sesse@debian.org>  Sat,  8 Jul 2006 16:43:38 +0200
+
+nfs-utils (1:1.0.8+1.0.9pre1-3) unstable; urgency=high
+
+  * Add patch from upstream to check for common mount options like "user"
+    or "noauto". (Closes: #376839)
+  * Remove obsolete copying of config.{sub,guess} in debian/rules.
+
+ -- Steinar H. Gunderson <sesse@debian.org>  Fri,  7 Jul 2006 21:12:06 +0200
+
+nfs-utils (1:1.0.8+1.0.9pre1-2) unstable; urgency=low
+
+  * Provide LSB dependency information in the nfs-common and nfs-kernel-server
+    init scripts; replaces the obsolete chkconfig info. (Closes: #376976)
+  * Update the long descriptions.
+
+ -- Steinar H. Gunderson <sesse@debian.org>  Thu,  6 Jul 2006 19:37:58 +0200
+
+nfs-utils (1:1.0.8+1.0.9pre1-1) unstable; urgency=low
+
+  * New upstream release.
+    * debian/ directory removed from upstream; no need to repack or do ugly
+      hacks in debian/rules anymore.
+    * Obsoletes most Debian-specific patches, as they are already included
+      upstream. For reference, the patches that are still Debian-specific are:
+      * Use 65534 instead of -2 for anonuid, update manpage accordingly.
+      * Debian-specific information in exports man page.
+      * Don't use -rpath for gssd.
+      * Hardcode default mapping in svcgssd. Adjust patch to use uid/gid 
+        65534 instead of -2, for consistency; also remove double error
+        message. 
+      * Spelling fixes in nfsstat, showmount and statd man pages.
+    * Supports options to bind to specific IPs. (Closes: #246939, #312720)
+    * Include mount.nfs and friends, which will over time take over the job of
+      doing NFS mounting from util-linux.
+  * Complete sync with Ubuntu:
+    * Pull in changes to use LSB display functions in init scripts; adapted
+      to give output more like what was already in Debian, to fix a few bugs,
+      and use plain echo in "status" targets, where using LSB functions makes
+      no sense.
+    * Depend on lsb-base from nfs-common and nfs-kernel-server.
+  * Init script updates:
+    * Document "status" option in the nfs-common init script's help message.
+    * Drop "set -e"; it makes error checking wrt. the LSB functions harder.
+    * Drop obsolete "cd /".
+    * Fix syntax errors in "status" target.
+    * In the "status" target, don't check that the output of pidof matches the
+      pidfiles for gssd and idmapd, as they fork after start and thus get a
+      different pid.
+  * Include gss_clnt_send_err and gss_destroy_creds binaries.
+
+ -- Steinar H. Gunderson <sesse@debian.org>  Tue,  4 Jul 2006 18:55:51 +0200
+
+nfs-utils (1:1.0.8-10) unstable; urgency=high
+
+  * Added nfs-common dependency on coreutils (>= 5.93-1). The readlink
+    option -e was introduced since version 5.91 of coreutils. Closes:
+    #376285.
+
+ -- Anibal Monsalve Salazar <anibal@debian.org>  Sun, 02 Jul 2006 09:53:16 +1000
+
+nfs-utils (1:1.0.8-9) unstable; urgency=high
+
+  * svcgssd_proc.c: Temporary patch to do default mapping if we get an
+    error while trying to map a gss principal to the appropriate uid/gid.
+    This currently returns hardcoded values. Closes: #376258.
+
+ -- Anibal Monsalve Salazar <anibal@debian.org>  Sat, 01 Jul 2006 22:30:11 +1000
+
+nfs-utils (1:1.0.8-8) unstable; urgency=low
+
+  * Include yet more ucf md5sums for /etc/default/nfs-common and
+    /etc/default/nfs-kernel-server (/etc/exports was already OK); this time,
+    I've gone through the entire 1.0.7 series programmatically, so hopefully
+    there should finally be none left.
+
+ -- Steinar H. Gunderson <sesse@debian.org>  Wed, 14 Jun 2006 10:47:23 +0200
+
+nfs-utils (1:1.0.8-7) unstable; urgency=low
+
+  * For some odd reason (ie. human error) this package has branched into two
+    different versions from 1:1.0.8-5 on. This package rejoins the two branches.
+    The changelog from the other 1:1.0.8-5 (which was probably never accepted
+    except as part of 1:1.0.8-6) is repeated for convenience and automated bug
+    closing below:
+  * Patch nfs-common and nfs-kernel-server init scripts to make them more LSB
+    compatible, fixing issues with heartbeat2; based on patches by Kilian
+    CAVALOTTI. (Closes: #371084, #371085)
+    * Add --oknodo to start-stop-daemon in start targets, to make a second
+      "start" invocation return exit status 0.
+    * Add status targets to the two init scripts, with correct output and
+      exit codes.
+
+ -- Steinar H. Gunderson <sesse@debian.org>  Thu, 08 Jun 2006 17:31:28 +0200
+
+nfs-utils (1:1.0.8-5) unstable; urgency=low
+
+  * Make nfs-kernel-server depend on at least version 1.0.8 of nfs-common;
+    lots of stuff will break with an upstream version mismatch.
+
+ -- Steinar H. Gunderson <sesse@debian.org>  Wed,  7 Jun 2006 01:13:28 +0200
+
+nfs-utils (1:1.0.8-4) unstable; urgency=low
+
+  * Fix a few spelling errors in the man pages; patches from A Costa.
+    (Closes: #370561, #370562, #370563)
+
+ -- Steinar H. Gunderson <sesse@debian.org>  Tue,  6 Jun 2006 11:59:28 +0200
+
+nfs-utils (1:1.0.8-3) unstable; urgency=low
+
+  * The "what the heck, I uploaded an outdated 1:1.0.8-1 release without
+    the pkg-config fix and some other changes" release.
+  * Tweaks to debian/rules:
+    * Drop --sourcedir=debian/tmp from dh_install so we can also install files
+      directly from the debian/ directory.
+    * Minimize direct uses of install; move all the ucf installation into the
+      debhelper .install files.
+    * Remove some obsolete comments.
+  * Remove empty (modulo #DEBHELPER# tokens) nhfsstone.{postinst,prerm}
+    scripts.
+  * Clear out obsolete (pre-sarge) debconf and rc.d purging from postinst
+    script. (Same as in 1:1.0.7-10, but for nfs-kernel-server too, not just
+    nfs-common.) Minor style cleanup.
+  * Include the md5sum for /etc/default/nfs-kernel-server from 1:1.0.7-13, 
+    to make ucf not complain when upgrading from that version.
+
+ -- Steinar H. Gunderson <sesse@debian.org>  Sat,  3 Jun 2006 11:00:14 +0200
+
+nfs-utils (1:1.0.8-2) unstable; urgency=low
+
+  * Added missing dependency on pkg-config.
+
+ -- Anibal Monsalve Salazar <anibal@debian.org>  Fri, 02 Jun 2006 19:08:11 +1000
+
+nfs-utils (1:1.0.8-1) unstable; urgency=low
+
+  * New upstream version. (Closes: #364902)
+    * Repack without the debian/ directory; remove ugly hacks in
+      debian/rules that as a result are no longer needed. This also makes
+      the permissions in debian/ right.
+    * Forward-port all relevant patches from the old Debian diff.
+    * rpc.svcgssd no longer exists (it's consolidated into rpc.gssd); remove
+      all references to it in from the debian/ directory.
+    * Build-depend on libgssapi-dev and librpcsecgss-dev, as both as now
+      needed to build nfs-utils.
+    * Give DESTDIR instead of install_prefix to "make install" (install_prefix
+      no longer works).
+  * No longer handle gssapi_mech.conf via ucf; it is now managed by the
+    librpcsecgss package. Remove all references to it in debian/rules.
+  * We no longer need to run autoconf as a part of debian/rules; its results
+    are parts of the diff instead, as per usual packaging practices.
+    * Drop the build-dependency on autoconf2.13 and autotools-dev.
+    * No longer rm various autotools-generated files in the clean target.
+
+ -- Steinar H. Gunderson <sesse@debian.org>  Thu,  1 Jun 2006 01:59:39 +0200
+
+nfs-utils (1:1.0.7-19) unstable; urgency=low
+
+  * Include the md5sum for /etc/default/nfs-common from 1:1.0.7-15, to
+    make ucf not complain when upgrading from that version. (Closes: #368982)
+
+ -- Steinar H. Gunderson <sesse@debian.org>  Sat, 27 May 2006 12:54:50 +0200
+
+nfs-utils (1:1.0.7-18) unstable; urgency=low
+
+  * Make /etc/exports, /etc/default/nfs-{common,kernel-server},
+    /etc/idmapd.conf and /etc/gssapi_mech.conf be managed by ucf
+    instead of being conffiles. (Closes: #353501)
+    * Make directories /usr/share/nfs-{common,kernel-server}/conffiles,
+      and install files in there at debian/rules time. At the same time,
+      install the files with install instead of cp.
+    * Call ucf at postinst time to get the files in.
+    * Correspondingly, call ucf at purge time to remove them as needed (code
+      snippets lifted from autofs).
+    * Make nfs-common and nfs-kernel-server depend on ucf.
+    * Remove the call to dh_installinit -- since it was already not modifying
+      postinst/postrm/prerm scripts due to being called with -n (I must admit
+      I don't know why, but I assume this has a good reason :-) ) and we now
+      install the init script ourself (because we don't want dh_installinit
+      to install our .default files to /etc), it doesn't do anything useful
+      for us.
+    * Include .md5sum files with MD5 checksums of previous defaults shipped,
+      to ease the transition into ucf; at the moment, only checksums from
+      1:1.0.7-17 (the last non-ucf version) and 1:1.0.6-3.1 (the version
+      shipped in sarge) are included, but I think that should actually cover
+      all the defaults shipped in the period between as well.
+    * Install the .md5sum files in debian/rules.
+  * Remove call to dh_installexamples in debian/rules; we don't install any
+    examples.
+
+ -- Steinar H. Gunderson <sesse@debian.org>  Mon, 22 May 2006 01:44:33 +0200
+
+nfs-utils (1:1.0.7-17) unstable; urgency=low
+
+  * The umounting of rpc_pipefs is non-critical and will fail if there are
+    any active NFS mounts during, say, a restart. Thus, send its stderr to
+    /dev/null, and ignore its error status.
+  * Build-Depend on perl, as it's used in debian/rules.
+
+ -- Steinar H. Gunderson <sesse@debian.org>  Sun, 14 May 2006 18:22:19 +0200
+
+nfs-utils (1:1.0.7-16) unstable; urgency=high
+
+  * urgency=high; fixes an RC bug.
+  * If one upgraded from 1:1.0.7-13, /var/lib/nfs might never be set as owned
+    by statd. Bump the version check, so everything before this version gets
+    chowned properly. (Closes: #367009)
+  * Add more detailed explanations and links to the Debian wiki for
+    /etc/defaults/nfs-{common,kernel-server}. (Closes: #366989, #366990)
+
+ -- Steinar H. Gunderson <sesse@debian.org>  Sat, 13 May 2006 16:06:08 +0200
+
+nfs-utils (1:1.0.7-15) unstable; urgency=low
+
+  * /var/lib/nfs/state is not a directory; it shouldn't really be mkdir-ed
+    or chowned (unless it already exists, in which case it should be
+    chowned). However, /var/lib/nfs should be owned by statd, so it can
+    create the file there. (Really Closes: #366654)
+  * umount /var/lib/nfs/rpc_pipefs on /etc/init.d/nfs-common stop; not doing
+    so could prevent purging of nfs-common.
+
+ -- Steinar H. Gunderson <sesse@debian.org>  Thu, 11 May 2006 12:42:13 +0200
+
+nfs-utils (1:1.0.7-14) unstable; urgency=high
+
+  * urgency=high; fixes RC bugs (or at least, bugs that should have been RC).
+  * Add /var/lib/nfs/state to nfs-common.dirs, since we chown it in the
+    postinst. This would prevent nfs-common from configuring on initial
+    install. (Closes: #366654)
+  * Grep after "init_nf(sd|<tab>)" instead of "init_nfsd" in kallsyms, to work
+    around some odd symbol mangling problems on some alpha kernels.
+    (Closes: #363932)
+
+ -- Steinar H. Gunderson <sesse@debian.org>  Wed, 10 May 2006 22:00:59 +0200
+
+nfs-utils (1:1.0.7-13) unstable; urgency=low
+
+  * Up the Standards-Version to 3.7.2; no changes needed.
+  * Tidy up after the /home/statd mess if there was a chance the user ever
+    had 1:1.0.7-10 installed; based on patch from Oskar Liljeblad.
+    (Closes: #366182)
+  * Fix the version check for the chown-ing of /var/lib/nfs/sm etc.; I
+    forgot to include the epoch, so only new installs ever got statd running
+    as non-root. (Due to this, the version number to test against is of course
+    also bumped.)
+
+ -- Steinar H. Gunderson <sesse@debian.org>  Sat,  6 May 2006 01:50:10 +0200
+
+nfs-utils (1:1.0.7-12) unstable; urgency=low
+
+  * Move the home directory again (by request), this time to /var/lib/nfs.
+
+ -- Steinar H. Gunderson <sesse@debian.org>  Wed,  3 May 2006 21:27:18 +0200
+
+nfs-utils (1:1.0.7-11) unstable; urgency=low
+
+  * When creating statd user, create it with a home directory of /nonexistant;
+    it doesn't really require a home directory. (Closes: #365514, #365721)
+  * Fix the signal number for USR1 (actually, use the name instead) in
+    nhfsrun. (Closes: #365657)
+
+ -- Steinar H. Gunderson <sesse@debian.org>  Wed,  3 May 2006 19:51:17 +0200
+
+nfs-utils (1:1.0.7-10) unstable; urgency=low
+
+  * Intermediate 1.0.7 release, waiting for librpcsecgss to be uploaded into
+    Debian so we can upload 1.0.8.
+  * Clarify what the NEED_* options in /etc/default/nfs-common mean.
+    (Closes: #364625)
+  * Make /var/lib/nfs/{sm,sm.bak,state,rpc_pipefs} be owned by a new "statd"
+    user (created in postinst), causing rpc.statd to be run as that user
+    instead of root. (Closes: #240689)
+    * Make nfs-common depend on adduser.
+  * Clear out obsolete (pre-sarge) debconf and rc.d purging from postinst
+    script.
+  * Use invoke-rc.d in nfs-common and nfs-kernel-server prerms instead of
+    calling the /etc/init.d script directly; fixes two lintian warnings.
+
+ -- Steinar H. Gunderson <sesse@debian.org>  Thu, 27 Apr 2006 00:32:27 +0200
+
+nfs-utils (1:1.0.7-9) unstable; urgency=low
+
+  * When checking for nfsd support in the kernel, check for init_nfsd
+    (which is a function) rather than nfsd_version (which is a variable);
+    kernels compiled without CONFIG_KALLSYMS_ALL=y have only the former.
+    (Closes: #361026)
+
+ -- Steinar H. Gunderson <sesse@debian.org>  Thu,  6 Apr 2006 13:31:48 +0200
+
+nfs-utils (1:1.0.7-8) unstable; urgency=low
+
+  * Don't complain about missing sync/async for a read-only export.
+    (Closes: #265409)
+  * Implement --state-directory-path for rpc.mountd; most code borrowed
+    from rpc.statd. (Closes: #352387)
+    * Update mountd.man accordingly.
+
+ -- Steinar H. Gunderson <sesse@debian.org>  Wed,  5 Apr 2006 22:54:09 +0200
+
+nfs-utils (1:1.0.7-7) unstable; urgency=high
+
+  * urgency=high, fixes an RC bug.
+  * Let the init script test for kernel support before trying to start
+    nfs-kernel-server. (Closes: #360420)
+  * Include help on how to activate /etc/exports changes; text from
+    Martin Pool. (Closes: #239286)
+  * Document sync option in exports man page. (Closes: #297135)
+  * Give an example in /etc/exports. (Closes: #345460)
+  * Write a mini-HOWTO on how to get NFSv4 up and running. (Closes: #294468)
+    * Install it in debian/rules.
+
+ -- Steinar H. Gunderson <sesse@debian.org>  Wed,  5 Apr 2006 18:15:20 +0200
+
+nfs-utils (1:1.0.7-6) unstable; urgency=low
+
+  * Let the man-page fixup script in debian/rules look for the man pages in
+    the right place.
+  * Modprobe nfs4 along with nfs in the nfs-common init script. Also modprobe
+    rpcsec_gss_krb5 before we start gssd.
+  * Implement autodetection for NEED_IDMAPD and NEED_GSSD, based on /etc/fstab.
+  * Add a note to the top of /etc/defaults/nfs-common that the default is to
+    autodetect.
+  * Move /var/lib/nfs/rpc_pipefs from nfs-kernel-server.dirs to
+    nfs-common.dirs; it's needed by the client as well.
+  * Let dh_install install from debian/tmp/ instead of debian/tmp; it fixes
+    minor aesthetic issues in the build log.
+
+ -- Steinar H. Gunderson <sesse@debian.org>  Sat,  1 Apr 2006 02:46:53 +0200
+
+nfs-utils (1:1.0.7-5) unstable; urgency=low
+
+  * Non-non-maintainer-upload this time, it seems. :-)
+  * Don't let the init script fail if there wasn't any lockd threads to kill;
+    this could cause the package to fail configuration.
+  * Move to debhelper compatibility level 5.
+    * Use dh_install instead of dh_movefiles (actually a combination was used
+      earlier). Move stuff from *.files accordingly into *.install.
+    * mkdir debian/tmp manually before doing make install, and remove it
+      in the clean target.
+    * Use straight cp -a instead of dh_install for the files that _don't_
+      come from debian/tmp/ (the two /etc files).
+    * Fix the "fixups" part in debian/rules to reflect the behaviour of
+      dh_install compared to dh_movefiles (ie. don't rm lots of stuff in
+      debian/tmp, etc.).
+    * Make a debian/nfs-kernel-server.install listing explicitly the files
+      we want in that package; with dh_movefiles everything from make install
+      was implicitly put there. This has the side effect that the man pages
+      for rpc.gssd and idmap.conf are no longer put in nfs-kernel-server, but
+      in nfs-common, where they should be.
+    * Use dh_installman to install the manpages, to make sure they're in the
+      right place (and move the manpage lists from *.files to *.manpages
+      accordingly). List the rpc.* variants of the manpages in *.links,
+      instead of assuming dh_compress (!) will make them for us. Bonus points
+      for then not including the nonsensical rpc.* variants, such as
+      rpc.idmapd.conf(5).
+    * Don't mv lockd, statd and showmount manually from /usr/sbin to /sbin;
+      let the .install file do it for us.
+    * Remove *.conffiles; debhelper now sets everything in /etc as conffiles
+      automatically.
+    * Extend the debian/rules rm hack to the files we removed in this version
+      (ick).
+    * In debian/control, make nfs-common replace nfs-kernel-server
+      (<< 1:1.0.7-5), since the idmapd manpage switched packages.
+  * Remove old cruft in debian/rules file:
+    * Remove non-used dh_* programs.
+    * Remove obsolete source and diff targets.
+    * Remove SETGCC hack.
+  * Don't set rpath for rpc.gssd and rpc.svcgssd (fixes lintian warnings).
+
+ -- Steinar H. Gunderson <sesse@debian.org>  Tue, 28 Mar 2006 02:57:23 +0200
+
+nfs-utils (1:1.0.7-4) unstable; urgency=low
+
+  * Ack NMU. Thanks Steinar H. Gunderson.
+    Closes: #239230, #245449, #246904, #247473, #248300, #252081,
+    #287026, #294928, #303497, #310940, #323460, #326663, #332047,
+    #337836, #338292, #359024.
+  * Added Steinar H. Gunderson and Daniel Baumann as uploaders.
+  * Added homepage to package descriptions.
+  * Set Standards-Version to 3.6.2.
+  * Fixed outdated-autotools-helper-file.
+
+ -- Anibal Monsalve Salazar <anibal@debian.org>  Mon, 27 Mar 2006 13:22:51 +1100
+
+nfs-utils (1:1.0.7-3.1) unstable; urgency=low
+
+  * Non-maintainer upload.
+  * Set u+w on all files in debian/, so dch etc. actually works.
+  * Add /var/lib/nfs/v4recovery to nfs-kernel-server.dirs. (Closes: #337836).
+  * Add /var/lib/nfs/rpc_pipefs to nfs-kernel-server.dirs. (Closes: #310940).
+  * Fix problems with exportfs -o when there are multiple entries of the same
+    type for the same path that match a given client; patch from Fumihiko
+    Kakuma. (Closes: #245449)
+  * Start nfs-kernel-server even if /etc/exports is empty, as long as it
+    exists; patch from Alexis Huxley. (Closes: #246904) This patch also
+    happens to fix and thus Closes: #338292.
+  * When stopping daemons, do it even if they do not run as root; based on a
+    patch from Andreas Schmidt. (Closes: #247473)
+  * SIGKILL kernel lockd thread on stop, to make the kernel release all its
+    locks; patch from Jeffrey Layton. (Closes: #252081)
+  * Flush the kernel export table on stop; patch from Jeffrey Layton
+    (Closes: #248300).
+  * Change default root-squashed uid from -2 to 65534; the former changes
+    depending of the size of uid_t, and we want it to match the user "nobody"
+    (which has uid 65534). (Closes: #323460)
+  * Remove dependency on debconf, as it's no longer used. Also, don't run
+    dh_installdebconf anymore. (Closes: #332047)
+  * Check for /sbin/modprobe before using it, for non-modular kernels;
+    patch from Vincent Crvt. (Closes: #294928)
+  * Replaced the rather emtpy nhfsstone long description by the one from
+    its manpage. (Closes: #303497)
+  * Don't ship upstream README anymore, as it's not relevant for our users.
+    (Closes: #326663)
+  * Add the ability to start nfs-kernel-server niced; patch from Kimmo
+    Tervinen. (Closes: #287026)
+  * Escape '#' when writing export entries, so they are not mistakenly parsed
+    as comments when re-reading them. (Closes: #239230)
+  * Also Closes: #359024 automatically by recompiling package.
+
+ -- Steinar H. Gunderson <sesse@debian.org>  Sun, 26 Mar 2006 14:57:50 +0200
+
+nfs-utils (1:1.0.7-3) unstable; urgency=medium
+
+  * New maintainer, closes: #303559.
+
+ -- Anibal Monsalve Salazar <anibal@debian.org>  Fri, 08 Apr 2005 11:25:17 +1000
+
+nfs-utils (1:1.0.7-2) unstable; urgency=low
+
+  * Orphaning package.
+  * Upstream CVS sync:
+    > Support "no_acl" export option, for the few specially patched
+      kernels that understand it.  (Closes: #253824)
+    > Fix FTBTS on amd64.  (Closes: #297729)
+    > Update config.{guess,sub}.  (Closes: #300552)
+
+ -- Chip Salzenberg <chip@debian.org>  Thu,  7 Apr 2005 09:07:24 -0400
+
+nfs-utils (1:1.0.7-1) unstable; urgency=medium
+
+  * Acknowledge NMU; thanks to joeyh.  (closes: #287053)
+  * New upstream version:
+    > Add support for NFSv4.
+    > Ignore SIGPIPE, fixing a remote DOS.  Note that the previous
+      NMU already fixed this bug.  (CAN-2004-1014)
+    > At long last, fix "erroneous SM_UNMON" warnings.  (closes: #165744)
+
+ -- Chip Salzenberg <chip@debian.org>  Tue, 11 Jan 2005 23:31:05 -0500
+
+nfs-utils (1:1.0.6-3) unstable; urgency=medium
+
+  * Remove obsolete debconf-related files in debian/rules, because source
+    diffs don't implement removals.  (closes: #239331)
+
+ -- Chip Salzenberg <chip@debian.org>  Wed, 24 Mar 2004 18:09:21 -0500
+
+nfs-utils (1:1.0.6-2) unstable; urgency=medium
+
+  * Upstream CVS sync.
+  * Urgency "medium" to get debconf fix into testing.
+  * Remove debconf warning notes in favor of nfs-kernel-server.NEWS.
+    (closes: #228365)
+  * Make /etc/exports a conffile.  (closes: #224557)
+  * Clean up /var/lib/nfs in postrm.
+  * Test kernel version in init script; all kernels from 2.4 forward
+    have a lockd thread, and don't need rpc.lockd.  Probe older kernels
+    by checking for lockd-related symbols.  When in doubt, go ahead and
+    run rpc.lockd; if it's not needed, it exits.  (closes: #205867)
+  * Don't bother removing nfs-server's init links; it's long dead.
+
+ -- Chip Salzenberg <chip@debian.org>  Thu, 18 Mar 2004 17:06:00 -0500
+
+nfs-utils (1:1.0.6-1) unstable; urgency=low
+
+  * New upstream version:
+    > Workaround glibc bug with large fd rlimits.
+  * Japanese debconf translation from Kenshi Muto <kmuto@debian.org>.
+    (closes: #209370)
+
+ -- Chip Salzenberg <chip@debian.org>  Fri, 12 Sep 2003 12:47:58 -0400
+
+nfs-utils (1:1.0.5-3) unstable; urgency=high
+
+  * Upstream CVS sync:
+    > Fix crash on invalid reverse DNS.  (closes: #209318)
+
+ -- Chip Salzenberg <chip@debian.org>  Tue,  9 Sep 2003 14:02:46 -0400
+
+nfs-utils (1:1.0.5-2) unstable; urgency=low
+
+  * Upstream CVS sync:
+    > Improve support for 2.6.0 /proc interface.
+  * Use po-debconf.  Patch from Andre Luis Lopes <andrelop@ig.com.br>,
+    with improved French from Christian Perrier <bubulle@debian.org>.
+    (closes: #187866, #202196)
+
+ -- Chip Salzenberg <chip@debian.org>  Wed, 20 Aug 2003 17:03:44 -0400
+
+nfs-utils (1:1.0.5-1) unstable; urgency=high
+
+  * New upstream version:
+    > Don't use freed memory.  (closes: #201311, #201598, #201873)
+    > Fix mountd -o arg.  (closes: #197355)
+  
+ -- Chip Salzenberg <chip@debian.org>  Thu, 24 Jul 2003 15:40:12 -0400
+
+nfs-utils (1:1.0.3-2) unstable; urgency=high
+
+  * Upstream CVS sync:
+    > Fix one-byte buffer overflow in logging code.
+
+ -- Chip Salzenberg <chip@debian.org>  Tue, 10 Jun 2003 11:11:56 -0400
+
+nfs-utils (1:1.0.3-1) unstable; urgency=low
+
+  * New upstream version:
+    > Support reading and writing export cache in /proc/rpc/*/channel,
+      as current syscall interface may not survive into 2.6 on all archs.
+
+ -- Chip Salzenberg <chip@debian.org>  Wed, 26 Mar 2003 11:38:52 -0500
+
+nfs-utils (1:1.0.2-2) unstable; urgency=medium
+
+  * Upstream CVS sync:
+    > Fix one-byte buffer overflow with no apparent security implications.
+      (It's a readlink on a path that should be writable only to root.)
+  * Make nfs-{common,kernel-server} depend on sysvinit 2.80-1 for invoke-rc.d.
+  * Make nfs-common depend on debconf (long overdue).
+  * Fix package description to name nfs-user-server as an alternative, rather
+    than "nfs-server" (which no longer exists).
+
+ -- Chip Salzenberg <chip@debian.org>  Wed, 12 Feb 2003 21:27:24 -0500
+
+nfs-utils (1:1.0.2-1) unstable; urgency=high
+
+  * New upstream version:
+    > Allow program stdin to be a non-INET socket.  (closes: #142557)
+  * Start nfs-common after nfs-kernel-server so that the server is running
+    when statd restarts; without this change, a rebooting server may make
+    clients lose mounts.  (This postinst removes bad rc.d links from old
+    packages.)  From Philippe Troin <phil@fifi.org>.  (closes: #160800)
+  * Make init scripts exit with non-zero status when daemons don't start.
+  * Add titles to templates where I forgot them.  (closes: #158489)
+  * Add /etc/default/{nfs-common,nfs-kernel-server} so setting random
+    parameters doesn't require editing init scripts.  (closes: #131539)
+  * Split templates into separate files, and add French templates.
+    (closes: #134630)
+  * Use invoke-rc.d to avoid premature daemon starts.  (closes: 158574)
+  * Change priority of nfs-kernel-server to 'optional'.
+
+ -- Chip Salzenberg <chip@debian.org>  Sun, 15 Sep 2002 22:00:27 -0400
+
+nfs-utils (1:1.0.1-1) unstable; urgency=low
+
+  * New upstream version:
+    > BIG CHANGE: Exports default to "sync", that is, synchronous writes.
+      This is safer but MUCH SLOWER than the old default of "async".
+      All exports should be marked as either "sync" or "async" to avoid a
+      warning from exportfs.
+  * Patches from CVS through 2002-08-26.
+  * Let init script start statd on a specific port.  (closes: #144344)
+  * Fix typo in debconf message about tcpwrappers.  (closes: #128709)
+  * Fix typo in rpc.nfsd(8).  (closes: #152556)
+  * Add Russian templates.  (closes: #136599, #136932)
+
+ -- Chip Salzenberg <chip@debian.org>  Mon, 26 Aug 2002 12:17:57 -0400
+
+nfs-utils (1:1.0-2) unstable; urgency=low
+
+  * Fail an export if its mapping option is unsupported.  (closes: #85678)
+
+ -- Chip Salzenberg <chip@debian.org>  Wed,  2 Jan 2002 15:52:37 -0800
+
+nfs-utils (1:1.0-1) unstable; urgency=medium
+
+  * New upstream version.  (Version number is only change.)
+  * Urgency "medium" so woody users see the pretty new version number.
+    (Yeah, it's shallow... but, doggone it, this is mature code.)
+
+ -- Chip Salzenberg <chip@debian.org>  Wed, 26 Dec 2001 20:21:15 -0800
+
+nfs-utils (1:0.3.3-6) unstable; urgency=high
+
+  * Upstream fixes:
+    > Ignore case when comparing host names.
+    > Use all addresses of multi-homed hosts in export processing.
+    > When reading /proc/fs/nfs/exports, assume noasync and nowgather;
+      older kernels did so, while newer kernels report them explicitly.
+    > Remove man page refs to "hosts_allow(5)".  (closes: #122540)
+    > In exports.5: Emphasize the need for options to immediately follow
+      client names.  Explain that wildcards don't usually work on addresses,
+      but may work when reverse DNS fails. (closes: #118040, #116039)
+
+ -- Chip Salzenberg <chip@debian.org>  Wed, 26 Dec 2001 18:54:35 -0800
+
+nfs-utils (1:0.3.3-5) unstable; urgency=high
+
+  * Keep NFS fully operational during upgrade.  (closes: #76544)
+  * When calling update-rc.d, send stdout to /dev/null, but not stderr.
+
+ -- Chip Salzenberg <chip@debian.org>  Thu, 13 Dec 2001 18:50:47 -0800
+
+nfs-utils (1:0.3.3-4) unstable; urgency=high
+
+  * High priority due to changes in previous version.
+  * Upstream fixes:
+    > Close filehandles in nfsd before spawing kernel threads.  This is a
+      workaround for a kernel bug.  (closes: #121213)
+    > Document that both host names *and* addresses are checked with tcpwrappers.
+      This is a doc update, not a change.  (closes: #108493)
+    > Don't assume that strings starting with digits are IP addresses;
+      host names are allowed to start with digits.  (closes: #68977)
+  * German template for nfs-common.  (closes: #120939)
+
+ -- Chip Salzenberg <chip@debian.org>  Mon, 26 Nov 2001 11:50:43 -0800
+
+nfs-utils (1:0.3.3-3) unstable; urgency=low
+
+  * Upstream fixes:
+    > Accept obsolete mount option "crossmnt" for parsing old xtab files
+      after upgrade.  (closes: #78801)
+    > Put filenames into more error messages.
+  * Stop debconf before starting nfsd to avoid a hang.  Kernel threads
+    like nfsd aren't supposed to inherit open files from the programs that
+    start them, but nfsd does.  See debconf tutorial.  (closes: #115817)
+  * Rebuild with current glibc.  (closes: #119545)
+  * Carefully account for ownership of /var/lib/nfs/*.  (closes: #117258)
+  * Warn about statd using tcpwrappers.  (closes: #92666)
+  * Only warn about mountd's tcpwrappers name change if the old name
+    appears in the tcpwrapper config files.
+  * German template for nfs-kernel-server.  (closes: #117196)
+
+ -- Chip Salzenberg <chip@debian.org>  Wed, 21 Nov 2001 18:30:36 -0800
+
+nfs-utils (1:0.3.3-2) unstable; urgency=high
+
+  * The "Test It Before Release, Stupid" release.
+  * Repair total failure of rpc.mountd.  (closes: #115095)
+
+ -- Chip Salzenberg <chip@debian.org>  Thu, 11 Oct 2001 13:03:45 -0700
+
+nfs-utils (1:0.3.3-1) unstable; urgency=medium
+
+  * The "Life Goes On" release.
+  * New upstream version.  (closes: #113042)
+    > Avoid DNS when unexporting... important for shutdown.
+    > Recognize double-quote and \octal quoting in pathnames.
+    > Print pathnames with \octal quoting as necessary.
+  * Depend on a version of glibc that restores rpcinfo to its rightful
+    place.  (closes: #102400)
+  * Fix pathname in mountd doc.  (closes: #112088)
+  * debian/nfs-kernel-server.postinst: Remove rc.d symlinks to old
+    nfs-server init script, which doesn't realize when it's been removed.
+    (closes: #97099)
+  * Warn users about "rpc.mountd" -> "mountd" in /etc/hosts.{allow,deny}.
+    This marks my first use of debconf!  W00T!  (closes: #92671)
+
+ -- Chip Salzenberg <chip@debian.org>  Mon,  8 Oct 2001 15:04:08 -0700
+
+nfs-utils (1:0.3.2-2) unstable; urgency=low
+
+  * Rebuild with new libc.  (closes: #97252, #97455, #99829, #100317)
+  * Fix typo in nfs-kernel-server init script.  (closes: #100380)
+  * Start all daemons in root directory.
+  
+ -- Chip Salzenberg <chip@debian.org>  Fri, 15 Jun 2001 15:57:18 -0700
+
+nfs-utils (1:0.3.2-1) unstable; urgency=low
+
+  * Upstream changes to statd:
+    > Recognize long options.
+    > On startup, close std{in,out,err}.
+    > Updated man page.
+  * Let debhelper handle doc symlinks.  (closes: #74094)
+  * Rename upstream changelog, per policy.
+  * Get rid of suidregister call.
+
+ -- Chip Salzenberg <chip@debian.org>  Sun,  1 Apr 2001 19:21:26 -0700
+
+nfs-utils (1:0.3.1-1) unstable; urgency=medium
+
+  * New upstream version.
+  * Incorporate (but not all) Bug Party changes by David LaBissoniere
+    <labiss@usit.net>:
+    > Mention upstream source and license in copyright file.  (closes: #79997)
+    > Add Build-Depends for debhelper and libwrap0-dev.  (closes: #84131)
+
+ -- Chip Salzenberg <chip@debian.org>  Mon, 26 Feb 2001 16:51:15 -0800
+
+nfs-utils (1:0.3-2) unstable; urgency=low
+
+  * Upstream:
+    > Don't modify socket buffer sizes.
+
+ -- Chip Salzenberg <chip@debian.org>  Mon, 12 Feb 2001 20:46:22 -0800
+
+nfs-utils (1:0.3-1) unstable; urgency=low
+
+  * New upstream.
+
+ -- Chip Salzenberg <chip@debian.org>  Sun, 28 Jan 2001 18:13:59 -0800
+
+nfs-utils (1:0.2.1-5) unstable; urgency=low
+
+  * Fix statd callback protection ("--secure-statd") to
+     1. work with current kernels as far as possible, and
+     2. allow for Trond's recent NFS patches, which change the
+        static callback RPC procedure.
+  * Store return values of getc and getopt in int variables:
+    they can return EOF, which requires an int. (From NMU)
+  
+ -- Chip Salzenberg <chip@debian.org>  Sat, 20 Jan 2001 20:03:07 -0800
+
+nfs-utils (1:0.2.1-4) unstable; urgency=medium
+
+  * Warn about common errors in /etc/exports.  (closes: #66421)
+  * Fix line numbers in messages about /etc/exports.  (closes: #59734)
+  * Let nhfsstone replace files from old server packages.  (closes: #59261)
+
+ -- Chip Salzenberg <chip@valinux.com>  Sun,  3 Dec 2000 14:41:13 -0800
+
+nfs-utils (1:0.2.1-3) unstable; urgency=low
+
+  * Add portmap dependency. (closes: #75639)
+  * Upstream:
+    > mountd: New option "-n/--no-tcp".
+
+ -- Chip Salzenberg <chip@valinux.com>  Sun, 19 Nov 2000 09:22:19 -0800
+
+nfs-utils (1:0.2.1-2) unstable; urgency=high
+
+  * On shutdown, kill user-mode lockd, not kernel-mode lockd thread.
+  * Big upstream fix:
+     > statd: Repair memory leaks and corruptions.
+  * Other upstream patches:
+     > exportfs: Support CIDR netmasks (e.g. "1.2.3.4/24").
+     > statd: Fix callbacks to local lockd; Be paranoid about IP addresses
+       when doing callbacks to local lockd; Add debugging features; Make
+       logs more readable.
+
+ -- Chip Salzenberg <chip@valinux.com>  Thu,  2 Nov 2000 18:10:36 -0800
+
+nfs-utils (1:0.2.1-1) unstable; urgency=low
+
+  * New upstream w/minor fixes.
+
+ -- Chip Salzenberg <chip@valinux.com>  Mon,  2 Oct 2000 17:32:00 -0700
+
+nfs-utils (1:0.2-1) unstable; urgency=low
+
+  * New upstream version number.
+  * Minor fixes.
+
+ -- Chip Salzenberg <chip@valinux.com>  Tue,  5 Sep 2000 11:30:00 -0700
+
+nfs-utils (1:0.1.9.1-2) unstable; urgency=medium
+
+  * Upstream addition of tcpwrapper support in statd and mountd.
+  * Upstream fixes from H.J. Lu and Neil Brown.
+  * Run exportfs first during startup (again).
+
+ -- Chip Salzenberg <chip@valinux.com>  Sat, 26 Aug 2000 17:30:00 -0700
+
+nfs-utils (1:0.1.9.1-1) frozen unstable; urgency=high
+
+  * New upstream version, fixes more logging errors.
+  * Fix Debian distribution list.
+
+ -- Chip Salzenberg <chip@valinux.com>  Wed,  5 Jul 2000 15:00:00 -0800
+
+nfs-utils (1:0.1.8.2-2) unstable; urgency=high
+
+  * Fix serious logging error in statd.
+
+ -- Chip Salzenberg <chip@valinux.com>  Wed, 28 Jun 2000 23:00:00 -0800
+
+nfs-utils (1:0.1.8.2-1) unstable; urgency=low
+
+  * New upstream version.
+  * During startup, start daemons before running exportfs.
+
+ -- Chip Salzenberg <chip@valinux.com>  Wed, 28 Jun 2000 15:00:00 -0800
+
+nfs-utils (1:0.1.8.1-1) unstable; urgency=medium
+
+  * New upstream version.
+  * Chdir to / before spawning daemons. (closes: #60837, #64857)
+  * Follow policy for init messages. (closes: #59184, #65519)
+
+ -- Chip Salzenberg <chip@valinux.com>  Mon, 12 Jun 2000 22:30:00 -0800
+
+nfs-utils (1:0.1.8-1) unstable; urgency=low
+
+  * New upstream version.
+
+ -- Chip Salzenberg <chip@valinux.com>  Sun,  4 Jun 2000 13:30:00 -0800
+
+nfs-utils (1:0.1.7.1-1) unstable; urgency=medium
+
+  * New upstream version.
+  * Use fewer sockets in mountd by sharing RPC transports,
+    even when it is run without '-p'.
+
+ -- Chip Salzenberg <chip@valinux.com>  Sat, 29 Apr 2000 20:45:00 -0800
+
+nfs-utils (1:0.1.6-3) frozen unstable; urgency=medium
+
+  * Fix kernel server shutdown order: mountd, nfsd, exportfs.
+  * Upstream:  Fix 'mountd -p'.  Use fewer UDP sockets
+    by sharing RPC transports.  Display more mount flags.
+
+ -- Chip Salzenberg <chip@valinux.com>  Mon, 13 Mar 2000 14:45:00 -0800
+
+nfs-utils (1:0.1.6-2) frozen unstable; urgency=medium
+
+  * Split off nhfsstone into its own package, since it has
+    helper scripts and most people won't use it.
+  * Also include nhfsstone's helpers: nhfs{run,nums,graph}.
+  * Install man page for nhfsstone. (closes: #55194)
+  * Always run lockd on non-module kernels. (closes: #57841)
+  * Make init scripts config files. (closes: #55193)
+  * Handle "force-reload" in nfs-common's init script. (ditto)
+  * Fix line numbers in error messages. (closes: #57717)
+  * Write man page for rpc.lockd. (closes: #55192)
+  * Fix typo in exports(5) man page. (closes: #46933)
+  * Add /usr/doc -> /usr/share doc links. (closes: #54983)
+  * Add copyright file. (closes: #55195)
+  * Refresh sources from upstream.
+  * Refine dependencies.
+
+ -- Chip Salzenberg <chip@valinux.com>  Sat, 26 Feb 2000 02:00:00 -0800
+
+nfs-utils (1:0.1.6-1) unstable; urgency=high
+
+  * New upstream version.
+  * Make nfs-kernel-server conflict with and replace knfs.
+
+ -- Chip Salzenberg <chip@valinux.com>  Wed, 12 Jan 2000 19:30:00 -0800
+
+nfs-utils (1:0.1.5-2) unstable; urgency=high
+
+  * Rename packages to "nfs-common" and "nfs-kernel-server".
+    (Previous package names were only temporary anyway.)
+  * Prepend "1:" to version, to override existing nfs-common.
+  * Remove rpc.rquotad -- it's already packaged in "quota".
+
+ -- Chip Salzenberg <chip@valinux.com>  Wed, 29 Dec 1999 17:00:00 -0800
+
+nfs-utils (0.1.5-1) unstable; urgency=medium
+
+  * New upstream version.
+  * Allow for some kernels not requiring rpc.lockd.
+
+ -- Chip Salzenberg <chip@valinux.com>  Sun, 19 Dec 1999 11:40:00 -0800
+
+nfs-utils (0.1.4-1) unstable; urgency=low
+
+  * New upstream version.
+  * Don't disable NFSv3 by default.
+
+ -- Chip Salzenberg <chip@valinux.com>  Fri, 10 Dec 1999 23:00:00 -0800
+
+nfs-utils (0.1.3-2) unstable; urgency=low
+
+  * Conflict with standard NFS packages.
+
+ -- Chip Salzenberg <chip@valinux.com>  Fri,  3 Dec 1999 22:00:00 -0800
+
+nfs-utils (0.1.3-1) unstable; urgency=low
+
+  * New upstream version.
+  * Start following CVS tree at SourceForge.
+
+ -- Chip Salzenberg <chip@valinux.com>  Fri,  3 Dec 1999 20:00:00 -0800
+
--- nfs-utils-1.0.10.orig/debian/idmapd.conf
+++ nfs-utils-1.0.10/debian/idmapd.conf
@@ -0,0 +1,10 @@
+[General]
+
+Verbosity = 0
+Pipefs-Directory = /var/lib/nfs/rpc_pipefs
+Domain = localdomain
+
+[Mapping]
+
+Nobody-User = nobody
+Nobody-Group = nogroup
--- nfs-utils-1.0.10.orig/debian/nfs-common.init
+++ nfs-utils-1.0.10/debian/nfs-common.init
@@ -0,0 +1,298 @@
+#!/bin/sh
+
+### BEGIN INIT INFO
+# Provides:          nfs-common
+# Required-Start:    $time
+# Required-Stop:     $time
+# Default-Start:     2 3 4 5
+# Default-Stop:      0 1 6
+# Short-Description: NFS support files common to client and server
+# Description:       NFS is a popular protocol for file sharing across
+#		     TCP/IP networks. This service provides various
+#                    support functions for NFS mounts.
+### END INIT INFO
+
+# What is this?
+DESC="NFS common utilities"
+
+# Read config
+DEFAULTFILE=/etc/default/nfs-common
+PREFIX=
+NEED_LOCKD=
+NEED_IDMAPD=
+NEED_GSSD=
+PIPEFS_MOUNTPOINT=/var/lib/nfs/rpc_pipefs
+RPCGSSDOPTS=
+if [ -f $DEFAULTFILE ]; then
+    . $DEFAULTFILE
+fi
+
+. /lib/lsb/init-functions
+
+# Determine whether lockd daemon is required.
+case "$NEED_LOCKD" in
+yes|no)	;;
+*)  case `uname -r` in
+    '' | [01].* | 2.[0123].* )
+	# Older kernels may or may not need a lockd daemon.
+	# We must assume they do, unless we can prove otherwise.
+	# (A false positive here results only in a harmless message.)
+	NEED_LOCKD=yes
+	if test -f /proc/ksyms
+	then
+	    grep -q lockdctl /proc/ksyms || NEED_LOCKD=no
+	fi
+	;;
+
+    *)  # Modern kernels (>= 2.4) start a lockd thread automatically.
+	NEED_LOCKD=no
+	;;
+    esac
+    ;;
+esac
+
+#
+# Parse the fstab file, and determine whether we need idmapd and gssd. (The
+# /etc/defaults settings, if any, will override our autodetection.) This code
+# is partially adapted from the mountnfs.sh script in the sysvinit package.
+#
+AUTO_NEED_IDMAPD=no
+AUTO_NEED_GSSD=no
+
+exec 9<&0 </etc/fstab
+
+while read DEV MTPT FSTYPE OPTS REST
+do
+    if [ "$FSTYPE" = "nfs4" ]; then
+        AUTO_NEED_IDMAPD=yes
+    fi
+    case "$OPTS" in
+        sec=krb5|*,sec=krb5|sec=krb5,*|*,sec=krb5i,*|sec=krb5i|*,sec=krb5i|sec=krb5i,*|*,sec=krb5i,*|sec=krb5p|*,sec=krb5p|sec=krb5p,*|*,sec=krb5p,*)
+	    AUTO_NEED_GSSD=yes
+	;;
+    esac
+done
+
+exec 0<&9 9<&-
+
+#
+# We also need idmapd if we run an NFSv4 server. It's fairly difficult
+# to autodetect whether there are NFSv4 exports or not, and idmapd is not a
+# particularily heavy daemon, so we auto-enable it if we find an /etc/exports
+# file. This does not mean that there are NFSv4 or other mounts active (or
+# even that nfs-kernel-server is installed), but it matches what the "start"
+# condition in nfs-kernel-server's init script does, which has a value in
+# itself.
+#
+if [ -f /etc/exports ]; then
+    AUTO_NEED_IDMAPD=yes
+fi
+
+
+case "$NEED_IDMAPD" in
+    yes|no)	
+        ;;
+    *)
+        NEED_IDMAPD=$AUTO_NEED_IDMAPD
+	;;
+esac
+
+case "$NEED_GSSD" in
+    yes|no)	
+        ;;
+    *)
+        NEED_GSSD=$AUTO_NEED_GSSD
+	;;
+esac
+
+# Exit if required binaries are missing.
+[ -x $PREFIX/sbin/rpc.statd ] || exit 0
+[ -x $PREFIX/sbin/rpc.lockd ] || [ "$NEED_LOCKD"  = no ] || exit 0
+[ -x /usr/sbin/rpc.idmapd   ] || [ "$NEED_IDMAPD" = no ] || exit 0
+[ -x /usr/sbin/rpc.gssd     ] || [ "$NEED_GSSD"   = no ] || exit 0
+
+do_modprobe() {
+    modprobe -q "$1" || true
+}
+
+do_mount() {
+    if ! grep -E -qs "$1\$" /proc/filesystems
+    then
+	return 1
+    fi
+    if ! mountpoint -q "$2"
+    then
+	mount -t "$1" "$1" "$2"
+	return
+    fi
+    return 0
+}
+
+do_umount() {
+    if mountpoint -q "$1"
+    then
+	umount "$1"
+    fi
+    return 0
+}
+
+# See how we were called.
+case "$1" in
+  start)
+	log_daemon_msg "Starting $DESC"
+
+	log_progress_msg "statd"
+	start-stop-daemon --start --oknodo --quiet \
+	    --exec $PREFIX/sbin/rpc.statd -- $STATDOPTS
+	if [ $? != 0 ]; then
+	    log_end_msg $?
+	    exit $?
+	fi
+
+	if [ "$NEED_LOCKD" = yes ]
+	then
+	    log_progress_msg "lockd"
+	    start-stop-daemon --start --oknodo --quiet \
+		--exec $PREFIX/sbin/rpc.lockd
+	    if [ $? != 0 ]; then
+	        log_end_msg $?
+	        exit $?
+            fi
+	fi
+	if [ "$NEED_IDMAPD" = yes ] || [ "$NEED_GSSD" = yes ]
+	then
+	    do_modprobe nfs
+	    do_modprobe nfs4
+	    if do_mount rpc_pipefs $PIPEFS_MOUNTPOINT
+	    then
+	    	if [ "$NEED_IDMAPD" = yes ]
+		then
+	            log_progress_msg "idmapd"
+		    start-stop-daemon --start --oknodo --quiet \
+			    --exec /usr/sbin/rpc.idmapd
+	            if [ $? != 0 ]; then
+        	        log_end_msg $?
+        	        exit $?
+                    fi
+		fi
+		if [ "$NEED_GSSD" = yes ]
+		then
+		    do_modprobe rpcsec_gss_krb5
+	            log_progress_msg "gssd"
+
+	            # we need this available; better to fail now than
+		    # mysteriously on the first mount
+		    if ! grep -q -E '^nfs[	 ]' /etc/services; then
+		    	log_action_end_msg 1 "broken /etc/services, please see /usr/share/doc/nfs-common/README.Debian.nfsv4"
+			exit 1
+		    fi
+
+		    start-stop-daemon --start --oknodo --quiet \
+			    --exec /usr/sbin/rpc.gssd -- $RPCGSSDOPTS
+	            if [ $? != 0 ]; then
+        	        log_end_msg $?
+        	        exit $?
+                    fi
+		fi
+	    fi
+	fi
+	log_end_msg 0
+	;;
+
+  stop)
+	log_daemon_msg "Stopping $DESC"
+
+	if [ "$NEED_GSSD" = yes ]
+	then
+	    log_progress_msg "gssd"
+	    start-stop-daemon --stop --oknodo --quiet \
+		    --name rpc.gssd
+	    if [ $? != 0 ]; then
+                log_end_msg $?
+                exit $?
+            fi
+	fi
+	if [ "$NEED_IDMAPD" = yes ]
+	then
+	    log_progress_msg "idmapd"
+	    start-stop-daemon --stop --oknodo --quiet \
+		--name rpc.idmapd
+	    if [ $? != 0 ]; then
+                log_end_msg $?
+                exit $?
+            fi
+	fi
+	if [ "$NEED_LOCKD" = yes ]
+	then
+	    log_progress_msg "lockd"
+	    start-stop-daemon --stop --oknodo --quiet \
+		--name rpc.lockd
+	    if [ $? != 0 ]; then
+                log_end_msg $?
+                exit $?
+            fi
+	else
+	    pkill -KILL -u root -x lockd || true
+	fi
+	log_progress_msg "statd"
+	start-stop-daemon --stop --oknodo --quiet \
+	    --name rpc.statd
+	if [ $? != 0 ]; then
+            log_end_msg $?
+            exit $?
+        fi
+	do_umount $PIPEFS_MOUNTPOINT 2>/dev/null || true
+	log_end_msg 0
+	;;
+
+  status)
+	if ! pidof rpc.statd >/dev/null
+	then
+	    echo "rpc.statd not running"
+	    exit 3
+	fi
+
+	if [ "$NEED_GSSD" = yes ]
+	then
+            if ! pidof rpc.gssd >/dev/null
+	    then
+		echo "rpc.statd running, but rpc.gssd halted"
+		exit 3
+	    fi
+	fi
+
+	if [ "$NEED_LOCKD" = yes ]
+	then
+	    if ! pidof rpc.lockd >/dev/null
+	    then
+		echo "rpc.statd running, but rpc.lockd halted"
+		exit 3
+	    fi
+	fi
+	    
+	if [ "$NEED_IDMAPD" = yes ]
+	then
+            if ! pidof rpc.idmapd >/dev/null
+	    then
+		echo "rpc.statd running, but rpc.idmapd halted"
+		exit 3
+	    fi
+	fi
+
+	echo "rpc.statd running"
+	exit 0
+	;;
+
+  restart | force-reload)
+	$0 stop
+	sleep 1
+	$0 start
+	;;
+
+  *)
+	log_success_msg "Usage: nfs-common {start|stop|status|restart}"
+	exit 1
+	;;
+esac
+
+exit 0
--- nfs-utils-1.0.10.orig/debian/nfs-kernel-server.init
+++ nfs-utils-1.0.10/debian/nfs-kernel-server.init
@@ -0,0 +1,205 @@
+#!/bin/sh
+
+### BEGIN INIT INFO
+# Provides:          nfs-kernel-server
+# Required-Start:    $portmap $time
+# Required-Stop:     $portmap $time
+# Default-Start:     2 3 4 5
+# Default-Stop:      0 1 6
+# Short-Description: Kernel NFS server support
+# 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.
+### END INIT INFO
+
+# What is this?
+DESC="NFS kernel daemon"
+PREFIX=/usr
+
+# Exit if required binaries are missing.
+[ -x $PREFIX/sbin/rpc.nfsd    ] || exit 0
+[ -x $PREFIX/sbin/rpc.mountd  ] || exit 0
+[ -x $PREFIX/sbin/exportfs    ] || exit 0
+
+# Read config
+DEFAULTFILE=/etc/default/nfs-kernel-server
+RPCNFSDCOUNT=8
+RPCNFSDPRIORITY=0
+RPCMOUNTDOPTS=
+NEED_SVCGSSD=no
+RPCSVCGSSDOPTS=
+PROCNFSD_MOUNTPOINT=/proc/fs/nfsd
+if [ -f $DEFAULTFILE ]; then
+    . $DEFAULTFILE
+fi
+
+. /lib/lsb/init-functions
+
+do_modprobe() {
+    if [ -x /sbin/modprobe -a -f /proc/modules ]
+    then
+        modprobe -q "$1" || true
+    fi
+}
+
+do_mount() {
+    if ! grep -E -qs "$1\$" /proc/filesystems
+    then
+	return 1
+    fi
+    if ! mountpoint -q "$2"
+    then
+	mount -t "$1" "$1" "$2"
+	return
+    fi
+    return 0
+}
+
+# See how we were called.
+case "$1" in
+  start)
+	if [ -f /etc/exports ]
+	then
+		do_modprobe nfsd
+
+		# See if our running kernel supports the NFS kernel server
+		if [ -f /proc/kallsyms ] && ! grep -qE 'init_nf(sd|	)' /proc/kallsyms; then
+			log_warning_msg "Not starting $DESC: no support in current kernel."
+			exit 0
+		fi
+		
+		do_mount nfsd $PROCNFSD_MOUNTPOINT || NEED_SVCGSSD=no
+		log_begin_msg "Exporting directories for $DESC..."
+		$PREFIX/sbin/exportfs -r
+		if [ $? != 0 ]; then
+			log_end_msg $?
+			exit $?
+		fi
+		log_end_msg 0
+
+		log_daemon_msg "Starting $DESC"
+		log_progress_msg "nfsd"
+		start-stop-daemon --start --oknodo --quiet \
+		    --nicelevel $RPCNFSDPRIORITY \
+		    --exec $PREFIX/sbin/rpc.nfsd -- $RPCNFSDCOUNT
+		if [ $? != 0 ]; then
+			log_end_msg $?
+			exit $?
+		fi
+
+		# make sure 127.0.0.1 is a valid source for requests
+		ClearAddr=
+		if [ -f /proc/net/rpc/auth.unix.ip/channel ]
+		then
+		    fgrep -qs 127.0.0.1 /proc/net/rpc/auth.unix.ip/content || {
+			echo "nfsd 127.0.0.1 2147483647 localhost" >/proc/net/rpc/auth.unix.ip/channel
+			ClearAddr=yes
+		    }
+		fi
+
+		$PREFIX/bin/rpcinfo -u localhost nfs 3 >/dev/null 2>&1 ||
+		    RPCMOUNTDOPTS="$RPCMOUNTDOPTS --no-nfs-version 3"
+
+		[ -z "$ClearAddr" ] || echo "nfsd 127.0.0.1 1" >/proc/net/rpc/auth.unix.ip/channel
+	
+	        if [ "$NEED_SVCGSSD" = "yes" ]; then
+			log_progress_msg "svcgssd"
+			start-stop-daemon --start --oknodo --quiet \
+			    --exec $PREFIX/sbin/rpc.svcgssd -- $RPCSVCGSSDOPTS
+			if [ $? != 0 ]; then
+				log_end_msg $?
+				exit $?
+			fi
+		fi
+
+		log_progress_msg "mountd"
+		start-stop-daemon --start --oknodo --quiet \
+		    --exec $PREFIX/sbin/rpc.mountd -- $RPCMOUNTDOPTS
+		if [ $? != 0 ]; then
+			log_end_msg $?
+			exit $?
+		fi
+
+		log_end_msg 0
+	else
+		log_warning_msg "Not starting $DESC: no exports."
+	fi
+	;;
+
+  stop)
+	log_daemon_msg "Stopping $DESC"
+	
+	log_progress_msg "mountd"
+	start-stop-daemon --stop --oknodo --quiet \
+	    --name rpc.mountd --user 0
+	if [ $? != 0 ]; then
+		log_end_msg $?
+		exit $?
+	fi
+	        
+	if [ "$NEED_SVCGSSD" = "yes" ]; then
+		log_progress_msg "svcgssd"
+		start-stop-daemon --stop --oknodo --quiet \
+		    --name rpc.svcgssd --user 0
+		if [ $? != 0 ]; then
+			log_end_msg $?
+			exit $?
+		fi
+	fi
+
+	log_progress_msg "nfsd"
+	start-stop-daemon --stop --oknodo --quiet \
+	    --name nfsd --user 0 --signal 2
+	if [ $? != 0 ]; then
+		log_end_msg $?
+		exit $?
+	fi
+
+	log_end_msg 0
+
+	log_begin_msg "Unexporting directories for $DESC..."
+	$PREFIX/sbin/exportfs -au
+	if [ $? != 0 ]; then
+		log_end_msg $?
+		exit $?
+	fi
+	log_end_msg 0
+
+	if mountpoint -q /proc/nfs/nfsd
+	then
+	    $PREFIX/sbin/exportfs -f
+	fi
+	;;
+
+  status)
+	if pidof nfsd >/dev/null
+	then
+	    echo "nfsd running"
+	    exit 0
+	else
+	    echo "nfsd not running"
+	    exit 3
+	fi
+	;;
+
+  reload | force-reload)
+	log_begin_msg "Re-exporting directories for $DESC..."
+	$PREFIX/sbin/exportfs -r
+	log_end_msg $?
+	exit $?
+	;;
+
+  restart)
+	$0 stop
+	sleep 1
+	$0 start
+	;;
+
+  *)
+	log_success_msg "Usage: nfs-kernel-server {start|stop|status|reload|force-reload|restart}"
+	exit 1
+	;;
+esac
+
+exit 0
--- nfs-utils-1.0.10.orig/debian/nfs-kernel-server.postinst
+++ nfs-utils-1.0.10/debian/nfs-kernel-server.postinst
@@ -0,0 +1,23 @@
+#!/bin/sh -e
+
+#DEBHELPER#
+
+case "$1" in
+    configure)
+	ucf --three-way /usr/share/nfs-kernel-server/conffiles/etc.exports /etc/exports
+	ucf --three-way /usr/share/nfs-kernel-server/conffiles/nfs-kernel-server.default /etc/default/nfs-kernel-server
+
+	for f in /var/lib/nfs/etab  \
+		 /var/lib/nfs/rmtab \
+		 /var/lib/nfs/xtab; do
+	    [ -e $f ] || touch $f
+	done
+
+	update-rc.d nfs-kernel-server defaults 20 80 >/dev/null
+    ;;
+esac
+
+act="restart"
+[ "$1:$2" = "configure:" ] && act="start"
+[ "$1:$2" = "configure:" ] && invoke-rc.d nfs-common start
+invoke-rc.d nfs-kernel-server $act
--- nfs-utils-1.0.10.orig/debian/nfs-kernel-server.default
+++ nfs-utils-1.0.10/debian/nfs-kernel-server.default
@@ -0,0 +1,18 @@
+# Number of servers to start up
+RPCNFSDCOUNT=8
+
+# Runtime priority of server (see nice(1))
+RPCNFSDPRIORITY=0
+
+# Options for rpc.mountd.
+# If you have a port-based firewall, you might want to set up
+# a fixed port here using the --port option. For more information, 
+# see rpc.mountd(8) or http://wiki.debian.org/?SecuringNFS
+RPCMOUNTDOPTS=
+
+# Do you want to start the svcgssd daemon? It is only required for Kerberos
+# exports. Valid alternatives are "yes" and "no"; the default is "no".
+NEED_SVCGSSD=
+
+# Options for rpc.svcgssd.
+RPCSVCGSSDOPTS=
--- nfs-utils-1.0.10.orig/debian/README.Debian.nfsv4
+++ nfs-utils-1.0.10/debian/README.Debian.nfsv4
@@ -0,0 +1,62 @@
+NFSv4 in Debian
+===============
+
+NFSv4 support in Debian is rather new, and not fully supported yet. If you want
+to experiment, make sure you have:
+
+ - a recent 2.6 kernel on both client and server; newer is better. You might even
+   want to use CITI's patch set from http://www.citi.umich.edu/projects/nfsv4/linux/ 
+   on the server, and/or Trond Myklebust's patch set from http://client.linux-nfs.org/ .
+ - a recent enough version of nfs-utils on both client and server (you probably
+   have on at least one of them, since you're reading this file!).
+ - enabled idmapd on both sides (see /etc/default/nfs-common).
+ - The following lines in /etc/services on the client (if not, you will receive
+   the message "broken /etc/services" when starting rpc.gssd; this will usually
+   only happen if you upgrade netbase without letting it replace /etc/services
+   with the new version):
+
+   nfs		2049/tcp			# Network File System
+   nfs		2049/udp			# Network File System
+
+The export structure might be a bit confusing if you're already familiar with
+NFSv2 or NFSv3. The biggest difference is that you will need to export an explicit
+root of your pseudofilesystem, like this /etc/exports fragment:
+
+  /nfs4                   hostname(rw,sync,fsid=0,crossmnt)
+
+(It doesn't need to be named "nfs4".) Then you can mount other volumes under that,
+like:
+
+  /nfs4/music             hostname(rw,sync)
+  /nfs4/movies            hostname(rw,sync)
+
+Then your client can mount shares like this:
+
+  mount -t nfs4 server:/music /mnt/music
+
+Since you might not have everything under one root, you might want /nfs4/* on the
+server to be bind mounts, ie.:
+
+  mount --bind /srv/music /nfs4/music
+
+or in /etc/fstab:
+
+  /srv/music /nfs4/music none bind 0 0
+
+Note that this special export structure might be handled transparently by
+rpc.mountd at some time in the future, in which case you will probably get the
+traditional (NFSv3-style) behaviour if and only if you have no share with
+fsid=0.
+
+If you do not wish to use host-based authentication, you can specify "gss/krb5"
+instead of a hostname to get Kerberos-based authentication instead. For this, 
+you will need an "nfs/hostname@REALM" entry in /etc/krb5.keytab, as well as
+rpc.gssd running on both client and rpc.svcgssd on the server (enable them
+manually in /etc/default/nfs-common and /etc/default/nfs-kernel-server if the
+autodetection fails).
+
+If you use "gss/krb5i", you will also get integrity (ie. authentication), and
+with "gss/krb5p", you'll also get privacy (ie. encryption). Make sure your
+kernel supports this; not all kernels do.
+
+ -- Steinar H. Gunderson <sesse@debian.org>, Wed, 11 Oct 2006 15:18:03 +0200
--- nfs-utils-1.0.10.orig/debian/nfs-common.install
+++ nfs-utils-1.0.10/debian/nfs-common.install
@@ -0,0 +1,13 @@
+debian/tmp/usr/sbin/rpc.lockd sbin/
+debian/tmp/usr/sbin/rpc.statd sbin/
+debian/tmp/usr/sbin/showmount sbin/
+debian/tmp/usr/sbin/nfsstat
+debian/tmp/usr/sbin/rpc.gssd
+debian/tmp/usr/sbin/rpc.idmapd
+debian/tmp/usr/sbin/gss_clnt_send_err
+debian/tmp/usr/sbin/gss_destroy_creds
+debian/tmp/usr/sbin/rpcdebug
+debian/idmapd.conf usr/share/nfs-common/conffiles/
+debian/idmapd.conf.md5sum usr/share/nfs-common/conffiles/
+debian/nfs-common.default usr/share/nfs-common/conffiles/
+debian/nfs-common.default.md5sum usr/share/nfs-common/conffiles/
--- nfs-utils-1.0.10.orig/debian/nfs-common.manpages
+++ nfs-utils-1.0.10/debian/nfs-common.manpages
@@ -0,0 +1,9 @@
+debian/tmp/usr/share/man/man5/idmapd.conf*
+debian/tmp/usr/share/man/man8/gssd.8
+debian/tmp/usr/share/man/man8/idmapd.8
+debian/tmp/usr/share/man/man8/lockd.8
+debian/tmp/usr/share/man/man8/statd.8
+debian/tmp/usr/share/man/man8/nfsstat*
+debian/tmp/usr/share/man/man8/showmount*
+debian/tmp/usr/share/man/man8/idmapd*
+debian/tmp/usr/share/man/man8/rpcdebug.8
--- nfs-utils-1.0.10.orig/debian/etc.exports.md5sum
+++ nfs-utils-1.0.10/debian/etc.exports.md5sum
@@ -0,0 +1,2 @@
+fa071681b8e7f4eff1d6f5c4f43bf1d8  nfs-utils-1.0.6/debian/etc.exports
+d9037825e2fbe4e58d6176e7297830cb  nfs-utils-1.0.7/debian/etc.exports
--- nfs-utils-1.0.10.orig/debian/nfs-kernel-server.install
+++ nfs-utils-1.0.10/debian/nfs-kernel-server.install
@@ -0,0 +1,8 @@
+debian/tmp/usr/sbin/exportfs
+debian/tmp/usr/sbin/rpc.mountd
+debian/tmp/usr/sbin/rpc.nfsd
+debian/tmp/usr/sbin/rpc.svcgssd
+debian/nfs-kernel-server.default /usr/share/nfs-kernel-server/conffiles/
+debian/etc.exports /usr/share/nfs-kernel-server/conffiles/
+debian/nfs-kernel-server.default.md5sum /usr/share/nfs-kernel-server/conffiles/
+debian/etc.exports.md5sum /usr/share/nfs-kernel-server/conffiles/
--- nfs-utils-1.0.10.orig/debian/nfs-kernel-server.manpages
+++ nfs-utils-1.0.10/debian/nfs-kernel-server.manpages
@@ -0,0 +1,6 @@
+debian/tmp/usr/share/man/man5/exports.5
+debian/tmp/usr/share/man/man7/nfsd.7
+debian/tmp/usr/share/man/man8/mountd.8
+debian/tmp/usr/share/man/man8/exportfs.8
+debian/tmp/usr/share/man/man8/nfsd.8
+debian/tmp/usr/share/man/man8/svcgssd.8
--- nfs-utils-1.0.10.orig/debian/nfs-common.dirs
+++ nfs-utils-1.0.10/debian/nfs-common.dirs
@@ -0,0 +1,8 @@
+etc/init.d
+sbin
+usr/sbin
+var/lib/nfs
+var/lib/nfs/sm
+var/lib/nfs/sm.bak
+var/lib/nfs/rpc_pipefs
+usr/share/nfs-common/conffiles
--- nfs-utils-1.0.10.orig/debian/nfs-kernel-server.links
+++ nfs-utils-1.0.10/debian/nfs-kernel-server.links
@@ -0,0 +1,3 @@
+/usr/share/man/man8/mountd.8 /usr/share/man/man8/rpc.mountd.8
+/usr/share/man/man8/nfsd.8 /usr/share/man/man8/rpc.nfsd.8
+/usr/share/man/man8/svcgssd.8 /usr/share/man/man8/rpc.svcgssd.8
--- nfs-utils-1.0.10.orig/debian/nfs-common.default.md5sum
+++ nfs-utils-1.0.10/debian/nfs-common.default.md5sum
@@ -0,0 +1,7 @@
+9409842759091e981d65a210e3e914cb  nfs-utils-1.0.6/debian/nfs-common.default
+e9765a19f6be408eb8a8afa0ee9677b9  nfs-utils-1.0.7-2/debian/nfs-common.default
+04d838e3d6ce19ac7d0246740128e4a0  nfs-utils-1.0.7-6/debian/nfs-common.default
+e460b95b3b808e55ec7dcba8e605ab14  nfs-utils-1.0.7-10/debian/nfs-common.default
+bf979c79c0eca8c114c5388bf7225b4f  nfs-utils-1.0.7-16/debian/nfs-common.default
+d41d8cd98f00b204e9800998ecf8427e  nfs-utils-1.0.7-18/debian/nfs-common.default
+
--- nfs-utils-1.0.10.orig/debian/nfs-common.default
+++ nfs-utils-1.0.10/debian/nfs-common.default
@@ -0,0 +1,20 @@
+# If you do not set values for the NEED_ options, they will be attempted
+# autodetected; this should be sufficient for most people. Valid alternatives
+# for the NEED_ options are "yes" and "no".
+
+# Options for rpc.statd.
+#   Should rpc.statd listen on a specific port? This is especially useful
+#   when you have a port-based firewall. To use a fixed port, set this
+#   this variable to a statd argument like: "--port 4000 --outgoing-port 4001".
+#   For more information, see rpc.statd(8) or http://wiki.debian.org/?SecuringNFS
+STATDOPTS=
+
+# Some kernels need a separate lockd daemon; most don't. Set this if you
+# want to force an explicit choice for some reason.
+NEED_LOCKD=
+
+# Do you want to start the idmapd daemon? It is only needed for NFSv4.
+NEED_IDMAPD=
+
+# Do you want to start the gssd daemon? It is required for Kerberos mounts.
+NEED_GSSD=
--- nfs-utils-1.0.10.orig/debian/etc.exports
+++ nfs-utils-1.0.10/debian/etc.exports
@@ -0,0 +1,10 @@
+# /etc/exports: the access control list for filesystems which may be exported
+#		to NFS clients.  See exports(5).
+#
+# Example for NFSv2 and NFSv3:
+# /srv/homes       hostname1(rw,sync) hostname2(ro,sync)
+#
+# Example for NFSv4:
+# /srv/nfs4        gss/krb5i(rw,sync,fsid=0,crossmnt)
+# /srv/nfs4/homes  gss/krb5i(rw,sync)
+#
--- nfs-utils-1.0.10.orig/debian/nfs-kernel-server.default.md5sum
+++ nfs-utils-1.0.10/debian/nfs-kernel-server.default.md5sum
@@ -0,0 +1,4 @@
+226f8fdd37b11c59d73e2f378e22b0d0  nfs-utils-1.0.6/debian/nfs-kernel-server.default
+04755047c69d355d9d103c6f10017ec6  nfs-utils-1.0.7-2/debian/nfs-kernel-server.default
+41cb37d01bbfacaf4bfbe0f62b18284f  nfs-utils-1.0.7-4/debian/nfs-kernel-server.default
+41388b5bb60d7ad1b1281b975dc07ce9  nfs-utils-1.0.7-16/debian/nfs-kernel-server.default
--- nfs-utils-1.0.10.orig/debian/nfs-common.postinst
+++ nfs-utils-1.0.10/debian/nfs-common.postinst
@@ -0,0 +1,35 @@
+#!/bin/sh -e
+
+#DEBHELPER#
+
+case "$1" in
+    configure)
+	ucf --three-way /usr/share/nfs-common/conffiles/idmapd.conf /etc/idmapd.conf
+	ucf --three-way /usr/share/nfs-common/conffiles/nfs-common.default /etc/default/nfs-common
+
+	update-rc.d nfs-common defaults 21 79 >/dev/null
+
+	if ! getent passwd statd >/dev/null; then
+	    adduser --system --home /var/lib/nfs --no-create-home statd
+	fi
+	if dpkg --compare-versions "$2" ge 1:1.0.7-10 && dpkg --compare-versions "$2" lt 1:1.0.7-13; then
+            usermod --home /var/lib/nfs statd || true
+            if [ -d /home/statd ]; then
+                rmdir --ignore-fail-on-non-empty /home/statd
+            fi
+	fi
+	if [ "$2" = "" ] || dpkg --compare-versions "$2" lt 1:1.0.7-16; then
+	    chown statd /var/lib/nfs/sm \
+		/var/lib/nfs/sm.bak \
+		/var/lib/nfs/rpc_pipefs \
+		/var/lib/nfs
+            if [ -f /var/lib/nfs/state ]; then
+	        chown statd /var/lib/nfs/state
+            fi
+	fi
+    ;;
+esac
+
+act="restart"
+[ "$1:$2" = "configure:" ] && act="start"
+invoke-rc.d nfs-common $act
--- nfs-utils-1.0.10.orig/debian/nfs-kernel-server.NEWS
+++ nfs-utils-1.0.10/debian/nfs-kernel-server.NEWS
@@ -0,0 +1,8 @@
+nfs-utils (1:1.0.1-1) unstable; urgency=low
+
+  * Exports default to "sync", that is, synchronous writes.
+    This is safer but MUCH SLOWER than the old default of "async".
+    All exports should be marked as either "sync" or "async" to
+    avoid a warning from exportfs.
+
+ -- Chip Salzenberg <chip@debian.org>  Mon, 26 Aug 2002 12:17:57 -0400
--- nfs-utils-1.0.10.orig/debian/nfs-common.postrm
+++ nfs-utils-1.0.10/debian/nfs-common.postrm
@@ -0,0 +1,24 @@
+#!/bin/sh
+
+#DEBHELPER#
+
+case "$1" in
+    purge)
+	update-rc.d nfs-common remove >/dev/null
+
+	for FILE in /etc/default/nfs-common /etc/idmapd.conf; do
+	    # Taken from the ucf example postrm
+	    for ext in '~' '%' .bak .dpkg-tmp .dpkg-new .dpkg-old .dpkg-dist;  do
+		rm -f $FILE$ext
+	    done
+	    rm -f $FILE
+	    if [ -x /usr/bin/ucf ]; then
+		ucf --purge $FILE
+	    fi
+	done
+
+	rm -f /var/lib/nfs/state    \
+	      /var/lib/nfs/sm/*     \
+	      /var/lib/nfs/sm.bak/*
+	;;
+esac
--- nfs-utils-1.0.10.orig/debian/copyright
+++ nfs-utils-1.0.10/debian/copyright
@@ -0,0 +1,11 @@
+This package was debianized by Chip Salzenberg <chip@debian.org> on Fri,  3 Dec 1999 20:00:00 -0800
+
+It was downloaded from http://sourceforge.net/projects/nfs/
+
+View individual source files for respective authors.
+
+
+You are free to distribute this software under the terms of
+the GNU General Public License, version 2 or later.
+On Debian systems, the complete text of the GNU General Public
+License can be found in the file /usr/share/common-licenses/GPL.
--- nfs-utils-1.0.10.orig/debian/nfs-kernel-server.prerm
+++ nfs-utils-1.0.10/debian/nfs-kernel-server.prerm
@@ -0,0 +1,19 @@
+#!/bin/sh
+
+#DEBHELPER#
+
+case "$1" in
+    remove|purge)
+	[ -x /etc/init.d/nfs-kernel-server ] &&
+	    invoke-rc.d nfs-kernel-server stop
+	;;
+esac
+
+if [ "$1" != upgrade ]
+then
+    rm -f /var/lib/nfs/etab   \
+          /var/lib/nfs/rmtab  \
+          /var/lib/nfs/xtab
+fi
+
+exit 0
--- nfs-utils-1.0.10.orig/debian/nfs-common.prerm
+++ nfs-utils-1.0.10/debian/nfs-common.prerm
@@ -0,0 +1,19 @@
+#!/bin/sh
+
+#DEBHELPER#
+
+case "$1" in
+    remove|purge)
+	[ -x /etc/init.d/nfs-common ] &&
+	    invoke-rc.d nfs-common stop
+	;;
+esac
+
+if [ "$1" != upgrade ]
+then
+    rm -f /var/lib/nfs/sm/*      \
+          /var/lib/nfs/sm.bak/*  \
+          /var/lib/nfs/state
+fi
+
+exit 0
--- nfs-utils-1.0.10.orig/debian/nfs-kernel-server.postrm
+++ nfs-utils-1.0.10/debian/nfs-kernel-server.postrm
@@ -0,0 +1,25 @@
+#!/bin/sh
+
+#DEBHELPER#
+
+case "$1" in
+    purge)
+	update-rc.d nfs-kernel-server remove >/dev/null
+
+	for FILE in /etc/default/nfs-kernel-server /etc/exports; do
+	    # Taken from the ucf example postrm
+	    for ext in '~' '%' .bak .dpkg-tmp .dpkg-new .dpkg-old .dpkg-dist;  do
+		rm -f $FILE$ext
+	    done
+	    rm -f $FILE
+	    if [ -x /usr/bin/ucf ]; then
+		ucf --purge $FILE
+	    fi
+	done
+
+	rm -f /var/lib/nfs/etab  \
+              /var/lib/nfs/rmtab \
+              /var/lib/nfs/xtab
+	;;
+esac
+
--- nfs-utils-1.0.10.orig/debian/nfs-kernel-server.dirs
+++ nfs-utils-1.0.10/debian/nfs-kernel-server.dirs
@@ -0,0 +1,5 @@
+etc/init.d
+usr/sbin
+var/lib/nfs
+var/lib/nfs/v4recovery
+usr/share/nfs-kernel-server/conffiles
--- nfs-utils-1.0.10.orig/debian/nhfsstone.dirs
+++ nfs-utils-1.0.10/debian/nhfsstone.dirs
@@ -0,0 +1 @@
+usr/sbin
--- nfs-utils-1.0.10.orig/debian/idmapd.conf.md5sum
+++ nfs-utils-1.0.10/debian/idmapd.conf.md5sum
@@ -0,0 +1 @@
+3e94f238294cc61b047e7ae50115dffc  nfs-utils-1.0.7/debian/idmapd.conf
--- nfs-utils-1.0.10.orig/debian/nfs-common.links
+++ nfs-utils-1.0.10/debian/nfs-common.links
@@ -0,0 +1,4 @@
+/usr/share/man/man8/gssd.8 /usr/share/man/man8/rpc.gssd.8
+/usr/share/man/man8/lockd.8 /usr/share/man/man8/rpc.lockd.8
+/usr/share/man/man8/statd.8 /usr/share/man/man8/rpc.statd.8
+/usr/share/man/man8/idmapd.8 /usr/share/man/man8/rpc.idmapd.8
--- nfs-utils-1.0.10.orig/debian/compat
+++ nfs-utils-1.0.10/debian/compat
@@ -0,0 +1 @@
+5
--- nfs-utils-1.0.10.orig/debian/nhfsstone.install
+++ nfs-utils-1.0.10/debian/nhfsstone.install
@@ -0,0 +1,2 @@
+debian/tmp/usr/sbin/nhfs*
+debian/tmp/usr/share/man/man8/nhfs*
