Updated to the latest RC releease: nfs-utils-2-1-2-rc6
Signed-off-by: Steve Dickson <steved@redhat.com>
This commit is contained in:
parent
517eae65ec
commit
84960e381a
@ -435,6 +435,30 @@ index 0000000..63597df
|
|||||||
+ strcpy(base, parentdir);
|
+ strcpy(base, parentdir);
|
||||||
+ return true;
|
+ return true;
|
||||||
+}
|
+}
|
||||||
|
diff --git a/support/misc/tcpwrapper.c b/support/misc/tcpwrapper.c
|
||||||
|
index 06b0a46..3128053 100644
|
||||||
|
--- a/support/misc/tcpwrapper.c
|
||||||
|
+++ b/support/misc/tcpwrapper.c
|
||||||
|
@@ -72,6 +72,7 @@ present_address(const struct sockaddr *sap, char *buf, const size_t buflen)
|
||||||
|
case AF_INET:
|
||||||
|
if (inet_ntop(AF_INET, &sin->sin_addr, buf, len) != 0)
|
||||||
|
return;
|
||||||
|
+ break;
|
||||||
|
case AF_INET6:
|
||||||
|
if (inet_ntop(AF_INET6, &sin6->sin6_addr, buf, len) != 0)
|
||||||
|
return;
|
||||||
|
diff --git a/support/nfs/atomicio.c b/support/nfs/atomicio.c
|
||||||
|
index 5e760e6..aa819ca 100644
|
||||||
|
--- a/support/nfs/atomicio.c
|
||||||
|
+++ b/support/nfs/atomicio.c
|
||||||
|
@@ -42,6 +42,7 @@ ssize_t atomicio(ssize_t(*f) (int, void *, size_t), int fd, void *_s, size_t n)
|
||||||
|
case -1:
|
||||||
|
if (errno == EINTR || errno == EAGAIN)
|
||||||
|
continue;
|
||||||
|
+ /* FALLTHRU */
|
||||||
|
case 0:
|
||||||
|
if (pos != 0)
|
||||||
|
return pos;
|
||||||
diff --git a/support/nfs/cacheio.c b/support/nfs/cacheio.c
|
diff --git a/support/nfs/cacheio.c b/support/nfs/cacheio.c
|
||||||
index e5e2579..9912afa 100644
|
index e5e2579..9912afa 100644
|
||||||
--- a/support/nfs/cacheio.c
|
--- a/support/nfs/cacheio.c
|
||||||
@ -1076,6 +1100,21 @@ index aafa755..52f5401 100644
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
diff --git a/support/nsm/rpc.c b/support/nsm/rpc.c
|
||||||
|
index 4e5f40e..ae49006 100644
|
||||||
|
--- a/support/nsm/rpc.c
|
||||||
|
+++ b/support/nsm/rpc.c
|
||||||
|
@@ -38,8 +38,10 @@
|
||||||
|
#include <sys/socket.h>
|
||||||
|
#include <sys/time.h>
|
||||||
|
|
||||||
|
+#include <stdint.h>
|
||||||
|
#include <time.h>
|
||||||
|
#include <stdbool.h>
|
||||||
|
+#include <stdint.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include <unistd.h>
|
||||||
|
#include <fcntl.h>
|
||||||
diff --git a/systemd/Makefile.am b/systemd/Makefile.am
|
diff --git a/systemd/Makefile.am b/systemd/Makefile.am
|
||||||
index 0d15b9f..eef53c4 100644
|
index 0d15b9f..eef53c4 100644
|
||||||
--- a/systemd/Makefile.am
|
--- a/systemd/Makefile.am
|
||||||
@ -1325,6 +1364,50 @@ index 91c49a0..189b052 100644
|
|||||||
.BR keytab-file ,
|
.BR keytab-file ,
|
||||||
.BR cred-cache-directory ,
|
.BR cred-cache-directory ,
|
||||||
.BR preferred-realm .
|
.BR preferred-realm .
|
||||||
|
diff --git a/systemd/nfs.systemd.man b/systemd/nfs.systemd.man
|
||||||
|
index 01801eb..46b476a 100644
|
||||||
|
--- a/systemd/nfs.systemd.man
|
||||||
|
+++ b/systemd/nfs.systemd.man
|
||||||
|
@@ -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 absolute minimum, or to reduce
|
||||||
|
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 masked with
|
||||||
|
.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
|
||||||
diff --git a/systemd/rpc-gssd.service.in b/systemd/rpc-gssd.service.in
|
diff --git a/systemd/rpc-gssd.service.in b/systemd/rpc-gssd.service.in
|
||||||
index b353027..6807db3 100644
|
index b353027..6807db3 100644
|
||||||
--- a/systemd/rpc-gssd.service.in
|
--- a/systemd/rpc-gssd.service.in
|
||||||
@ -1686,6 +1769,43 @@ index 0000000..25235ec
|
|||||||
+char *systemd_escape(char *path, char *suffix);
|
+char *systemd_escape(char *path, char *suffix);
|
||||||
+
|
+
|
||||||
+#endif /* SYSTEMD_H */
|
+#endif /* SYSTEMD_H */
|
||||||
|
diff --git a/tools/mountstats/mountstats.py b/tools/mountstats/mountstats.py
|
||||||
|
index 88ccdae..a68d702 100644
|
||||||
|
--- a/tools/mountstats/mountstats.py
|
||||||
|
+++ b/tools/mountstats/mountstats.py
|
||||||
|
@@ -1,4 +1,4 @@
|
||||||
|
-#!/usr/bin/env python
|
||||||
|
+#!/usr/bin/python
|
||||||
|
# -*- python-mode -*-
|
||||||
|
"""Parse /proc/self/mountstats and display it in human readable form
|
||||||
|
"""
|
||||||
|
diff --git a/tools/nfs-iostat/nfs-iostat.py b/tools/nfs-iostat/nfs-iostat.py
|
||||||
|
index 61d15a5..577a23d 100644
|
||||||
|
--- a/tools/nfs-iostat/nfs-iostat.py
|
||||||
|
+++ b/tools/nfs-iostat/nfs-iostat.py
|
||||||
|
@@ -429,6 +429,8 @@ def parse_stats_file(filename):
|
||||||
|
words = line.split()
|
||||||
|
if len(words) == 0:
|
||||||
|
continue
|
||||||
|
+ if line.startswith("no device mounted") :
|
||||||
|
+ continue
|
||||||
|
if words[0] == 'device':
|
||||||
|
key = words[4]
|
||||||
|
new = [ line.strip() ]
|
||||||
|
diff --git a/tools/rpcdebug/rpcdebug.c b/tools/rpcdebug/rpcdebug.c
|
||||||
|
index 18b1622..68206cc 100644
|
||||||
|
--- a/tools/rpcdebug/rpcdebug.c
|
||||||
|
+++ b/tools/rpcdebug/rpcdebug.c
|
||||||
|
@@ -74,7 +74,8 @@ main(int argc, char **argv)
|
||||||
|
opt_c = 1;
|
||||||
|
break;
|
||||||
|
case 'h':
|
||||||
|
- usage(0, module);
|
||||||
|
+ usage(0, module); /* usage does not return */
|
||||||
|
+ break;
|
||||||
|
case 'm':
|
||||||
|
module = optarg;
|
||||||
|
break;
|
||||||
diff --git a/utils/blkmapd/blkmapd.man b/utils/blkmapd/blkmapd.man
|
diff --git a/utils/blkmapd/blkmapd.man b/utils/blkmapd/blkmapd.man
|
||||||
index 914b80f..4b3d3f0 100644
|
index 914b80f..4b3d3f0 100644
|
||||||
--- a/utils/blkmapd/blkmapd.man
|
--- a/utils/blkmapd/blkmapd.man
|
||||||
@ -1717,10 +1837,18 @@ index 914b80f..4b3d3f0 100644
|
|||||||
RFC 5661 for the NFS version 4.1 specification.
|
RFC 5661 for the NFS version 4.1 specification.
|
||||||
.br
|
.br
|
||||||
diff --git a/utils/blkmapd/device-discovery.c b/utils/blkmapd/device-discovery.c
|
diff --git a/utils/blkmapd/device-discovery.c b/utils/blkmapd/device-discovery.c
|
||||||
index 8eb3fd0..c66669d 100644
|
index 8eb3fd0..29bafb2 100644
|
||||||
--- a/utils/blkmapd/device-discovery.c
|
--- a/utils/blkmapd/device-discovery.c
|
||||||
+++ b/utils/blkmapd/device-discovery.c
|
+++ b/utils/blkmapd/device-discovery.c
|
||||||
@@ -50,21 +50,36 @@
|
@@ -26,6 +26,7 @@
|
||||||
|
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
+#include <sys/sysmacros.h>
|
||||||
|
#include <sys/types.h>
|
||||||
|
#include <sys/stat.h>
|
||||||
|
#include <sys/ioctl.h>
|
||||||
|
@@ -50,21 +51,36 @@
|
||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
#include <libdevmapper.h>
|
#include <libdevmapper.h>
|
||||||
|
|
||||||
@ -1759,7 +1887,7 @@ index 8eb3fd0..c66669d 100644
|
|||||||
struct bl_disk_path *bl_get_path(const char *filepath,
|
struct bl_disk_path *bl_get_path(const char *filepath,
|
||||||
struct bl_disk_path *paths)
|
struct bl_disk_path *paths)
|
||||||
{
|
{
|
||||||
@@ -358,8 +373,8 @@ static void bl_rpcpipe_cb(void)
|
@@ -358,8 +374,8 @@ static void bl_rpcpipe_cb(void)
|
||||||
continue;
|
continue;
|
||||||
if (event->mask & IN_CREATE) {
|
if (event->mask & IN_CREATE) {
|
||||||
BL_LOG_WARNING("nfs pipe dir created\n");
|
BL_LOG_WARNING("nfs pipe dir created\n");
|
||||||
@ -1770,7 +1898,7 @@ index 8eb3fd0..c66669d 100644
|
|||||||
} else if (event->mask & IN_DELETE) {
|
} else if (event->mask & IN_DELETE) {
|
||||||
BL_LOG_WARNING("nfs pipe dir deleted\n");
|
BL_LOG_WARNING("nfs pipe dir deleted\n");
|
||||||
inotify_rm_watch(bl_watch_fd, nfs_pipedir_wfd);
|
inotify_rm_watch(bl_watch_fd, nfs_pipedir_wfd);
|
||||||
@@ -372,7 +387,7 @@ static void bl_rpcpipe_cb(void)
|
@@ -372,7 +388,7 @@ static void bl_rpcpipe_cb(void)
|
||||||
continue;
|
continue;
|
||||||
if (event->mask & IN_CREATE) {
|
if (event->mask & IN_CREATE) {
|
||||||
BL_LOG_WARNING("blocklayout pipe file created\n");
|
BL_LOG_WARNING("blocklayout pipe file created\n");
|
||||||
@ -1779,7 +1907,7 @@ index 8eb3fd0..c66669d 100644
|
|||||||
if (bl_pipe_fd < 0)
|
if (bl_pipe_fd < 0)
|
||||||
BL_LOG_ERR("open %s failed: %s\n",
|
BL_LOG_ERR("open %s failed: %s\n",
|
||||||
event->name, strerror(errno));
|
event->name, strerror(errno));
|
||||||
@@ -437,6 +452,18 @@ int main(int argc, char **argv)
|
@@ -437,6 +453,18 @@ int main(int argc, char **argv)
|
||||||
{
|
{
|
||||||
int opt, dflag = 0, fg = 0, ret = 1;
|
int opt, dflag = 0, fg = 0, ret = 1;
|
||||||
char pidbuf[64];
|
char pidbuf[64];
|
||||||
@ -1798,7 +1926,7 @@ index 8eb3fd0..c66669d 100644
|
|||||||
|
|
||||||
while ((opt = getopt(argc, argv, "hdf")) != -1) {
|
while ((opt = getopt(argc, argv, "hdf")) != -1) {
|
||||||
switch (opt) {
|
switch (opt) {
|
||||||
@@ -496,12 +523,12 @@ int main(int argc, char **argv)
|
@@ -496,12 +524,12 @@ int main(int argc, char **argv)
|
||||||
}
|
}
|
||||||
|
|
||||||
/* open pipe file */
|
/* open pipe file */
|
||||||
@ -1815,6 +1943,26 @@ index 8eb3fd0..c66669d 100644
|
|||||||
|
|
||||||
while (1) {
|
while (1) {
|
||||||
/* discover device when needed */
|
/* discover device when needed */
|
||||||
|
diff --git a/utils/blkmapd/device-inq.c b/utils/blkmapd/device-inq.c
|
||||||
|
index 0062a8f..c7952c3 100644
|
||||||
|
--- a/utils/blkmapd/device-inq.c
|
||||||
|
+++ b/utils/blkmapd/device-inq.c
|
||||||
|
@@ -216,6 +216,7 @@ struct bl_serial *bldev_read_serial(int fd, const char *filename)
|
||||||
|
if ((dev_id->len != 8) && (dev_id->len != 12) &&
|
||||||
|
(dev_id->len != 16))
|
||||||
|
break;
|
||||||
|
+ /* FALLTHRU */
|
||||||
|
case 3: /* NAA */
|
||||||
|
/* TODO: NAA validity judgement too complicated,
|
||||||
|
* so just ingore it here.
|
||||||
|
@@ -224,6 +225,7 @@ struct bl_serial *bldev_read_serial(int fd, const char *filename)
|
||||||
|
BL_LOG_ERR("Binary code_set expected\n");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
+ /* FALLTHRU */
|
||||||
|
case 0: /* vendor specific */
|
||||||
|
case 1: /* T10 vendor identification */
|
||||||
|
current_id = dev_id->ids & 0xf;
|
||||||
diff --git a/utils/exportfs/exportfs.c b/utils/exportfs/exportfs.c
|
diff --git a/utils/exportfs/exportfs.c b/utils/exportfs/exportfs.c
|
||||||
index 61dddfb..beed1b3 100644
|
index 61dddfb..beed1b3 100644
|
||||||
--- a/utils/exportfs/exportfs.c
|
--- a/utils/exportfs/exportfs.c
|
||||||
@ -2139,8 +2287,21 @@ index 1fb579a..3514ae1 100644
|
|||||||
|
|
||||||
s = conf_get_str("svcgssd", "principal");
|
s = conf_get_str("svcgssd", "principal");
|
||||||
if (!s)
|
if (!s)
|
||||||
|
diff --git a/utils/idmapd/Makefile.am b/utils/idmapd/Makefile.am
|
||||||
|
index c2f8ba1..1e8e9e6 100644
|
||||||
|
--- a/utils/idmapd/Makefile.am
|
||||||
|
+++ b/utils/idmapd/Makefile.am
|
||||||
|
@@ -15,7 +15,7 @@ idmapd_SOURCES = \
|
||||||
|
nfs_idmap.h \
|
||||||
|
queue.h
|
||||||
|
|
||||||
|
-idmapd_LDADD = $(LIBEVENT) $(LIBNFSIDMAP) ../../support/nfs/libnfs.a
|
||||||
|
+idmapd_LDADD = ../../support/nfs/libnfs.a $(LIBEVENT) $(LIBNFSIDMAP)
|
||||||
|
|
||||||
|
MAINTAINERCLEANFILES = Makefile.in
|
||||||
|
|
||||||
diff --git a/utils/idmapd/idmapd.c b/utils/idmapd/idmapd.c
|
diff --git a/utils/idmapd/idmapd.c b/utils/idmapd/idmapd.c
|
||||||
index f4e083a..c12e878 100644
|
index f4e083a..4cbe148 100644
|
||||||
--- a/utils/idmapd/idmapd.c
|
--- a/utils/idmapd/idmapd.c
|
||||||
+++ b/utils/idmapd/idmapd.c
|
+++ b/utils/idmapd/idmapd.c
|
||||||
@@ -165,9 +165,6 @@ static char *nobodyuser, *nobodygroup;
|
@@ -165,9 +165,6 @@ static char *nobodyuser, *nobodygroup;
|
||||||
@ -2217,6 +2378,24 @@ index f4e083a..c12e878 100644
|
|||||||
CONF_SAVE(nobodyuser, conf_get_str("Mapping", "Nobody-User"));
|
CONF_SAVE(nobodyuser, conf_get_str("Mapping", "Nobody-User"));
|
||||||
CONF_SAVE(nobodygroup, conf_get_str("Mapping", "Nobody-Group"));
|
CONF_SAVE(nobodygroup, conf_get_str("Mapping", "Nobody-Group"));
|
||||||
}
|
}
|
||||||
|
@@ -296,6 +312,8 @@ main(int argc, char **argv)
|
||||||
|
|
||||||
|
strncat(pipefsdir, "/nfs", sizeof(pipefsdir));
|
||||||
|
|
||||||
|
+ daemon_init(fg);
|
||||||
|
+
|
||||||
|
if ((pw = getpwnam(nobodyuser)) == NULL)
|
||||||
|
errx(1, "Could not find user \"%s\"", nobodyuser);
|
||||||
|
nobodyuid = pw->pw_uid;
|
||||||
|
@@ -312,8 +330,6 @@ main(int argc, char **argv)
|
||||||
|
if (nfs4_init_name_mapping(conf_path))
|
||||||
|
errx(1, "Unable to create name to user id mappings.");
|
||||||
|
|
||||||
|
- daemon_init(fg);
|
||||||
|
-
|
||||||
|
event_init();
|
||||||
|
|
||||||
|
if (verbose > 0)
|
||||||
diff --git a/utils/idmapd/idmapd.man b/utils/idmapd/idmapd.man
|
diff --git a/utils/idmapd/idmapd.man b/utils/idmapd/idmapd.man
|
||||||
index d4ab894..5f34d2b 100644
|
index d4ab894..5f34d2b 100644
|
||||||
--- a/utils/idmapd/idmapd.man
|
--- a/utils/idmapd/idmapd.man
|
||||||
@ -2264,7 +2443,7 @@ index d4ab894..5f34d2b 100644
|
|||||||
.\".Sh SEE ALSO
|
.\".Sh SEE ALSO
|
||||||
.\".Xr nylon.conf 4
|
.\".Xr nylon.conf 4
|
||||||
diff --git a/utils/mount/configfile.c b/utils/mount/configfile.c
|
diff --git a/utils/mount/configfile.c b/utils/mount/configfile.c
|
||||||
index 0a4cc04..dc964c7 100644
|
index 0a4cc04..64688bf 100644
|
||||||
--- a/utils/mount/configfile.c
|
--- a/utils/mount/configfile.c
|
||||||
+++ b/utils/mount/configfile.c
|
+++ b/utils/mount/configfile.c
|
||||||
@@ -51,10 +51,6 @@
|
@@ -51,10 +51,6 @@
|
||||||
@ -2278,6 +2457,48 @@ index 0a4cc04..dc964c7 100644
|
|||||||
enum {
|
enum {
|
||||||
MNT_NOARG=0,
|
MNT_NOARG=0,
|
||||||
MNT_INTARG,
|
MNT_INTARG,
|
||||||
|
@@ -70,6 +66,7 @@ struct mnt_alias {
|
||||||
|
{"background", "bg", MNT_NOARG},
|
||||||
|
{"foreground", "fg", MNT_NOARG},
|
||||||
|
{"sloppy", "sloppy", MNT_NOARG},
|
||||||
|
+ {"nfsvers", "vers", MNT_UNSET},
|
||||||
|
};
|
||||||
|
int mnt_alias_sz = (sizeof(mnt_alias_tab)/sizeof(mnt_alias_tab[0]));
|
||||||
|
|
||||||
|
@@ -264,7 +261,7 @@ default_value(char *mopt)
|
||||||
|
}
|
||||||
|
} else if (strncasecmp(field, "vers", strlen("vers")) == 0) {
|
||||||
|
if ((options = po_split(field)) != NULL) {
|
||||||
|
- if (!nfs_nfs_version(options, &config_default_vers)) {
|
||||||
|
+ if (!nfs_nfs_version("nfs", options, &config_default_vers)) {
|
||||||
|
xlog_warn("Unable to set default version: %s",
|
||||||
|
strerror(errno));
|
||||||
|
|
||||||
|
@@ -296,20 +293,21 @@ conf_parse_mntopts(char *section, char *arg, char *opts)
|
||||||
|
|
||||||
|
list = conf_get_tag_list(section, arg);
|
||||||
|
TAILQ_FOREACH(node, &list->fields, link) {
|
||||||
|
+ /* check first if this is an alias for another option */
|
||||||
|
+ field = mountopts_alias(node->field, &argtype);
|
||||||
|
/*
|
||||||
|
* Do not overwrite options if already exists
|
||||||
|
*/
|
||||||
|
- snprintf(buf, BUFSIZ, "%s=", node->field);
|
||||||
|
+ snprintf(buf, BUFSIZ, "%s=", field);
|
||||||
|
if (opts && strcasestr(opts, buf) != NULL)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
- if (lookup_entry(node->field) != NULL)
|
||||||
|
+ if (lookup_entry(field) != NULL)
|
||||||
|
continue;
|
||||||
|
buf[0] = '\0';
|
||||||
|
value = conf_get_section(section, arg, node->field);
|
||||||
|
if (value == NULL)
|
||||||
|
continue;
|
||||||
|
- field = mountopts_alias(node->field, &argtype);
|
||||||
|
if (strcasecmp(value, "false") == 0) {
|
||||||
|
if (argtype != MNT_NOARG)
|
||||||
|
snprintf(buf, BUFSIZ, "no%s", field);
|
||||||
diff --git a/utils/mount/mount_config.h b/utils/mount/mount_config.h
|
diff --git a/utils/mount/mount_config.h b/utils/mount/mount_config.h
|
||||||
index 69ffd1e..e4f8511 100644
|
index 69ffd1e..e4f8511 100644
|
||||||
--- a/utils/mount/mount_config.h
|
--- a/utils/mount/mount_config.h
|
||||||
@ -2315,10 +2536,10 @@ index 1f01f7f..2d40657 100644
|
|||||||
while ((c = getopt_long (argc, argv, "fvnrlh", longopts, NULL)) != -1) {
|
while ((c = getopt_long (argc, argv, "fvnrlh", longopts, NULL)) != -1) {
|
||||||
|
|
||||||
diff --git a/utils/mount/network.c b/utils/mount/network.c
|
diff --git a/utils/mount/network.c b/utils/mount/network.c
|
||||||
index 7dceb2d..281e935 100644
|
index 7dceb2d..8ab5be8 100644
|
||||||
--- a/utils/mount/network.c
|
--- a/utils/mount/network.c
|
||||||
+++ b/utils/mount/network.c
|
+++ b/utils/mount/network.c
|
||||||
@@ -33,6 +33,7 @@
|
@@ -33,12 +33,19 @@
|
||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
#include <netdb.h>
|
#include <netdb.h>
|
||||||
#include <time.h>
|
#include <time.h>
|
||||||
@ -2326,7 +2547,28 @@ index 7dceb2d..281e935 100644
|
|||||||
|
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
#include <sys/socket.h>
|
#include <sys/socket.h>
|
||||||
@@ -804,6 +805,7 @@ int start_statd(void)
|
#include <sys/wait.h>
|
||||||
|
#include <sys/stat.h>
|
||||||
|
-#include <linux/in6.h>
|
||||||
|
+#if defined(__GLIBC__) && (__GLIBC__ < 2) || (__GLIBC__ == 2 && __GLIBC_MINOR__ < 24)
|
||||||
|
+/* Cannot safely include linux/in6.h in old glibc, so hardcode the needed values */
|
||||||
|
+# define IPV6_PREFER_SRC_PUBLIC 2
|
||||||
|
+# define IPV6_ADDR_PREFERENCES 72
|
||||||
|
+#else
|
||||||
|
+# include <linux/in6.h>
|
||||||
|
+#endif
|
||||||
|
#include <netinet/in.h>
|
||||||
|
#include <rpc/rpc.h>
|
||||||
|
#include <rpc/pmap_prot.h>
|
||||||
|
@@ -93,7 +100,6 @@ static const char *nfs_version_opttbl[] = {
|
||||||
|
"v4",
|
||||||
|
"vers",
|
||||||
|
"nfsvers",
|
||||||
|
- "minorversion",
|
||||||
|
NULL,
|
||||||
|
};
|
||||||
|
|
||||||
|
@@ -804,6 +810,7 @@ int start_statd(void)
|
||||||
pid_t pid = fork();
|
pid_t pid = fork();
|
||||||
switch (pid) {
|
switch (pid) {
|
||||||
case 0: /* child */
|
case 0: /* child */
|
||||||
@ -2334,7 +2576,110 @@ index 7dceb2d..281e935 100644
|
|||||||
setgid(0);
|
setgid(0);
|
||||||
setuid(0);
|
setuid(0);
|
||||||
execle(START_STATD, START_STATD, NULL, envp);
|
execle(START_STATD, START_STATD, NULL, envp);
|
||||||
@@ -1638,6 +1640,7 @@ int nfs_options2pmap(struct mount_options *options,
|
@@ -1233,6 +1240,7 @@ nfs_nfs_program(struct mount_options *options, unsigned long *program)
|
||||||
|
*program = tmp;
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
+ /* FALLTHRU */
|
||||||
|
case PO_BAD_VALUE:
|
||||||
|
nfs_error(_("%s: invalid value for 'nfsprog=' option"),
|
||||||
|
progname);
|
||||||
|
@@ -1252,7 +1260,7 @@ nfs_nfs_program(struct mount_options *options, unsigned long *program)
|
||||||
|
* or FALSE if the option was specified with an invalid value.
|
||||||
|
*/
|
||||||
|
int
|
||||||
|
-nfs_nfs_version(struct mount_options *options, struct nfs_version *version)
|
||||||
|
+nfs_nfs_version(char *type, struct mount_options *options, struct nfs_version *version)
|
||||||
|
{
|
||||||
|
char *version_key, *version_val, *cptr;
|
||||||
|
int i, found = 0;
|
||||||
|
@@ -1267,10 +1275,11 @@ nfs_nfs_version(struct mount_options *options, struct nfs_version *version)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
- if (!found)
|
||||||
|
+ if (!found && strcmp(type, "nfs4") == 0)
|
||||||
|
+ version_val = type + 3;
|
||||||
|
+ else if (!found)
|
||||||
|
return 1;
|
||||||
|
-
|
||||||
|
- if (i <= 2 ) {
|
||||||
|
+ else if (i <= 2 ) {
|
||||||
|
/* v2, v3, v4 */
|
||||||
|
version_val = version_key + 1;
|
||||||
|
version->v_mode = V_SPECIFIC;
|
||||||
|
@@ -1282,17 +1291,19 @@ nfs_nfs_version(struct mount_options *options, struct nfs_version *version)
|
||||||
|
if (!version_val)
|
||||||
|
goto ret_error;
|
||||||
|
|
||||||
|
- if (!(version->major = strtol(version_val, &cptr, 10)))
|
||||||
|
+ version->major = strtol(version_val, &cptr, 10);
|
||||||
|
+ if (cptr == version_val || (*cptr && *cptr != '.'))
|
||||||
|
goto ret_error;
|
||||||
|
-
|
||||||
|
- if (strcmp(nfs_version_opttbl[i], "minorversion") == 0) {
|
||||||
|
+ if (version->major == 4 && *cptr != '.' &&
|
||||||
|
+ (version_val = po_get(options, "minorversion")) != NULL) {
|
||||||
|
+ version->minor = strtol(version_val, &cptr, 10);
|
||||||
|
+ i = -1;
|
||||||
|
+ if (*cptr)
|
||||||
|
+ goto ret_error;
|
||||||
|
version->v_mode = V_SPECIFIC;
|
||||||
|
- version->minor = version->major;
|
||||||
|
- version->major = 4;
|
||||||
|
} else if (version->major < 4)
|
||||||
|
version->v_mode = V_SPECIFIC;
|
||||||
|
-
|
||||||
|
- if (*cptr == '.') {
|
||||||
|
+ else if (*cptr == '.') {
|
||||||
|
version_val = ++cptr;
|
||||||
|
if (!(version->minor = strtol(version_val, &cptr, 10)) && cptr == version_val)
|
||||||
|
goto ret_error;
|
||||||
|
@@ -1306,7 +1317,10 @@ nfs_nfs_version(struct mount_options *options, struct nfs_version *version)
|
||||||
|
return 1;
|
||||||
|
|
||||||
|
ret_error:
|
||||||
|
- if (i <= 2 ) {
|
||||||
|
+ if (i < 0) {
|
||||||
|
+ nfs_error(_("%s: parsing error on 'minorversion=' option"),
|
||||||
|
+ progname);
|
||||||
|
+ } else if (i <= 2 ) {
|
||||||
|
nfs_error(_("%s: parsing error on 'v' option"),
|
||||||
|
progname);
|
||||||
|
} else if (i == 3 ) {
|
||||||
|
@@ -1381,6 +1395,7 @@ nfs_nfs_port(struct mount_options *options, unsigned long *port)
|
||||||
|
*port = tmp;
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
+ /* FALLTHRU */
|
||||||
|
case PO_BAD_VALUE:
|
||||||
|
nfs_error(_("%s: invalid value for 'port=' option"),
|
||||||
|
progname);
|
||||||
|
@@ -1476,6 +1491,7 @@ nfs_mount_program(struct mount_options *options, unsigned long *program)
|
||||||
|
*program = tmp;
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
+ /* FALLTHRU */
|
||||||
|
case PO_BAD_VALUE:
|
||||||
|
nfs_error(_("%s: invalid value for 'mountprog=' option"),
|
||||||
|
progname);
|
||||||
|
@@ -1507,6 +1523,7 @@ nfs_mount_version(struct mount_options *options, unsigned long *version)
|
||||||
|
*version = tmp;
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
+ /* FALLTHRU */
|
||||||
|
case PO_BAD_VALUE:
|
||||||
|
nfs_error(_("%s: invalid value for 'mountvers=' option"),
|
||||||
|
progname);
|
||||||
|
@@ -1573,6 +1590,7 @@ nfs_mount_port(struct mount_options *options, unsigned long *port)
|
||||||
|
*port = tmp;
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
+ /* FALLTHRU */
|
||||||
|
case PO_BAD_VALUE:
|
||||||
|
nfs_error(_("%s: invalid value for 'mountport=' option"),
|
||||||
|
progname);
|
||||||
|
@@ -1638,10 +1656,11 @@ int nfs_options2pmap(struct mount_options *options,
|
||||||
struct pmap *nfs_pmap, struct pmap *mnt_pmap)
|
struct pmap *nfs_pmap, struct pmap *mnt_pmap)
|
||||||
{
|
{
|
||||||
struct nfs_version version;
|
struct nfs_version version;
|
||||||
@ -2342,8 +2687,91 @@ index 7dceb2d..281e935 100644
|
|||||||
|
|
||||||
if (!nfs_nfs_program(options, &nfs_pmap->pm_prog))
|
if (!nfs_nfs_program(options, &nfs_pmap->pm_prog))
|
||||||
return 0;
|
return 0;
|
||||||
|
- if (!nfs_nfs_version(options, &version))
|
||||||
|
+ if (!nfs_nfs_version("nfs", options, &version))
|
||||||
|
return 0;
|
||||||
|
if (version.v_mode == V_DEFAULT)
|
||||||
|
nfs_pmap->pm_vers = 0;
|
||||||
|
diff --git a/utils/mount/network.h b/utils/mount/network.h
|
||||||
|
index 9cc5dec..ecaac33 100644
|
||||||
|
--- a/utils/mount/network.h
|
||||||
|
+++ b/utils/mount/network.h
|
||||||
|
@@ -72,7 +72,7 @@ struct nfs_version {
|
||||||
|
|
||||||
|
int nfs_nfs_proto_family(struct mount_options *options, sa_family_t *family);
|
||||||
|
int nfs_mount_proto_family(struct mount_options *options, sa_family_t *family);
|
||||||
|
-int nfs_nfs_version(struct mount_options *options, struct nfs_version *version);
|
||||||
|
+int nfs_nfs_version(char *type, struct mount_options *options, struct nfs_version *version);
|
||||||
|
int nfs_nfs_protocol(struct mount_options *options, unsigned long *protocol);
|
||||||
|
|
||||||
|
int nfs_options2pmap(struct mount_options *,
|
||||||
|
diff --git a/utils/mount/nfs.man b/utils/mount/nfs.man
|
||||||
|
index cc6e992..7d42f19 100644
|
||||||
|
--- a/utils/mount/nfs.man
|
||||||
|
+++ b/utils/mount/nfs.man
|
||||||
|
@@ -779,6 +779,23 @@ so if this mount option is not specified, the NFS version 4 client
|
||||||
|
uses the TCP protocol.
|
||||||
|
Refer to the TRANSPORT METHODS section for more details.
|
||||||
|
.TP 1.5i
|
||||||
|
+.BI minorversion= n
|
||||||
|
+Specifies the protocol minor version number.
|
||||||
|
+NFSv4 introduces "minor versioning," where NFS protocol enhancements can
|
||||||
|
+be introduced without bumping the NFS protocol version number.
|
||||||
|
+Before kernel 2.6.38, the minor version is always zero, and this
|
||||||
|
+option is not recognized.
|
||||||
|
+After this kernel, specifying "minorversion=1" enables a number of
|
||||||
|
+advanced features, such as NFSv4 sessions.
|
||||||
|
+.IP
|
||||||
|
+Recent kernels allow the minor version to be specified using the
|
||||||
|
+.B vers=
|
||||||
|
+option.
|
||||||
|
+For example, specifying
|
||||||
|
+.B vers=4.1
|
||||||
|
+is the same as specifying
|
||||||
|
+.BR vers=4,minorversion=1 .
|
||||||
|
+.TP 1.5i
|
||||||
|
.BI port= n
|
||||||
|
The numeric value of the server's NFS service port.
|
||||||
|
If the server's NFS service is not available on the specified port,
|
||||||
|
diff --git a/utils/mount/nfs4mount.c b/utils/mount/nfs4mount.c
|
||||||
|
index 028e7cd..89629ed 100644
|
||||||
|
--- a/utils/mount/nfs4mount.c
|
||||||
|
+++ b/utils/mount/nfs4mount.c
|
||||||
|
@@ -444,6 +444,7 @@ int nfs4mount(const char *spec, const char *node, int flags,
|
||||||
|
case RPC_SYSTEMERROR:
|
||||||
|
if (errno == ETIMEDOUT)
|
||||||
|
break;
|
||||||
|
+ /* FALLTHRU */
|
||||||
|
default:
|
||||||
|
rpc_mount_errors(hostname, 0, bg);
|
||||||
|
goto fail;
|
||||||
|
diff --git a/utils/mount/nfsmount.c b/utils/mount/nfsmount.c
|
||||||
|
index 930622d..ae4a3da 100644
|
||||||
|
--- a/utils/mount/nfsmount.c
|
||||||
|
+++ b/utils/mount/nfsmount.c
|
||||||
|
@@ -683,6 +683,7 @@ nfsmount(const char *spec, const char *node, int flags,
|
||||||
|
case RPC_SYSTEMERROR:
|
||||||
|
if (errno == ETIMEDOUT)
|
||||||
|
break;
|
||||||
|
+ /* FALLTHRU */
|
||||||
|
default:
|
||||||
|
rpc_mount_errors(*nfs_server.hostname, 0, bg);
|
||||||
|
goto fail;
|
||||||
|
diff --git a/utils/mount/nfsumount.c b/utils/mount/nfsumount.c
|
||||||
|
index de284f2..e16fb6a 100644
|
||||||
|
--- a/utils/mount/nfsumount.c
|
||||||
|
+++ b/utils/mount/nfsumount.c
|
||||||
|
@@ -180,7 +180,7 @@ static int nfs_umount_is_vers4(const struct mntentchn *mc)
|
||||||
|
options = po_split(pmc->m.mnt_opts);
|
||||||
|
if (options != NULL) {
|
||||||
|
struct nfs_version version;
|
||||||
|
- int rc = nfs_nfs_version(options, &version);
|
||||||
|
+ int rc = nfs_nfs_version("nfs", options, &version);
|
||||||
|
po_destroy(options);
|
||||||
|
if (rc && version.major == 4)
|
||||||
|
goto out_nfs4;
|
||||||
diff --git a/utils/mount/stropts.c b/utils/mount/stropts.c
|
diff --git a/utils/mount/stropts.c b/utils/mount/stropts.c
|
||||||
index 387d734..c2a739b 100644
|
index 387d734..4401314 100644
|
||||||
--- a/utils/mount/stropts.c
|
--- a/utils/mount/stropts.c
|
||||||
+++ b/utils/mount/stropts.c
|
+++ b/utils/mount/stropts.c
|
||||||
@@ -73,6 +73,13 @@
|
@@ -73,6 +73,13 @@
|
||||||
@ -2360,6 +2788,17 @@ index 387d734..c2a739b 100644
|
|||||||
extern int nfs_mount_data_version;
|
extern int nfs_mount_data_version;
|
||||||
extern char *progname;
|
extern char *progname;
|
||||||
extern int verbose;
|
extern int verbose;
|
||||||
|
@@ -80,8 +87,8 @@ extern int sloppy;
|
||||||
|
|
||||||
|
struct nfsmount_info {
|
||||||
|
const char *spec, /* server:/path */
|
||||||
|
- *node, /* mounted-on dir */
|
||||||
|
- *type; /* "nfs" or "nfs4" */
|
||||||
|
+ *node; /* mounted-on dir */
|
||||||
|
+ char *type; /* "nfs" or "nfs4" */
|
||||||
|
char *hostname; /* server's hostname */
|
||||||
|
struct addrinfo *address; /* server's addresses */
|
||||||
|
sa_family_t family; /* Address family */
|
||||||
@@ -112,20 +119,28 @@ static void nfs_default_version(struct nfsmount_info *mi)
|
@@ -112,20 +119,28 @@ static void nfs_default_version(struct nfsmount_info *mi)
|
||||||
if (mi->version.v_mode == V_DEFAULT &&
|
if (mi->version.v_mode == V_DEFAULT &&
|
||||||
config_default_vers.v_mode != V_DEFAULT) {
|
config_default_vers.v_mode != V_DEFAULT) {
|
||||||
@ -2394,23 +2833,21 @@ index 387d734..c2a739b 100644
|
|||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -315,9 +330,12 @@ static int nfs_set_version(struct nfsmount_info *mi)
|
@@ -312,12 +327,9 @@ static int nfs_append_sloppy_option(struct mount_options *options)
|
||||||
if (!nfs_nfs_version(mi->options, &mi->version))
|
|
||||||
|
static int nfs_set_version(struct nfsmount_info *mi)
|
||||||
|
{
|
||||||
|
- if (!nfs_nfs_version(mi->options, &mi->version))
|
||||||
|
+ if (!nfs_nfs_version(mi->type, mi->options, &mi->version))
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
- if (strncmp(mi->type, "nfs4", 4) == 0)
|
- if (strncmp(mi->type, "nfs4", 4) == 0)
|
||||||
- mi->version.major = 4;
|
- mi->version.major = 4;
|
||||||
-
|
-
|
||||||
+ if (strncmp(mi->type, "nfs4", 4) == 0) {
|
|
||||||
+ /* Set to default values */
|
|
||||||
+ mi->version.major = NFS_DEFAULT_MAJOR;
|
|
||||||
+ mi->version.minor = NFS_DEFAULT_MINOR;
|
|
||||||
+ mi->version.v_mode = V_GENERAL;
|
|
||||||
+ }
|
|
||||||
/*
|
/*
|
||||||
* Before 2.6.32, the kernel NFS client didn't
|
* Before 2.6.32, the kernel NFS client didn't
|
||||||
* support "-t nfs vers=4" mounts, so NFS version
|
* support "-t nfs vers=4" mounts, so NFS version
|
||||||
@@ -517,6 +535,10 @@ nfs_rewrite_pmap_mount_options(struct mount_options *options, int checkv4)
|
@@ -517,6 +529,10 @@ nfs_rewrite_pmap_mount_options(struct mount_options *options, int checkv4)
|
||||||
unsigned long protocol;
|
unsigned long protocol;
|
||||||
struct pmap mnt_pmap;
|
struct pmap mnt_pmap;
|
||||||
|
|
||||||
@ -2421,7 +2858,16 @@ index 387d734..c2a739b 100644
|
|||||||
/*
|
/*
|
||||||
* Version and transport negotiation is not required
|
* Version and transport negotiation is not required
|
||||||
* and does not work for RDMA mounts.
|
* and does not work for RDMA mounts.
|
||||||
@@ -727,13 +749,9 @@ static int nfs_do_mount_v4(struct nfsmount_info *mi,
|
@@ -705,7 +721,7 @@ static int nfs_do_mount_v4(struct nfsmount_info *mi,
|
||||||
|
{
|
||||||
|
struct mount_options *options = po_dup(mi->options);
|
||||||
|
int result = 0;
|
||||||
|
- char version_opt[16];
|
||||||
|
+ char version_opt[32];
|
||||||
|
char *extra_opts = NULL;
|
||||||
|
|
||||||
|
if (!options) {
|
||||||
|
@@ -727,13 +743,25 @@ static int nfs_do_mount_v4(struct nfsmount_info *mi,
|
||||||
}
|
}
|
||||||
|
|
||||||
if (mi->version.v_mode != V_SPECIFIC) {
|
if (mi->version.v_mode != V_SPECIFIC) {
|
||||||
@ -2432,23 +2878,42 @@ index 387d734..c2a739b 100644
|
|||||||
- snprintf(version_opt, sizeof(version_opt) - 1,
|
- snprintf(version_opt, sizeof(version_opt) - 1,
|
||||||
- "vers=%lu.%lu", mi->version.major,
|
- "vers=%lu.%lu", mi->version.major,
|
||||||
- mi->version.minor);
|
- mi->version.minor);
|
||||||
|
+ char *fmt;
|
||||||
|
+ switch (mi->version.minor) {
|
||||||
|
+ /* Old kernels don't support the new "vers=x.y"
|
||||||
|
+ * option, but do support old versions of NFS4.
|
||||||
|
+ * So use the format that is most widely understood.
|
||||||
|
+ */
|
||||||
|
+ case 0:
|
||||||
|
+ fmt = "vers=%lu";
|
||||||
|
+ break;
|
||||||
|
+ case 1:
|
||||||
|
+ fmt = "vers=%lu,minorversion=%lu";
|
||||||
|
+ break;
|
||||||
|
+ default:
|
||||||
|
+ fmt = "vers=%lu.%lu";
|
||||||
|
+ break;
|
||||||
|
+ }
|
||||||
+ snprintf(version_opt, sizeof(version_opt) - 1,
|
+ snprintf(version_opt, sizeof(version_opt) - 1,
|
||||||
+ "vers=%lu.%lu", mi->version.major,
|
+ fmt, mi->version.major,
|
||||||
+ mi->version.minor);
|
+ mi->version.minor);
|
||||||
|
|
||||||
if (po_append(options, version_opt) == PO_FAILED) {
|
if (po_append(options, version_opt) == PO_FAILED) {
|
||||||
errno = EINVAL;
|
errno = EINVAL;
|
||||||
@@ -834,9 +852,6 @@ check_result:
|
@@ -834,9 +862,9 @@ check_result:
|
||||||
case EINVAL:
|
case EINVAL:
|
||||||
/* A less clear indication that our client
|
/* A less clear indication that our client
|
||||||
* does not support NFSv4 minor version. */
|
* does not support NFSv4 minor version. */
|
||||||
- if (mi->version.v_mode == V_GENERAL &&
|
- if (mi->version.v_mode == V_GENERAL &&
|
||||||
- mi->version.minor == 0)
|
- mi->version.minor == 0)
|
||||||
- return result;
|
- return result;
|
||||||
|
+ case EACCES:
|
||||||
|
+ /* An unclear indication that the server
|
||||||
|
+ * may not support NFSv4 minor version. */
|
||||||
if (mi->version.v_mode != V_SPECIFIC) {
|
if (mi->version.v_mode != V_SPECIFIC) {
|
||||||
if (mi->version.minor > 0) {
|
if (mi->version.minor > 0) {
|
||||||
mi->version.minor--;
|
mi->version.minor--;
|
||||||
@@ -858,19 +873,28 @@ check_result:
|
@@ -858,19 +886,28 @@ check_result:
|
||||||
/* UDP-Only servers won't support v4, but maybe it
|
/* UDP-Only servers won't support v4, but maybe it
|
||||||
* just isn't ready yet. So try v3, but double-check
|
* just isn't ready yet. So try v3, but double-check
|
||||||
* with rpcbind for v4. */
|
* with rpcbind for v4. */
|
||||||
@ -2478,6 +2943,28 @@ index 387d734..c2a739b 100644
|
|||||||
return nfs_try_mount_v3v2(mi, FALSE);
|
return nfs_try_mount_v3v2(mi, FALSE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -1165,7 +1202,7 @@ static int nfsmount_start(struct nfsmount_info *mi)
|
||||||
|
*
|
||||||
|
* Returns a valid mount command exit code.
|
||||||
|
*/
|
||||||
|
-int nfsmount_string(const char *spec, const char *node, const char *type,
|
||||||
|
+int nfsmount_string(const char *spec, const char *node, char *type,
|
||||||
|
int flags, char **extra_opts, int fake, int child)
|
||||||
|
{
|
||||||
|
struct nfsmount_info mi = {
|
||||||
|
diff --git a/utils/mount/stropts.h b/utils/mount/stropts.h
|
||||||
|
index 37316eb..6acd2ac 100644
|
||||||
|
--- a/utils/mount/stropts.h
|
||||||
|
+++ b/utils/mount/stropts.h
|
||||||
|
@@ -24,7 +24,7 @@
|
||||||
|
#ifndef _NFS_UTILS_MOUNT_STROPTS_H
|
||||||
|
#define _NFS_UTILS_MOUNT_STROPTS_H
|
||||||
|
|
||||||
|
-int nfsmount_string(const char *, const char *, const char *, int,
|
||||||
|
+int nfsmount_string(const char *, const char *, char *, int,
|
||||||
|
char **, int, int);
|
||||||
|
|
||||||
|
#endif /* _NFS_UTILS_MOUNT_STROPTS_H */
|
||||||
diff --git a/utils/mountd/auth.c b/utils/mountd/auth.c
|
diff --git a/utils/mountd/auth.c b/utils/mountd/auth.c
|
||||||
index d065830..8299256 100644
|
index d065830..8299256 100644
|
||||||
--- a/utils/mountd/auth.c
|
--- a/utils/mountd/auth.c
|
||||||
@ -2505,6 +2992,18 @@ index d065830..8299256 100644
|
|||||||
close(fd);
|
close(fd);
|
||||||
} else if (last_fd != -1 && stb.st_ino == last_inode) {
|
} else if (last_fd != -1 && stb.st_ino == last_inode) {
|
||||||
/* We opened the etab file before, and its inode
|
/* We opened the etab file before, and its inode
|
||||||
|
diff --git a/utils/mountd/cache.c b/utils/mountd/cache.c
|
||||||
|
index ca6c84f..e49300d 100644
|
||||||
|
--- a/utils/mountd/cache.c
|
||||||
|
+++ b/utils/mountd/cache.c
|
||||||
|
@@ -11,6 +11,7 @@
|
||||||
|
#include <config.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
+#include <sys/sysmacros.h>
|
||||||
|
#include <sys/types.h>
|
||||||
|
#include <sys/select.h>
|
||||||
|
#include <sys/stat.h>
|
||||||
diff --git a/utils/mountd/mountd.c b/utils/mountd/mountd.c
|
diff --git a/utils/mountd/mountd.c b/utils/mountd/mountd.c
|
||||||
index 61699e6..829f803 100644
|
index 61699e6..829f803 100644
|
||||||
--- a/utils/mountd/mountd.c
|
--- a/utils/mountd/mountd.c
|
||||||
@ -2728,7 +3227,7 @@ index 527377f..3ae0dbb 100644
|
|||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
diff --git a/utils/nfsd/nfsd.c b/utils/nfsd/nfsd.c
|
diff --git a/utils/nfsd/nfsd.c b/utils/nfsd/nfsd.c
|
||||||
index 20f4b79..2b38249 100644
|
index 20f4b79..f973203 100644
|
||||||
--- a/utils/nfsd/nfsd.c
|
--- a/utils/nfsd/nfsd.c
|
||||||
+++ b/utils/nfsd/nfsd.c
|
+++ b/utils/nfsd/nfsd.c
|
||||||
@@ -34,8 +34,6 @@
|
@@ -34,8 +34,6 @@
|
||||||
@ -2814,7 +3313,7 @@ index 20f4b79..2b38249 100644
|
|||||||
switch(c) {
|
switch(c) {
|
||||||
case 'd':
|
case 'd':
|
||||||
xlog_config(D_ALL, 1);
|
xlog_config(D_ALL, 1);
|
||||||
@@ -179,13 +186,17 @@ main(int argc, char **argv)
|
@@ -179,14 +186,19 @@ main(int argc, char **argv)
|
||||||
case 4:
|
case 4:
|
||||||
if (*p == '.') {
|
if (*p == '.') {
|
||||||
int i = atoi(p+1);
|
int i = atoi(p+1);
|
||||||
@ -2834,9 +3333,11 @@ index 20f4b79..2b38249 100644
|
|||||||
+ minorvers = 0;
|
+ minorvers = 0;
|
||||||
+ minorversset = minormask;
|
+ minorversset = minormask;
|
||||||
}
|
}
|
||||||
|
+ /* FALLTHRU */
|
||||||
case 3:
|
case 3:
|
||||||
case 2:
|
case 2:
|
||||||
@@ -201,14 +212,14 @@ main(int argc, char **argv)
|
NFSCTL_VERUNSET(versbits, c);
|
||||||
|
@@ -201,14 +213,15 @@ main(int argc, char **argv)
|
||||||
case 4:
|
case 4:
|
||||||
if (*p == '.') {
|
if (*p == '.') {
|
||||||
int i = atoi(p+1);
|
int i = atoi(p+1);
|
||||||
@ -2853,10 +3354,11 @@ index 20f4b79..2b38249 100644
|
|||||||
+ NFSCTL_MINORSET(minorvers, i);
|
+ NFSCTL_MINORSET(minorvers, i);
|
||||||
+ } else
|
+ } else
|
||||||
+ minorvers = minorversset = minormask;
|
+ minorvers = minorversset = minormask;
|
||||||
|
+ /* FALLTHRU */
|
||||||
case 3:
|
case 3:
|
||||||
case 2:
|
case 2:
|
||||||
NFSCTL_VERSET(versbits, c);
|
NFSCTL_VERSET(versbits, c);
|
||||||
@@ -222,9 +233,15 @@ main(int argc, char **argv)
|
@@ -222,9 +235,15 @@ main(int argc, char **argv)
|
||||||
xlog_syslog(1);
|
xlog_syslog(1);
|
||||||
xlog_stderr(0);
|
xlog_stderr(0);
|
||||||
break;
|
break;
|
||||||
@ -2872,7 +3374,15 @@ index 20f4b79..2b38249 100644
|
|||||||
case 'U':
|
case 'U':
|
||||||
NFSCTL_UDPUNSET(protobits);
|
NFSCTL_UDPUNSET(protobits);
|
||||||
break;
|
break;
|
||||||
@@ -372,9 +389,9 @@ usage(const char *prog)
|
@@ -244,6 +263,7 @@ main(int argc, char **argv)
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
fprintf(stderr, "Invalid argument: '%c'\n", c);
|
||||||
|
+ /* FALLTHRU */
|
||||||
|
case 'h':
|
||||||
|
usage(progname);
|
||||||
|
}
|
||||||
|
@@ -372,9 +392,9 @@ usage(const char *prog)
|
||||||
{
|
{
|
||||||
fprintf(stderr, "Usage:\n"
|
fprintf(stderr, "Usage:\n"
|
||||||
"%s [-d|--debug] [-H hostname] [-p|-P|--port port]\n"
|
"%s [-d|--debug] [-H hostname] [-p|-P|--port port]\n"
|
||||||
@ -2931,10 +3441,37 @@ index 8901fb6..d83ef86 100644
|
|||||||
.B \-L " or " \-\-lease-time seconds
|
.B \-L " or " \-\-lease-time seconds
|
||||||
Set the lease-time used for NFSv4. This corresponds to how often
|
Set the lease-time used for NFSv4. This corresponds to how often
|
||||||
diff --git a/utils/nfsd/nfssvc.c b/utils/nfsd/nfssvc.c
|
diff --git a/utils/nfsd/nfssvc.c b/utils/nfsd/nfssvc.c
|
||||||
index 07f6ff1..e8609c1 100644
|
index 07f6ff1..fc36792 100644
|
||||||
--- a/utils/nfsd/nfssvc.c
|
--- a/utils/nfsd/nfssvc.c
|
||||||
+++ b/utils/nfsd/nfssvc.c
|
+++ b/utils/nfsd/nfssvc.c
|
||||||
@@ -330,36 +330,78 @@ nfssvc_set_time(const char *type, const int seconds)
|
@@ -112,7 +112,7 @@ static int
|
||||||
|
nfssvc_setfds(const struct addrinfo *hints, const char *node, const char *port)
|
||||||
|
{
|
||||||
|
int fd, on = 1, fac = L_ERROR;
|
||||||
|
- int sockfd = -1, rc = 0;
|
||||||
|
+ int sockfd = -1, rc = 0, bounded = 0;
|
||||||
|
struct addrinfo *addrhead = NULL, *addr;
|
||||||
|
char *proto, *family;
|
||||||
|
|
||||||
|
@@ -233,6 +233,8 @@ nfssvc_setfds(const struct addrinfo *hints, const char *node, const char *port)
|
||||||
|
rc = errno;
|
||||||
|
goto error;
|
||||||
|
}
|
||||||
|
+ bounded++;
|
||||||
|
+
|
||||||
|
close(fd);
|
||||||
|
close(sockfd);
|
||||||
|
sockfd = fd = -1;
|
||||||
|
@@ -245,7 +247,7 @@ error:
|
||||||
|
close(sockfd);
|
||||||
|
if (addrhead)
|
||||||
|
freeaddrinfo(addrhead);
|
||||||
|
- return rc;
|
||||||
|
+ return (bounded ? 0 : rc);
|
||||||
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
@@ -330,36 +332,78 @@ nfssvc_set_time(const char *type, const int seconds)
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
@ -3040,7 +3577,7 @@ index cd5a7e8..39ebf37 100644
|
|||||||
int nfssvc_threads(int nrservs);
|
int nfssvc_threads(int nrservs);
|
||||||
+void nfssvc_get_minormask(unsigned int *mask);
|
+void nfssvc_get_minormask(unsigned int *mask);
|
||||||
diff --git a/utils/nfsdcltrack/nfsdcltrack.c b/utils/nfsdcltrack/nfsdcltrack.c
|
diff --git a/utils/nfsdcltrack/nfsdcltrack.c b/utils/nfsdcltrack/nfsdcltrack.c
|
||||||
index 7af9efb..124c923 100644
|
index 7af9efb..0baaa3e 100644
|
||||||
--- a/utils/nfsdcltrack/nfsdcltrack.c
|
--- a/utils/nfsdcltrack/nfsdcltrack.c
|
||||||
+++ b/utils/nfsdcltrack/nfsdcltrack.c
|
+++ b/utils/nfsdcltrack/nfsdcltrack.c
|
||||||
@@ -56,8 +56,6 @@
|
@@ -56,8 +56,6 @@
|
||||||
@ -3061,6 +3598,14 @@ index 7af9efb..124c923 100644
|
|||||||
xlog_from_conffile("nfsdcltrack");
|
xlog_from_conffile("nfsdcltrack");
|
||||||
val = conf_get_str("nfsdcltrack", "storagedir");
|
val = conf_get_str("nfsdcltrack", "storagedir");
|
||||||
if (val)
|
if (val)
|
||||||
|
@@ -581,6 +579,7 @@ main(int argc, char **argv)
|
||||||
|
switch (arg) {
|
||||||
|
case 'd':
|
||||||
|
xlog_config(D_ALL, 1);
|
||||||
|
+ break;
|
||||||
|
case 'f':
|
||||||
|
xlog_syslog(0);
|
||||||
|
xlog_stderr(1);
|
||||||
diff --git a/utils/nfsdcltrack/sqlite.c b/utils/nfsdcltrack/sqlite.c
|
diff --git a/utils/nfsdcltrack/sqlite.c b/utils/nfsdcltrack/sqlite.c
|
||||||
index 54cd748..1552eba 100644
|
index 54cd748..1552eba 100644
|
||||||
--- a/utils/nfsdcltrack/sqlite.c
|
--- a/utils/nfsdcltrack/sqlite.c
|
@ -2,7 +2,7 @@ Summary: NFS utilities and supporting clients and daemons for the kernel NFS ser
|
|||||||
Name: nfs-utils
|
Name: nfs-utils
|
||||||
URL: http://linux-nfs.org/
|
URL: http://linux-nfs.org/
|
||||||
Version: 2.1.1
|
Version: 2.1.1
|
||||||
Release: 7.rc5%{?dist}
|
Release: 7.rc6%{?dist}
|
||||||
Epoch: 1
|
Epoch: 1
|
||||||
|
|
||||||
# group all 32bit related archs
|
# group all 32bit related archs
|
||||||
@ -15,7 +15,7 @@ Source3: nfs-utils_env.sh
|
|||||||
Source4: lockd.conf
|
Source4: lockd.conf
|
||||||
Source5: 24-nfs-server.conf
|
Source5: 24-nfs-server.conf
|
||||||
|
|
||||||
Patch001: nfs-utils-2.1.2-rc5.patch
|
Patch001: nfs-utils-2.1.2-rc6.patch
|
||||||
|
|
||||||
Patch100: nfs-utils-1.2.1-statdpath-man.patch
|
Patch100: nfs-utils-1.2.1-statdpath-man.patch
|
||||||
Patch101: nfs-utils-1.2.1-exp-subtree-warn-off.patch
|
Patch101: nfs-utils-1.2.1-exp-subtree-warn-off.patch
|
||||||
@ -288,6 +288,9 @@ fi
|
|||||||
/sbin/umount.nfs4
|
/sbin/umount.nfs4
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
* Thu Oct 5 2017 Steve Dickson <steved@redhat.com> 2.1.1-7.rc6
|
||||||
|
- Updated to the latest RC releease: nfs-utils-2-1-2-rc6
|
||||||
|
|
||||||
* Tue Sep 19 2017 Orion Poplawski <orion@nwra.com> 2.1.1-7.rc5
|
* Tue Sep 19 2017 Orion Poplawski <orion@nwra.com> 2.1.1-7.rc5
|
||||||
- Fix URL
|
- Fix URL
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user