diff --git a/.cvsignore b/.cvsignore index bc37549..e852eba 100644 --- a/.cvsignore +++ b/.cvsignore @@ -13,3 +13,4 @@ nfs-utils-1.1.0.tar.bz2 nfs-utils-1.1.1.tar.bz2 nfs-utils-1.1.2.tar.bz2 nfs-utils-1.1.3.tar.bz2 +nfs-utils-1.1.4.tar.bz2 diff --git a/nfs-utils-1.1.0-smnotify-path.patch b/nfs-utils-1.1.0-smnotify-path.patch index 9dd28d2..9a20272 100644 --- a/nfs-utils-1.1.0-smnotify-path.patch +++ b/nfs-utils-1.1.0-smnotify-path.patch @@ -1,9 +1,9 @@ -diff -up nfs-utils-1.1.3/utils/statd/sm-notify.c.orig nfs-utils-1.1.3/utils/statd/sm-notify.c ---- nfs-utils-1.1.3/utils/statd/sm-notify.c.orig 2008-07-27 17:01:45.000000000 -0400 -+++ nfs-utils-1.1.3/utils/statd/sm-notify.c 2008-07-28 04:30:37.000000000 -0400 -@@ -26,11 +26,13 @@ - - #include "config.h" +diff -up nfs-utils-1.1.4/utils/statd/sm-notify.c.orig nfs-utils-1.1.4/utils/statd/sm-notify.c +--- nfs-utils-1.1.4/utils/statd/sm-notify.c.orig 2008-10-17 10:20:09.000000000 -0400 ++++ nfs-utils-1.1.4/utils/statd/sm-notify.c 2008-10-17 11:22:01.000000000 -0400 +@@ -28,11 +28,13 @@ + #include + #include +#define STATD_PATH_XTN "statd/" + @@ -17,9 +17,9 @@ diff -up nfs-utils-1.1.3/utils/statd/sm-notify.c.orig nfs-utils-1.1.3/utils/stat # endif #endif -diff -up nfs-utils-1.1.3/utils/statd/sm-notify.man.orig nfs-utils-1.1.3/utils/statd/sm-notify.man ---- nfs-utils-1.1.3/utils/statd/sm-notify.man.orig 2008-07-27 17:01:45.000000000 -0400 -+++ nfs-utils-1.1.3/utils/statd/sm-notify.man 2008-07-28 04:30:37.000000000 -0400 +diff -up nfs-utils-1.1.4/utils/statd/sm-notify.man.orig nfs-utils-1.1.4/utils/statd/sm-notify.man +--- nfs-utils-1.1.4/utils/statd/sm-notify.man.orig 2008-10-17 10:20:09.000000000 -0400 ++++ nfs-utils-1.1.4/utils/statd/sm-notify.man 2008-10-17 11:22:01.000000000 -0400 @@ -33,7 +33,7 @@ but this is configurable. For each NFS client or server machine to be monitored, .B rpc.statd diff --git a/nfs-utils-1.1.3-exportfs-uuid-nowarn.patch b/nfs-utils-1.1.3-exportfs-uuid-nowarn.patch deleted file mode 100644 index 4756fbd..0000000 --- a/nfs-utils-1.1.3-exportfs-uuid-nowarn.patch +++ /dev/null @@ -1,44 +0,0 @@ -commit ec16220910f0bf1bf2b8e1d50e78df7da11d8b1e -Author: David Woodhouse -Date: Thu Aug 28 11:07:53 2008 -0400 - - Stop exportfs warning about needing fsid, when we actually have one - - Signed-off-by: David Woodhouse - Signed-off-by: Steve Dickson - -diff --git a/utils/exportfs/exportfs.c b/utils/exportfs/exportfs.c -index 18dfe5a..fec2571 100644 ---- a/utils/exportfs/exportfs.c -+++ b/utils/exportfs/exportfs.c -@@ -12,6 +12,7 @@ - #include - #endif - -+#include - #include - #include - #include -@@ -388,6 +389,8 @@ validate_export(nfs_export *exp) - */ - struct stat stb; - char *path = exp->m_export.e_path; -+ struct statfs64 stf; -+ int fs_has_fsid = 0; - - if (stat(path, &stb) < 0) { - fprintf(stderr, "exportfs: Warning: %s does not exist\n", -@@ -403,7 +406,12 @@ validate_export(nfs_export *exp) - if (!can_test()) - return; - -- if ((exp->m_export.e_flags & NFSEXP_FSID) || exp->m_export.e_uuid) { -+ if (!statfs64(path, &stf) && -+ (stf.f_fsid.__val[0] || stf.f_fsid.__val[1])) -+ fs_has_fsid = 1; -+ -+ if ((exp->m_export.e_flags & NFSEXP_FSID) || exp->m_export.e_uuid || -+ fs_has_fsid) { - if ( !test_export(path, 1)) { - fprintf(stderr, "exportfs: Warning: %s does not " - "support NFS export.\n", diff --git a/nfs-utils-1.1.3-glibc22.patch b/nfs-utils-1.1.3-glibc22.patch deleted file mode 100644 index dd5a848..0000000 --- a/nfs-utils-1.1.3-glibc22.patch +++ /dev/null @@ -1,49 +0,0 @@ -commit 2d173a587a7dbee81ffaf246d044f384fb6487c8 -Author: Chuck Lever -Date: Thu Jul 31 05:24:18 2008 -0400 - - mount.nfs command: old glibc missing some flags - - Old versions of glibc (< 2.4) have a getaddrinfo(3) implementation, but - do not include public definitions of the AI_V4MAPPED, AI_ALL, and - AI_ADDRCONFIG flags because it was believed that these flags were not - standardized. However, these flags have standard definitions both in - POSIX 1003 and in RFCs, and were thus included in later releases of - glibc. - - To allow the mount.nfs command to build on systems with these older - versions of glibc, add conditional definitions for these flags in - utils/mount/network.c. - - Signed-off-by: Chuck Lever - Signed-off-by: Steve Dickson - -diff --git a/utils/mount/network.c b/utils/mount/network.c -index 75354a7..0023769 100644 ---- a/utils/mount/network.c -+++ b/utils/mount/network.c -@@ -48,6 +48,24 @@ - #include "mount_constants.h" - #include "network.h" - -+/* -+ * Earlier versions of glibc's /usr/include/netdb.h exclude these -+ * definitions because it was thought they were not part of a stable -+ * POSIX standard. However, they are defined by RFC 2553 and 3493 -+ * and in POSIX 1003.1-2001, so these definitions were added in later -+ * versions of netdb.h. -+ */ -+#ifndef AI_V4MAPPED -+#define AI_V4MAPPED 0x0008 /* IPv4-mapped addresses are acceptable. */ -+#endif /* AI_V4MAPPED */ -+#ifndef AI_ALL -+#define AI_ALL 0x0010 /* Return both IPv4 and IPv6 addresses. */ -+#endif /* AI_ALL */ -+#ifndef AI_ADDRCONFIG -+#define AI_ADDRCONFIG 0x0020 /* Use configuration of this host to choose \ -+ returned address type. */ -+#endif /* AI_ADDRCONFIG */ -+ - #define PMAP_TIMEOUT (10) - #define CONNECT_TIMEOUT (20) - #define MOUNT_TIMEOUT (30) diff --git a/nfs-utils-1.1.3-idmapd-rm-idmapconf.patch b/nfs-utils-1.1.3-idmapd-rm-idmapconf.patch deleted file mode 100644 index 4668d44..0000000 --- a/nfs-utils-1.1.3-idmapd-rm-idmapconf.patch +++ /dev/null @@ -1,28 +0,0 @@ -commit 83a8da644b553680e9d578843a6fa0fc9347af0e -Author: J. Bruce Fields -Date: Thu Aug 28 11:25:29 2008 -0400 - - Remove idmapd.conf - - The example idmapd.conf file is kept in libnfsidmap now, which is what's - responsible for parsing it anyway. - - Signed-off-by: J. Bruce Fields - Signed-off-by: Steve Dickson - -diff --git a/utils/idmapd/idmapd.conf b/utils/idmapd/idmapd.conf -deleted file mode 100644 -index acafd4b..0000000 ---- a/utils/idmapd/idmapd.conf -+++ /dev/null -@@ -1,10 +0,0 @@ --[General] -- --Verbosity = 0 --Pipefs-Directory = /var/lib/nfs/rpc_pipefs --Domain = localdomain -- --[Mapping] -- --Nobody-User = nobody --Nobody-Group = nobody diff --git a/nfs-utils-1.1.3-mountd-cleanup.patch b/nfs-utils-1.1.3-mountd-cleanup.patch deleted file mode 100644 index 4cb8c46..0000000 --- a/nfs-utils-1.1.3-mountd-cleanup.patch +++ /dev/null @@ -1,192 +0,0 @@ -commit 60107345a32982bb0ff9eb8a17f8f0edf0276a98 -Author: J. Bruce Fields -Date: Thu Aug 28 11:20:58 2008 -0400 - - Minor mountd.c cleanup - - I find it more readable to have the normal (non-error) case unindented, - and to keep conditionals relatively simple, as is the usual kernel - style. Fix some inconsistent indentation while we're there. - - Signed-off-by: J. Bruce Fields - Signed-off-by: Steve Dickson - -diff --git a/utils/mountd/mountd.c b/utils/mountd/mountd.c -index 0facf89..d5b8c0d 100644 ---- a/utils/mountd/mountd.c -+++ b/utils/mountd/mountd.c -@@ -175,9 +175,9 @@ killer (int sig) - static void - sig_hup (int sig) - { -- /* don't exit on SIGHUP */ -- xlog (L_NOTICE, "Received SIGHUP... Ignoring.\n", sig); -- return; -+ /* don't exit on SIGHUP */ -+ xlog (L_NOTICE, "Received SIGHUP... Ignoring.\n", sig); -+ return; - } - - bool_t -@@ -192,7 +192,8 @@ mount_mnt_1_svc(struct svc_req *rqstp, dirpath *path, fhstatus *res) - struct nfs_fh_len *fh; - - xlog(D_CALL, "MNT1(%s) called", *path); -- if ((fh = get_rootfh(rqstp, path, &res->fhs_status, 0)) != NULL) -+ fh = get_rootfh(rqstp, path, &res->fhs_status, 0); -+ if (fh) - memcpy(&res->fhstatus_u.fhs_fhandle, fh->fh_handle, 32); - return 1; - } -@@ -304,7 +305,8 @@ mount_pathconf_2_svc(struct svc_req *rqstp, dirpath *path, ppathcnf *res) - } - - /* Now authenticate the intruder... */ -- if (!(exp = auth_authenticate("pathconf", sin, p))) { -+ exp = auth_authenticate("pathconf", sin, p); -+ if (!exp) { - return 1; - } else if (stat(p, &stb) < 0) { - xlog(L_WARNING, "can't stat exported dir %s: %s", -@@ -344,18 +346,18 @@ mount_mnt_3_svc(struct svc_req *rqstp, dirpath *path, mountres3 *res) - * issue with older Linux clients, who inspect the list in reversed - * order. - */ -+ struct mountres3_ok *ok = &res->mountres3_u.mountinfo; - struct nfs_fh_len *fh; - - xlog(D_CALL, "MNT3(%s) called", *path); -- if ((fh = get_rootfh(rqstp, path, &res->fhs_status, 1)) != NULL) { -- struct mountres3_ok *ok = &res->mountres3_u.mountinfo; -- -- ok->fhandle.fhandle3_len = fh->fh_size; -- ok->fhandle.fhandle3_val = (char *)fh->fh_handle; -- ok->auth_flavors.auth_flavors_len -- = sizeof(flavors)/sizeof(flavors[0]); -- ok->auth_flavors.auth_flavors_val = flavors; -- } -+ fh = get_rootfh(rqstp, path, &res->fhs_status, 1); -+ if (!fh) -+ return 1; -+ -+ ok->fhandle.fhandle3_len = fh->fh_size; -+ ok->fhandle.fhandle3_val = (char *)fh->fh_handle; -+ ok->auth_flavors.auth_flavors_len = sizeof(flavors)/sizeof(flavors[0]); -+ ok->auth_flavors.auth_flavors_val = flavors; - return 1; - } - -@@ -366,6 +368,7 @@ get_rootfh(struct svc_req *rqstp, dirpath *path, mountstat3 *error, int v3) - (struct sockaddr_in *) svc_getcaller(rqstp->rq_xprt); - struct stat stb, estb; - nfs_export *exp; -+ struct nfs_fh_len *fh; - char rpath[MAXPATHLEN+1]; - char *p = *path; - -@@ -382,57 +385,65 @@ get_rootfh(struct svc_req *rqstp, dirpath *path, mountstat3 *error, int v3) - } - - /* Now authenticate the intruder... */ -- if (!(exp = auth_authenticate("mount", sin, p))) { -+ exp = auth_authenticate("mount", sin, p); -+ if (!exp) { - *error = NFSERR_ACCES; -- } else if (stat(p, &stb) < 0) { -+ return NULL; -+ } -+ if (stat(p, &stb) < 0) { - xlog(L_WARNING, "can't stat exported dir %s: %s", - p, strerror(errno)); - if (errno == ENOENT) - *error = NFSERR_NOENT; - else - *error = NFSERR_ACCES; -- } else if (!S_ISDIR(stb.st_mode) && !S_ISREG(stb.st_mode)) { -+ return NULL; -+ } -+ if (!S_ISDIR(stb.st_mode) && !S_ISREG(stb.st_mode)) { - xlog(L_WARNING, "%s is not a directory or regular file", p); - *error = NFSERR_NOTDIR; -- } else if (stat(exp->m_export.e_path, &estb) < 0) { -+ return NULL; -+ } -+ if (stat(exp->m_export.e_path, &estb) < 0) { - xlog(L_WARNING, "can't stat export point %s: %s", - p, strerror(errno)); - *error = NFSERR_NOENT; -- } else if (estb.st_dev != stb.st_dev -- && (!new_cache || !(exp->m_export.e_flags & NFSEXP_CROSSMOUNT)) -- ) { -+ return NULL; -+ } -+ if (estb.st_dev != stb.st_dev -+ && (!new_cache -+ || !(exp->m_export.e_flags & NFSEXP_CROSSMOUNT))) { - xlog(L_WARNING, "request to export directory %s below nearest filesystem %s", - p, exp->m_export.e_path); - *error = NFSERR_ACCES; -- } else if (exp->m_export.e_mountpoint && -+ return NULL; -+ } -+ if (exp->m_export.e_mountpoint && - !is_mountpoint(exp->m_export.e_mountpoint[0]? - exp->m_export.e_mountpoint: - exp->m_export.e_path)) { - xlog(L_WARNING, "request to export an unmounted filesystem: %s", - p); - *error = NFSERR_NOENT; -- } else if (new_cache) { -+ return NULL; -+ } -+ -+ if (new_cache) { - /* This will be a static private nfs_export with just one - * address. We feed it to kernel then extract the filehandle, - * - */ -- struct nfs_fh_len *fh; - - if (cache_export(exp, p)) { - *error = NFSERR_ACCES; - return NULL; - } - fh = cache_get_filehandle(exp, v3?64:32, p); -- if (fh == NULL) -+ if (fh == NULL) { - *error = NFSERR_ACCES; -- else { -- *error = NFS_OK; -- mountlist_add(inet_ntoa(sin->sin_addr), p); -+ return NULL; - } -- return fh; - } else { -- struct nfs_fh_len *fh; -- - if (exp->m_exported<1) - export_export(exp); - if (!exp->m_xtabent) -@@ -448,15 +459,15 @@ get_rootfh(struct svc_req *rqstp, dirpath *path, mountstat3 *error, int v3) - fh = getfh_old ((struct sockaddr *) sin, - stb.st_dev, stb.st_ino); - } -- if (fh != NULL) { -- mountlist_add(inet_ntoa(sin->sin_addr), p); -- *error = NFS_OK; -- return fh; -+ if (fh == NULL) { -+ xlog(L_WARNING, "getfh failed: %s", strerror(errno)); -+ *error = NFSERR_ACCES; -+ return NULL; - } -- xlog(L_WARNING, "getfh failed: %s", strerror(errno)); -- *error = NFSERR_ACCES; - } -- return NULL; -+ *error = NFS_OK; -+ mountlist_add(inet_ntoa(sin->sin_addr), p); -+ return fh; - } - - static exports diff --git a/nfs-utils-1.1.3-mountd-gids.patch b/nfs-utils-1.1.3-mountd-gids.patch deleted file mode 100644 index 63ecc94..0000000 --- a/nfs-utils-1.1.3-mountd-gids.patch +++ /dev/null @@ -1,29 +0,0 @@ -commit 86c3a79a108091fe08869a887438cc2d4e1126ed -Author: Neil Brown -Date: Wed Aug 27 16:30:19 2008 -0400 - - mount issue with Mac OSX and --manage-gids, client hangs - - Make sure are zero len group list is sent down to the - kernel when the gids do not exist on the server. - - Tested-by: Alex Samad - Signed-off-by: Neil Brown - Signed-off-by: Steve Dickson - -diff --git a/utils/mountd/cache.c b/utils/mountd/cache.c -index f555dcc..609c6e3 100644 ---- a/utils/mountd/cache.c -+++ b/utils/mountd/cache.c -@@ -158,8 +158,10 @@ void auth_unix_gid(FILE *f) - qword_printint(f, ngroups); - for (i=0; i -Date: Thu Aug 28 11:23:05 2008 -0400 - - Determine supported pseudoflavors from export - - Instead of using a static list of supported flavors, we should be taking - the list from the export. - - Signed-off-by: J. Bruce Fields - Signed-off-by: Steve Dickson - -diff --git a/utils/mountd/mountd.c b/utils/mountd/mountd.c -index d5b8c0d..6adb68f 100644 ---- a/utils/mountd/mountd.c -+++ b/utils/mountd/mountd.c -@@ -26,6 +26,7 @@ - #include "misc.h" - #include "mountd.h" - #include "rpcmisc.h" -+#include "pseudoflavors.h" - - extern void cache_open(void); - extern struct nfs_fh_len *cache_get_filehandle(nfs_export *exp, int len, char *p); -@@ -35,7 +36,7 @@ extern void my_svc_run(void); - - static void usage(const char *, int exitcode); - static exports get_exportlist(void); --static struct nfs_fh_len *get_rootfh(struct svc_req *, dirpath *, mountstat3 *, int v3); -+static struct nfs_fh_len *get_rootfh(struct svc_req *, dirpath *, nfs_export **, mountstat3 *, int v3); - - int reverse_resolve = 0; - int new_cache = 0; -@@ -192,7 +193,7 @@ mount_mnt_1_svc(struct svc_req *rqstp, dirpath *path, fhstatus *res) - struct nfs_fh_len *fh; - - xlog(D_CALL, "MNT1(%s) called", *path); -- fh = get_rootfh(rqstp, path, &res->fhs_status, 0); -+ fh = get_rootfh(rqstp, path, NULL, &res->fhs_status, 0); - if (fh) - memcpy(&res->fhstatus_u.fhs_fhandle, fh->fh_handle, 32); - return 1; -@@ -330,39 +331,57 @@ mount_pathconf_2_svc(struct svc_req *rqstp, dirpath *path, ppathcnf *res) - } - - /* -+ * We should advertise the preferred flavours first. (See RFC 2623 -+ * section 2.7.) We leave that to the administrator, by advertising -+ * flavours in the order they were listed in /etc/exports. AUTH_NULL is -+ * dropped from the list to avoid backward compatibility issue with -+ * older Linux clients, who inspect the list in reversed order. -+ * -+ * XXX: It might be more helpful to rearrange these so that flavors -+ * giving more access (as determined from readonly and id-squashing -+ * options) come first. (If we decide to do that we should probably do -+ * that when reading the exports rather than here.) -+ */ -+static void set_authflavors(struct mountres3_ok *ok, nfs_export *exp) -+{ -+ struct sec_entry *s; -+ static int flavors[SECFLAVOR_COUNT]; -+ int i = 0; -+ -+ for (s = exp->m_export.e_secinfo; s->flav; s++) { -+ if (s->flav->fnum == AUTH_NULL) -+ continue; -+ flavors[i] = s->flav->fnum; -+ i++; -+ } -+ ok->auth_flavors.auth_flavors_val = flavors; -+ ok->auth_flavors.auth_flavors_len = i; -+} -+ -+/* - * NFSv3 MOUNT procedure - */ - bool_t - mount_mnt_3_svc(struct svc_req *rqstp, dirpath *path, mountres3 *res) - { --#define AUTH_GSS_KRB5 390003 --#define AUTH_GSS_KRB5I 390004 --#define AUTH_GSS_KRB5P 390005 -- static int flavors[] = { AUTH_UNIX, AUTH_GSS_KRB5, AUTH_GSS_KRB5I, AUTH_GSS_KRB5P}; -- /* -- * We should advertise the preferred flavours first. (See RFC 2623 -- * section 2.7.) AUTH_UNIX is arbitrarily ranked over the GSS's. -- * AUTH_NULL is dropped from the list to avoid backward compatibility -- * issue with older Linux clients, who inspect the list in reversed -- * order. -- */ - struct mountres3_ok *ok = &res->mountres3_u.mountinfo; -+ nfs_export *exp; - struct nfs_fh_len *fh; - - xlog(D_CALL, "MNT3(%s) called", *path); -- fh = get_rootfh(rqstp, path, &res->fhs_status, 1); -+ fh = get_rootfh(rqstp, path, &exp, &res->fhs_status, 1); - if (!fh) - return 1; - - ok->fhandle.fhandle3_len = fh->fh_size; - ok->fhandle.fhandle3_val = (char *)fh->fh_handle; -- ok->auth_flavors.auth_flavors_len = sizeof(flavors)/sizeof(flavors[0]); -- ok->auth_flavors.auth_flavors_val = flavors; -+ set_authflavors(ok, exp); - return 1; - } - - static struct nfs_fh_len * --get_rootfh(struct svc_req *rqstp, dirpath *path, mountstat3 *error, int v3) -+get_rootfh(struct svc_req *rqstp, dirpath *path, nfs_export **expret, -+ mountstat3 *error, int v3) - { - struct sockaddr_in *sin = - (struct sockaddr_in *) svc_getcaller(rqstp->rq_xprt); -@@ -467,6 +486,8 @@ get_rootfh(struct svc_req *rqstp, dirpath *path, mountstat3 *error, int v3) - } - *error = NFS_OK; - mountlist_add(inet_ntoa(sin->sin_addr), p); -+ if (expret) -+ *expret = exp; - return fh; - } - diff --git a/nfs-utils-1.1.3-mountd-rm-m_path.patch b/nfs-utils-1.1.3-mountd-rm-m_path.patch deleted file mode 100644 index cea8141..0000000 --- a/nfs-utils-1.1.3-mountd-rm-m_path.patch +++ /dev/null @@ -1,184 +0,0 @@ -commit 124b74413e943ab9c02cdff2832d1d81dc9fda87 -Author: J. Bruce Fields -Date: Thu Aug 28 11:17:34 2008 -0400 - - Remove redundant m_path field - - Contrary to the comment above its definition, the field m_path always - has the same value as e_path: the *only* modifications of m_path are all - of the form: - - strncpy(exp->m_export.m_path, exp->m_export.e_path, - sizeof (exp->m_export.m_path) - 1); - exp->m_export.m_path[sizeof (exp->m_export.m_path) - 1] = '\0'; - - So m_path is always just a copy of e_path. In places where we need to - store a path to a submount of a CROSSMNT-exported filesystem, as in - cache.c, we just use a local variable. - - Signed-off-by: J. Bruce Fields - Signed-off-by: Steve Dickson - -diff --git a/support/export/export.c b/support/export/export.c -index 93c58b6..14af112 100644 ---- a/support/export/export.c -+++ b/support/export/export.c -@@ -255,15 +255,3 @@ export_freeall(void) - } - client_freeall(); - } -- --void --export_reset(nfs_export *exp) --{ -- if (!exp) -- return; -- -- /* Restore m_path. */ -- strncpy(exp->m_export.m_path, exp->m_export.e_path, -- sizeof (exp->m_export.m_path) - 1); -- exp->m_export.m_path[sizeof (exp->m_export.m_path) - 1] = '\0'; --} -diff --git a/support/export/nfsctl.c b/support/export/nfsctl.c -index 32d92bd..e2877b9 100644 ---- a/support/export/nfsctl.c -+++ b/support/export/nfsctl.c -@@ -89,11 +89,11 @@ expsetup(struct nfsctl_export *exparg, nfs_export *exp, int unexport) - nfs_client *clp = exp->m_client; - struct stat stb; - -- if (stat(exp->m_export.m_path, &stb) < 0) -+ if (stat(exp->m_export.e_path, &stb) < 0) - return 0; - - memset(exparg, 0, sizeof(*exparg)); -- strncpy(exparg->ex_path, exp->m_export.m_path, -+ strncpy(exparg->ex_path, exp->m_export.e_path, - sizeof (exparg->ex_path) - 1); - strncpy(exparg->ex_client, clp->m_hostname, - sizeof (exparg->ex_client) - 1); -diff --git a/support/include/nfslib.h b/support/include/nfslib.h -index 422b012..a51d79d 100644 ---- a/support/include/nfslib.h -+++ b/support/include/nfslib.h -@@ -67,11 +67,6 @@ struct sec_entry { - struct exportent { - char * e_hostname; - char e_path[NFS_MAXPATHLEN+1]; -- /* The mount path may be different from the exported path due -- to submount. It may change for every mount. The idea is we -- set m_path every time when we process a mount. We should not -- use it for anything else. */ -- char m_path[NFS_MAXPATHLEN+1]; - int e_flags; - int e_anonuid; - int e_anongid; -diff --git a/support/nfs/exports.c b/support/nfs/exports.c -index 334c08e..1aaebf4 100644 ---- a/support/nfs/exports.c -+++ b/support/nfs/exports.c -@@ -127,8 +127,6 @@ getexportent(int fromkernel, int fromexports) - if (ok <= 0) - return NULL; - -- strncpy (def_ee.m_path, def_ee.e_path, sizeof (def_ee.m_path) - 1); -- def_ee.m_path [sizeof (def_ee.m_path) - 1] = '\0'; - ok = getexport(exp, sizeof(exp)); - } - if (ok < 0) { -@@ -187,8 +185,6 @@ getexportent(int fromkernel, int fromexports) - rpath[sizeof (rpath) - 1] = '\0'; - strncpy(ee.e_path, rpath, sizeof (ee.e_path) - 1); - ee.e_path[sizeof (ee.e_path) - 1] = '\0'; -- strncpy (ee.m_path, ee.e_path, sizeof (ee.m_path) - 1); -- ee.m_path [sizeof (ee.m_path) - 1] = '\0'; - } - - return ⅇ -@@ -360,8 +356,6 @@ mkexportent(char *hname, char *path, char *options) - } - strncpy(ee.e_path, path, sizeof (ee.e_path)); - ee.e_path[sizeof (ee.e_path) - 1] = '\0'; -- strncpy (ee.m_path, ee.e_path, sizeof (ee.m_path) - 1); -- ee.m_path [sizeof (ee.m_path) - 1] = '\0'; - if (parseopts(options, &ee, 0, NULL) < 0) - return NULL; - return ⅇ -diff --git a/utils/mountd/mountd.c b/utils/mountd/mountd.c -index 8137f7f..0facf89 100644 ---- a/utils/mountd/mountd.c -+++ b/utils/mountd/mountd.c -@@ -230,9 +230,6 @@ mount_umnt_1_svc(struct svc_req *rqstp, dirpath *argp, void *resp) - return 1; - } - -- if (!new_cache) -- export_reset (exp); -- - mountlist_del(inet_ntoa(sin->sin_addr), p); - return 1; - } -@@ -312,7 +309,6 @@ mount_pathconf_2_svc(struct svc_req *rqstp, dirpath *path, ppathcnf *res) - } else if (stat(p, &stb) < 0) { - xlog(L_WARNING, "can't stat exported dir %s: %s", - p, strerror(errno)); -- export_reset (exp); - return 1; - } - -@@ -328,8 +324,6 @@ mount_pathconf_2_svc(struct svc_req *rqstp, dirpath *path, ppathcnf *res) - res->pc_mask[0] = 0; - res->pc_mask[1] = 0; - -- export_reset (exp); -- - return 1; - } - -@@ -457,13 +451,11 @@ get_rootfh(struct svc_req *rqstp, dirpath *path, mountstat3 *error, int v3) - if (fh != NULL) { - mountlist_add(inet_ntoa(sin->sin_addr), p); - *error = NFS_OK; -- export_reset (exp); - return fh; - } - xlog(L_WARNING, "getfh failed: %s", strerror(errno)); - *error = NFSERR_ACCES; - } -- export_reset (exp); - return NULL; - } - -@@ -499,14 +491,14 @@ get_exportlist(void) - for (i = 0; i < MCL_MAXTYPES; i++) { - for (exp = exportlist[i]; exp; exp = exp->m_next) { - for (e = elist; e != NULL; e = e->ex_next) { -- if (!strcmp(exp->m_export.m_path, e->ex_dir)) -+ if (!strcmp(exp->m_export.e_path, e->ex_dir)) - break; - } - if (!e) { - e = (struct exportnode *) xmalloc(sizeof(*e)); - e->ex_next = elist; - e->ex_groups = NULL; -- e->ex_dir = xstrdup(exp->m_export.m_path); -+ e->ex_dir = xstrdup(exp->m_export.e_path); - elist = e; - } - -diff --git a/utils/mountd/rmtab.c b/utils/mountd/rmtab.c -index e8aff5a..5787ed6 100644 ---- a/utils/mountd/rmtab.c -+++ b/utils/mountd/rmtab.c -@@ -162,10 +162,8 @@ mountlist_del_all(struct sockaddr_in *sin) - } - while ((rep = getrmtabent(1, NULL)) != NULL) { - if (strcmp(rep->r_client, hp->h_name) == 0 && -- (exp = auth_authenticate("umountall", sin, rep->r_path))) { -- export_reset(exp); -+ (exp = auth_authenticate("umountall", sin, rep->r_path))) - continue; -- } - fputrmtabent(fp, rep, NULL); - } - if (slink_safe_rename(_PATH_RMTABTMP, _PATH_RMTAB) < 0) { diff --git a/nfs-utils-1.1.3-mountd-uuid-explicit.patch b/nfs-utils-1.1.3-mountd-uuid-explicit.patch deleted file mode 100644 index 1decc02..0000000 --- a/nfs-utils-1.1.3-mountd-uuid-explicit.patch +++ /dev/null @@ -1,44 +0,0 @@ -commit 0ae97c5b87a56870e74a74ae50aeb2ae0e496907 -Author: David Woodhouse -Date: Thu Aug 28 10:29:54 2008 -0400 - - Fix handling of explicit uuid - - Fix a couple of bugs which show up if you try to explicitly set a - 16-byte UUID when exporting a file system. First, exportfs cuts the - first two bytes off the UUID and writes something invalid to etab. - Second, mountd writes the _ascii_ form of the UUID to the kernel, - instead of converting it to hex. - - Signed-off-by: David Woodhouse - Signed-off-by: Steve Dickson - -diff --git a/support/nfs/exports.c b/support/nfs/exports.c -index 525e5b1..334c08e 100644 ---- a/support/nfs/exports.c -+++ b/support/nfs/exports.c -@@ -595,7 +595,7 @@ bad_option: - if (opt[5]!='\0' && *oe == '\0') - ep->e_flags |= NFSEXP_FSID; - else if (valid_uuid(opt+5)) -- ep->e_uuid = strdup(opt+7); -+ ep->e_uuid = strdup(opt+5); - else { - xlog(L_ERROR, "%s: %d: bad fsid \"%s\"\n", - flname, flline, opt); -diff --git a/utils/mountd/cache.c b/utils/mountd/cache.c -index 609c6e3..2ebdd45 100644 ---- a/utils/mountd/cache.c -+++ b/utils/mountd/cache.c -@@ -592,8 +592,10 @@ static int dump_to_cache(FILE *f, char *domain, char *path, struct exportent *ex - qword_printhex(f, u, 16); - } - } else { -+ char u[16]; -+ get_uuid(NULL, exp->e_uuid, 16, u); - qword_print(f, "uuid"); -- qword_printhex(f, exp->e_uuid, 16); -+ qword_printhex(f, u, 16); - } - #endif - } diff --git a/nfs-utils-1.1.3-mountd-uuid-noblkid.patch b/nfs-utils-1.1.3-mountd-uuid-noblkid.patch deleted file mode 100644 index 6b8b95a..0000000 --- a/nfs-utils-1.1.3-mountd-uuid-noblkid.patch +++ /dev/null @@ -1,149 +0,0 @@ -commit 8d52fc2691783dc9ef5bd9d9a1fa4c0ec33b20bc -Author: David Woodhouse -Date: Thu Aug 28 10:56:57 2008 -0400 - - Explicit UUID handling doesn't require blkid; factor out get_uuid_blkdev() - - Signed-off-by: David Woodhouse - Signed-off-by: Steve Dickson - -diff --git a/utils/mountd/cache.c b/utils/mountd/cache.c -index 2ebdd45..23e2344 100644 ---- a/utils/mountd/cache.c -+++ b/utils/mountd/cache.c -@@ -14,6 +14,7 @@ - #include - #include - #include -+#include - #include - #include - #include -@@ -167,6 +168,41 @@ void auth_unix_gid(FILE *f) - } - - #if USE_BLKID -+static const char *get_uuid_blkdev(char *path) -+{ -+ static blkid_cache cache = NULL; -+ struct stat stb; -+ char *devname; -+ blkid_tag_iterate iter; -+ blkid_dev dev; -+ const char *type; -+ const char *val = NULL; -+ -+ if (cache == NULL) -+ blkid_get_cache(&cache, NULL); -+ -+ if (stat(path, &stb) != 0) -+ return NULL; -+ devname = blkid_devno_to_devname(stb.st_dev); -+ if (!devname) -+ return NULL; -+ dev = blkid_get_dev(cache, devname, BLKID_DEV_NORMAL); -+ free(devname); -+ if (!dev) -+ return NULL; -+ iter = blkid_tag_iterate_begin(dev); -+ if (!iter) -+ return NULL; -+ while (blkid_tag_next(iter, &type, &val) == 0) -+ if (strcmp(type, "UUID") == 0) -+ break; -+ blkid_tag_iterate_end(iter); -+ return val; -+} -+#else -+#define get_uuid_blkdev(path) (NULL) -+#endif -+ - int get_uuid(char *path, char *uuid, int uuidlen, char *u) - { - /* extract hex digits from uuidstr and compose a uuid -@@ -174,35 +210,12 @@ int get_uuid(char *path, char *uuid, int uuidlen, char *u) - * a smaller uuid. Then compare with uuid - */ - int i = 0; -- const char *val; -+ const char *val = NULL; -+ char fsid_val[17]; - - if (path) { -- static blkid_cache cache = NULL; -- struct stat stb; -- char *devname; -- blkid_tag_iterate iter; -- blkid_dev dev; -- const char *type; -- if (cache == NULL) -- blkid_get_cache(&cache, NULL); -- -- if (stat(path, &stb) != 0) -- return 0; -- devname = blkid_devno_to_devname(stb.st_dev); -- if (!devname) -- return 0; -- dev = blkid_get_dev(cache, devname, BLKID_DEV_NORMAL); -- free(devname); -- if (!dev) -- return 0; -- iter = blkid_tag_iterate_begin(dev); -- if (!iter) -- return 0; -- while (blkid_tag_next(iter, &type, &val) == 0) -- if (strcmp(type, "UUID") == 0) -- break; -- blkid_tag_iterate_end(iter); -- if (!type) -+ val = get_uuid_blkdev(path); -+ if (!val) - return 0; - } else { - val = uuid; -@@ -229,7 +242,6 @@ int get_uuid(char *path, char *uuid, int uuidlen, char *u) - } - return 1; - } --#endif - - /* Iterate through /etc/mtab, finding mountpoints - * at or below a given path -@@ -439,20 +451,15 @@ void nfsd_fh(FILE *f) - if (!is_mountpoint(path)) - continue; - check_uuid: --#if USE_BLKID - if (exp->m_export.e_uuid) - get_uuid(NULL, exp->m_export.e_uuid, - uuidlen, u); -- else if (get_uuid(path, NULL, -- uuidlen, u) == 0) -+ else if (get_uuid(path, NULL, uuidlen, u) == 0) - continue; - - if (memcmp(u, fhuuid, uuidlen) != 0) - continue; - break; --#else -- continue; --#endif - } - if (use_ipaddr) { - if (he == NULL) { -@@ -584,7 +591,6 @@ static int dump_to_cache(FILE *f, char *domain, char *path, struct exportent *ex - qword_printint(f, exp->e_fsid); - write_fsloc(f, exp, path); - write_secinfo(f, exp); --#if USE_BLKID - if (exp->e_uuid == NULL || different_fs) { - char u[16]; - if (get_uuid(path, NULL, 16, u)) { -@@ -597,7 +603,6 @@ static int dump_to_cache(FILE *f, char *domain, char *path, struct exportent *ex - qword_print(f, "uuid"); - qword_printhex(f, u, 16); - } --#endif - } - return qword_eol(f); - } diff --git a/nfs-utils-1.1.3-mountd-uuid-stat.patch b/nfs-utils-1.1.3-mountd-uuid-stat.patch deleted file mode 100644 index 8548937..0000000 --- a/nfs-utils-1.1.3-mountd-uuid-stat.patch +++ /dev/null @@ -1,33 +0,0 @@ -commit 3a340251597a5b0c579c31d8caf9aa3b53a77016 -Author: David Woodhouse -Date: Thu Aug 28 11:05:17 2008 -0400 - - Use fsid from statfs for UUID if blkid can't cope (or not used) - - Signed-off-by: David Woodhouse - Signed-off-by: Steve Dickson - -diff --git a/utils/mountd/cache.c b/utils/mountd/cache.c -index 23e2344..fa15472 100644 ---- a/utils/mountd/cache.c -+++ b/utils/mountd/cache.c -@@ -215,8 +215,17 @@ int get_uuid(char *path, char *uuid, int uuidlen, char *u) - - if (path) { - val = get_uuid_blkdev(path); -- if (!val) -- return 0; -+ if (!val) { -+ struct statfs64 st; -+ -+ if (statfs64(path, &st)) -+ return 0; -+ if (!st.f_fsid.__val[0] && !st.f_fsid.__val[1]) -+ return 0; -+ snprintf(fsid_val, 17, "%08x%08x", -+ st.f_fsid.__val[0], st.f_fsid.__val[1]); -+ val = fsid_val; -+ } - } else { - val = uuid; - } diff --git a/nfs-utils-1.1.3-network-conn-udp-ports.patch b/nfs-utils-1.1.3-network-conn-udp-ports.patch deleted file mode 100644 index aeb2bf4..0000000 --- a/nfs-utils-1.1.3-network-conn-udp-ports.patch +++ /dev/null @@ -1,45 +0,0 @@ -commit 92e4d5c342f15940362fc2b2df19df0893f0dd13 -Author: Neil Brown -Date: Thu Aug 28 11:32:33 2008 -0400 - - mount: enable retry for nfs23 to set the correct protocol for mount. - - Use a connected port when talking to portmap via UDP. - - This allows us to get ICMP errors reported back so we can avoid - timeouts. Also catch the error (RPC_CANTRECV) properly in getport. - - Signed-off-by: NeilBrown - Signed-off-by: Steve Dickson - -diff --git a/utils/mount/network.c b/utils/mount/network.c -index 0023769..2db694d 100644 ---- a/utils/mount/network.c -+++ b/utils/mount/network.c -@@ -465,7 +465,7 @@ static unsigned short getport(struct sockaddr_in *saddr, - bind_saddr = *saddr; - bind_saddr.sin_port = htons(PMAPPORT); - -- socket = get_socket(&bind_saddr, proto, PMAP_TIMEOUT, FALSE, FALSE); -+ socket = get_socket(&bind_saddr, proto, PMAP_TIMEOUT, FALSE, TRUE); - if (socket == RPC_ANYSOCK) { - if (proto == IPPROTO_TCP && - rpc_createerr.cf_error.re_errno == ETIMEDOUT) -@@ -554,6 +554,7 @@ static int probe_port(clnt_addr_t *server, const unsigned long *versions, - } - if (rpc_createerr.cf_stat != RPC_PROGNOTREGISTERED && - rpc_createerr.cf_stat != RPC_TIMEDOUT && -+ rpc_createerr.cf_stat != RPC_CANTRECV && - rpc_createerr.cf_stat != RPC_PROGVERSMISMATCH) - goto out_bad; - -@@ -562,7 +563,8 @@ static int probe_port(clnt_addr_t *server, const unsigned long *versions, - continue; - p_prot = protos; - } -- if (rpc_createerr.cf_stat == RPC_TIMEDOUT) -+ if (rpc_createerr.cf_stat == RPC_TIMEDOUT || -+ rpc_createerr.cf_stat == RPC_CANTRECV) - goto out_bad; - - if (vers || !*++p_vers) diff --git a/nfs-utils-1.1.3-smnotify-earlyexit.patch b/nfs-utils-1.1.3-smnotify-earlyexit.patch deleted file mode 100644 index ac3e237..0000000 --- a/nfs-utils-1.1.3-smnotify-earlyexit.patch +++ /dev/null @@ -1,50 +0,0 @@ -commit c8d18e26d2a53d9036a32c2dafebccaf4ce1634d -Author: Phil Endecott -Date: Tue Oct 14 14:36:58 2008 -0400 - - sm-notify should exit as soon as its determined - there are no hosts to notify. This also decreases - start up time by a few seconds. - - Signed-off-by: Steve Dickson - -diff -up nfs-utils-1.1.3/utils/statd/sm-notify.c.orig nfs-utils-1.1.3/utils/statd/sm-notify.c ---- nfs-utils-1.1.3/utils/statd/sm-notify.c.orig 2008-10-14 14:51:49.000000000 -0400 -+++ nfs-utils-1.1.3/utils/statd/sm-notify.c 2008-10-14 14:52:58.000000000 -0400 -@@ -154,9 +154,13 @@ usage: fprintf(stderr, - return 1; - } - -+ log_syslog = 1; -+ openlog("sm-notify", LOG_PID, LOG_DAEMON); -+ - if (strcmp(_SM_BASE_PATH, BASEDIR) == 0) { - if (record_pid() == 0 && force == 0 && opt_update_state == 1) - /* already run, don't try again */ -+ nsm_log(LOG_NOTICE, "Already notifying clients; Exiting!"); - exit(0); - } - -@@ -171,6 +175,12 @@ usage: fprintf(stderr, - backup_hosts(_SM_DIR_PATH, _SM_BAK_PATH); - get_hosts(_SM_BAK_PATH); - -+ /* If there are not hosts to notify, just exit */ -+ if (!hosts) { -+ nsm_log(LOG_DEBUG, "No hosts to notify; exiting"); -+ return 0; -+ } -+ - /* Get and update the NSM state. This will call sync() */ - nsm_state = nsm_get_state(opt_update_state); - set_kernel_nsm_state(nsm_state); -@@ -179,9 +189,6 @@ usage: fprintf(stderr, - if (!opt_quiet) - printf("Backgrounding to notify hosts...\n"); - -- openlog("sm-notify", LOG_PID, LOG_DAEMON); -- log_syslog = 1; -- - if (daemon(0, 0) < 0) { - nsm_log(LOG_WARNING, "unable to background: %s", - strerror(errno)); diff --git a/nfs-utils.spec b/nfs-utils.spec index addd0bf..b72b0a0 100644 --- a/nfs-utils.spec +++ b/nfs-utils.spec @@ -1,8 +1,8 @@ Summary: NFS utilities and supporting clients and daemons for the kernel NFS server Name: nfs-utils URL: http://sourceforge.net/projects/nfs -Version: 1.1.3 -Release: 6%{?dist} +Version: 1.1.4 +Release: 1%{?dist} Epoch: 1 # group all 32bit related archs @@ -30,19 +30,6 @@ Patch02: nfs-utils-1.1.0-exp-subtree-warn-off.patch Patch90: nfs-utils-1.1.0-mount-fsc.patch %endif -Patch100: nfs-utils-1.1.3-glibc22.patch -Patch101: nfs-utils-1.1.3-mountd-gids.patch -Patch102: nfs-utils-1.1.3-mountd-uuid-explicit.patch -Patch103: nfs-utils-1.1.3-mountd-uuid-noblkid.patch -Patch104: nfs-utils-1.1.3-mountd-uuid-stat.patch -Patch105: nfs-utils-1.1.3-exportfs-uuid-nowarn.patch -Patch106: nfs-utils-1.1.3-mountd-rm-m_path.patch -Patch107: nfs-utils-1.1.3-mountd-cleanup.patch -Patch108: nfs-utils-1.1.3-mountd-pseudoflavor-support.patch -Patch109: nfs-utils-1.1.3-idmapd-rm-idmapconf.patch -Patch110: nfs-utils-1.1.3-network-conn-udp-ports.patch -Patch111: nfs-utils-1.1.3-smnotify-earlyexit.patch - Group: System Environment/Daemons Provides: exportfs = %{epoch}:%{version}-%{release} Provides: nfsstat = %{epoch}:%{version}-%{release} @@ -96,19 +83,6 @@ This package also contains the mount.nfs and umount.nfs program. %patch90 -p1 %endif -%patch100 -p1 -%patch101 -p1 -%patch102 -p1 -%patch103 -p1 -%patch104 -p1 -%patch105 -p1 -%patch106 -p1 -%patch107 -p1 -%patch108 -p1 -%patch109 -p1 -%patch110 -p1 -%patch111 -p1 - # Remove .orig files find . -name "*.orig" | xargs rm -f @@ -267,6 +241,9 @@ fi %attr(4755,root,root) /sbin/umount.nfs4 %changelog +* Sat Oct 18 2008 Steve Dickson 1.1.4-1 +- Updated to latest upstream version: 1.1.4 + * Tue Oct 14 2008 Steve Dickson 1.1.3-6 - sm-notify exists when there are no hosts to notify diff --git a/sources b/sources index d4024b9..dc4e3fb 100644 --- a/sources +++ b/sources @@ -1,2 +1,2 @@ ae7db9c61c5ad04f83bb99e5caed73da nfs.doc.tar.gz -3ce0faed9e85e78c3017066530050a41 nfs-utils-1.1.3.tar.bz2 +3ed5b9cb73fd1c9b358c7bfa7a6ae150 nfs-utils-1.1.4.tar.bz2