diff --git a/0001-blkmapd-remove-pretty_sig.patch b/0001-blkmapd-remove-pretty_sig.patch deleted file mode 100644 index c119361..0000000 --- a/0001-blkmapd-remove-pretty_sig.patch +++ /dev/null @@ -1,75 +0,0 @@ -From a69f6aeb19841f5a95c3eb4f4e5fe5ca0db247f4 Mon Sep 17 00:00:00 2001 -From: Jim Rees -Date: Tue, 15 May 2012 10:10:01 -0400 -Subject: [PATCH 1/1] blkmapd: remove pretty_sig() - -This really only works against EMC servers. There is at least one server -that returns unprintable signatures, which fill the log with garbage (the -spec does not mandate printable signatures). It could be made more generic, -for example by checking each byte for isprint(). But the signatures are -really only of interest to developers, not admins, so it seems better to -just remove it. - -Signed-off-by: Jim Rees -Signed-off-by: Steve Dickson ---- - utils/blkmapd/device-process.c | 29 ----------------------------- - 1 files changed, 0 insertions(+), 29 deletions(-) - -diff --git a/utils/blkmapd/device-process.c b/utils/blkmapd/device-process.c -index 652a7a8..5fe3dff 100644 ---- a/utils/blkmapd/device-process.c -+++ b/utils/blkmapd/device-process.c -@@ -49,28 +49,6 @@ - - #include "device-discovery.h" - --static char *pretty_sig(char *sig, uint32_t siglen) --{ -- static char rs[100]; -- uint64_t sigval; -- unsigned int i; -- -- if (siglen <= sizeof(sigval)) { -- sigval = 0; -- for (i = 0; i < siglen; i++) -- sigval |= ((unsigned char *)sig)[i] << (i * 8); -- sprintf(rs, "0x%0llx", (unsigned long long) sigval); -- } else { -- if (siglen > sizeof rs - 4) { -- siglen = sizeof rs - 4; -- sprintf(&rs[siglen], "..."); -- } else -- rs[siglen] = '\0'; -- memcpy(rs, sig, siglen); -- } -- return rs; --} -- - uint32_t *blk_overflow(uint32_t * p, uint32_t * end, size_t nbytes) - { - uint32_t *q = p + ((nbytes + 3) >> 2); -@@ -109,9 +87,6 @@ static int decode_blk_signature(uint32_t **pp, uint32_t * end, - * for mapping, then thrown away. - */ - comp->bs_string = (char *)p; -- BL_LOG_INFO("%s: si_comps[%d]: bs_length %d, bs_string %s\n", -- __func__, i, siglen, -- pretty_sig(comp->bs_string, siglen)); - p += ((siglen + 3) >> 2); - } - *pp = p; -@@ -152,10 +127,6 @@ read_cmp_blk_sig(struct bl_disk *disk, int fd, struct bl_sig_comp *comp) - } - - ret = memcmp(sig, comp->bs_string, siglen); -- if (!ret) -- BL_LOG_INFO("%s: %s sig %s at %lld\n", __func__, dev_name, -- pretty_sig(sig, siglen), -- (long long)comp->bs_offset); - - out: - if (sig) --- -1.7.7.6 - diff --git a/nfs-utils-1.2.2-statdpath.patch b/nfs-utils-1.2.2-statdpath.patch deleted file mode 100644 index 7aec26d..0000000 --- a/nfs-utils-1.2.2-statdpath.patch +++ /dev/null @@ -1,50 +0,0 @@ -diff -up nfs-utils-1.2.2/configure.ac.orig nfs-utils-1.2.2/configure.ac ---- nfs-utils-1.2.2/configure.ac.orig 2010-02-18 07:35:00.000000000 -0500 -+++ nfs-utils-1.2.2/configure.ac 2010-02-18 09:15:24.710128679 -0500 -@@ -22,6 +22,14 @@ AC_ARG_WITH(statedir, - statedir=$withval, - statedir=/var/lib/nfs) - AC_SUBST(statedir) -+AC_ARG_WITH(statdpath, -+ [AC_HELP_STRING([--with-statdpath=/foo], -+ [Causes statd put it's state file in /foo instead of statedir] -+ )], -+ statdpath=$withval, -+ statdpath="" -+ ) -+ AC_SUBST(statdpath) - AC_ARG_WITH(statduser, - [AC_HELP_STRING([--with-statduser=rpcuser], - [statd to run under @<:@rpcuser or nobody@:>@] -@@ -364,6 +372,9 @@ dnl ************************************ - dnl Export some path names to config.h - dnl ************************************************************* - AC_DEFINE_UNQUOTED(NFS_STATEDIR, "$statedir", [This defines the location of the NFS state files. Warning: this must match definitions in config.mk!]) -+if test "$statdpath" != ""; then -+ AC_DEFINE_UNQUOTED(NSM_STATD_PATH, "$statdpath", [Define this if you what statd file placed in somewhere other than NFS_STATEDIR]) -+fi - - if test "x$cross_compiling" = "xno"; then - CFLAGS_FOR_BUILD=${CFLAGS_FOR_BUILD-"$CFLAGS"} -diff -up nfs-utils-1.2.2/support/nsm/file.c.orig nfs-utils-1.2.2/support/nsm/file.c ---- nfs-utils-1.2.2/support/nsm/file.c.orig 2010-02-18 07:35:00.000000000 -0500 -+++ nfs-utils-1.2.2/support/nsm/file.c 2010-02-18 09:15:24.711128045 -0500 -@@ -93,12 +93,13 @@ - #define NSM_KERNEL_STATE_FILE "/proc/sys/fs/nfs/nsm_local_state" - - /* -- * Some distributions place statd's files in a subdirectory -+ * Allow different places for statd's files - */ --#define NSM_PATH_EXTENSION --/* #define NSM_PATH_EXTENSION "/statd" */ -- --#define NSM_DEFAULT_STATEDIR NFS_STATEDIR NSM_PATH_EXTENSION -+#ifdef NSM_STATD_PATH -+#define NSM_DEFAULT_STATEDIR NSM_STATD_PATH -+#else -+#define NSM_DEFAULT_STATEDIR NFS_STATEDIR -+#endif - - static char nsm_base_dirname[PATH_MAX] = NSM_DEFAULT_STATEDIR; - diff --git a/nfs-utils-1.2.3-export-manpage.patch b/nfs-utils-1.2.3-export-manpage.patch deleted file mode 100644 index fd10909..0000000 --- a/nfs-utils-1.2.3-export-manpage.patch +++ /dev/null @@ -1,36 +0,0 @@ -commit 6f228ea26be06572de245aed5496aaa122cca5a8 -Author: Steve Dickson -Date: Fri Oct 15 17:20:28 2010 -0400 - - Removed duplicate entries in export man page - - The man page's paragraphs about "refer=" and "replicas=" - each appear twice. - - Signed-off-by: Steve Dickson - -diff --git a/utils/exportfs/exports.man b/utils/exportfs/exports.man -index c726dd9..bfc4d42 100644 ---- a/utils/exportfs/exports.man -+++ b/utils/exportfs/exports.man -@@ -375,20 +375,6 @@ If the client asks for alternative locations for the export point, it - will be given this list of alternatives. (Note that actual replication - of the filesystem must be handled elsewhere.) - --.TP --.IR refer= path@host[+host][:path@host[+host]] --A client referencing the export point will be directed to choose from --the given list an alternative location for the filesystem. --(Note that the server must have a mountpoint here, though a different --filesystem is not required; so, for example, --.IR "mount --bind" " /path /path" --is sufficient.) --.TP --.IR replicas= path@host[+host][:path@host[+host]] --If the client asks for alternative locations for the export point, it --will be given this list of alternatives. (Note that actual replication --of the filesystem must be handled elsewhere.) -- - .SS User ID Mapping - .PP - .B nfsd diff --git a/nfs-utils-1.2.3-libmount-api-2.20.patch b/nfs-utils-1.2.3-libmount-api-2.20.patch deleted file mode 100644 index 1ff0f33..0000000 --- a/nfs-utils-1.2.3-libmount-api-2.20.patch +++ /dev/null @@ -1,37 +0,0 @@ -mount: fix for libmount from util-linux >= 2.20 - -The function mnt_fs_set_fs_options() has been removed from the final -version of the libmount API. - -Signed-off-by: Karel Zak ---- - utils/mount/mount_libmount.c | 15 ++++++++++++--- - 1 files changed, 12 insertions(+), 3 deletions(-) - -diff --git a/utils/mount/mount_libmount.c b/utils/mount/mount_libmount.c -index 6dd6484..cf6e58c 100644 ---- a/utils/mount/mount_libmount.c -+++ b/utils/mount/mount_libmount.c -@@ -61,10 +61,19 @@ int nomtab; - * managed by libmount at all. We have to use "mount attributes" that are - * private for mount. helpers. - */ --static void store_mount_options(struct libmnt_fs *fs, const char *opts) -+static void store_mount_options(struct libmnt_fs *fs, const char *nfs_opts) - { -- mnt_fs_set_fs_options(fs, opts); /* for mtab */ -- mnt_fs_set_attributes(fs, opts); /* for non-mtab systems */ -+ char *o = NULL; -+ -+ mnt_fs_set_attributes(fs, nfs_opts); /* for non-mtab systems */ -+ -+ /* for mtab create a new options list */ -+ mnt_optstr_append_option(&o, mnt_fs_get_vfs_options(fs), NULL); -+ mnt_optstr_append_option(&o, nfs_opts, NULL); -+ mnt_optstr_append_option(&o, mnt_fs_get_user_options(fs), NULL); -+ -+ mnt_fs_set_options(fs, o); -+ free(o); - } - - /* diff --git a/nfs-utils-1.2.3-libnfs-multiports.patch b/nfs-utils-1.2.3-libnfs-multiports.patch deleted file mode 100644 index 2c197e5..0000000 --- a/nfs-utils-1.2.3-libnfs-multiports.patch +++ /dev/null @@ -1,323 +0,0 @@ -commit 0e94118815e8ff9c1142117764ee3e6cddba0395 -Author: Chuck Lever -Date: Fri Oct 1 15:04:20 2010 -0400 - - libnfs.a: Allow multiple RPC listeners to share listener port number - - Normally, when "-p" is not specified on the mountd command line, the - TI-RPC library chooses random port numbers for each listener. If a - port number _is_ specified on the command line, all the listeners - will get the same port number, so SO_REUSEADDR needs to be set on - each socket. - - Thus we can't let TI-RPC create the listener sockets for us in this - case; we must create them ourselves and then set SO_REUSEADDR (and - other socket options) by hand. - - Different versions of the same RPC program have to share the same - listener and SVCXPRT, so we have to cache xprts we create, and re-use - them when additional requests for registration come from the - application. - - Though it doesn't look like it, this fix was "copied" from the legacy - rpc_init() function. It's more complicated for TI-RPC, of course, - since you can have an arbitrary number of listeners, not just two - (one for AF_INET UDP and one for AF_INET TCP). - - Fix for: - - https://bugzilla.linux-nfs.org/show_bug.cgi?id=190 - - There have been no reports of problems with specifying statd's - listener port, but I expect this is a problem for statd too. - - Signed-off-by: Chuck Lever - -diff --git a/support/nfs/svc_create.c b/support/nfs/svc_create.c -index 59ba505..fdc4846 100644 ---- a/support/nfs/svc_create.c -+++ b/support/nfs/svc_create.c -@@ -27,6 +27,7 @@ - #include - #include - #include -+#include - #include - - #include -@@ -41,11 +42,68 @@ - #include "tcpwrapper.h" - #endif - -+#include "sockaddr.h" - #include "rpcmisc.h" - #include "xlog.h" - - #ifdef HAVE_LIBTIRPC - -+#define SVC_CREATE_XPRT_CACHE_SIZE (8) -+static SVCXPRT *svc_create_xprt_cache[SVC_CREATE_XPRT_CACHE_SIZE] = { NULL, }; -+ -+/* -+ * Cache an SVC xprt, in case there are more programs or versions to -+ * register against it. -+ */ -+static void -+svc_create_cache_xprt(SVCXPRT *xprt) -+{ -+ unsigned int i; -+ -+ /* Check if we've already got this one... */ -+ for (i = 0; i < SVC_CREATE_XPRT_CACHE_SIZE; i++) -+ if (svc_create_xprt_cache[i] == xprt) -+ return; -+ -+ /* No, we don't. Cache it. */ -+ for (i = 0; i < SVC_CREATE_XPRT_CACHE_SIZE; i++) -+ if (svc_create_xprt_cache[i] == NULL) { -+ svc_create_xprt_cache[i] = xprt; -+ return; -+ } -+ -+ xlog(L_ERROR, "%s: Failed to cache an xprt", __func__); -+} -+ -+/* -+ * Find a previously cached SVC xprt structure with the given bind address -+ * and transport semantics. -+ * -+ * Returns pointer to a SVC xprt. -+ * -+ * If no matching SVC XPRT can be found, NULL is returned. -+ */ -+static SVCXPRT * -+svc_create_find_xprt(const struct sockaddr *bindaddr, const struct netconfig *nconf) -+{ -+ unsigned int i; -+ -+ for (i = 0; i < SVC_CREATE_XPRT_CACHE_SIZE; i++) { -+ SVCXPRT *xprt = svc_create_xprt_cache[i]; -+ struct sockaddr *sap; -+ -+ if (xprt == NULL) -+ continue; -+ if (strcmp(nconf->nc_netid, xprt->xp_netid) != 0) -+ continue; -+ sap = (struct sockaddr *)xprt->xp_ltaddr.buf; -+ if (!nfs_compare_sockaddr(bindaddr, sap)) -+ continue; -+ return xprt; -+ } -+ return NULL; -+} -+ - /* - * Set up an appropriate bind address, given @port and @nconf. - * -@@ -98,17 +156,112 @@ svc_create_bindaddr(struct netconfig *nconf, const uint16_t port) - return ai; - } - -+/* -+ * Create a listener socket on a specific bindaddr, and set -+ * special socket options to allow it to share the same port -+ * as other listeners. -+ * -+ * Returns an open, bound, and possibly listening network -+ * socket on success. -+ * -+ * Otherwise returns -1 if some error occurs. -+ */ -+static int -+svc_create_sock(const struct sockaddr *sap, socklen_t salen, -+ struct netconfig *nconf) -+{ -+ int fd, type, protocol; -+ int one = 1; -+ -+ switch(nconf->nc_semantics) { -+ case NC_TPI_CLTS: -+ type = SOCK_DGRAM; -+ break; -+ case NC_TPI_COTS_ORD: -+ type = SOCK_STREAM; -+ break; -+ default: -+ xlog(D_GENERAL, "%s: Unrecognized bind address semantics: %u", -+ __func__, nconf->nc_semantics); -+ return -1; -+ } -+ -+ if (strcmp(nconf->nc_proto, NC_UDP) == 0) -+ protocol = (int)IPPROTO_UDP; -+ else if (strcmp(nconf->nc_proto, NC_TCP) == 0) -+ protocol = (int)IPPROTO_TCP; -+ else { -+ xlog(D_GENERAL, "%s: Unrecognized bind address protocol: %s", -+ __func__, nconf->nc_proto); -+ return -1; -+ } -+ -+ fd = socket((int)sap->sa_family, type, protocol); -+ if (fd == -1) { -+ xlog(L_ERROR, "Could not make a socket: (%d) %m", -+ errno); -+ return -1; -+ } -+ -+#ifdef IPV6_SUPPORTED -+ if (sap->sa_family == AF_INET6) { -+ if (setsockopt(fd, IPPROTO_IPV6, IPV6_V6ONLY, -+ &one, sizeof(one)) == -1) { -+ xlog(L_ERROR, "Failed to set IPV6_V6ONLY: (%d) %m", -+ errno); -+ (void)close(fd); -+ return -1; -+ } -+ } -+#endif /* IPV6_SUPPORTED */ -+ -+ if (setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, -+ &one, sizeof(one)) == -1) { -+ xlog(L_ERROR, "Failed to set SO_REUSEADDR: (%d) %m", -+ errno); -+ (void)close(fd); -+ return -1; -+ } -+ -+ if (bind(fd, sap, salen) == -1) { -+ xlog(L_ERROR, "Could not bind socket: (%d) %m", -+ errno); -+ (void)close(fd); -+ return -1; -+ } -+ -+ if (nconf->nc_semantics == NC_TPI_COTS_ORD) -+ if (listen(fd, SOMAXCONN) == -1) { -+ xlog(L_ERROR, "Could not listen on socket: (%d) %m", -+ errno); -+ (void)close(fd); -+ return -1; -+ } -+ -+ return fd; -+} -+ -+/* -+ * The simple case is allowing the TI-RPC library to create a -+ * transport itself, given just the bind address and transport -+ * semantics. -+ * -+ * The port is chosen at random by the library; we don't know -+ * what it is. So the new xprt cannot be cached here. -+ * -+ * Returns the count of started listeners (one or zero). -+ */ - static unsigned int --svc_create_nconf(const char *name, const rpcprog_t program, -+svc_create_nconf_rand_port(const char *name, const rpcprog_t program, - const rpcvers_t version, - void (*dispatch)(struct svc_req *, SVCXPRT *), -- const uint16_t port, struct netconfig *nconf) -+ struct netconfig *nconf) - { - struct t_bind bindaddr; - struct addrinfo *ai; - SVCXPRT *xprt; - -- ai = svc_create_bindaddr(nconf, port); -+ ai = svc_create_bindaddr(nconf, 0); - if (ai == NULL) - return 0; - -@@ -119,7 +272,7 @@ svc_create_nconf(const char *name, const rpcprog_t program, - freeaddrinfo(ai); - if (xprt == NULL) { - xlog(D_GENERAL, "Failed to create listener xprt " -- "(%s, %u, %s)", name, version, nconf->nc_netid); -+ "(%s, %u, %s)", name, version, nconf->nc_netid); - return 0; - } - -@@ -133,6 +286,81 @@ svc_create_nconf(const char *name, const rpcprog_t program, - return 1; - } - -+/* -+ * If a port is specified on the command line, that port value will be -+ * the same for all listeners created here. Create each listener socket -+ * in advance and set SO_REUSEADDR, rather than allowing the RPC library -+ * to create the listeners for us on a randomly chosen port (RPC_ANYFD). -+ * -+ * Also, to support multiple RPC versions on the same listener, register -+ * any new versions on the same transport that is already handling other -+ * versions on the same bindaddr and transport. To accomplish this, -+ * cache previously created xprts on a list, and check that list before -+ * creating a new socket for this [program, version]. -+ * -+ * Returns the count of started listeners (one or zero). -+ */ -+static unsigned int -+svc_create_nconf_fixed_port(const char *name, const rpcprog_t program, -+ const rpcvers_t version, -+ void (*dispatch)(struct svc_req *, SVCXPRT *), -+ const uint16_t port, struct netconfig *nconf) -+{ -+ struct addrinfo *ai; -+ SVCXPRT *xprt; -+ -+ ai = svc_create_bindaddr(nconf, port); -+ if (ai == NULL) -+ return 0; -+ -+ xprt = svc_create_find_xprt(ai->ai_addr, nconf); -+ if (xprt == NULL) { -+ int fd; -+ -+ fd = svc_create_sock(ai->ai_addr, ai->ai_addrlen, nconf); -+ if (fd == -1) -+ goto out_free; -+ -+ xprt = svc_tli_create(fd, nconf, NULL, 0, 0); -+ if (xprt == NULL) { -+ xlog(D_GENERAL, "Failed to create listener xprt " -+ "(%s, %u, %s)", name, version, nconf->nc_netid); -+ (void)close(fd); -+ goto out_free; -+ } -+ } -+ -+ if (!svc_reg(xprt, program, version, dispatch, nconf)) { -+ /* svc_reg(3) destroys @xprt in this case */ -+ xlog(D_GENERAL, "Failed to register (%s, %u, %s)", -+ name, version, nconf->nc_netid); -+ goto out_free; -+ } -+ -+ svc_create_cache_xprt(xprt); -+ -+ freeaddrinfo(ai); -+ return 1; -+ -+out_free: -+ freeaddrinfo(ai); -+ return 0; -+} -+ -+static unsigned int -+svc_create_nconf(const char *name, const rpcprog_t program, -+ const rpcvers_t version, -+ void (*dispatch)(struct svc_req *, SVCXPRT *), -+ const uint16_t port, struct netconfig *nconf) -+{ -+ if (port != 0) -+ return svc_create_nconf_fixed_port(name, program, -+ version, dispatch, port, nconf); -+ -+ return svc_create_nconf_rand_port(name, program, -+ version, dispatch, nconf); -+} -+ - /** - * nfs_svc_create - start up RPC svc listeners - * @name: C string containing name of new service diff --git a/nfs-utils-1.2.5-pnfs-rpcdebug.patch b/nfs-utils-1.2.5-pnfs-rpcdebug.patch deleted file mode 100644 index 2c2e3c9..0000000 --- a/nfs-utils-1.2.5-pnfs-rpcdebug.patch +++ /dev/null @@ -1,42 +0,0 @@ -commit 264ad7d77e7ebb5d83c0f02bcb1800b254cd5ccf -Author: Steve Dickson -Date: Wed Oct 19 16:37:34 2011 -0400 - - rpcdebug: Add missing debug flags - - This patch added the following debug flags: - - fscache - enable FSCache debugging - pnfs - enable general pNFS debugging - pnfs_ld - enable pNFS layout debugging - - Signed-off-by: Steve Dickson - -diff --git a/support/include/nfs/debug.h b/support/include/nfs/debug.h -index d391e91..dbec5ba 100644 ---- a/support/include/nfs/debug.h -+++ b/support/include/nfs/debug.h -@@ -76,6 +76,9 @@ enum { - #define NFSDBG_CALLBACK 0x0100 - #define NFSDBG_CLIENT 0x0200 - #define NFSDBG_MOUNT 0x0400 -+#define NFSDBG_FSCACHE 0x0800 -+#define NFSDBG_PNFS 0x1000 -+#define NFSDBG_PNFS_LD 0x2000 - #define NFSDBG_ALL 0xFFFF - - #endif /* _NFS_DEBUG_H */ -diff --git a/tools/rpcdebug/rpcdebug.c b/tools/rpcdebug/rpcdebug.c -index 275a491..444616d 100644 ---- a/tools/rpcdebug/rpcdebug.c -+++ b/tools/rpcdebug/rpcdebug.c -@@ -167,6 +167,9 @@ static struct flagmap { - FLAG(NFS, CALLBACK), - FLAG(NFS, CLIENT), - FLAG(NFS, MOUNT), -+ FLAG(NFS, FSCACHE), -+ FLAG(NFS, PNFS), -+ FLAG(NFS, PNFS_LD), - FLAG(NFS, ALL), - - /* nfsd */ diff --git a/nfs-utils-1.3.1-mountd-dos.patch b/nfs-utils-1.3.1-mountd-dos.patch deleted file mode 100644 index 3ade7fb..0000000 --- a/nfs-utils-1.3.1-mountd-dos.patch +++ /dev/null @@ -1,168 +0,0 @@ -diff -up nfs-utils-1.3.1/support/include/nfslib.h.save nfs-utils-1.3.1/support/include/nfslib.h ---- nfs-utils-1.3.1/support/include/nfslib.h.save 2014-11-13 13:36:10.054248000 -0500 -+++ nfs-utils-1.3.1/support/include/nfslib.h 2014-11-13 13:37:14.045142000 -0500 -@@ -174,6 +174,7 @@ void closeall(int min); - - int svctcp_socket (u_long __number, int __reuse); - int svcudp_socket (u_long __number); -+int svcsock_nonblock (int __sock); - - /* Misc shared code prototypes */ - size_t strlcat(char *, const char *, size_t); -diff -up nfs-utils-1.3.1/support/nfs/rpcmisc.c.save nfs-utils-1.3.1/support/nfs/rpcmisc.c ---- nfs-utils-1.3.1/support/nfs/rpcmisc.c.save 2014-11-13 13:36:19.386524000 -0500 -+++ nfs-utils-1.3.1/support/nfs/rpcmisc.c 2014-11-13 13:37:14.051143000 -0500 -@@ -104,7 +104,7 @@ makesock(int port, int proto) - return -1; - } - -- return sock; -+ return svcsock_nonblock(sock); - } - - void -diff -up nfs-utils-1.3.1/support/nfs/svc_create.c.save nfs-utils-1.3.1/support/nfs/svc_create.c ---- nfs-utils-1.3.1/support/nfs/svc_create.c.save 2014-11-13 13:36:44.554269000 -0500 -+++ nfs-utils-1.3.1/support/nfs/svc_create.c 2014-11-13 13:37:29.571601000 -0500 -@@ -49,6 +49,8 @@ - - #ifdef HAVE_LIBTIRPC - -+#include -+ - #define SVC_CREATE_XPRT_CACHE_SIZE (8) - static SVCXPRT *svc_create_xprt_cache[SVC_CREATE_XPRT_CACHE_SIZE] = { NULL, }; - -@@ -277,6 +279,12 @@ svc_create_nconf_rand_port(const char *n - "(%s, %u, %s)", name, version, nconf->nc_netid); - return 0; - } -+ if (svcsock_nonblock(xprt->xp_fd) < 0) { -+ /* close() already done by svcsock_nonblock() */ -+ xprt->xp_fd = RPC_ANYFD; -+ SVC_DESTROY(xprt); -+ return 0; -+ } - - if (!svc_reg(xprt, program, version, dispatch, nconf)) { - /* svc_reg(3) destroys @xprt in this case */ -@@ -332,6 +340,7 @@ svc_create_nconf_fixed_port(const char * - int fd; - - fd = svc_create_sock(ai->ai_addr, ai->ai_addrlen, nconf); -+ fd = svcsock_nonblock(fd); - if (fd == -1) - goto out_free; - -@@ -394,6 +403,7 @@ nfs_svc_create(char *name, const rpcprog - const struct sigaction create_sigaction = { - .sa_handler = SIG_IGN, - }; -+ int maxrec = RPC_MAXDATASIZE; - unsigned int visible, up, servport; - struct netconfig *nconf; - void *handlep; -@@ -405,6 +415,20 @@ nfs_svc_create(char *name, const rpcprog - */ - (void)sigaction(SIGPIPE, &create_sigaction, NULL); - -+ /* -+ * Setting MAXREC also enables non-blocking mode for tcp connections. -+ * This avoids DOS attacks by a client sending many requests but never -+ * reading the reply: -+ * - if a second request already is present for reading in the socket, -+ * after the first request just was read, libtirpc will break the -+ * connection. Thus an attacker can't simply send requests as fast as -+ * he can without waiting for the response. -+ * - if the write buffer of the socket is full, the next write() will -+ * fail with EAGAIN. libtirpc will retry the write in a loop for max. -+ * 2 seconds. If write still fails, the connection will be closed. -+ */ -+ rpc_control(RPC_SVC_CONNMAXREC_SET, &maxrec); -+ - handlep = setnetconfig(); - if (handlep == NULL) { - xlog(L_ERROR, "Failed to access local netconfig database: %s", -diff -up nfs-utils-1.3.1/support/nfs/svc_socket.c.save nfs-utils-1.3.1/support/nfs/svc_socket.c ---- nfs-utils-1.3.1/support/nfs/svc_socket.c.save 2014-11-13 13:36:29.925836000 -0500 -+++ nfs-utils-1.3.1/support/nfs/svc_socket.c 2014-11-13 13:37:14.055142000 -0500 -@@ -76,6 +76,39 @@ int getservport(u_long number, const cha - return 0; - } - -+int -+svcsock_nonblock(int sock) -+{ -+ int flags; -+ -+ if (sock < 0) -+ return sock; -+ -+ /* This socket might be shared among multiple processes -+ * if mountd is run multi-threaded. So it is safest to -+ * make it non-blocking, else all threads might wake -+ * one will get the data, and the others will block -+ * indefinitely. -+ * In all cases, transaction on this socket are atomic -+ * (accept for TCP, packet-read and packet-write for UDP) -+ * so O_NONBLOCK will not confuse unprepared code causing -+ * it to corrupt messages. -+ * It generally safest to have O_NONBLOCK when doing an accept -+ * as if we get a RST after the SYN and before accept runs, -+ * we can block despite being told there was an acceptable -+ * connection. -+ */ -+ if ((flags = fcntl(sock, F_GETFL)) < 0) -+ perror(_("svc_socket: can't get socket flags")); -+ else if (fcntl(sock, F_SETFL, flags|O_NONBLOCK) < 0) -+ perror(_("svc_socket: can't set socket flags")); -+ else -+ return sock; -+ -+ (void) __close(sock); -+ return -1; -+} -+ - static int - svc_socket (u_long number, int type, int protocol, int reuse) - { -@@ -113,38 +146,7 @@ svc_socket (u_long number, int type, int - sock = -1; - } - -- if (sock >= 0) -- { -- /* This socket might be shared among multiple processes -- * if mountd is run multi-threaded. So it is safest to -- * make it non-blocking, else all threads might wake -- * one will get the data, and the others will block -- * indefinitely. -- * In all cases, transaction on this socket are atomic -- * (accept for TCP, packet-read and packet-write for UDP) -- * so O_NONBLOCK will not confuse unprepared code causing -- * it to corrupt messages. -- * It generally safest to have O_NONBLOCK when doing an accept -- * as if we get a RST after the SYN and before accept runs, -- * we can block despite being told there was an acceptable -- * connection. -- */ -- int flags; -- if ((flags = fcntl(sock, F_GETFL)) < 0) -- { -- perror (_("svc_socket: can't get socket flags")); -- (void) __close (sock); -- sock = -1; -- } -- else if (fcntl(sock, F_SETFL, flags|O_NONBLOCK) < 0) -- { -- perror (_("svc_socket: can't set socket flags")); -- (void) __close (sock); -- sock = -1; -- } -- } -- -- return sock; -+ return svcsock_nonblock(sock); - } - - /* diff --git a/nfs-utils-1.3.2-statd-bg.patch b/nfs-utils-1.3.2-statd-bg.patch deleted file mode 100644 index dbfb6e5..0000000 --- a/nfs-utils-1.3.2-statd-bg.patch +++ /dev/null @@ -1,25 +0,0 @@ -commit 17a3e5bffb7110d46de1bf42b64b90713ff5ea50 -Author: Chris Mayo -Date: Sun Feb 1 12:03:46 2015 -0500 - - statd: Fix test for foreground mode - - daemon_init parameter has the opposite sense - to code removed in commit 7addf9d - - Signed-off-by: Chris Mayo - Signed-off-by: Steve Dickson - -diff --git a/utils/statd/statd.c b/utils/statd/statd.c -index 60ce6d1..2b7a167 100644 ---- a/utils/statd/statd.c -+++ b/utils/statd/statd.c -@@ -393,7 +393,7 @@ int main (int argc, char **argv) - simulator (--argc, ++argv); /* simulator() does exit() */ - #endif - -- daemon_init(!(run_mode & MODE_NODAEMON)); -+ daemon_init((run_mode & MODE_NODAEMON)); - - if (run_mode & MODE_LOG_STDERR) { - xlog_syslog(0); diff --git a/nfs-utils-1.3.2-statd-nowait.patch b/nfs-utils-1.3.2-statd-nowait.patch deleted file mode 100644 index a29df36..0000000 --- a/nfs-utils-1.3.2-statd-nowait.patch +++ /dev/null @@ -1,35 +0,0 @@ -From 650633d4e956dc6b628da30c868e39fba76a0b29 Mon Sep 17 00:00:00 2001 -From: Steve Dickson -Date: Mon, 9 Feb 2015 08:54:54 -0500 -Subject: [PATCH] rpc-statd-notify: Don't wait for the network to come up - -rpc-statd-notify only needs to wait for the network -interface to be configured not to be connected since -it forks into background and will wait 15mins for -the network to come up. - -This decrease boot times when networks are not -and will not be connected. - -Signed-off-by: Steve Dickson -Reported-By: Eric Work ---- - systemd/rpc-statd-notify.service | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/systemd/rpc-statd-notify.service b/systemd/rpc-statd-notify.service -index 941afe5..a655445 100644 ---- a/systemd/rpc-statd-notify.service -+++ b/systemd/rpc-statd-notify.service -@@ -1,7 +1,7 @@ - [Unit] - Description=Notify NFS peers of a restart - Requires=network-online.target --After=network-online.target nss-lookup.target -+After=network.target nss-lookup.target - - # if we run an nfs server, it needs to be running before we - # tell clients that it has restarted. --- -2.1.0 -