Update to latest RC release: nfs-utils-2-3-3-rc1

Signed-off-by: Steve Dickson <steved@redhat.com>
This commit is contained in:
Steve Dickson 2018-06-07 09:43:26 -04:00
parent 9c243df7db
commit 0b94f74a93
4 changed files with 451 additions and 18 deletions

5
.gitignore vendored
View File

@ -1,7 +1,4 @@
x86_64
Makefile
/nfs-utils-2.2.1.tar.xz
nfs-utils-2.2.1/
/nfs-utils-2.3.1.tar.xz
nfs-utils-2.3.1/
/nfs-utils-2.3.2.tar.xz
nfs-utils-2.3.2/

View File

@ -1,12 +0,0 @@
diff -up nfs-utils-2.3.1/configure.ac.orig nfs-utils-2.3.1/configure.ac
--- nfs-utils-2.3.1/configure.ac.orig 2018-05-22 13:56:01.906548548 -0400
+++ nfs-utils-2.3.1/configure.ac 2018-05-22 13:57:01.197437109 -0400
@@ -157,7 +157,7 @@ AC_ARG_WITH(rpcgen,
RPCGEN_PATH=$rpcgen_path
fi
AC_SUBST(RPCGEN_PATH)
- AM_CONDITIONAL(CONFIG_RPCGEN, [test "$RPCGEN_PATH" = ""])
+ AM_CONDITIONAL(CONFIG_RPCGEN, [test "$RPCGEN_PATH" = "NoBuild"])
AC_ARG_ENABLE(uuid,
[AC_HELP_STRING([--disable-uuid],
[Exclude uuid support to avoid buggy libblkid. @<:@default=no@:>@])],

444
nfs-utils-2.3.3-rc1.patch Normal file
View File

@ -0,0 +1,444 @@
diff --git a/configure.ac b/configure.ac
index 276dec3..4b698dd 100644
--- a/configure.ac
+++ b/configure.ac
@@ -157,7 +157,7 @@ AC_ARG_WITH(rpcgen,
RPCGEN_PATH=$rpcgen_path
fi
AC_SUBST(RPCGEN_PATH)
- AM_CONDITIONAL(CONFIG_RPCGEN, [test "$RPCGEN_PATH" = ""])
+ AM_CONDITIONAL(CONFIG_RPCGEN, [test "$RPCGEN_PATH" = "internal"])
AC_ARG_ENABLE(uuid,
[AC_HELP_STRING([--disable-uuid],
[Exclude uuid support to avoid buggy libblkid. @<:@default=no@:>@])],
diff --git a/support/export/client.c b/support/export/client.c
index 2346f99..baf59c8 100644
--- a/support/export/client.c
+++ b/support/export/client.c
@@ -482,8 +482,9 @@ add_name(char *old, const char *add)
else
cp = cp + strlen(cp);
}
- if (old) {
- strncpy(new, old, cp-old);
+ len = cp-old;
+ if (old && len > 0) {
+ strncpy(new, old, len);
new[cp-old] = 0;
} else {
new[0] = 0;
diff --git a/support/include/exportfs.h b/support/include/exportfs.h
index 8af47a8..4e0d9d1 100644
--- a/support/include/exportfs.h
+++ b/support/include/exportfs.h
@@ -97,7 +97,7 @@ typedef struct mexport {
struct mclient * m_client;
struct exportent m_export;
int m_exported; /* known to knfsd. */
- int m_xtabent : 1, /* xtab entry exists */
+ unsigned int m_xtabent : 1, /* xtab entry exists */
m_mayexport: 1, /* derived from xtabbed */
m_changed : 1, /* options (may) have changed */
m_warned : 1; /* warned about multiple exports
diff --git a/support/misc/file.c b/support/misc/file.c
index 63597df..4065376 100644
--- a/support/misc/file.c
+++ b/support/misc/file.c
@@ -96,7 +96,7 @@ generic_setup_basedir(const char *progname, const char *parentdir, char *base,
}
/* Ensure we have a clean directory pathname */
- strncpy(buf, parentdir, sizeof(buf));
+ strncpy(buf, parentdir, sizeof(buf)-1);
path = dirname(buf);
if (*path == '.') {
(void)fprintf(stderr, "%s: Unusable directory %s",
diff --git a/support/nfsidmap/umich_ldap.c b/support/nfsidmap/umich_ldap.c
index 0e31b1c..b661110 100644
--- a/support/nfsidmap/umich_ldap.c
+++ b/support/nfsidmap/umich_ldap.c
@@ -1125,9 +1125,9 @@ umichldap_init(void)
/* Verify required information is supplied */
if (server_in == NULL || strlen(server_in) == 0)
- strncat(missing_msg, "LDAP_server ", sizeof(missing_msg));
+ strncat(missing_msg, "LDAP_server ", sizeof(missing_msg)-1);
if (ldap_info.base == NULL || strlen(ldap_info.base) == 0)
- strncat(missing_msg, "LDAP_base ", sizeof(missing_msg));
+ strncat(missing_msg, "LDAP_base ", sizeof(missing_msg)-1);
if (strlen(missing_msg) != 0) {
IDMAP_LOG(0, ("umichldap_init: Missing required information: "
"%s", missing_msg));
diff --git a/utils/gssd/gssd.c b/utils/gssd/gssd.c
index 2c14e5f..7b21ee2 100644
--- a/utils/gssd/gssd.c
+++ b/utils/gssd/gssd.c
@@ -279,16 +279,16 @@ gssd_read_service_info(int dirfd, struct clnt_info *clp)
* (commit bf19aacecbeebccb2c3d150a8bd9416b7dba81fe)
*/
numfields = fscanf(info,
- "RPC server: %ms\n"
- "service: %ms (%d) version %d\n"
- "address: %ms\n"
- "protocol: %ms\n"
- "port: %ms\n",
- &server,
- &service, &program, &version,
- &address,
- &protoname,
- &port);
+ "RPC server: %s\n"
+ "service: %s (%d) version %d\n"
+ "address: %s\n"
+ "protocol: %s\n"
+ "port: %s\n",
+ (char *)&server,
+ (char *)&service, &program, &version,
+ (char *)&address,
+ (char *)&protoname,
+ (char *)&port);
switch (numfields) {
diff --git a/utils/gssd/gssd_proc.c b/utils/gssd/gssd_proc.c
index ce73777..8767e26 100644
--- a/utils/gssd/gssd_proc.c
+++ b/utils/gssd/gssd_proc.c
@@ -520,8 +520,9 @@ out:
}
static AUTH *
-krb5_use_machine_creds(struct clnt_info *clp, uid_t uid, char *tgtname,
- char *service, CLIENT **rpc_clnt)
+krb5_use_machine_creds(struct clnt_info *clp, uid_t uid,
+ char *srchost, char *tgtname, char *service,
+ CLIENT **rpc_clnt)
{
AUTH *auth = NULL;
char **credlist = NULL;
@@ -534,7 +535,7 @@ krb5_use_machine_creds(struct clnt_info *clp, uid_t uid, char *tgtname,
do {
gssd_refresh_krb5_machine_credential(clp->servername, NULL,
- service);
+ service, srchost);
/*
* Get a list of credential cache names and try each
* of them until one works or we've tried them all
@@ -594,8 +595,8 @@ out:
* context on behalf of the kernel
*/
static void
-process_krb5_upcall(struct clnt_info *clp, uid_t uid, int fd, char *tgtname,
- char *service)
+process_krb5_upcall(struct clnt_info *clp, uid_t uid, int fd, char *srchost,
+ char *tgtname, char *service)
{
CLIENT *rpc_clnt = NULL;
AUTH *auth = NULL;
@@ -643,7 +644,7 @@ process_krb5_upcall(struct clnt_info *clp, uid_t uid, int fd, char *tgtname,
if (auth == NULL) {
if (uid == 0 && (root_uses_machine_creds == 1 ||
service != NULL)) {
- auth = krb5_use_machine_creds(clp, uid, tgtname,
+ auth = krb5_use_machine_creds(clp, uid, srchost, tgtname,
service, &rpc_clnt);
if (auth == NULL)
goto out_return_error;
@@ -714,7 +715,7 @@ handle_krb5_upcall(struct clnt_upcall_info *info)
printerr(2, "\n%s: uid %d (%s)\n", __func__, info->uid, clp->relpath);
- process_krb5_upcall(clp, info->uid, clp->krb5_fd, NULL, NULL);
+ process_krb5_upcall(clp, info->uid, clp->krb5_fd, NULL, NULL, NULL);
free(info);
}
@@ -728,11 +729,12 @@ handle_gssd_upcall(struct clnt_upcall_info *info)
char *uidstr = NULL;
char *target = NULL;
char *service = NULL;
+ char *srchost = NULL;
char *enctypes = NULL;
char *upcall_str;
char *pbuf = info->lbuf;
- printerr(2, "\n%s: '%s' (%s)\n", __func__, info->lbuf, clp->relpath);
+ printerr(2, "%s: '%s' (%s)\n", __func__, info->lbuf, clp->relpath);
upcall_str = strdup(info->lbuf);
if (upcall_str == NULL) {
@@ -751,6 +753,8 @@ handle_gssd_upcall(struct clnt_upcall_info *info)
target = p + strlen("target=");
else if (!strncmp(p, "service=", strlen("service=")))
service = p + strlen("service=");
+ else if (!strncmp(p, "srchost=", strlen("srchost=")))
+ srchost = p + strlen("srchost=");
}
if (!mech || strlen(mech) < 1) {
@@ -802,7 +806,7 @@ handle_gssd_upcall(struct clnt_upcall_info *info)
}
if (strcmp(mech, "krb5") == 0 && clp->servername)
- process_krb5_upcall(clp, uid, clp->gssd_fd, target, service);
+ process_krb5_upcall(clp, uid, clp->gssd_fd, srchost, target, service);
else {
if (clp->servername)
printerr(0, "WARNING: handle_gssd_upcall: "
@@ -815,4 +819,3 @@ out_nomem:
free(info);
return;
}
-
diff --git a/utils/gssd/krb5_util.c b/utils/gssd/krb5_util.c
index b342b06..eba1aac 100644
--- a/utils/gssd/krb5_util.c
+++ b/utils/gssd/krb5_util.c
@@ -757,7 +757,8 @@ gssd_search_krb5_keytab(krb5_context context, krb5_keytab kt,
* the server hostname.
*/
static int
-find_keytab_entry(krb5_context context, krb5_keytab kt, const char *tgtname,
+find_keytab_entry(krb5_context context, krb5_keytab kt,
+ const char *srchost, const char *tgtname,
krb5_keytab_entry *kte, const char **svcnames)
{
krb5_error_code code;
@@ -781,7 +782,9 @@ find_keytab_entry(krb5_context context, krb5_keytab kt, const char *tgtname,
goto out;
/* Get full local hostname */
- if (gethostname(myhostname, sizeof(myhostname)) == -1) {
+ if (srchost) {
+ strcpy(myhostname, srchost);
+ } else if (gethostname(myhostname, sizeof(myhostname)) == -1) {
retval = errno;
k5err = gssd_k5_err_msg(context, retval);
printerr(1, "%s while getting local hostname\n", k5err);
@@ -807,10 +810,12 @@ find_keytab_entry(krb5_context context, krb5_keytab kt, const char *tgtname,
myhostad[i+1] = 0;
}
- retval = get_full_hostname(myhostname, myhostname, sizeof(myhostname));
- if (retval) {
- /* Don't use myhostname */
- myhostname[0] = 0;
+ if (!srchost) {
+ retval = get_full_hostname(myhostname, myhostname, sizeof(myhostname));
+ if (retval) {
+ /* Don't use myhostname */
+ myhostname[0] = 0;
+ }
}
code = krb5_get_default_realm(context, &default_realm);
@@ -1140,7 +1145,7 @@ gssd_get_krb5_machine_cred_list(char ***list)
if (ple->ccname) {
/* Make sure cred is up-to-date before returning it */
retval = gssd_refresh_krb5_machine_credential(NULL, ple,
- NULL);
+ NULL, NULL);
if (retval)
continue;
if (i + 1 > listsize) {
@@ -1231,7 +1236,7 @@ gssd_destroy_krb5_machine_creds(void)
int
gssd_refresh_krb5_machine_credential(char *hostname,
struct gssd_k5_kt_princ *ple,
- char *service)
+ char *service, char *srchost)
{
krb5_error_code code = 0;
krb5_context context;
@@ -1240,6 +1245,9 @@ gssd_refresh_krb5_machine_credential(char *hostname,
char *k5err = NULL;
const char *svcnames[] = { "$", "root", "nfs", "host", NULL };
+ printerr(2, "%s: hostname=%s ple=%p service=%s srchost=%s\n",
+ __func__, hostname, ple, service, srchost);
+
/*
* If a specific service name was specified, use it.
* Otherwise, use the default list.
@@ -1270,7 +1278,8 @@ gssd_refresh_krb5_machine_credential(char *hostname,
if (ple == NULL) {
krb5_keytab_entry kte;
- code = find_keytab_entry(context, kt, hostname, &kte, svcnames);
+ code = find_keytab_entry(context, kt, srchost, hostname,
+ &kte, svcnames);
if (code) {
printerr(0, "ERROR: %s: no usable keytab entry found "
"in keytab %s for connection with host %s\n",
diff --git a/utils/gssd/krb5_util.h b/utils/gssd/krb5_util.h
index e3bbb07..b000b44 100644
--- a/utils/gssd/krb5_util.h
+++ b/utils/gssd/krb5_util.h
@@ -30,7 +30,7 @@ void gssd_free_krb5_machine_cred_list(char **list);
void gssd_destroy_krb5_machine_creds(void);
int gssd_refresh_krb5_machine_credential(char *hostname,
struct gssd_k5_kt_princ *ple,
- char *service);
+ char *service, char *srchost);
char *gssd_k5_err_msg(krb5_context context, krb5_error_code code);
void gssd_k5_get_default_realm(char **def_realm);
diff --git a/utils/idmapd/idmapd.c b/utils/idmapd/idmapd.c
index b87c4dd..4811e0f 100644
--- a/utils/idmapd/idmapd.c
+++ b/utils/idmapd/idmapd.c
@@ -310,7 +310,7 @@ main(int argc, char **argv)
if (!serverstart && !clientstart)
errx(1, "it is illegal to specify both -C and -S");
- strncat(pipefsdir, "/nfs", sizeof(pipefsdir));
+ strncat(pipefsdir, "/nfs", sizeof(pipefsdir)-1);
daemon_init(fg);
@@ -923,7 +923,8 @@ static int
getfield(char **bpp, char *fld, size_t fldsz)
{
char *bp;
- int val, n;
+ unsigned int val;
+ int n;
while ((bp = strsep(bpp, " ")) != NULL && bp[0] == '\0')
;
diff --git a/utils/mount/nfs4mount.c b/utils/mount/nfs4mount.c
index 89629ed..3e4f1e2 100644
--- a/utils/mount/nfs4mount.c
+++ b/utils/mount/nfs4mount.c
@@ -218,7 +218,7 @@ int nfs4mount(const char *spec, const char *node, int flags,
goto fail;
}
if (running_bg)
- strncpy(new_opts, old_opts, sizeof(new_opts));
+ strncpy(new_opts, old_opts, sizeof(new_opts)-1);
else
snprintf(new_opts, sizeof(new_opts), "%s%saddr=%s",
old_opts, *old_opts ? "," : "", s);
diff --git a/utils/mount/nfsmount.c b/utils/mount/nfsmount.c
index ae4a3da..952a755 100644
--- a/utils/mount/nfsmount.c
+++ b/utils/mount/nfsmount.c
@@ -828,7 +828,7 @@ noauth_flavors:
data.fd = fsock;
memcpy((char *) &data.addr, (char *) nfs_saddr, sizeof(data.addr));
- strncpy(data.hostname, hostname, sizeof(data.hostname));
+ strncpy(data.hostname, hostname, sizeof(data.hostname)-1);
out_ok:
/* Ensure we have enough padding for the following strcat()s */
diff --git a/utils/mountd/mountd.c b/utils/mountd/mountd.c
index 4c68702..086c39b 100644
--- a/utils/mountd/mountd.c
+++ b/utils/mountd/mountd.c
@@ -702,7 +702,7 @@ main(int argc, char **argv)
else
NFSCTL_TCPUNSET(_rpcprotobits);
for (vers = 2; vers <= 4; vers++) {
- char tag[10];
+ char tag[20];
sprintf(tag, "vers%d", vers);
if (conf_get_bool("nfsd", tag, NFSCTL_VERISSET(nfs_version, vers)))
NFSCTL_VERSET(nfs_version, vers);
diff --git a/utils/mountd/v4root.c b/utils/mountd/v4root.c
index f978f4c..d735dbf 100644
--- a/utils/mountd/v4root.c
+++ b/utils/mountd/v4root.c
@@ -92,7 +92,7 @@ v4root_create(char *path, nfs_export *export)
dupexportent(&eep, &pseudo_root.m_export);
eep.e_hostname = curexp->e_hostname;
- strncpy(eep.e_path, path, sizeof(eep.e_path));
+ strncpy(eep.e_path, path, sizeof(eep.e_path)-1);
if (strcmp(path, "/") != 0)
eep.e_flags &= ~NFSEXP_FSID;
set_pseudofs_security(&eep, curexp->e_flags);
diff --git a/utils/nfsd/nfsd.c b/utils/nfsd/nfsd.c
index 2303a5d..f048631 100644
--- a/utils/nfsd/nfsd.c
+++ b/utils/nfsd/nfsd.c
@@ -98,7 +98,7 @@ main(int argc, char **argv)
else
NFSCTL_TCPUNSET(protobits);
for (i = 2; i <= 4; i++) {
- char tag[10];
+ char tag[20];
sprintf(tag, "vers%d", i);
if (conf_get_bool("nfsd", tag, NFSCTL_VERISSET(versbits, i)))
NFSCTL_VERSET(versbits, i);
diff --git a/utils/nfsidmap/nfsidmap.c b/utils/nfsidmap/nfsidmap.c
index 374bc5d..d3967a3 100644
--- a/utils/nfsidmap/nfsidmap.c
+++ b/utils/nfsidmap/nfsidmap.c
@@ -283,7 +283,7 @@ static int key_invalidate(char *keystr, int keymask)
{
FILE *fp;
char buf[BUFSIZ], *ptr;
- key_serial_t key;
+ unsigned int key;
int mask;
xlog_syslog(0);
diff --git a/utils/nfsstat/nfsstat.c b/utils/nfsstat/nfsstat.c
index c779053..8fccea7 100644
--- a/utils/nfsstat/nfsstat.c
+++ b/utils/nfsstat/nfsstat.c
@@ -1013,7 +1013,7 @@ mounts(const char *name)
* be a fatal error -- it usually means the module isn't loaded.
*/
if ((fp = fopen(name, "r")) == NULL) {
- fprintf(stderr, "Warning: %s: %m\n", name);
+ fprintf(stderr, "Warning: %s: %s\n", name, strerror(errno));
return 0;
}
@@ -1089,8 +1089,8 @@ out:
fclose(fp);
if (err) {
if (!other_opt) {
- fprintf(stderr, "Error: No %s Stats (%s: %m). \n",
- label, file);
+ fprintf(stderr, "Error: No %s Stats (%s: %s). \n",
+ label, file, strerror(errno));
exit(2);
}
*opt = 0;
diff --git a/utils/statd/sm-notify.c b/utils/statd/sm-notify.c
index 6d19ec1..7a48473 100644
--- a/utils/statd/sm-notify.c
+++ b/utils/statd/sm-notify.c
@@ -569,7 +569,7 @@ usage: fprintf(stderr,
if (name == NULL)
exit(1);
- strncpy(nsm_hostname, name, sizeof(nsm_hostname));
+ strncpy(nsm_hostname, name, sizeof(nsm_hostname)-1);
free(name);
}
diff --git a/utils/statd/statd.c b/utils/statd/statd.c
index 563a272..2cc6cf3 100644
--- a/utils/statd/statd.c
+++ b/utils/statd/statd.c
@@ -231,11 +231,12 @@ static void set_nlm_port(char *type, int port)
}
if (fd >= 0) {
if (write(fd, nbuf, strlen(nbuf)) != (ssize_t)strlen(nbuf))
- fprintf(stderr, "%s: fail to set NLM %s port: %m\n",
- name_p, type);
+ fprintf(stderr, "%s: fail to set NLM %s port: %s\n",
+ name_p, type, strerror(errno));
close(fd);
} else
- fprintf(stderr, "%s: failed to open %s: %m\n", name_p, pathbuf);
+ fprintf(stderr, "%s: failed to open %s: %s\n",
+ name_p, pathbuf, strerror(errno));
}
/*

View File

@ -2,7 +2,7 @@ Summary: NFS utilities and supporting clients and daemons for the kernel NFS ser
Name: nfs-utils
URL: http://linux-nfs.org/
Version: 2.3.2
Release: 0%{?dist}
Release: 0.rc1%{?dist}
Epoch: 1
# group all 32bit related archs
@ -15,12 +15,13 @@ Source3: nfs-utils_env.sh
Source4: lockd.conf
Source5: 24-nfs-server.conf
Patch001: nfs-utils-2.3.3-rc1.patch
Patch100: nfs-utils-1.2.1-statdpath-man.patch
Patch101: nfs-utils-1.2.1-exp-subtree-warn-off.patch
Patch102: nfs-utils-1.2.5-idmap-errmsg.patch
Patch103: nfs-utils-2.1.1-nfs-config.patch
Patch104: nfs-utils-2.3.1-systemd-gssproxy-restart.patch
Patch105: nfs-utils-2.3.1-no-rpcgen.patch
Provides: exportfs = %{epoch}:%{version}-%{release}
Provides: nfsstat = %{epoch}:%{version}-%{release}
@ -308,6 +309,9 @@ fi
%{_libdir}/libnfsidmap.so
%changelog
* Thu Jun 7 2018 Steve Dickson <steved@redhat.com> 2.3.2-0-rc1
- Update to latest RC release: nfs-utils-2-3-3-rc1
* Thu May 24 2018 Steve Dickson <steved@redhat.com> 2.3.2-0
- Updated to latest upstream release: 2.3.2 (bz 1582341)