basebuilder_pel7ppc64bebuilder0
6 years ago
14 changed files with 982 additions and 5 deletions
@ -0,0 +1,25 @@
@@ -0,0 +1,25 @@
|
||||
diff -up nfs-utils-1.3.0/support/nfs/exports.c.orig nfs-utils-1.3.0/support/nfs/exports.c |
||||
--- nfs-utils-1.3.0/support/nfs/exports.c.orig 2018-07-10 13:49:12.978210878 -0400 |
||||
+++ nfs-utils-1.3.0/support/nfs/exports.c 2018-07-10 13:50:44.057806104 -0400 |
||||
@@ -197,6 +197,7 @@ static const struct secinfo_flag_display |
||||
const char *set; |
||||
const char *unset; |
||||
} secinfo_flag_displaymap[] = { |
||||
+ { NFSEXP_READONLY, "ro", "rw" }, |
||||
{ NFSEXP_INSECURE_PORT, "insecure", "secure" }, |
||||
{ NFSEXP_ROOTSQUASH, "root_squash", "no_root_squash" }, |
||||
{ NFSEXP_ALLSQUASH, "all_squash", "no_all_squash" }, |
||||
diff -up nfs-utils-1.3.0/utils/exportfs/exportfs.c.orig nfs-utils-1.3.0/utils/exportfs/exportfs.c |
||||
--- nfs-utils-1.3.0/utils/exportfs/exportfs.c.orig 2018-07-10 13:49:12.960210562 -0400 |
||||
+++ nfs-utils-1.3.0/utils/exportfs/exportfs.c 2018-07-10 13:50:44.058806122 -0400 |
||||
@@ -756,10 +756,6 @@ dump(int verbose, int export_format) |
||||
continue; |
||||
} |
||||
c = '('; |
||||
- if (ep->e_flags & NFSEXP_READONLY) |
||||
- c = dumpopt(c, "ro"); |
||||
- else |
||||
- c = dumpopt(c, "rw"); |
||||
if (ep->e_flags & NFSEXP_ASYNC) |
||||
c = dumpopt(c, "async"); |
||||
else |
@ -0,0 +1,128 @@
@@ -0,0 +1,128 @@
|
||||
diff -up nfs-utils-1.3.0/utils/mount/network.c.orig nfs-utils-1.3.0/utils/mount/network.c |
||||
--- nfs-utils-1.3.0/utils/mount/network.c.orig 2018-07-30 14:14:01.242771732 -0400 |
||||
+++ nfs-utils-1.3.0/utils/mount/network.c 2018-07-30 14:15:36.918075978 -0400 |
||||
@@ -44,6 +44,8 @@ |
||||
#include <rpc/rpc.h> |
||||
#include <rpc/pmap_prot.h> |
||||
#include <rpc/pmap_clnt.h> |
||||
+#include <net/if.h> |
||||
+#include <ifaddrs.h> |
||||
|
||||
#include "sockaddr.h" |
||||
#include "xcommon.h" |
||||
@@ -1736,3 +1738,48 @@ int nfs_umount_do_umnt(struct mount_opti |
||||
|
||||
return EX_SUCCESS; |
||||
} |
||||
+ |
||||
+int nfs_is_inaddr_any(struct sockaddr *nfs_saddr) |
||||
+{ |
||||
+ switch (nfs_saddr->sa_family) { |
||||
+ case AF_INET: { |
||||
+ if (((struct sockaddr_in *)nfs_saddr)->sin_addr.s_addr == |
||||
+ INADDR_ANY) |
||||
+ return 1; |
||||
+ break; |
||||
+ } |
||||
+ case AF_INET6: |
||||
+ if (!memcmp(&((struct sockaddr_in6 *)nfs_saddr)->sin6_addr, |
||||
+ &in6addr_any, sizeof(in6addr_any))) |
||||
+ return 1; |
||||
+ break; |
||||
+ } |
||||
+ return 0; |
||||
+} |
||||
+ |
||||
+int nfs_addr_matches_localips(struct sockaddr *nfs_saddr) |
||||
+{ |
||||
+ struct ifaddrs *myaddrs, *ifa; |
||||
+ int found = 0; |
||||
+ |
||||
+ /* acquire exiting network interfaces */ |
||||
+ if (getifaddrs(&myaddrs) != 0) |
||||
+ return 0; |
||||
+ |
||||
+ /* interate over the available interfaces and check if we |
||||
+ * we find a match to the supplied clientaddr value |
||||
+ */ |
||||
+ for (ifa = myaddrs; ifa != NULL; ifa = ifa->ifa_next) { |
||||
+ if (ifa->ifa_addr == NULL) |
||||
+ continue; |
||||
+ if (!(ifa->ifa_flags & IFF_UP)) |
||||
+ continue; |
||||
+ if (!memcmp(ifa->ifa_addr, nfs_saddr, |
||||
+ sizeof(struct sockaddr))) { |
||||
+ found = 1; |
||||
+ break; |
||||
+ } |
||||
+ } |
||||
+ freeifaddrs(myaddrs); |
||||
+ return found; |
||||
+} |
||||
diff -up nfs-utils-1.3.0/utils/mount/network.h.orig nfs-utils-1.3.0/utils/mount/network.h |
||||
--- nfs-utils-1.3.0/utils/mount/network.h.orig 2018-07-30 14:14:01.242771732 -0400 |
||||
+++ nfs-utils-1.3.0/utils/mount/network.h 2018-07-30 14:15:36.918075978 -0400 |
||||
@@ -54,6 +54,8 @@ int nfs_callback_address(const struct so |
||||
int clnt_ping(struct sockaddr_in *, const unsigned long, |
||||
const unsigned long, const unsigned int, |
||||
struct sockaddr_in *); |
||||
+int nfs_is_inaddr_any(struct sockaddr *); |
||||
+int nfs_addr_matches_localips(struct sockaddr *); |
||||
|
||||
struct mount_options; |
||||
|
||||
diff -up nfs-utils-1.3.0/utils/mount/nfs.man.orig nfs-utils-1.3.0/utils/mount/nfs.man |
||||
--- nfs-utils-1.3.0/utils/mount/nfs.man.orig 2018-07-30 14:14:01.240771705 -0400 |
||||
+++ nfs-utils-1.3.0/utils/mount/nfs.man 2018-07-30 14:15:43.365163864 -0400 |
||||
@@ -825,6 +825,9 @@ to perform NFS version 4.0 callback requ |
||||
files on this mount point. If the server is unable to |
||||
establish callback connections to clients, performance |
||||
may degrade, or accesses to files may temporarily hang. |
||||
+Can specify a value of IPv4_ANY (0.0.0.0) or equivalent |
||||
+IPv6 any address which will signal to the NFS server that |
||||
+this NFS client does not want delegations. |
||||
.IP |
||||
If this option is not specified, the |
||||
.BR mount (8) |
||||
diff -up nfs-utils-1.3.0/utils/mount/stropts.c.orig nfs-utils-1.3.0/utils/mount/stropts.c |
||||
--- nfs-utils-1.3.0/utils/mount/stropts.c.orig 2018-07-30 14:14:01.243771746 -0400 |
||||
+++ nfs-utils-1.3.0/utils/mount/stropts.c 2018-07-30 14:15:36.918075978 -0400 |
||||
@@ -229,7 +229,8 @@ static int nfs_append_addr_option(const |
||||
|
||||
/* |
||||
* Called to discover our address and append an appropriate 'clientaddr=' |
||||
- * option to the options string. |
||||
+ * option to the options string. If the supplied 'clientaddr=' value does |
||||
+ * not match either IPV4/IPv6 any or a local address, then fail the mount. |
||||
* |
||||
* Returns 1 if 'clientaddr=' option created successfully or if |
||||
* 'clientaddr=' option is already present; otherwise zero. |
||||
@@ -242,8 +243,27 @@ static int nfs_append_clientaddr_option( |
||||
struct sockaddr *my_addr = &address.sa; |
||||
socklen_t my_len = sizeof(address); |
||||
|
||||
- if (po_contains(options, "clientaddr") == PO_FOUND) |
||||
+ if (po_contains(options, "clientaddr") == PO_FOUND) { |
||||
+ char *addr = po_get(options, "clientaddr"); |
||||
+ union nfs_sockaddr nfs_address; |
||||
+ struct sockaddr *nfs_saddr = &nfs_address.sa; |
||||
+ socklen_t nfs_salen = sizeof(nfs_address); |
||||
+ |
||||
+ /* translate the input for clientaddr to nfs_sockaddr */ |
||||
+ if (!nfs_string_to_sockaddr(addr, nfs_saddr, &nfs_salen)) |
||||
+ return 0; |
||||
+ |
||||
+ /* check for IPV4_ANY and IPV6_ANY */ |
||||
+ if (nfs_is_inaddr_any(nfs_saddr)) |
||||
+ return 1; |
||||
+ |
||||
+ /* check if ip matches local network addresses */ |
||||
+ if (!nfs_addr_matches_localips(nfs_saddr)) |
||||
+ nfs_error(_("%s: [warning] supplied clientaddr=%s " |
||||
+ "does not match any existing network " |
||||
+ "addresses"), progname, addr); |
||||
return 1; |
||||
+ } |
||||
|
||||
nfs_callback_address(sap, salen, my_addr, &my_len); |
||||
|
@ -0,0 +1,280 @@
@@ -0,0 +1,280 @@
|
||||
diff -up nfs-utils-1.3.0/support/include/nfs/nfs.h.orig nfs-utils-1.3.0/support/include/nfs/nfs.h |
||||
--- nfs-utils-1.3.0/support/include/nfs/nfs.h.orig 2018-08-20 14:18:13.975034097 -0400 |
||||
+++ nfs-utils-1.3.0/support/include/nfs/nfs.h 2018-08-20 14:18:29.624303893 -0400 |
||||
@@ -16,8 +16,8 @@ |
||||
#define NFSD_MINVERS 2 |
||||
#define NFSD_MAXVERS 4 |
||||
|
||||
-#define NFS4_MINMINOR 1 |
||||
-#define NFS4_MAXMINOR WORD_BIT |
||||
+#define NFS4_MINMINOR 0 |
||||
+#define NFS4_MAXMINOR (WORD_BIT-1) |
||||
|
||||
struct nfs_fh_len { |
||||
int fh_size; |
||||
@@ -49,16 +49,19 @@ struct nfs_fh_old { |
||||
#define NFSCTL_TCPBIT (1 << (18 - 1)) |
||||
|
||||
#define NFSCTL_VERUNSET(_cltbits, _v) ((_cltbits) &= ~(1 << ((_v) - 1))) |
||||
+#define NFSCTL_MINORUNSET(_cltbits, _v) ((_cltbits) &= ~(1 << (_v))) |
||||
#define NFSCTL_UDPUNSET(_cltbits) ((_cltbits) &= ~NFSCTL_UDPBIT) |
||||
#define NFSCTL_TCPUNSET(_cltbits) ((_cltbits) &= ~NFSCTL_TCPBIT) |
||||
|
||||
#define NFSCTL_VERISSET(_cltbits, _v) ((_cltbits) & (1 << ((_v) - 1))) |
||||
+#define NFSCTL_MINORISSET(_cltbits, _v) ((_cltbits) & (1 << (_v))) |
||||
#define NFSCTL_UDPISSET(_cltbits) ((_cltbits) & NFSCTL_UDPBIT) |
||||
#define NFSCTL_TCPISSET(_cltbits) ((_cltbits) & NFSCTL_TCPBIT) |
||||
|
||||
#define NFSCTL_VERDEFAULT (0xc) /* versions 3 and 4 */ |
||||
#define NFSCTL_MINDEFAULT (0x7) /* minor versions 4.1 and 4.2 */ |
||||
#define NFSCTL_VERSET(_cltbits, _v) ((_cltbits) |= (1 << ((_v) - 1))) |
||||
+#define NFSCTL_MINORSET(_cltbits, _v) ((_cltbits) |= (1 << (_v))) |
||||
#define NFSCTL_UDPSET(_cltbits) ((_cltbits) |= NFSCTL_UDPBIT) |
||||
#define NFSCTL_TCPSET(_cltbits) ((_cltbits) |= NFSCTL_TCPBIT) |
||||
|
||||
diff -up nfs-utils-1.3.0/utils/nfsd/nfsd.c.orig nfs-utils-1.3.0/utils/nfsd/nfsd.c |
||||
--- nfs-utils-1.3.0/utils/nfsd/nfsd.c.orig 2018-08-20 14:18:13.975034097 -0400 |
||||
+++ nfs-utils-1.3.0/utils/nfsd/nfsd.c 2018-08-20 14:18:58.023793505 -0400 |
||||
@@ -66,10 +66,12 @@ main(int argc, char **argv) |
||||
int socket_up = 0; |
||||
unsigned int minorvers = NFSCTL_MINDEFAULT; |
||||
unsigned int minorversset = NFSCTL_MINDEFAULT; |
||||
+ unsigned int minormask = 0; |
||||
unsigned int versbits = NFSCTL_VERDEFAULT; |
||||
unsigned int protobits = NFSCTL_ALLBITS; |
||||
int grace = -1; |
||||
int lease = -1; |
||||
+ int force4dot0 = 0; |
||||
|
||||
progname = basename(argv[0]); |
||||
haddr = xmalloc(sizeof(char *)); |
||||
@@ -103,6 +105,8 @@ main(int argc, char **argv) |
||||
else |
||||
NFSCTL_VERUNSET(versbits, i); |
||||
} |
||||
+ |
||||
+ nfssvc_get_minormask(&minormask); |
||||
/* We assume the kernel will default all minor versions to 'on', |
||||
* and allow the config file to disable some. |
||||
*/ |
||||
@@ -118,12 +122,16 @@ main(int argc, char **argv) |
||||
* (i.e. don't set the bit in minorversset). |
||||
*/ |
||||
if (!conf_get_bool("nfsd", tag, 1)) { |
||||
- NFSCTL_VERSET(minorversset, i); |
||||
- NFSCTL_VERUNSET(minorvers, i); |
||||
+ NFSCTL_MINORSET(minorversset, i); |
||||
+ NFSCTL_MINORUNSET(minorvers, i); |
||||
+ if (i == 0) |
||||
+ force4dot0 = 1; |
||||
} |
||||
if (conf_get_bool("nfsd", tag, 0)) { |
||||
- NFSCTL_VERSET(minorversset, i); |
||||
- NFSCTL_VERSET(minorvers, i); |
||||
+ NFSCTL_MINORSET(minorversset, i); |
||||
+ NFSCTL_MINORSET(minorvers, i); |
||||
+ if (i == 0) |
||||
+ force4dot0 = 1; |
||||
} |
||||
} |
||||
|
||||
@@ -178,13 +186,19 @@ main(int argc, char **argv) |
||||
case 4: |
||||
if (*p == '.') { |
||||
int i = atoi(p+1); |
||||
- if (i < NFS4_MINMINOR || i > NFS4_MAXMINOR) { |
||||
+ if (i < 0 || i > NFS4_MAXMINOR) { |
||||
fprintf(stderr, "%s: unsupported minor version\n", optarg); |
||||
exit(1); |
||||
} |
||||
- NFSCTL_VERSET(minorversset, i); |
||||
- NFSCTL_VERUNSET(minorvers, i); |
||||
- break; |
||||
+ NFSCTL_MINORSET(minorversset, i); |
||||
+ NFSCTL_MINORUNSET(minorvers, i); |
||||
+ if (i == 0) |
||||
+ force4dot0 = 1; |
||||
+ if (minorvers != 0) |
||||
+ break; |
||||
+ } else { |
||||
+ minorvers = 0; |
||||
+ minorversset = minormask; |
||||
} |
||||
case 3: |
||||
case 2: |
||||
@@ -200,14 +214,16 @@ main(int argc, char **argv) |
||||
case 4: |
||||
if (*p == '.') { |
||||
int i = atoi(p+1); |
||||
- if (i < NFS4_MINMINOR || i > NFS4_MAXMINOR) { |
||||
+ if (i < 0 || i > NFS4_MAXMINOR) { |
||||
fprintf(stderr, "%s: unsupported minor version\n", optarg); |
||||
exit(1); |
||||
} |
||||
- NFSCTL_VERSET(minorversset, i); |
||||
- NFSCTL_VERSET(minorvers, i); |
||||
- break; |
||||
- } |
||||
+ NFSCTL_MINORSET(minorversset, i); |
||||
+ NFSCTL_MINORSET(minorvers, i); |
||||
+ if (i == 0) |
||||
+ force4dot0 = 1; |
||||
+ } else |
||||
+ minorvers = minorversset = minormask; |
||||
case 3: |
||||
case 2: |
||||
NFSCTL_VERSET(versbits, c); |
||||
@@ -305,7 +321,7 @@ main(int argc, char **argv) |
||||
* Timeouts must also be set before ports are created else we get |
||||
* EBUSY. |
||||
*/ |
||||
- nfssvc_setvers(versbits, minorvers, minorversset); |
||||
+ nfssvc_setvers(versbits, minorvers, minorversset, force4dot0); |
||||
if (grace > 0) |
||||
nfssvc_set_time("grace", grace); |
||||
if (lease > 0) |
||||
diff -up nfs-utils-1.3.0/utils/nfsd/nfsd.man.orig nfs-utils-1.3.0/utils/nfsd/nfsd.man |
||||
--- nfs-utils-1.3.0/utils/nfsd/nfsd.man.orig 2018-08-20 14:18:13.934033391 -0400 |
||||
+++ nfs-utils-1.3.0/utils/nfsd/nfsd.man 2018-08-20 14:18:29.625303910 -0400 |
||||
@@ -57,7 +57,7 @@ This option can be used to request that |
||||
.B rpc.nfsd |
||||
does not offer certain versions of NFS. The current version of |
||||
.B rpc.nfsd |
||||
-can support major NFS versions 2,3,4 and the minor versions 4.1 and 4.2. |
||||
+can support major NFS versions 2,3,4 and the minor versions 4.0, 4.1 and 4.2. |
||||
.TP |
||||
.B \-s " or " \-\-syslog |
||||
By default, |
||||
@@ -82,7 +82,7 @@ This option can be used to request that |
||||
.B rpc.nfsd |
||||
offer certain versions of NFS. The current version of |
||||
.B rpc.nfsd |
||||
-can support major NFS versions 2,3,4 and the minor versions 4.1 and 4.2. |
||||
+can support major NFS versions 2,3,4 and the minor versions 4.0, 4.1 and 4.2. |
||||
.TP |
||||
.B \-L " or " \-\-lease-time seconds |
||||
Set the lease-time used for NFSv4. This corresponds to how often |
||||
diff -up nfs-utils-1.3.0/utils/nfsd/nfssvc.c.orig nfs-utils-1.3.0/utils/nfsd/nfssvc.c |
||||
--- nfs-utils-1.3.0/utils/nfsd/nfssvc.c.orig 2018-08-20 14:18:13.963033891 -0400 |
||||
+++ nfs-utils-1.3.0/utils/nfsd/nfssvc.c 2018-08-20 14:18:58.023793505 -0400 |
||||
@@ -24,6 +24,7 @@ |
||||
#include "nfslib.h" |
||||
#include "xlog.h" |
||||
#include "nfssvc.h" |
||||
+#include "../mount/version.h" |
||||
|
||||
#ifndef NFSD_FS_DIR |
||||
#define NFSD_FS_DIR "/proc/fs/nfsd" |
||||
@@ -333,36 +334,81 @@ nfssvc_set_time(const char *type, const |
||||
} |
||||
|
||||
void |
||||
-nfssvc_setvers(unsigned int ctlbits, unsigned int minorvers, unsigned int minorversset) |
||||
+nfssvc_get_minormask(unsigned int *mask) |
||||
+{ |
||||
+ int fd; |
||||
+ char *ptr = buf; |
||||
+ ssize_t size; |
||||
+ |
||||
+ fd = open(NFSD_VERS_FILE, O_RDONLY); |
||||
+ if (fd < 0) |
||||
+ return; |
||||
+ |
||||
+ size = read(fd, buf, sizeof(buf)); |
||||
+ if (size < 0) { |
||||
+ xlog(L_ERROR, "Getting versions failed: errno %d (%m)", errno); |
||||
+ goto out; |
||||
+ } |
||||
+ ptr[size] = '\0'; |
||||
+ for (;;) { |
||||
+ unsigned vers, minor = 0; |
||||
+ char *token = strtok(ptr, " "); |
||||
+ |
||||
+ if (!token) |
||||
+ break; |
||||
+ ptr = NULL; |
||||
+ if (*token != '+' && *token != '-') |
||||
+ continue; |
||||
+ if (sscanf(++token, "%u.%u", &vers, &minor) > 0 && |
||||
+ vers == 4 && minor <= NFS4_MAXMINOR) |
||||
+ NFSCTL_MINORSET(*mask, minor); |
||||
+ } |
||||
+out: |
||||
+ close(fd); |
||||
+ return; |
||||
+} |
||||
+ |
||||
+static int |
||||
+nfssvc_print_vers(char *ptr, unsigned size, unsigned vers, unsigned minorvers, |
||||
+ int isset, int force4dot0) |
||||
+{ |
||||
+ char sign = isset ? '+' : '-'; |
||||
+ if (minorvers == 0) |
||||
+ if (linux_version_code() < MAKE_VERSION(4, 11, 0) || !force4dot0) |
||||
+ return snprintf(ptr, size, "%c%u ", sign, vers); |
||||
+ return snprintf(ptr, size, "%c%u.%u ", sign, vers, minorvers); |
||||
+} |
||||
+ |
||||
+void |
||||
+nfssvc_setvers(unsigned int ctlbits, unsigned int minorvers, unsigned int minorversset, |
||||
+ int force4dot0) |
||||
{ |
||||
int fd, n, off; |
||||
- char *ptr; |
||||
|
||||
- ptr = buf; |
||||
off = 0; |
||||
fd = open(NFSD_VERS_FILE, O_WRONLY); |
||||
if (fd < 0) |
||||
return; |
||||
|
||||
- for (n = NFS4_MINMINOR; n <= NFS4_MAXMINOR; n++) { |
||||
- if (NFSCTL_VERISSET(minorversset, n)) { |
||||
- if (NFSCTL_VERISSET(minorvers, n)) |
||||
- off += snprintf(ptr+off, sizeof(buf) - off, "+4.%d ", n); |
||||
- else |
||||
- off += snprintf(ptr+off, sizeof(buf) - off, "-4.%d ", n); |
||||
- } |
||||
- } |
||||
- for (n = NFSD_MINVERS; n <= NFSD_MAXVERS; n++) { |
||||
- if (NFSCTL_VERISSET(ctlbits, n)) |
||||
- off += snprintf(ptr+off, sizeof(buf) - off, "+%d ", n); |
||||
- else |
||||
- off += snprintf(ptr+off, sizeof(buf) - off, "-%d ", n); |
||||
+ for (n = NFSD_MINVERS; n <= ((NFSD_MAXVERS < 3) ? NFSD_MAXVERS : 3); n++) |
||||
+ off += nfssvc_print_vers(&buf[off], sizeof(buf) - off, |
||||
+ n, 0, NFSCTL_VERISSET(ctlbits, n), 0); |
||||
+ |
||||
+ for (n = 0; n <= NFS4_MAXMINOR; n++) { |
||||
+ if (!NFSCTL_MINORISSET(minorversset, n)) |
||||
+ continue; |
||||
+ off += nfssvc_print_vers(&buf[off], sizeof(buf) - off, |
||||
+ 4, n, NFSCTL_MINORISSET(minorvers, n), |
||||
+ (n == 0) ? force4dot0 : 0); |
||||
} |
||||
+ if (!off--) |
||||
+ goto out; |
||||
+ buf[off] = '\0'; |
||||
xlog(D_GENERAL, "Writing version string to kernel: %s", buf); |
||||
- snprintf(ptr+off, sizeof(buf) - off, "\n"); |
||||
+ snprintf(&buf[off], sizeof(buf) - off, "\n"); |
||||
if (write(fd, buf, strlen(buf)) != (ssize_t)strlen(buf)) |
||||
xlog(L_ERROR, "Setting version failed: errno %d (%m)", errno); |
||||
- |
||||
+out: |
||||
close(fd); |
||||
|
||||
return; |
||||
diff -up nfs-utils-1.3.0/utils/nfsd/nfssvc.h.orig nfs-utils-1.3.0/utils/nfsd/nfssvc.h |
||||
--- nfs-utils-1.3.0/utils/nfsd/nfssvc.h.orig 2018-08-20 14:18:13.934033391 -0400 |
||||
+++ nfs-utils-1.3.0/utils/nfsd/nfssvc.h 2018-08-20 14:18:58.023793505 -0400 |
||||
@@ -26,5 +26,7 @@ int nfssvc_set_sockets(const unsigned in |
||||
const char *host, const char *port); |
||||
void nfssvc_set_time(const char *type, const int seconds); |
||||
int nfssvc_set_rdmaport(const char *port); |
||||
-void nfssvc_setvers(unsigned int ctlbits, unsigned int minorvers4, unsigned int minorvers4set); |
||||
-int nfssvc_threads(unsigned short port, int nrservs); |
||||
+void nfssvc_setvers(unsigned int ctlbits, unsigned int minorvers4, |
||||
+ unsigned int minorvers4set, int force4dot0); |
||||
+int nfssvc_threads(unsigned short port, int nrservs); |
||||
+void nfssvc_get_minormask(unsigned int *mask); |
@ -0,0 +1,259 @@
@@ -0,0 +1,259 @@
|
||||
diff -up nfs-utils-1.3.0/tools/mountstats/mountstats.man.orig nfs-utils-1.3.0/tools/mountstats/mountstats.man |
||||
--- nfs-utils-1.3.0/tools/mountstats/mountstats.man.orig 2018-06-11 10:10:22.450171982 -0400 |
||||
+++ nfs-utils-1.3.0/tools/mountstats/mountstats.man 2018-06-11 10:11:00.756778817 -0400 |
||||
@@ -19,6 +19,8 @@ mountstats \- Displays various NFS clien |
||||
.RB [ \-r | \-\-rpc ] |
||||
| |
||||
.RB [ \-R | \-\-raw ] |
||||
+| |
||||
+.RB [ \-x | \-\-xprt ] |
||||
] |
||||
.RI [ mountpoint ] ... |
||||
.P |
||||
@@ -110,6 +112,9 @@ Display only the raw statistics. This i |
||||
and |
||||
.BR \-S | \-\-since |
||||
options. |
||||
+.TP |
||||
+.B \-x, \-\-xprt |
||||
+Display only the transport statistics |
||||
.SS Options specific to the iostat sub-command |
||||
.IP "\fIinterval\fP" |
||||
Specifies the amount of time in seconds between each report. The first report contains statistics for the time since each file system was mounted. Each subsequent report contains statistics collected during the interval since the previous report. This may not be used with the |
||||
diff -up nfs-utils-1.3.0/tools/mountstats/mountstats.py.orig nfs-utils-1.3.0/tools/mountstats/mountstats.py |
||||
--- nfs-utils-1.3.0/tools/mountstats/mountstats.py.orig 2018-06-11 10:10:22.501172790 -0400 |
||||
+++ nfs-utils-1.3.0/tools/mountstats/mountstats.py 2018-06-11 10:11:00.757778833 -0400 |
||||
@@ -87,7 +87,10 @@ XprtUdpCounters = [ |
||||
'rpcreceives', |
||||
'badxids', |
||||
'inflightsends', |
||||
- 'backlogutil' |
||||
+ 'backlogutil', |
||||
+ 'maxslots', |
||||
+ 'sendutil', |
||||
+ 'pendutil' |
||||
] |
||||
|
||||
XprtTcpCounters = [ |
||||
@@ -100,7 +103,10 @@ XprtTcpCounters = [ |
||||
'rpcreceives', |
||||
'badxids', |
||||
'inflightsends', |
||||
- 'backlogutil' |
||||
+ 'backlogutil', |
||||
+ 'maxslots', |
||||
+ 'sendutil', |
||||
+ 'pendutil' |
||||
] |
||||
|
||||
XprtRdmaCounters = [ |
||||
@@ -112,17 +118,25 @@ XprtRdmaCounters = [ |
||||
'rpcsends', |
||||
'rpcreceives', |
||||
'badxids', |
||||
+ 'inflightsends', |
||||
'backlogutil', |
||||
- 'read_chunks', |
||||
- 'write_chunks', |
||||
- 'reply_chunks', |
||||
+ 'read_segments', |
||||
+ 'write_segments', |
||||
+ 'reply_segments', |
||||
'total_rdma_req', |
||||
'total_rdma_rep', |
||||
'pullup', |
||||
'fixup', |
||||
'hardway', |
||||
'failed_marshal', |
||||
- 'bad_reply' |
||||
+ 'bad_reply', |
||||
+ 'nomsg_calls', |
||||
+ 'recovered_mrs', |
||||
+ 'orphaned_mrs', |
||||
+ 'allocated_mrs', |
||||
+ 'local_invalidates', |
||||
+ 'empty_sendctx_q', |
||||
+ 'reply_waits_for_send', |
||||
] |
||||
|
||||
Nfsv3ops = [ |
||||
@@ -266,17 +280,20 @@ class DeviceData: |
||||
if words[1] == 'udp': |
||||
i = 2 |
||||
for key in XprtUdpCounters: |
||||
- self.__rpc_data[key] = int(words[i]) |
||||
+ if i < len(words): |
||||
+ self.__rpc_data[key] = int(words[i]) |
||||
i += 1 |
||||
elif words[1] == 'tcp': |
||||
i = 2 |
||||
for key in XprtTcpCounters: |
||||
- self.__rpc_data[key] = int(words[i]) |
||||
+ if i < len(words): |
||||
+ self.__rpc_data[key] = int(words[i]) |
||||
i += 1 |
||||
elif words[1] == 'rdma': |
||||
i = 2 |
||||
for key in XprtRdmaCounters: |
||||
- self.__rpc_data[key] = int(words[i]) |
||||
+ if i < len(words): |
||||
+ self.__rpc_data[key] = int(words[i]) |
||||
i += 1 |
||||
elif words[0] == 'per-op': |
||||
self.__rpc_data['per-op'] = words |
||||
@@ -354,12 +371,11 @@ class DeviceData: |
||||
def display_stats_header(self): |
||||
print('Stats for %s mounted on %s:' % \ |
||||
(self.__nfs_data['export'], self.__nfs_data['mountpoint'])) |
||||
+ print() |
||||
|
||||
def display_nfs_options(self): |
||||
"""Pretty-print the NFS options |
||||
""" |
||||
- self.display_stats_header() |
||||
- |
||||
print(' NFS mount options: %s' % ','.join(self.__nfs_data['mountoptions'])) |
||||
print(' NFS server capabilities: %s' % ','.join(self.__nfs_data['servercapabilities'])) |
||||
if 'nfsv4flags' in self.__nfs_data: |
||||
@@ -425,7 +441,6 @@ class DeviceData: |
||||
""" |
||||
sends = self.__rpc_data['rpcsends'] |
||||
|
||||
- print() |
||||
print('RPC statistics:') |
||||
|
||||
print(' %d RPC requests sent, %d RPC replies received (%d XIDs not found)' % \ |
||||
@@ -643,6 +658,83 @@ class DeviceData: |
||||
self.__print_rpc_op_stats('WRITE', sample_time) |
||||
sys.stdout.flush() |
||||
|
||||
+ def display_xprt_stats(self): |
||||
+ """Pretty-print the xprt statistics |
||||
+ """ |
||||
+ if self.__rpc_data['protocol'] == 'udp': |
||||
+ print('\tTransport protocol: udp') |
||||
+ print('\tSource port: %d' % self.__rpc_data['port']) |
||||
+ print('\tBind count: %d' % self.__rpc_data['bind_count']) |
||||
+ print('\tRPC requests: %d' % self.__rpc_data['rpcsends']) |
||||
+ print('\tRPC replies: %d' % self.__rpc_data['rpcreceives']) |
||||
+ print('\tXIDs not found: %d' % self.__rpc_data['badxids']) |
||||
+ print('\tMax slots: %d' % self.__rpc_data['maxslots']) |
||||
+ if self.__rpc_data['rpcsends'] != 0: |
||||
+ print('\tAvg backlog length: %d' % \ |
||||
+ (float(self.__rpc_data['backlogutil']) / self.__rpc_data['rpcsends'])) |
||||
+ print('\tAvg send queue length: %d' % \ |
||||
+ (float(self.__rpc_data['sendutil']) / self.__rpc_data['rpcsends'])) |
||||
+ print('\tAvg pending queue length: %d' % \ |
||||
+ (float(self.__rpc_data['pendutil']) / self.__rpc_data['rpcsends'])) |
||||
+ elif self.__rpc_data['protocol'] == 'tcp': |
||||
+ print('\tTransport protocol: tcp') |
||||
+ print('\tSource port: %d' % self.__rpc_data['port']) |
||||
+ print('\tBind count: %d' % self.__rpc_data['bind_count']) |
||||
+ print('\tConnect count: %d' % self.__rpc_data['connect_count']) |
||||
+ print('\tConnect time: %d seconds' % self.__rpc_data['connect_time']) |
||||
+ print('\tIdle time: %d seconds' % self.__rpc_data['idle_time']) |
||||
+ print('\tRPC requests: %d' % self.__rpc_data['rpcsends']) |
||||
+ print('\tRPC replies: %d' % self.__rpc_data['rpcreceives']) |
||||
+ print('\tXIDs not found: %d' % self.__rpc_data['badxids']) |
||||
+ print('\tMax slots: %d' % self.__rpc_data['maxslots']) |
||||
+ if self.__rpc_data['rpcsends'] != 0: |
||||
+ print('\tAvg backlog length: %d' % \ |
||||
+ (float(self.__rpc_data['backlogutil']) / self.__rpc_data['rpcsends'])) |
||||
+ print('\tAvg send queue length: %d' % \ |
||||
+ (float(self.__rpc_data['sendutil']) / self.__rpc_data['rpcsends'])) |
||||
+ print('\tAvg pending queue length: %d' % \ |
||||
+ (float(self.__rpc_data['pendutil']) / self.__rpc_data['rpcsends'])) |
||||
+ elif self.__rpc_data['protocol'] == 'rdma': |
||||
+ print('\tTransport protocol: rdma') |
||||
+ print('\tConnect count: %d' % self.__rpc_data['connect_count']) |
||||
+ print('\tConnect time: %d seconds' % self.__rpc_data['connect_time']) |
||||
+ print('\tIdle time: %d seconds' % self.__rpc_data['idle_time']) |
||||
+ sends = self.__rpc_data['rpcsends'] |
||||
+ print('\tRPC requests: %d' % self.__rpc_data['rpcsends']) |
||||
+ print('\tRPC replies: %d' % self.__rpc_data['rpcreceives']) |
||||
+ print('\tXIDs not found: %d' % self.__rpc_data['badxids']) |
||||
+ if self.__rpc_data['rpcsends'] != 0: |
||||
+ print('\tAvg backlog length: %d' % \ |
||||
+ (float(self.__rpc_data['backlogutil']) / self.__rpc_data['rpcsends'])) |
||||
+ print('\tRead segments: %d' % self.__rpc_data['read_segments']) |
||||
+ print('\tWrite segments: %d' % self.__rpc_data['write_segments']) |
||||
+ print('\tReply segments: %d' % self.__rpc_data['reply_segments']) |
||||
+ print('\tRegistered: %d bytes' % self.__rpc_data['total_rdma_req']) |
||||
+ print('\tRDMA received: %d bytes' % self.__rpc_data['total_rdma_rep']) |
||||
+ print('\tTotal pull-up: %d bytes' % self.__rpc_data['pullup']) |
||||
+ print('\tTotal fix-up: %d bytes' % self.__rpc_data['fixup']) |
||||
+ print('\tHardway allocations: %d bytes' % self.__rpc_data['hardway']) |
||||
+ print('\tFailed marshals: %d' % self.__rpc_data['failed_marshal']) |
||||
+ print('\tBad replies: %d' % self.__rpc_data['bad_reply']) |
||||
+ |
||||
+ """ Counters not present in all kernels """ |
||||
+ if 'nomsg_calls' in self.__rpc_data: |
||||
+ print('\tRDMA_NOMSG calls: %d' % self.__rpc_data['nomsg_calls']) |
||||
+ if 'allocated_mrs' in self.__rpc_data: |
||||
+ print('\tAllocated MRs: %d' % self.__rpc_data['allocated_mrs']) |
||||
+ if 'recovered_mrs' in self.__rpc_data: |
||||
+ print('\tRecovered MRs: %d' % self.__rpc_data['recovered_mrs']) |
||||
+ if 'orphaned_mrs' in self.__rpc_data: |
||||
+ print('\tOrphaned MRs: %d' % self.__rpc_data['orphaned_mrs']) |
||||
+ if 'local_invalidates' in self.__rpc_data: |
||||
+ print('\tLocal Invalidates needed: %d' % self.__rpc_data['local_invalidates']) |
||||
+ if 'empty_sendctx_q' in self.__rpc_data: |
||||
+ print('\tEmpty sendctx queue count: %d' % self.__rpc_data['empty_sendctx_q']) |
||||
+ if 'reply_waits_for_send' in self.__rpc_data: |
||||
+ print('\tReplies that waited for Send completion: %d' % self.__rpc_data['reply_waits_for_send']) |
||||
+ else: |
||||
+ raise Exception('Unknown RPC transport protocol %s' % self.__rpc_data['protocol']) |
||||
+ |
||||
def parse_stats_file(f): |
||||
"""pop the contents of a mountstats file into a dictionary, |
||||
keyed by mount point. each value object is a list of the |
||||
@@ -669,8 +761,9 @@ def parse_stats_file(f): |
||||
|
||||
return ms_dict |
||||
|
||||
-def print_mountstats(stats, nfs_only, rpc_only, raw): |
||||
+def print_mountstats(stats, nfs_only, rpc_only, raw, xprt_only): |
||||
if nfs_only: |
||||
+ stats.display_stats_header() |
||||
stats.display_nfs_options() |
||||
stats.display_nfs_events() |
||||
stats.display_nfs_bytes() |
||||
@@ -680,7 +773,11 @@ def print_mountstats(stats, nfs_only, rp |
||||
stats.display_rpc_op_stats() |
||||
elif raw: |
||||
stats.display_raw_stats() |
||||
+ elif xprt_only: |
||||
+ stats.display_stats_header() |
||||
+ stats.display_xprt_stats() |
||||
else: |
||||
+ stats.display_stats_header() |
||||
stats.display_nfs_options() |
||||
stats.display_nfs_bytes() |
||||
stats.display_rpc_generic_stats() |
||||
@@ -722,14 +819,14 @@ def mountstats_command(args): |
||||
stats = DeviceData() |
||||
stats.parse_stats(mountstats[mp]) |
||||
if not args.since: |
||||
- print_mountstats(stats, args.nfs_only, args.rpc_only, args.raw) |
||||
+ print_mountstats(stats, args.nfs_only, args.rpc_only, args.raw, args.xprt_only) |
||||
elif args.since and mp not in old_mountstats: |
||||
- print_mountstats(stats, args.nfs_only, args.rpc_only, args.raw) |
||||
+ print_mountstats(stats, args.nfs_only, args.rpc_only, args.raw, args.xprt_only) |
||||
else: |
||||
old_stats = DeviceData() |
||||
old_stats.parse_stats(old_mountstats[mp]) |
||||
diff_stats = stats.compare_iostats(old_stats) |
||||
- print_mountstats(diff_stats, args.nfs_only, args.rpc_only, args.raw) |
||||
+ print_mountstats(diff_stats, args.nfs_only, args.rpc_only, args.raw, args.xprt_only) |
||||
|
||||
args.infile.close() |
||||
if args.since: |
||||
@@ -941,6 +1038,8 @@ def main(): |
||||
help='Display only the RPC statistics') |
||||
group.add_argument('-R', '--raw', action='store_true', |
||||
help='Display only the raw statistics') |
||||
+ group.add_argument('-x', '--xprt', action='store_true', dest='xprt_only', |
||||
+ help='Display only the xprt statistics') |
||||
# The mountpoints argument cannot be moved into the common_parser because |
||||
# it will screw up the parsing of the iostat arguments (interval and count) |
||||
mountstats_parser.add_argument('mountpoints', nargs='*', metavar='mountpoint', |
@ -0,0 +1,12 @@
@@ -0,0 +1,12 @@
|
||||
diff -up nfs-utils-1.3.0/utils/nfsdcltrack/nfsdcltrack.c.orig nfs-utils-1.3.0/utils/nfsdcltrack/nfsdcltrack.c |
||||
--- nfs-utils-1.3.0/utils/nfsdcltrack/nfsdcltrack.c.orig 2018-07-10 13:58:43.314210025 -0400 |
||||
+++ nfs-utils-1.3.0/utils/nfsdcltrack/nfsdcltrack.c 2018-07-10 14:10:43.732857114 -0400 |
||||
@@ -555,7 +555,7 @@ find_cmd(char *cmdname) |
||||
int |
||||
main(int argc, char **argv) |
||||
{ |
||||
- char arg; |
||||
+ int arg; |
||||
char *val; |
||||
int rc = 0; |
||||
char *progname, *cmdarg = NULL; |
@ -0,0 +1,36 @@
@@ -0,0 +1,36 @@
|
||||
diff -up nfs-utils-1.3.0/utils/nfsd/nfsd.c.orig nfs-utils-1.3.0/utils/nfsd/nfsd.c |
||||
--- nfs-utils-1.3.0/utils/nfsd/nfsd.c.orig 2018-09-26 10:41:27.733102553 -0400 |
||||
+++ nfs-utils-1.3.0/utils/nfsd/nfsd.c 2018-09-26 10:43:27.749413870 -0400 |
||||
@@ -82,6 +82,9 @@ main(int argc, char **argv) |
||||
|
||||
conf_init(); |
||||
xlog_from_conffile("nfsd"); |
||||
+ |
||||
+ nfssvc_get_minormask(&minormask); |
||||
+ |
||||
count = conf_get_num("nfsd", "threads", count); |
||||
grace = conf_get_num("nfsd", "grace-time", grace); |
||||
lease = conf_get_num("nfsd", "lease-time", lease); |
||||
@@ -100,13 +103,19 @@ main(int argc, char **argv) |
||||
for (i = 2; i <= 4; i++) { |
||||
char tag[10]; |
||||
sprintf(tag, "vers%d", i); |
||||
- if (conf_get_bool("nfsd", tag, NFSCTL_VERISSET(versbits, i))) |
||||
+ if (conf_get_bool("nfsd", tag, NFSCTL_VERISSET(versbits, i))) { |
||||
NFSCTL_VERSET(versbits, i); |
||||
- else |
||||
+ if (i == 4) |
||||
+ minorvers = minorversset = minormask; |
||||
+ } else { |
||||
NFSCTL_VERUNSET(versbits, i); |
||||
+ if (i == 4) { |
||||
+ minorvers = 0; |
||||
+ minorversset = minormask; |
||||
+ } |
||||
+ } |
||||
} |
||||
|
||||
- nfssvc_get_minormask(&minormask); |
||||
/* We assume the kernel will default all minor versions to 'on', |
||||
* and allow the config file to disable some. |
||||
*/ |
@ -0,0 +1,25 @@
@@ -0,0 +1,25 @@
|
||||
diff -up nfs-utils-1.3.0/support/include/nfs/nfs.h.orig nfs-utils-1.3.0/support/include/nfs/nfs.h |
||||
--- nfs-utils-1.3.0/support/include/nfs/nfs.h.orig 2014-03-25 11:12:07.000000000 -0400 |
||||
+++ nfs-utils-1.3.0/support/include/nfs/nfs.h 2018-06-11 11:27:27.591007479 -0400 |
||||
@@ -57,6 +57,7 @@ struct nfs_fh_old { |
||||
#define NFSCTL_TCPISSET(_cltbits) ((_cltbits) & NFSCTL_TCPBIT) |
||||
|
||||
#define NFSCTL_VERDEFAULT (0xc) /* versions 3 and 4 */ |
||||
+#define NFSCTL_MINDEFAULT (0x7) /* minor versions 4.1 and 4.2 */ |
||||
#define NFSCTL_VERSET(_cltbits, _v) ((_cltbits) |= (1 << ((_v) - 1))) |
||||
#define NFSCTL_UDPSET(_cltbits) ((_cltbits) |= NFSCTL_UDPBIT) |
||||
#define NFSCTL_TCPSET(_cltbits) ((_cltbits) |= NFSCTL_TCPBIT) |
||||
diff -up nfs-utils-1.3.0/utils/nfsd/nfsd.c.orig nfs-utils-1.3.0/utils/nfsd/nfsd.c |
||||
--- nfs-utils-1.3.0/utils/nfsd/nfsd.c.orig 2018-06-11 10:44:25.722941203 -0400 |
||||
+++ nfs-utils-1.3.0/utils/nfsd/nfsd.c 2018-06-11 11:28:00.084537974 -0400 |
||||
@@ -64,8 +64,8 @@ main(int argc, char **argv) |
||||
int hcounter = 0; |
||||
struct conf_list *hosts; |
||||
int socket_up = 0; |
||||
- unsigned int minorvers = 0; |
||||
- unsigned int minorversset = 0; |
||||
+ unsigned int minorvers = NFSCTL_MINDEFAULT; |
||||
+ unsigned int minorversset = NFSCTL_MINDEFAULT; |
||||
unsigned int versbits = NFSCTL_VERDEFAULT; |
||||
unsigned int protobits = NFSCTL_ALLBITS; |
||||
int grace = -1; |
@ -0,0 +1,21 @@
@@ -0,0 +1,21 @@
|
||||
commit 3d0e59c63c9957d8cbca26f88bac1784d835e019 |
||||
Author: Steve Dickson <steved@redhat.com> |
||||
Date: Tue Jul 10 14:19:30 2018 -0400 |
||||
|
||||
Fixed typo in nfsmount.conf |
||||
|
||||
Signed-off-by: Steve Dickson <steved@redhat.com> |
||||
|
||||
diff --git a/utils/mount/nfsmount.conf b/utils/mount/nfsmount.conf |
||||
index aeb3023..6bdc225 100644 |
||||
--- a/utils/mount/nfsmount.conf |
||||
+++ b/utils/mount/nfsmount.conf |
||||
@@ -122,7 +122,7 @@ |
||||
# mountproto=tcp |
||||
# |
||||
# Server Mountd Version |
||||
-# mounvers=3 |
||||
+# mountvers=3 |
||||
# |
||||
# Server Mountd Host |
||||
# mounthost=hostname |
@ -0,0 +1,58 @@
@@ -0,0 +1,58 @@
|
||||
commit 2a6b8307fa4243a7921270aedf8ce6506e31569a |
||||
Author: Steve Dickson <steved@redhat.com> |
||||
Date: Tue Jul 17 15:09:37 2018 -0400 |
||||
|
||||
rpc.gssd: truncates 32-bit UIDs/GIDs to 16 bits architectures. |
||||
|
||||
utils/gssd_proc.c uses SYS_setresuid and SYS_setresgid in |
||||
change_identity when it should use SYS_setresuid32 and |
||||
SYS_setresgid32 instead. This causes it to truncate |
||||
UIDs/GIDs > 65536. |
||||
|
||||
Fixes: https://bugs.launchpad.net/ubuntu/+source/nfs-utils/+bug/1779962 |
||||
Fixes: https://bugzilla.redhat.com/show_bug.cgi?id=1595927 |
||||
|
||||
Tested-by: James Ettle <theholyettlz@googlemail.com> |
||||
Tested-by: Sree <Sree@gmail.com> |
||||
Signed-off-by: Steve Dickson <steved@redhat.com> |
||||
|
||||
diff --git a/utils/gssd/gssd_proc.c b/utils/gssd/gssd_proc.c |
||||
index 8767e26..7a57c4e 100644 |
||||
--- a/utils/gssd/gssd_proc.c |
||||
+++ b/utils/gssd/gssd_proc.c |
||||
@@ -434,6 +434,7 @@ static int |
||||
change_identity(uid_t uid) |
||||
{ |
||||
struct passwd *pw; |
||||
+ int res; |
||||
|
||||
/* drop list of supplimentary groups first */ |
||||
if (syscall(SYS_setgroups, 0, 0) != 0) { |
||||
@@ -459,14 +460,23 @@ change_identity(uid_t uid) |
||||
* send a signal to all other threads to synchronize the uid in all |
||||
* other threads. To bypass this, we have to call syscall() directly. |
||||
*/ |
||||
- if (syscall(SYS_setresgid, pw->pw_gid, pw->pw_gid, pw->pw_gid) != 0) { |
||||
+#ifdef __NR_setresuid32 |
||||
+ res = syscall(SYS_setresgid32, pw->pw_gid, pw->pw_gid, pw->pw_gid); |
||||
+#else |
||||
+ res = syscall(SYS_setresgid, pw->pw_gid, pw->pw_gid, pw->pw_gid); |
||||
+#endif |
||||
+ if (res != 0) { |
||||
printerr(0, "WARNING: failed to set gid to %u!\n", pw->pw_gid); |
||||
return errno; |
||||
} |
||||
|
||||
- if (syscall(SYS_setresuid, uid, uid, uid) != 0) { |
||||
- printerr(0, "WARNING: Failed to setuid for user with uid %u\n", |
||||
- uid); |
||||
+#ifdef __NR_setresuid32 |
||||
+ res = syscall(SYS_setresuid32, uid, uid, uid); |
||||
+#else |
||||
+ res = syscall(SYS_setresuid, uid, uid, uid); |
||||
+#endif |
||||
+ if (res != 0) { |
||||
+ printerr(0, "WARNING: Failed to setuid for user with uid %u\n", uid); |
||||
return errno; |
||||
} |
||||
|
@ -0,0 +1,13 @@
@@ -0,0 +1,13 @@
|
||||
diff -up nfs-utils-1.3.0/systemd/nfs-server.service.orig nfs-utils-1.3.0/systemd/nfs-server.service |
||||
--- nfs-utils-1.3.0/systemd/nfs-server.service.orig 2017-12-12 10:16:47.164190963 -0500 |
||||
+++ nfs-utils-1.3.0/systemd/nfs-server.service 2017-12-12 10:54:16.671323896 -0500 |
||||
@@ -25,8 +25,8 @@ EnvironmentFile=-/run/sysconfig/nfs-util |
||||
Type=oneshot |
||||
RemainAfterExit=yes |
||||
ExecStartPre=-/usr/sbin/exportfs -r |
||||
-ExecStartPre=-/bin/sh -c '/bin/kill -HUP `cat /run/gssproxy.pid`' |
||||
ExecStart=/usr/sbin/rpc.nfsd $RPCNFSDARGS |
||||
+ExecStartPost=-/bin/sh -c 'if systemctl -q is-active gssproxy; then systemctl restart gssproxy ; fi' |
||||
ExecStop=/usr/sbin/rpc.nfsd 0 |
||||
ExecStopPost=/usr/sbin/exportfs -au |
||||
ExecStopPost=/usr/sbin/exportfs -f |
@ -0,0 +1,43 @@
@@ -0,0 +1,43 @@
|
||||
diff -up nfs-utils-1.3.0/systemd/nfs.systemd.man.orig nfs-utils-1.3.0/systemd/nfs.systemd.man |
||||
--- nfs-utils-1.3.0/systemd/nfs.systemd.man.orig 2018-07-21 06:10:06.938288975 -0400 |
||||
+++ nfs-utils-1.3.0/systemd/nfs.systemd.man 2018-07-21 06:10:18.888434798 -0400 |
||||
@@ -79,7 +79,7 @@ unit should be enabled. |
||||
Several other units which might be considered to be optional, such as |
||||
.I rpc-gssd.service |
||||
are careful to only start if the required configuration file exists. |
||||
-.I rpc-gsdd.service |
||||
+.I rpc-gssd.service |
||||
will not start if the |
||||
.I krb5.keytab |
||||
file does not exist (typically in |
||||
@@ -120,10 +120,11 @@ be needed to reduce system load to an ab |
||||
attack surface by not running daemons that are not absolutely |
||||
required. |
||||
.PP |
||||
-Two particular services which this can apply to are |
||||
-.I rpcbind |
||||
+Three particular services which this can apply to are |
||||
+.IR rpcbind , |
||||
+.IR idmapd , |
||||
and |
||||
-.IR idmapd . |
||||
+.IR rpc-gssd . |
||||
.I rpcbind |
||||
is not part of the |
||||
.I nfs-utils |
||||
@@ -155,6 +156,15 @@ is not needed and not wanted, it can be |
||||
.RS |
||||
.B systemctl mask idmapd |
||||
.RE |
||||
+.I rpc-gssd |
||||
+is assumed to be needed if the |
||||
+.I krb5.keytab |
||||
+file is present. If a site needs this file present but does not want |
||||
+.I rpc-gssd |
||||
+running, it can be masked with |
||||
+.RS |
||||
+.B systemctl mask rpc-gssd |
||||
+.RE |
||||
.SH FILES |
||||
/etc/nfs.conf |
||||
.br |
Loading…
Reference in new issue