From cafae3aae58cef7241cd493a6261ce4f27874867 Mon Sep 17 00:00:00 2001 From: Steve Dickson Date: Jul 30 2007 10:10:07 +0000 Subject: - Upgraded to the latest upstream version (nfs-utils-1.1.0) --- diff --git a/.cvsignore b/.cvsignore index c95c5ab..e9f4041 100644 --- a/.cvsignore +++ b/.cvsignore @@ -9,3 +9,4 @@ nfs-utils-1.0.9.tar.bz2 nfs-utils-1.0.10.tar.bz2 nfs-utils-1.0.11.tar.bz2 nfs-utils-1.0.12.tar.bz2 +nfs-utils-1.1.0.tar.bz2 diff --git a/nfs-utils-1.0.10-mount-fake.patch b/nfs-utils-1.0.10-mount-fake.patch deleted file mode 100644 index e1bcd0d..0000000 --- a/nfs-utils-1.0.10-mount-fake.patch +++ /dev/null @@ -1,35 +0,0 @@ - -Signed-off-by: Karel Zak - ---- nfs-utils-1.0.10/utils/mount/mount.c.kzak 2007-02-09 12:26:16.000000000 +0100 -+++ nfs-utils-1.0.10/utils/mount/mount.c 2007-02-09 12:27:59.000000000 +0100 -@@ -494,20 +494,21 @@ - &extra_opts, &mount_opts, 0); - } - } -- if (fake) -- return 0; - if (mnt_err) - exit(EX_FAIL); - -- mnt_err = do_mount_syscall(spec, mount_point, -- nfs_mount_vers == 4 ? "nfs4" : "nfs", flags, mount_opts); -+ if (!fake) { -+ mnt_err = do_mount_syscall(spec, mount_point, -+ nfs_mount_vers == 4 ? "nfs4" : "nfs", -+ flags, mount_opts); - -- if(mnt_err) { -- mount_error(mount_point); -- exit(EX_FAIL); -+ if (mnt_err) { -+ mount_error(mount_point); -+ exit(EX_FAIL); -+ } - } - -- if(!nomtab) { -+ if (!nomtab) { - add_mtab(spec, mount_point, nfs_mount_vers == 4 ? "nfs4" : "nfs", - flags, extra_opts, 0, 0); - } diff --git a/nfs-utils-1.0.10-mount-nfsvers.patch b/nfs-utils-1.0.10-mount-nfsvers.patch deleted file mode 100644 index e86931b..0000000 --- a/nfs-utils-1.0.10-mount-nfsvers.patch +++ /dev/null @@ -1,45 +0,0 @@ ---- nfs-utils-1.0.10/utils/mount/nfsmount.c.orig 2006-11-14 19:47:45.000000000 -0500 -+++ nfs-utils-1.0.10/utils/mount/nfsmount.c 2006-11-14 20:18:01.000000000 -0500 -@@ -822,8 +822,7 @@ nfsmnt_check_compat(const struct pmap *n - - int - nfsmount(const char *spec, const char *node, int *flags, -- char **extra_opts, char **mount_opts, int *nfs_mount_vers, -- int running_bg) -+ char **extra_opts, char **mount_opts, int running_bg) - { - static char *prev_bg_host; - char hostdir[1024]; -@@ -854,9 +853,7 @@ nfsmount(const char *spec, const char *n - - /* The version to try is either specified or 0 - In case it is 0 we tell the caller what we tried */ -- if (!*nfs_mount_vers) -- *nfs_mount_vers = find_kernel_nfs_mount_version(); -- nfs_mount_version = *nfs_mount_vers; -+ nfs_mount_version = find_kernel_nfs_mount_version(); - - retval = EX_FAIL; - fsock = -1; ---- nfs-utils-1.0.10/utils/mount/mount.c.orig 2006-11-14 19:47:45.000000000 -0500 -+++ nfs-utils-1.0.10/utils/mount/mount.c 2006-11-14 20:10:18.000000000 -0500 -@@ -491,7 +491,7 @@ int main(int argc, char *argv[]) - else { - if (!strcmp(progname, "mount.nfs")) { - mnt_err = nfsmount(spec, mount_point, &flags, -- &extra_opts, &mount_opts, &nfs_mount_vers, 0); -+ &extra_opts, &mount_opts, 0); - } - } - if (fake) ---- nfs-utils-1.0.10/utils/mount/nfs_mount.h.orig 2006-11-14 19:47:45.000000000 -0500 -+++ nfs-utils-1.0.10/utils/mount/nfs_mount.h 2006-11-14 20:09:01.000000000 -0500 -@@ -79,7 +79,7 @@ struct nfs_mount_data { - #define AUTH_GSS_SPKMP 390011 - #endif - --int nfsmount(const char *, const char *, int *, char **, char **, int *, int); -+int nfsmount(const char *, const char *, int *, char **, char **, int); - void mount_errors(char *, int, int); - int contains(const char *, const char *); - char *get_value(const char *, const char *); diff --git a/nfs-utils-1.0.10-mount-nordirplus.patch b/nfs-utils-1.0.10-mount-nordirplus.patch deleted file mode 100644 index c2c8b3e..0000000 --- a/nfs-utils-1.0.10-mount-nordirplus.patch +++ /dev/null @@ -1,45 +0,0 @@ ---- nfs-utils-1.0.10/utils/mount/nfs_mount.h.orig 2007-05-15 09:54:09.293871000 -0400 -+++ nfs-utils-1.0.10/utils/mount/nfs_mount.h 2007-05-15 09:55:02.842057000 -0400 -@@ -63,6 +63,7 @@ struct nfs_mount_data { - #define NFS_MOUNT_BROKEN_SUID 0x0400 /* 4 */ - #define NFS_MOUNT_NOACL 0x0800 /* 4 */ - #define NFS_MOUNT_SECFLAVOUR 0x2000 /* 5 */ -+#define NFS_MOUNT_NORDIRPLUS 0x4000 /* 5 */ - - /* security pseudoflavors */ - ---- nfs-utils-1.0.10/utils/mount/nfsmount.c.orig 2007-05-15 09:54:09.331833000 -0400 -+++ nfs-utils-1.0.10/utils/mount/nfsmount.c 2007-05-15 09:55:02.852057000 -0400 -@@ -762,6 +762,10 @@ parse_options(char *old_opts, struct nfs - data->flags &= ~NFS_MOUNT_NOACL; - if (!val) - data->flags |= NFS_MOUNT_NOACL; -+ } else if (!strcmp(opt, "rdirplus")) { -+ data->flags &= ~NFS_MOUNT_NORDIRPLUS; -+ if (!val) -+ data->flags |= NFS_MOUNT_NORDIRPLUS; - #endif - } else { - bad_option: -@@ -947,6 +951,7 @@ nfsmount(const char *spec, const char *n - #endif - #if NFS_MOUNT_VERSION >= 5 - printf("sec = %u ", data.pseudoflavor); -+ printf("readdirplus = %d ", (data.flags & NFS_MOUNT_NORDIRPLUS) != 0); - #endif - printf("\n"); - #endif ---- nfs-utils-1.0.10/utils/mount/nfs.man.orig 2007-05-15 09:54:09.210933000 -0400 -+++ nfs-utils-1.0.10/utils/mount/nfs.man 2007-05-15 09:55:02.860057000 -0400 -@@ -272,6 +272,11 @@ default UDP protocol. Many NFS servers - .I udp - Mount the NFS filesystem using the UDP protocol. This - is the default. -+.TP 1.5i -+.I nordirplus -+Disables NFSv3 READDIRPLUS RPCs. Use this options when -+mounting servers that don't support or have broken -+READDIRPLUS implementations. - .P - All of the non-value options have corresponding nooption forms. - For example, nointr means don't allow file operations to be diff --git a/nfs-utils-1.0.10-udp-no-connect.patch b/nfs-utils-1.0.10-udp-no-connect.patch deleted file mode 100644 index b15249d..0000000 --- a/nfs-utils-1.0.10-udp-no-connect.patch +++ /dev/null @@ -1,11 +0,0 @@ ---- nfs-utils-1.0.9/support/nfs/conn.c.noconnect -+++ nfs-utils-1.0.9/support/nfs/conn.c -@@ -98,7 +98,7 @@ int get_socket(struct sockaddr_in *saddr - return RPC_ANYSOCK; - } - } -- if (type == SOCK_STREAM || type == SOCK_DGRAM) { -+ if (type == SOCK_STREAM) { - cc = connect(so, (struct sockaddr *)saddr, namelen); - if (cc < 0) { - rpc_createerr.cf_stat = RPC_SYSTEMERROR; diff --git a/nfs-utils-1.0.10-v4-umounts.patch b/nfs-utils-1.0.10-v4-umounts.patch deleted file mode 100644 index 695cc0b..0000000 --- a/nfs-utils-1.0.10-v4-umounts.patch +++ /dev/null @@ -1,76 +0,0 @@ ---- nfs-utils-1.0.10/utils/mount/nfsumount.c.orig 2006-12-07 10:25:41.000000000 -0500 -+++ nfs-utils-1.0.10/utils/mount/nfsumount.c 2006-12-11 15:00:29.000000000 -0500 -@@ -333,7 +333,7 @@ void umount_usage() - - int nfsumount(int argc, char *argv[]) - { -- int c, ret; -+ int c, ret, v4=0; - char *spec; - struct mntentchn *mc; - -@@ -371,39 +371,33 @@ int nfsumount(int argc, char *argv[]) - mc = getmntdirbackward(spec, NULL); - if (!mc) - mc = getmntdevbackward(spec, NULL); -- if (!mc && verbose) -- printf(_("Could not find %s in mtab\n"), spec); -- -- if(mc) { -- if(contains(mc->m.mnt_opts, "user") && getuid() != 0) { -- struct passwd *pw = getpwuid(getuid()); -- if(!pw || strcmp(pw->pw_name, get_value(mc->m.mnt_opts, "user="))) { -- fprintf(stderr, "%s: permission denied to unmount %s\n", -- progname, spec); -- exit(1); -- } -- } else { -- if(!contains(mc->m.mnt_opts, "users") && getuid() != 0) { -- fprintf(stderr, "%s: only root can unmount %s from %s\n", -- progname, mc->m.mnt_fsname, mc->m.mnt_dir); -- exit(1); -- } -- } -- -- ret = 0; -- if(!force && !lazy) -- ret = _nfsumount(mc->m.mnt_fsname, mc->m.mnt_opts); -- if(!ret) -- ret = add_mtab2(mc->m.mnt_fsname, mc->m.mnt_dir, -- mc->m.mnt_type, mc->m.mnt_opts, mc); -+ if (mc == NULL) { -+ fprintf(stderr, "%s: Unable to find '%s' in mount table\n", -+ progname, spec); -+ exit(1); - } -- else { -- ret = 0; -- if(!force && !lazy) -- ret = _nfsumount(spec, NULL); -- if(!ret) -- ret = add_mtab2(spec, spec, spec, spec, NULL); -+ if(contains(mc->m.mnt_opts, "user") && getuid() != 0) { -+ struct passwd *pw = getpwuid(getuid()); -+ if(!pw || strcmp(pw->pw_name, get_value(mc->m.mnt_opts, "user="))) { -+ fprintf(stderr, "%s: permission denied to unmount %s\n", -+ progname, spec); -+ exit(1); -+ } -+ } else { -+ if(!contains(mc->m.mnt_opts, "users") && getuid() != 0) { -+ fprintf(stderr, "%s: only root can unmount %s from %s\n", -+ progname, mc->m.mnt_fsname, mc->m.mnt_dir); -+ exit(1); -+ } - } -+ v4 = contains(mc->m.mnt_type, "nfs4"); -+ -+ ret = 0; -+ if(!force && !lazy && !v4) -+ ret = _nfsumount(mc->m.mnt_fsname, mc->m.mnt_opts); -+ if(!ret) -+ ret = add_mtab2(mc->m.mnt_fsname, mc->m.mnt_dir, -+ mc->m.mnt_type, mc->m.mnt_opts, mc); - - return(ret); - } diff --git a/nfs-utils-1.0.12-export-nosubtree.patch b/nfs-utils-1.0.12-export-nosubtree.patch deleted file mode 100644 index b62a32b..0000000 --- a/nfs-utils-1.0.12-export-nosubtree.patch +++ /dev/null @@ -1,83 +0,0 @@ ---- nfs-utils-1.0.12/support/nfs/exports.c.orig 2007-02-26 23:55:40.000000000 -0500 -+++ nfs-utils-1.0.12/support/nfs/exports.c 2007-03-09 12:25:37.000000000 -0500 -@@ -32,7 +32,8 @@ - #include "xio.h" - - #define EXPORT_DEFAULT_FLAGS \ -- (NFSEXP_READONLY|NFSEXP_ROOTSQUASH|NFSEXP_GATHERED_WRITES) -+ (NFSEXP_READONLY|NFSEXP_ROOTSQUASH|NFSEXP_GATHERED_WRITES|\ -+ NFSEXP_NOSUBTREECHECK) - - int export_errno; - -@@ -45,7 +46,7 @@ static int *squids = NULL, nsquids = 0, - - static int getexport(char *exp, int len); - static int getpath(char *path, int len); --static int parseopts(char *cp, struct exportent *ep, int warn, int *had_subtree_opt_ptr); -+static int parseopts(char *cp, struct exportent *ep); - static int parsesquash(char *list, int **idp, int *lenp, char **ep); - static int parsenum(char **cpp); - static int parsemaptype(char *type); -@@ -122,7 +123,7 @@ getexportent(int fromkernel, int fromexp - - /* Check for default options */ - if (exp[0] == '-') { -- if (parseopts(exp + 1, &def_ee, 0, &has_default_subtree_opts) < 0) -+ if (parseopts(exp + 1, &def_ee) < 0) - return NULL; - - has_default_opts = 1; -@@ -166,7 +167,7 @@ getexportent(int fromkernel, int fromexp - strncpy(ee.e_hostname, hostname, sizeof (ee.e_hostname) - 1); - ee.e_hostname[sizeof (ee.e_hostname) - 1] = '\0'; - -- if (parseopts(opt, &ee, fromexports && !has_default_subtree_opts, NULL) < 0) -+ if (parseopts(opt, &ee) < 0) - return NULL; - - /* resolve symlinks */ -@@ -343,7 +344,7 @@ mkexportent(char *hname, char *path, cha - 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) -+ if (parseopts(options, &ee) < 0) - return NULL; - return ⅇ - } -@@ -351,7 +352,7 @@ mkexportent(char *hname, char *path, cha - int - updateexportent(struct exportent *eep, char *options) - { -- if (parseopts(options, eep, 0, NULL) < 0) -+ if (parseopts(options, eep) < 0) - return 0; - return 1; - } -@@ -371,7 +372,7 @@ static int valid_uuid(char *uuid) - * Parse option string pointed to by cp and set mount options accordingly. - */ - static int --parseopts(char *cp, struct exportent *ep, int warn, int *had_subtree_opt_ptr) -+parseopts(char *cp, struct exportent *ep) - { - int had_subtree_opt = 0; - char *flname = efname?efname:"command line"; -@@ -539,16 +540,6 @@ bad_option: - ep->e_nsqgids = nsqgids; - - out: -- if (warn && !had_subtree_opt) -- xlog(L_WARNING, "%s [%d]: Neither 'subtree_check' or 'no_subtree_check' specified for export \"%s:%s\".\n" -- " Assuming default behaviour ('subtree_check').\n" -- " NOTE: this default will change with nfs-utils version 1.1.0\n", -- -- flname, flline, -- ep->e_hostname, ep->e_path); -- if (had_subtree_opt_ptr) -- *had_subtree_opt_ptr = had_subtree_opt; -- - return 1; - } - diff --git a/nfs-utils-1.0.12-mount-v4-errors.patch b/nfs-utils-1.0.12-mount-v4-errors.patch deleted file mode 100644 index f5472e3..0000000 --- a/nfs-utils-1.0.12-mount-v4-errors.patch +++ /dev/null @@ -1,86 +0,0 @@ -commit 99defadcebf3bf892871f5541bfe762685faccbd -Author: Steve Dickson -Date: Wed May 9 13:14:26 2007 -0400 - - When nfs4 mount fail because the exported directory does - not exist, the mount command claims the local mount point - does not exist which is wrong. This patch fixes that problem - as well as makes the v4 mount failures look like v3/v2 failures. - - Signed-off-by: Steve Dickson - ---- nfs-utils-1.0.12/utils/mount/mount.c.orig 2007-05-09 14:06:23.574929000 -0400 -+++ nfs-utils-1.0.12/utils/mount/mount.c 2007-05-09 14:07:34.368247000 -0400 -@@ -348,22 +348,49 @@ - return 0; - } - --static void mount_error(char *node) -+static void mount_error(char *mntpnt, char *node) - { - switch(errno) { - case ENOTDIR: -- fprintf(stderr, "%s: mount point %s is not a directory\n", progname, node); -+ fprintf(stderr, "%s: mount point %s is not a directory\n", -+ progname, mntpnt); - break; - case EBUSY: -- fprintf(stderr, "%s: %s is already mounted or busy\n", progname, node); -+ fprintf(stderr, "%s: %s is already mounted or busy\n", -+ progname, mntpnt); - break; - case ENOENT: -- fprintf(stderr, "%s: mount point %s does not exist\n", progname, node); -+ if (node) { -+ fprintf(stderr, "%s: %s failed, reason given by server: %s\n", -+ progname, node, strerror(errno)); -+ } else -+ fprintf(stderr, "%s: mount point %s does not exist\n", -+ progname, mntpnt); - break; - default: - fprintf(stderr, "%s: %s\n", progname, strerror(errno)); - } - } -+static int chk_mountpoint(char *mount_point) -+{ -+ struct stat sb; -+ -+ if (stat(mount_point, &sb) < 0){ -+ mount_error(mount_point, NULL); -+ return 1; -+ } -+ if (S_ISDIR(sb.st_mode) == 0){ -+ errno = ENOTDIR; -+ mount_error(mount_point, NULL); -+ return 1; -+ } -+ if (access(mount_point, X_OK) < 0) { -+ mount_error(mount_point, NULL); -+ return 1; -+ } -+ -+ return 0; -+} - #define NFS_MOUNT_VERS_DEFAULT 3 - - int main(int argc, char *argv[]) -@@ -493,6 +520,9 @@ - } - } - -+ if (chk_mountpoint(mount_point)) -+ exit(EX_FAIL); -+ - if (nfs_mount_vers == 4) { - mnt_err = nfs4mount(spec, mount_point, &flags, - &extra_opts, &mount_opts, 0); -@@ -512,7 +542,7 @@ - flags, mount_opts); - - if (mnt_err) { -- mount_error(mount_point); -+ mount_error(mount_point, spec); - exit(EX_FAIL); - } - } diff --git a/nfs-utils-1.0.12-mountd-etab.patch b/nfs-utils-1.0.12-mountd-etab.patch deleted file mode 100644 index 8b9d0b9..0000000 --- a/nfs-utils-1.0.12-mountd-etab.patch +++ /dev/null @@ -1,132 +0,0 @@ -commit ec08843916d07c28045398e5b17e7347a8fa0135 -Author: Steve Dickson -Date: Fri May 11 12:13:06 2007 -0400 - - nfs-utils: have mountd hold open etab file to force inode number to change - - This patch changes mountd to hold the etab file open so that when it's - changed by exportfs, the inode number should change. We then change - auth_reload to reload the file based on whether st_ino is different - from the last time it was checked. It also changes auth_reload to - maintain a static counter value and return it instead of a timestamp - and fixes up get_exportlist accordingly. Finally, it adds some - comments to xtab_write to warn people about editing the etab in place. - - Signed-off-by: Jeff Layton - - Signed-off-by: Steve Dickson - -diff --git a/support/export/xtab.c b/support/export/xtab.c -index 0ddb251..292087b 100644 ---- a/support/export/xtab.c -+++ b/support/export/xtab.c -@@ -80,6 +80,12 @@ xtab_export_read(void) - return xtab_read(_PATH_ETAB, 1); - } - -+/* -+ * mountd now keeps an open fd for the etab at all times to make sure that the -+ * inode number changes when the xtab_export_write is done. If you change the -+ * routine below such that the files are edited in place, then you'll need to -+ * fix the auth_reload logic as well... -+ */ - static int - xtab_write(char *xtab, char *xtabtmp, int is_export) - { -diff --git a/utils/mountd/auth.c b/utils/mountd/auth.c -index 183c9ea..f7fe23d 100644 ---- a/utils/mountd/auth.c -+++ b/utils/mountd/auth.c -@@ -14,6 +14,7 @@ - #include - #include - #include -+#include - #include "misc.h" - #include "nfslib.h" - #include "exportfs.h" -@@ -46,24 +47,34 @@ auth_init(char *exports) - xtab_mount_write(); - } - --time_t -+unsigned int - auth_reload() - { - struct stat stb; -- static time_t last_modified = 0; -- -- if (stat(_PATH_ETAB, &stb) < 0) -+ static ino_t last_inode; -+ static int last_fd; -+ static unsigned int counter; -+ int fd; -+ -+ if ((fd = open(_PATH_ETAB, O_RDONLY)) < 0) { -+ xlog(L_FATAL, "couldn't open %s", _PATH_ETAB); -+ } else if (fstat(fd, &stb) < 0) { - xlog(L_FATAL, "couldn't stat %s", _PATH_ETAB); -- if (stb.st_mtime == last_modified) -- return last_modified; -- last_modified = stb.st_mtime; -+ } else if (stb.st_ino == last_inode) { -+ close(fd); -+ return counter; -+ } else { -+ close(last_fd); -+ last_fd = fd; -+ last_inode = stb.st_ino; -+ } - - export_freeall(); - memset(&my_client, 0, sizeof(my_client)); -- // export_read(export_file); - xtab_export_read(); -+ ++counter; - -- return last_modified; -+ return counter; - } - - static nfs_export * -diff --git a/utils/mountd/mountd.c b/utils/mountd/mountd.c -index fc9a73c..09cab84 100644 ---- a/utils/mountd/mountd.c -+++ b/utils/mountd/mountd.c -@@ -465,18 +465,18 @@ static exports - get_exportlist(void) - { - static exports elist = NULL; -- static time_t etime = 0; -- time_t atime; - struct exportnode *e, *ne; - struct groupnode *g, *ng, *c, **cp; - nfs_export *exp; - int i; -+ static unsigned int ecounter; -+ unsigned int acounter; - -- atime = auth_reload(); -- if (elist && atime == etime) -+ acounter = auth_reload(); -+ if (elist && acounter == ecounter) - return elist; - -- etime = atime; -+ ecounter = acounter; - - for (e = elist; e != NULL; e = ne) { - ne = e->ex_next; -diff --git a/utils/mountd/mountd.h b/utils/mountd/mountd.h -index b539278..31bacb5 100644 ---- a/utils/mountd/mountd.h -+++ b/utils/mountd/mountd.h -@@ -40,7 +40,7 @@ bool_t mount_mnt_3_svc(struct svc_req *, dirpath *, mountres3 *); - - void mount_dispatch(struct svc_req *, SVCXPRT *); - void auth_init(char *export_file); --time_t auth_reload(void); -+unsigned int auth_reload(void); - nfs_export * auth_authenticate(char *what, struct sockaddr_in *sin, - char *path); - void auth_export(nfs_export *exp); diff --git a/nfs-utils-1.0.12-rmtab-ipaddr-manupdate.patch b/nfs-utils-1.0.12-rmtab-ipaddr-manupdate.patch deleted file mode 100644 index 0dcb799..0000000 --- a/nfs-utils-1.0.12-rmtab-ipaddr-manupdate.patch +++ /dev/null @@ -1,43 +0,0 @@ -commit 28343730efd6f99efff197bf1efd4b975e874ce4 -Author: Steve Dickson -Date: Wed May 9 14:59:52 2007 -0400 - - The man updated to the "mountd adds gibberish to rmtab" patch - - Signed-off-by: Steve Dickson - -diff --git a/utils/mountd/mountd.man b/utils/mountd/mountd.man -index f8646d4..4276663 100644 ---- a/utils/mountd/mountd.man -+++ b/utils/mountd/mountd.man -@@ -125,6 +125,13 @@ If this option is not specified the default of - .BR /var/lib/nfs - is used. - .TP -+.BI "\-r," "" " \-\-reverse\-lookup" -+mountd tracks IP addresses in the rmtab, and when a DUMP request is made (by -+someone running showmount -a, for instance), it returns IP addresses instead -+of hostnames by default. This option causes mountd to do a reverse -+lookup on each IP address and return that hostname instead. Enabling this can -+have a substantial negative effect on performance in some situations. -+.TP - .BR "\-t N" " or " "\-\-num\-threads=N" - This option specifies the number of worker threads that rpc.mountd - spawns. The default is 1 thread, which is probably enough. More -diff --git a/utils/showmount/showmount.man b/utils/showmount/showmount.man -index 5162ba4..a2f510f 100644 ---- a/utils/showmount/showmount.man -+++ b/utils/showmount/showmount.man -@@ -25,8 +25,10 @@ appear as though it were processed through ``sort \-u''. - .SH OPTIONS - .TP - .BR \-a " or " \-\-all --List both the client hostname and mounted directory in --host:dir format. -+List both the client hostname or IP address and mounted directory in -+host:dir format. This info should not be considered reliable. See the notes -+on rmtab in -+.BR rpc.mountd (8). - .TP - .BR \-d " or " \-\-directories - List only the directories mounted by some client. diff --git a/nfs-utils-1.0.5-statdpath.patch b/nfs-utils-1.0.5-statdpath.patch index b2bf871..0757831 100644 --- a/nfs-utils-1.0.5-statdpath.patch +++ b/nfs-utils-1.0.5-statdpath.patch @@ -1,6 +1,6 @@ ---- ./utils/statd/statd.h.orig 2002-09-01 22:31:23.000000000 -0400 -+++ ./utils/statd/statd.h 2003-07-21 10:45:54.000000000 -0400 -@@ -13,10 +13,11 @@ +--- nfs-utils-1.1.0/utils/statd/statd.h.orig 2007-05-10 23:40:57.000000000 -0400 ++++ nfs-utils-1.1.0/utils/statd/statd.h 2007-07-14 05:55:57.000000000 -0400 +@@ -16,10 +16,11 @@ /* * Paths and filenames. */ @@ -14,19 +14,19 @@ #endif #define DEFAULT_SM_DIR DEFAULT_DIR_BASE "sm" ---- ./utils/statd/statd.man.orig 2002-09-16 15:23:03.000000000 -0400 -+++ ./utils/statd/statd.man 2003-06-02 15:01:41.000000000 -0400 -@@ -23,7 +23,7 @@ reboots. +--- nfs-utils-1.1.0/utils/statd/statd.man.orig 2007-05-10 23:40:57.000000000 -0400 ++++ nfs-utils-1.1.0/utils/statd/statd.man 2007-07-14 05:57:20.000000000 -0400 +@@ -24,7 +24,7 @@ reboots. For each NFS client or server machine to be monitored, .B rpc.statd creates a file in -.BR /var/lib/nfs/sm . +.BR /var/lib/nfs/statd/sm . - When starting, it iterates through these files and notifies the - peer - .B rpc.statd -@@ -136,11 +136,11 @@ and - manual pages. + When starting, it normally runs + .B sm-notify + to iterate through these files and notify the +@@ -176,11 +176,11 @@ and send notifications to clients. This + of an NFS export from another server. .SH FILES -.BR /var/lib/nfs/state diff --git a/nfs-utils-1.0.6-idmap.conf.patch b/nfs-utils-1.0.6-idmap.conf.patch deleted file mode 100644 index 3b668cb..0000000 --- a/nfs-utils-1.0.6-idmap.conf.patch +++ /dev/null @@ -1,9 +0,0 @@ ---- nfs-utils-1.0.6/utils/idmapd/idmapd.conf.orig 2004-11-03 12:49:06.363552000 -0500 -+++ nfs-utils-1.0.6/utils/idmapd/idmapd.conf 2004-11-03 12:49:40.573380000 -0500 -@@ -8,3 +8,6 @@ - - Nobody-User = nobody - Nobody-Group = nobody -+ -+[Translation] -+Method = nsswitch diff --git a/nfs-utils-1.0.8-privports.patch b/nfs-utils-1.0.8-privports.patch deleted file mode 100644 index 5d230aa..0000000 --- a/nfs-utils-1.0.8-privports.patch +++ /dev/null @@ -1,28 +0,0 @@ ---- nfs-utils-1.0.8/utils/statd/statd.c.orig 2005-12-19 23:12:47.000000000 -0500 -+++ nfs-utils-1.0.8/utils/statd/statd.c 2006-06-30 10:03:38.000000000 -0400 -@@ -231,7 +231,7 @@ int main (int argc, char **argv) - extern char *optarg; - int pid; - int arg; -- int port = 0, out_port = 0; -+ int port = 0, out_port = 0, doonce = 0; - struct rlimit rlim; - - int pipefds[2] = { -1, -1}; -@@ -440,7 +440,6 @@ int main (int argc, char **argv) - - create_pidfile(); - atexit(truncate_pidfile); -- drop_privs(); - - for (;;) { - if (!(run_mode & MODE_NOTIFY_ONLY)) { -@@ -469,6 +468,8 @@ int main (int argc, char **argv) - if (!(run_mode & MODE_NOTIFY_ONLY)) { - rpc_init("statd", SM_PROG, SM_VERS, sm_prog_1, port); - } -+ if (doonce++ < 1) -+ drop_privs(); - - /* - * Handle incoming requests: SM_NOTIFY socket requests, as diff --git a/nfs-utils-1.0.9-compile.patch b/nfs-utils-1.0.9-compile.patch deleted file mode 100644 index bb6c287..0000000 --- a/nfs-utils-1.0.9-compile.patch +++ /dev/null @@ -1,33 +0,0 @@ ---- nfs-utils-1.0.9/aclocal/kerberos5.m4.orig 2006-07-07 20:04:32.000000000 -0400 -+++ nfs-utils-1.0.9/aclocal/kerberos5.m4 2006-09-11 14:38:39.000000000 -0400 -@@ -36,6 +36,8 @@ - AC_DEFINE_UNQUOTED(KRB5_VERSION, $K5VERS, [Define this as the Kerberos version number]) - if test -f $dir/include/gssapi/gssapi_krb5.h -a \ - \( -f $dir/lib/libgssapi_krb5.a -o \ -+ -f $dir/lib64/libgssapi_krb5.a -o \ -+ -f $dir/lib64/libgssapi_krb5.so -o \ - -f $dir/lib/libgssapi_krb5.so \) ; then - AC_DEFINE(HAVE_KRB5, 1, [Define this if you have MIT Kerberos libraries]) - KRBDIR="$dir" ---- nfs-utils-1.0.9/Makefile.am.orig 2006-07-07 20:04:32.000000000 -0400 -+++ nfs-utils-1.0.9/Makefile.am 2006-09-11 14:38:39.000000000 -0400 -@@ -47,7 +47,6 @@ - mkdir -p $(DESTDIR)$(statedir)/sm $(DESTDIR)$(statedir)/sm.bak - touch $(DESTDIR)$(statedir)/state - chmod go-rwx $(DESTDIR)$(statedir)/sm $(DESTDIR)$(statedir)/sm.bak $(DESTDIR)$(statedir)/state -- chown $(statduser) $(DESTDIR)$(statedir)/sm $(DESTDIR)$(statedir)/sm.bak $(DESTDIR)$(statedir)/state - - uninstall-hook: - rm $(DESTDIR)$(statedir)/xtab ---- nfs-utils-1.0.9/configure.in.orig 2006-07-07 20:04:32.000000000 -0400 -+++ nfs-utils-1.0.9/configure.in 2006-09-11 14:38:39.000000000 -0400 -@@ -117,6 +117,9 @@ - # Check whether user wants TCP wrappers support - AC_TCP_WRAPPERS - -+# Arrange for large-file support -+AC_SYS_LARGEFILE -+ - AC_CONFIG_SRCDIR([support/include/config.h.in]) - AC_CONFIG_HEADERS([support/include/config.h]) - diff --git a/nfs-utils-1.0.9-lazy-umount.patch b/nfs-utils-1.0.9-lazy-umount.patch deleted file mode 100644 index 18577f0..0000000 --- a/nfs-utils-1.0.9-lazy-umount.patch +++ /dev/null @@ -1,58 +0,0 @@ ---- nfs-utils-1.0.9/utils/mount/nfsumount.c.orig 2006-07-28 11:12:32.000000000 -0400 -+++ nfs-utils-1.0.9/utils/mount/nfsumount.c 2006-07-28 11:14:41.000000000 -0400 -@@ -100,9 +100,9 @@ int nfs_call_umount(clnt_addr_t *mnt_ser - } - mnt_closeclnt(clnt, msock); - if (res == RPC_SUCCESS) -- return 1; -+ return 0; - out_bad: -- return 0; -+ return 1; - } - - u_int get_mntproto(const char *); -@@ -251,9 +251,6 @@ int add_mtab2(const char *spec, const ch - return 1; - } - --/* -- * Returns 1 if everything went well, else 0. -- */ - int _nfsumount(const char *spec, const char *opts) - { - char *hostname; -@@ -309,8 +306,8 @@ int _nfsumount(const char *spec, const c - goto out_bad; - return nfs_call_umount(&mnt_server, &dirname); - out_bad: -- fprintf(stderr, "%s: %s: not found or not mounted\n", progname, spec); -- return 0; -+ fprintf(stderr, "%s: %s: not found / mounted or server not reachable\n", progname, spec); -+ return 1; - } - - static struct option umount_longopts[] = -@@ -393,14 +390,18 @@ int nfsumount(int argc, char *argv[]) - } - } - -- ret = _nfsumount(mc->m.mnt_fsname, mc->m.mnt_opts); -- if(ret) -+ ret = 0; -+ if(!force && !lazy) -+ ret = _nfsumount(mc->m.mnt_fsname, mc->m.mnt_opts); -+ if(!ret) - ret = add_mtab2(mc->m.mnt_fsname, mc->m.mnt_dir, - mc->m.mnt_type, mc->m.mnt_opts, mc); - } - else { -- ret = _nfsumount(spec, NULL); -- if(ret) -+ ret = 0; -+ if(!force && !lazy) -+ ret = _nfsumount(spec, NULL); -+ if(!ret) - ret = add_mtab2(spec, spec, spec, spec, NULL); - } - diff --git a/nfs-utils-1.0.9-mount-fsc.patch b/nfs-utils-1.0.9-mount-fsc.patch deleted file mode 100644 index 1881b64..0000000 --- a/nfs-utils-1.0.9-mount-fsc.patch +++ /dev/null @@ -1,95 +0,0 @@ ---- nfs-utils-1.0.9/utils/mount/nfs4mount.c.orig 2006-10-16 08:32:53.789617000 -0400 -+++ nfs-utils-1.0.9/utils/mount/nfs4mount.c 2006-10-16 08:33:53.098133000 -0400 -@@ -201,7 +201,7 @@ int nfs4mount(const char *spec, const ch - char *s; - int val; - int bg, soft, intr; -- int nocto, noac; -+ int nocto, noac, fscache; - int retry; - int retval; - time_t timeout, t; -@@ -252,6 +252,7 @@ int nfs4mount(const char *spec, const ch - intr = NFS4_MOUNT_INTR; - nocto = 0; - noac = 0; -+ fscache = 0; - retry = 10000; /* 10000 minutes ~ 1 week */ - - /* -@@ -332,6 +333,8 @@ int nfs4mount(const char *spec, const ch - soft = !val; - else if (!strcmp(opt, "intr")) - intr = val; -+ else if (!strcmp(opt, "fsc")) -+ fscache = val; - else if (!strcmp(opt, "cto")) - nocto = !val; - else if (!strcmp(opt, "ac")) -@@ -347,7 +350,8 @@ int nfs4mount(const char *spec, const ch - data.flags = (soft ? NFS4_MOUNT_SOFT : 0) - | (intr ? NFS4_MOUNT_INTR : 0) - | (nocto ? NFS4_MOUNT_NOCTO : 0) -- | (noac ? NFS4_MOUNT_NOAC : 0); -+ | (noac ? NFS4_MOUNT_NOAC : 0) -+ | (fscache ? NFS4_MOUNT_FSCACHE : 0); - - /* - * Give a warning if the rpc.idmapd daemon is not running ---- nfs-utils-1.0.9/utils/mount/nfs_mount.h.orig 2006-10-16 08:32:53.763643000 -0400 -+++ nfs-utils-1.0.9/utils/mount/nfs_mount.h 2006-10-16 08:33:53.113133000 -0400 -@@ -63,6 +63,7 @@ struct nfs_mount_data { - #define NFS_MOUNT_BROKEN_SUID 0x0400 /* 4 */ - #define NFS_MOUNT_NOACL 0x0800 /* 4 */ - #define NFS_MOUNT_SECFLAVOUR 0x2000 /* 5 */ -+#define NFS_MOUNT_FSCACHE 0x4000 /* 6 */ - - /* security pseudoflavors */ - ---- nfs-utils-1.0.9/utils/mount/nfsmount.c.orig 2006-10-16 08:32:53.853553000 -0400 -+++ nfs-utils-1.0.9/utils/mount/nfsmount.c 2006-10-16 08:33:53.128133000 -0400 -@@ -695,6 +695,10 @@ parse_options(char *old_opts, struct nfs - data->flags &= ~NFS_MOUNT_SOFT; - if (val) - data->flags |= NFS_MOUNT_SOFT; -+ } else if (!strcmp(opt, "fsc")) { -+ data->flags &= ~NFS_MOUNT_FSCACHE; -+ if (val) -+ data->flags |= NFS_MOUNT_FSCACHE; - } else if (!strcmp(opt, "hard")) { - data->flags &= ~NFS_MOUNT_SOFT; - if (!val) ---- nfs-utils-1.0.9/utils/mount/nfs4_mount.h.orig 2006-07-07 20:04:32.000000000 -0400 -+++ nfs-utils-1.0.9/utils/mount/nfs4_mount.h 2006-10-16 08:33:53.143133000 -0400 -@@ -65,6 +65,7 @@ struct nfs4_mount_data { - #define NFS4_MOUNT_NOCTO 0x0010 /* 1 */ - #define NFS4_MOUNT_NOAC 0x0020 /* 1 */ - #define NFS4_MOUNT_STRICTLOCK 0x1000 /* 1 */ -+#define NFS4_MOUNT_FSCACHE 0x4000 /* 1 */ - #define NFS4_MOUNT_FLAGMASK 0xFFFF - - /* pseudoflavors: */ ---- nfs-utils-1.0.9/utils/mount/nfs.man.orig 2006-10-16 08:32:53.825581000 -0400 -+++ nfs-utils-1.0.9/utils/mount/nfs.man 2006-10-16 08:36:39.503163000 -0400 -@@ -272,6 +272,10 @@ default UDP protocol. Many NFS servers - .I udp - Mount the NFS filesystem using the UDP protocol. This - is the default. -+.TP 1.5i -+.I fsc -+Enable the use of persistent caching to the local disk using -+the FS-Cache facility for the given mount point. - .P - All of the non-value options have corresponding nooption forms. - For example, nointr means don't allow file operations to be -@@ -428,6 +432,10 @@ This extracts a - server performance penalty but it allows two different NFS clients - to get reasonable good results when both clients are actively - writing to common filesystem on the server. -+.TP 1.5i -+.I fsc -+Enable the use of persistent caching to the local disk using -+the FS-Cache facility for the given mount point. - .P - All of the non-value options have corresponding nooption forms. - For example, nointr means don't allow file operations to be diff --git a/nfs-utils-1.0.9-mount-man-nfs.patch b/nfs-utils-1.0.9-mount-man-nfs.patch deleted file mode 100644 index 7f6ee6f..0000000 --- a/nfs-utils-1.0.9-mount-man-nfs.patch +++ /dev/null @@ -1,495 +0,0 @@ ---- /dev/null 2006-10-11 11:03:58.566320005 -0400 -+++ nfs-utils-1.0.9/utils/mount/nfs.man 2006-10-16 08:31:02.204578000 -0400 -@@ -0,0 +1,456 @@ -+.\" nfs.5 "Rick Sladkey" -+.\" Wed Feb 8 12:52:42 1995, faith@cs.unc.edu: updates for Ross Biro's -+.\" patches. " -+.TH NFS 5 "20 November 1993" "Linux 0.99" "Linux Programmer's Manual" -+.SH NAME -+nfs \- nfs and nfs4 fstab format and options -+.SH SYNOPSIS -+.B /etc/fstab -+.SH DESCRIPTION -+The -+.I fstab -+file contains information about which filesystems -+to mount where and with what options. -+For NFS mounts, it contains the server name and -+exported server directory to mount from, -+the local directory that is the mount point, -+and the NFS specific options that control -+the way the filesystem is mounted. -+.P -+Three different versions of the NFS protocol are -+supported by the Linux NFS client: -+NFS version 2, NFS version 3, and NFS version 4. -+To mount via NFS version 2, use the -+.BR nfs -+file system type and specify -+.BR nfsvers=2 . -+Version 2 is the default protocol version for the -+.BR nfs -+file system type when -+.BR nfsvers= -+is not specified on the mount command. -+To mount via NFS version 3, use the -+.BR nfs -+file system type and specify -+.BR nfsvers=3 . -+To mount via NFS version 4, use the -+.BR nfs4 -+file system type. -+The -+.BR nfsvers= -+keyword is not supported for the -+.BR nfs4 -+file system type. -+.P -+These file system types share similar mount options; -+the differences are listed below. -+.P -+Here is an example from an \fI/etc/fstab\fP file for an NFSv2 mount -+over UDP. -+.sp -+.nf -+.ta 2.5i +0.75i +0.75i +1.0i -+server:/usr/local/pub /pub nfs rsize=32768,wsize=32768,timeo=14,intr -+.fi -+.P -+Here is an example for an NFSv4 mount over TCP using Kerberos -+5 mutual authentication. -+.sp -+.nf -+.ta 2.5i +0.75i +0.75i +1.0i -+server:/usr/local/pub /pub nfs4 proto=tcp,sec=krb5,hard,intr -+.fi -+.DT -+.SS Options for the nfs file system type -+.TP 1.5i -+.I rsize=n -+The number of bytes NFS uses when reading files from an NFS server. -+The rsize is negotiated between the server and client to determine -+the largest block size that both can support. -+The value specified by this option is the maximum size that could -+be used; however, the actual size used may be smaller. -+Note: Setting this size to a value less than the largest supported -+block size will adversely affect performance. -+.TP 1.5i -+.I wsize=n -+The number of bytes NFS uses when writing files to an NFS server. -+The wsize is negotiated between the server and client to determine -+the largest block size that both can support. -+The value specified by this option is the maximum size that could -+be used; however, the actual size used may be smaller. -+Note: Setting this size to a value less than the largest supported -+block size will adversely affect performance. -+.TP 1.5i -+.I timeo=n -+The value in tenths of a second before sending the -+first retransmission after an RPC timeout. -+The default value is 7 tenths of a second. After the first timeout, -+the timeout is doubled after each successive timeout until a maximum -+timeout of 60 seconds is reached or the enough retransmissions -+have occured to cause a major timeout. Then, if the filesystem -+is hard mounted, each new timeout cascade restarts at twice the -+initial value of the previous cascade, again doubling at each -+retransmission. The maximum timeout is always 60 seconds. -+Better overall performance may be achieved by increasing the -+timeout when mounting on a busy network, to a slow server, or through -+several routers or gateways. -+.TP 1.5i -+.I retrans=n -+The number of minor timeouts and retransmissions that must occur before -+a major timeout occurs. The default is 3 timeouts. When a major timeout -+occurs, the file operation is either aborted or a "server not responding" -+message is printed on the console. -+.TP 1.5i -+.I acregmin=n -+The minimum time in seconds that attributes of a regular file should -+be cached before requesting fresh information from a server. -+The default is 3 seconds. -+.TP 1.5i -+.I acregmax=n -+The maximum time in seconds that attributes of a regular file can -+be cached before requesting fresh information from a server. -+The default is 60 seconds. -+.TP 1.5i -+.I acdirmin=n -+The minimum time in seconds that attributes of a directory should -+be cached before requesting fresh information from a server. -+The default is 30 seconds. -+.TP 1.5i -+.I acdirmax=n -+The maximum time in seconds that attributes of a directory can -+be cached before requesting fresh information from a server. -+The default is 60 seconds. -+.TP 1.5i -+.I actimeo=n -+Using actimeo sets all of -+.I acregmin, -+.I acregmax, -+.I acdirmin, -+and -+.I acdirmax -+to the same value. -+There is no default value. -+.TP 1.5i -+.I retry=n -+The number of minutes to retry an NFS mount operation -+in the foreground or background before giving up. -+The default value for forground mounts is 2 minutes. -+The default value for background mounts is 10000 minutes, -+which is roughly one week. -+.TP 1.5i -+.I namlen=n -+When an NFS server does not support version two of the -+RPC mount protocol, this option can be used to specify -+the maximum length of a filename that is supported on -+the remote filesystem. This is used to support the -+POSIX pathconf functions. The default is 255 characters. -+.TP 1.5i -+.I port=n -+The numeric value of the port to connect to the NFS server on. -+If the port number is 0 (the default) then query the -+remote host's portmapper for the port number to use. -+If the remote host's NFS daemon is not registered with -+its portmapper, the standard NFS port number 2049 is -+used instead. -+.TP 1.5i -+.I mountport=n -+The numeric value of the -+.B mountd -+port. -+.TP 1.5i -+.I mounthost=name -+The name of the host running -+.B mountd . -+.TP 1.5i -+.I mountprog=n -+Use an alternate RPC program number to contact the -+mount daemon on the remote host. This option is useful -+for hosts that can run multiple NFS servers. -+The default value is 100005 which is the standard RPC -+mount daemon program number. -+.TP 1.5i -+.I mountvers=n -+Use an alternate RPC version number to contact the -+mount daemon on the remote host. This option is useful -+for hosts that can run multiple NFS servers. -+The default value depends on which kernel you are using. -+.TP 1.5i -+.I nfsprog=n -+Use an alternate RPC program number to contact the -+NFS daemon on the remote host. This option is useful -+for hosts that can run multiple NFS servers. -+The default value is 100003 which is the standard RPC -+NFS daemon program number. -+.TP 1.5i -+.I nfsvers=n -+Use an alternate RPC version number to contact the -+NFS daemon on the remote host. This option is useful -+for hosts that can run multiple NFS servers. -+The default value depends on which kernel you are using. -+.TP 1.5i -+.I vers=n -+vers is an alternative to nfsvers and is compatible with -+many other operating systems. -+.TP 1.5i -+.I nolock -+Disable NFS locking. Do not start lockd. -+This has to be used with some old NFS servers -+that don't support locking. -+.TP 1.5i -+.I bg -+If the first NFS mount attempt times out, retry the mount -+in the background. -+After a mount operation is backgrounded, all subsequent mounts -+on the same NFS server will be backgrounded immediately, without -+first attempting the mount. -+A missing mount point is treated as a timeout, -+to allow for nested NFS mounts. -+.TP 1.5i -+.I fg -+If the first NFS mount attempt times out, retry the mount -+in the foreground. -+This is the complement of the -+.I bg -+option, and also the default behavior. -+.TP 1.5i -+.I soft -+If an NFS file operation has a major timeout then report an I/O error to -+the calling program. -+The default is to continue retrying NFS file operations indefinitely. -+.TP 1.5i -+.I hard -+If an NFS file operation has a major timeout then report -+"server not responding" on the console and continue retrying indefinitely. -+This is the default. -+.TP 1.5i -+.I intr -+If an NFS file operation has a major timeout and it is hard mounted, -+then allow signals to interupt the file operation and cause it to -+return EINTR to the calling program. The default is to not -+allow file operations to be interrupted. -+.TP 1.5i -+.I posix -+Mount the NFS filesystem using POSIX semantics. This allows -+an NFS filesystem to properly support the POSIX pathconf -+command by querying the mount server for the maximum length -+of a filename. To do this, the remote host must support version -+two of the RPC mount protocol. Many NFS servers support only -+version one. -+.TP 1.5i -+.I nocto -+Suppress the retrieval of new attributes when creating a file. -+.TP 1.5i -+.I noac -+Disable all forms of attribute caching entirely. This extracts a -+significant performance penalty but it allows two different NFS clients -+to get reasonable results when both clients are actively -+writing to a common export on the server. -+.TP 1.5i -+.I noacl -+Disables Access Control List (ACL) processing. -+.TP 1.5i -+.I sec=mode -+Set the security flavor for this mount to "mode". -+The default setting is \f3sec=sys\f1, which uses local -+unix uids and gids to authenticate NFS operations (AUTH_SYS). -+Other currently supported settings are: -+\f3sec=krb5\f1, which uses Kerberos V5 instead of local unix uids -+and gids to authenticate users; -+\f3sec=krb5i\f1, which uses Kerberos V5 for user authentication -+and performs integrity checking of NFS operations using secure -+checksums to prevent data tampering; and -+\f3sec=krb5p\f1, which uses Kerberos V5 for user authentication -+and integrity checking, and encrypts NFS traffic to prevent -+traffic sniffing (this is the most secure setting). -+Note that there is a performance penalty when using integrity -+or privacy. -+.TP 1.5i -+.I tcp -+Mount the NFS filesystem using the TCP protocol instead of the -+default UDP protocol. Many NFS servers only support UDP. -+.TP 1.5i -+.I udp -+Mount the NFS filesystem using the UDP protocol. This -+is the default. -+.P -+All of the non-value options have corresponding nooption forms. -+For example, nointr means don't allow file operations to be -+interrupted. -+.SS Options for the nfs4 file system type -+.TP 1.5i -+.I rsize=n -+The number of bytes nfs4 uses when reading files from the server. -+The rsize is negotiated between the server and client to determine -+the largest block size that both can support. -+The value specified by this option is the maximum size that could -+be used; however, the actual size used may be smaller. -+Note: Setting this size to a value less than the largest supported -+block size will adversely affect performance. -+.TP 1.5i -+.I wsize=n -+The number of bytes nfs4 uses when writing files to the server. -+The wsize is negotiated between the server and client to determine -+the largest block size that both can support. -+The value specified by this option is the maximum size that could -+be used; however, the actual size used may be smaller. -+Note: Setting this size to a value less than the largest supported -+block size will adversely affect performance. -+.TP 1.5i -+.I timeo=n -+The value in tenths of a second before sending the -+first retransmission after an RPC timeout. -+The default value depends on whether -+.IR proto=udp -+or -+.IR proto=tcp -+is in effect (see below). -+The default value for UDP is 7 tenths of a second. -+The default value for TCP is 60 seconds. -+After the first timeout, -+the timeout is doubled after each successive timeout until a maximum -+timeout of 60 seconds is reached or the enough retransmissions -+have occured to cause a major timeout. Then, if the filesystem -+is hard mounted, each new timeout cascade restarts at twice the -+initial value of the previous cascade, again doubling at each -+retransmission. The maximum timeout is always 60 seconds. -+.TP 1.5i -+.I retrans=n -+The number of minor timeouts and retransmissions that must occur before -+a major timeout occurs. The default is 5 timeouts for -+.IR proto=udp -+and 2 timeouts for -+.IR proto=tcp . -+When a major timeout -+occurs, the file operation is either aborted or a "server not responding" -+message is printed on the console. -+.TP 1.5i -+.I acregmin=n -+The minimum time in seconds that attributes of a regular file should -+be cached before requesting fresh information from a server. -+The default is 3 seconds. -+.TP 1.5i -+.I acregmax=n -+The maximum time in seconds that attributes of a regular file can -+be cached before requesting fresh information from a server. -+The default is 60 seconds. -+.TP 1.5i -+.I acdirmin=n -+The minimum time in seconds that attributes of a directory should -+be cached before requesting fresh information from a server. -+The default is 30 seconds. -+.TP 1.5i -+.I acdirmax=n -+The maximum time in seconds that attributes of a directory can -+be cached before requesting fresh information from a server. -+The default is 60 seconds. -+.TP 1.5i -+.I actimeo=n -+Using actimeo sets all of -+.I acregmin, -+.I acregmax, -+.I acdirmin, -+and -+.I acdirmax -+to the same value. -+There is no default value. -+.TP 1.5i -+.I retry=n -+The number of minutes to retry an NFS mount operation -+in the foreground or background before giving up. -+The default value for forground mounts is 2 minutes. -+The default value for background mounts is 10000 minutes, -+which is roughly one week. -+.TP 1.5i -+.I port=n -+The numeric value of the port to connect to the NFS server on. -+If the port number is 0 (the default) then query the -+remote host's portmapper for the port number to use. -+If the remote host's NFS daemon is not registered with -+its portmapper, the standard NFS port number 2049 is -+used instead. -+.TP 1.5i -+.I proto=n -+Mount the NFS filesystem using a specific network protocol -+instead of the default UDP protocol. -+Many NFS version 4 servers only support TCP. -+Valid protocol types are -+.IR udp -+and -+.IR tcp . -+.TP 1.5i -+.I clientaddr=n -+On a multi-homed client, this -+causes the client to use a specific callback address when -+communicating with an NFS version 4 server. -+This option is currently ignored. -+.TP 1.5i -+.I sec=mode -+Same as \f3sec=mode\f1 for the nfs filesystem type (see above). -+.TP 1.5i -+.I bg -+If an NFS mount attempt times out, retry the mount -+in the background. -+After a mount operation is backgrounded, all subsequent mounts -+on the same NFS server will be backgrounded immediately, without -+first attempting the mount. -+A missing mount point is treated as a timeout, -+to allow for nested NFS mounts. -+.TP 1.5i -+.I fg -+If the first NFS mount attempt times out, retry the mount -+in the foreground. -+This is the complement of the -+.I bg -+option, and also the default behavior. -+.TP 1.5i -+.I soft -+If an NFS file operation has a major timeout then report an I/O error to -+the calling program. -+The default is to continue retrying NFS file operations indefinitely. -+.TP 1.5i -+.I hard -+If an NFS file operation has a major timeout then report -+"server not responding" on the console and continue retrying indefinitely. -+This is the default. -+.TP 1.5i -+.I intr -+If an NFS file operation has a major timeout and it is hard mounted, -+then allow signals to interupt the file operation and cause it to -+return EINTR to the calling program. The default is to not -+allow file operations to be interrupted. -+.TP 1.5i -+.I nocto -+Suppress the retrieval of new attributes when creating a file. -+.TP 1.5i -+.I noac -+Disable attribute caching, and force synchronous writes. -+This extracts a -+server performance penalty but it allows two different NFS clients -+to get reasonable good results when both clients are actively -+writing to common filesystem on the server. -+.P -+All of the non-value options have corresponding nooption forms. -+For example, nointr means don't allow file operations to be -+interrupted. -+.SH FILES -+.I /etc/fstab -+.SH "SEE ALSO" -+.BR fstab "(5), " mount "(8), " umount "(8), " exports (5) -+.SH AUTHOR -+"Rick Sladkey" -+.SH BUGS -+The posix, and nocto options are parsed by mount -+but currently are silently ignored. -+.P -+The tcp and namlen options are implemented but are not currently -+supported by the Linux kernel. -+.P -+The umount command should notify the server -+when an NFS filesystem is unmounted. -+.P -+Checking files on NFS filesystem referenced by file descriptors (i.e. the -+.BR fcntl -+and -+.BR ioctl -+families of functions) may lead to inconsistent result due to the lack of -+consistency check in kernel even if noac is used. ---- nfs-utils-1.0.9/utils/mount/Makefile.am.orig 2006-10-16 08:29:34.790243000 -0400 -+++ nfs-utils-1.0.9/utils/mount/Makefile.am 2006-10-16 08:30:32.594308000 -0400 -@@ -1,9 +1,10 @@ - ## Process this file with automake to produce Makefile.in - - man8_MANS = mount.nfs.man umount.nfs.man -+man5_MANS = nfs.man - - sbin_PROGRAMS = mount.nfs --EXTRA_DIST = nfsmount.x $(man8_MANS) -+EXTRA_DIST = nfsmount.x $(man8_MANS) $(man5_MANS) - mount_nfs_SOURCES = mount.c nfsmount.c nfs4mount.c nfsumount.c \ - mount_constants.h nfs4_mount.h nfs_mount4.h - -@@ -29,6 +30,11 @@ install-man-links: - inst=`echo $$m | sed -e 's/man$$/8/'`; \ - rm -f $$inst ; \ - done) -+ (cd $(DESTDIR)$(man5dir) && \ -+ for m in $(man5_MANS) $(dist_man5_MANS) $(nodist_man5_MANS); do \ -+ inst=`echo $$m | sed -e 's/man$$/5/'`; \ -+ rm -f $$inst ; \ -+ done) - - uninstall-man-links: - (cd $(DESTDIR)$(man8dir) && \ -@@ -36,4 +42,9 @@ uninstall-man-links: - inst=`echo $$m | sed -e 's/man$$/8/'`; \ - rm -f $$inst ; \ - done) -+ (cd $(DESTDIR)$(man5dir) && \ -+ for m in $(man5_MANS) $(dist_man5_MANS) $(nodist_man5_MANS); do \ -+ inst=`echo $$m | sed -e 's/man$$/5/'`; \ -+ rm -f $$inst ; \ -+ done) - diff --git a/nfs-utils-1.0.9-mount-options-v3.patch b/nfs-utils-1.0.9-mount-options-v3.patch deleted file mode 100644 index de80203..0000000 --- a/nfs-utils-1.0.9-mount-options-v3.patch +++ /dev/null @@ -1,447 +0,0 @@ ---- nfs-utils-1.0.9/support/include/fstab.h.orig 2006-07-07 20:04:32.000000000 -0400 -+++ nfs-utils-1.0.9/support/include/fstab.h 2006-07-28 11:07:24.000000000 -0400 -@@ -3,6 +3,10 @@ - - #include "nfs_mntent.h" - -+#ifndef _PATH_FSTAB -+#define _PATH_FSTAB "/etc/fstab" -+#endif -+ - int mtab_is_writable(void); - int mtab_does_not_exist(void); - -@@ -16,6 +20,10 @@ struct mntentchn *getmntoptfile (const c - struct mntentchn *getmntdirbackward (const char *dir, struct mntentchn *mc); - struct mntentchn *getmntdevbackward (const char *dev, struct mntentchn *mc); - -+struct mntentchn *fstab_head (void); -+struct mntentchn *getfsfile (const char *file); -+struct mntentchn *getfsspec (const char *spec); -+ - void lock_mtab (void); - void unlock_mtab (void); - void update_mtab (const char *special, nfs_mntent_t *with); ---- nfs-utils-1.0.9/support/include/nfs_mntent.h.orig 2006-07-07 20:04:32.000000000 -0400 -+++ nfs-utils-1.0.9/support/include/nfs_mntent.h 2006-07-28 11:07:24.000000000 -0400 -@@ -7,10 +7,10 @@ - #define _NFS_MNTENT_H - - typedef struct nfs_mntent_s { -- const char *mnt_fsname; -- const char *mnt_dir; -- const char *mnt_type; -- const char *mnt_opts; -+ char *mnt_fsname; -+ char *mnt_dir; -+ char *mnt_type; -+ char *mnt_opts; - int mnt_freq; - int mnt_passno; - } nfs_mntent_t; ---- nfs-utils-1.0.9/support/nfs/fstab.c.orig 2006-07-07 20:04:32.000000000 -0400 -+++ nfs-utils-1.0.9/support/nfs/fstab.c 2006-07-28 11:07:24.000000000 -0400 -@@ -78,10 +78,10 @@ mtab_is_writable() { - - /* Contents of mtab and fstab ---------------------------------*/ - --struct mntentchn mounttable; --static int got_mtab = 0; -+struct mntentchn mounttable, fstab; -+static int got_mtab = 0, got_fstab = 0; - --static void read_mounttable(void); -+static void read_mounttable(void), read_fstab(void); - - struct mntentchn * - mtab_head() { -@@ -96,6 +96,13 @@ my_free(const void *s) { - free((void *) s); - } - -+struct mntentchn * -+fstab_head() { -+ if (!got_fstab) -+ read_fstab(); -+ return &fstab; -+} -+ - static void - discard_mntentchn(struct mntentchn *mc0) { - struct mntentchn *mc, *mc1; -@@ -167,6 +174,26 @@ read_mounttable() { - read_mntentchn(mfp, fnam, mc); - } - -+static void -+read_fstab() { -+ mntFILE *mfp = NULL; -+ const char *fnam; -+ struct mntentchn *mc = &fstab; -+ -+ got_fstab = 1; -+ mc->nxt = mc->prev = NULL; -+ -+ fnam = _PATH_FSTAB; -+ mfp = nfs_setmntent (fnam, "r"); -+ if (mfp == NULL || mfp->mntent_fp == NULL) { -+ int errsv = errno; -+ error(_("warning: can't open %s: %s"), -+ _PATH_FSTAB, strerror (errsv)); -+ return; -+ } -+ read_mntentchn(mfp, fnam, mc); -+} -+ - /* - * Given the directory name NAME, and the place MCPREV we found it last time, - * try to find more occurrences. -@@ -201,6 +228,30 @@ getmntdevbackward (const char *name, str - return NULL; - } - -+/* Find the dir FILE in fstab. */ -+struct mntentchn * -+getfsfile (const char *file) { -+ struct mntentchn *mc, *mc0; -+ -+ mc0 = fstab_head(); -+ for (mc = mc0->nxt; mc && mc != mc0; mc = mc->nxt) -+ if (streq(mc->m.mnt_dir, file)) -+ return mc; -+ return NULL; -+} -+ -+/* Find the device SPEC in fstab. */ -+struct mntentchn * -+getfsspec (const char *spec) { -+ struct mntentchn *mc, *mc0; -+ -+ mc0 = fstab_head(); -+ for (mc = mc0->nxt; mc && mc != mc0; mc = mc->nxt) -+ if (streq(mc->m.mnt_fsname, spec)) -+ return mc; -+ return NULL; -+} -+ - /* Updating mtab ----------------------------------------------*/ - - /* Flag for already existing lock file. */ ---- nfs-utils-1.0.9/utils/mount/Makefile.am.orig 2006-07-07 20:04:32.000000000 -0400 -+++ nfs-utils-1.0.9/utils/mount/Makefile.am 2006-07-28 11:09:31.000000000 -0400 -@@ -14,9 +14,10 @@ MAINTAINERCLEANFILES = Makefile.in - - install-exec-hook: - (cd $(DESTDIR)$(sbindir) && \ -- ln -sf $(sbin_PROGRAMS) mount.nfs4 && \ -- ln -sf $(sbin_PROGRAMS) umount.nfs && \ -- ln -sf $(sbin_PROGRAMS) umount.nfs4) -+ chmod +s $(sbin_PROGRAMS) && \ -+ cp -p $(sbin_PROGRAMS) $(DESTDIR)$(sbindir)/mount.nfs4 && \ -+ cp -p $(sbin_PROGRAMS) $(DESTDIR)$(sbindir)/umount.nfs && \ -+ cp -p $(sbin_PROGRAMS) $(DESTDIR)$(sbindir)/umount.nfs4) - uninstall-hook: - (cd $(DESTDIR)$(sbindir) && \ - rm -f mount.nfs4 umount.nfs umount.nfs4) ---- nfs-utils-1.0.9/utils/mount/mount.c.orig 2006-07-07 20:04:32.000000000 -0400 -+++ nfs-utils-1.0.9/utils/mount/mount.c 2006-07-28 11:07:24.000000000 -0400 -@@ -28,6 +28,7 @@ - #include - #include - #include -+#include - - #include "fstab.h" - #include "xcommon.h" -@@ -74,6 +75,12 @@ struct opt_map { - int mask; /* flag mask value */ - }; - -+/* Custom mount options for our own purposes. */ -+/* Maybe these should now be freed for kernel use again */ -+#define MS_DUMMY 0x00000000 -+#define MS_USERS 0x40000000 -+#define MS_USER 0x20000000 -+ - static const struct opt_map opt_map[] = { - { "defaults", 0, 0, 0 }, /* default options */ - { "ro", 1, 0, MS_RDONLY }, /* read-only */ -@@ -90,6 +97,18 @@ static const struct opt_map opt_map[] = - { "remount", 0, 0, MS_REMOUNT}, /* Alter flags of mounted FS */ - { "bind", 0, 0, MS_BIND }, /* Remount part of tree elsewhere */ - { "rbind", 0, 0, MS_BIND|MS_REC }, /* Idem, plus mounted subtrees */ -+ { "auto", 0, 0, MS_DUMMY }, /* Can be mounted using -a */ -+ { "noauto", 0, 0, MS_DUMMY }, /* Can only be mounted explicitly */ -+ { "users", 0, 0, MS_USERS }, /* Allow ordinary user to mount */ -+ { "nousers", 0, 1, MS_USERS }, /* Forbid ordinary user to mount */ -+ { "user", 0, 0, MS_USER }, /* Allow ordinary user to mount */ -+ { "nouser", 0, 1, MS_USER }, /* Forbid ordinary user to mount */ -+ { "owner", 0, 0, MS_DUMMY }, /* Let the owner of the device mount */ -+ { "noowner", 0, 0, MS_DUMMY }, /* Device owner has no special privs */ -+ { "group", 0, 0, MS_DUMMY }, /* Let the group of the device mount */ -+ { "nogroup", 0, 0, MS_DUMMY }, /* Device group has no special privs */ -+ { "_netdev", 0, 0, MS_DUMMY}, /* Device requires network */ -+ { "comment", 0, 0, MS_DUMMY}, /* fstab comment only (kudzu,_netdev)*/ - - /* add new options here */ - #ifdef MS_NOSUB -@@ -104,6 +123,7 @@ static const struct opt_map opt_map[] = - { "mand", 0, 0, MS_MANDLOCK }, /* Allow mandatory locks on this FS */ - { "nomand", 0, 1, MS_MANDLOCK }, /* Forbid mandatory locks on this FS */ - #endif -+ { "loop", 1, 0, MS_DUMMY }, /* use a loop device */ - #ifdef MS_NOATIME - { "atime", 0, 1, MS_NOATIME }, /* Update access time */ - { "noatime", 0, 0, MS_NOATIME }, /* Do not update access time */ -@@ -121,6 +141,12 @@ static char * fix_opts_string (int flags - char *new_opts; - - new_opts = xstrdup((flags & MS_RDONLY) ? "ro" : "rw"); -+ if (flags & MS_USER) { -+ struct passwd *pw = getpwuid(getuid()); -+ if(pw) -+ new_opts = xstrconcat3(new_opts, ",user=", pw->pw_name); -+ } -+ - for (om = opt_map; om->opt != NULL; om++) { - if (om->skip) - continue; -@@ -132,9 +158,20 @@ static char * fix_opts_string (int flags - if (extra_opts && *extra_opts) { - new_opts = xstrconcat3(new_opts, ",", extra_opts); - } -+ - return new_opts; - } - -+void copy_mntent(struct mntent *ment, nfs_mntent_t *nment) -+{ -+ /* Not sure why nfs_mntent_t should exist */ -+ strcpy(nment->mnt_fsname, ment->mnt_fsname); -+ strcpy(nment->mnt_dir, ment->mnt_dir); -+ strcpy(nment->mnt_type, ment->mnt_type); -+ strcpy(nment->mnt_opts, ment->mnt_opts); -+ nment->mnt_freq = ment->mnt_freq; -+ nment->mnt_passno = ment->mnt_passno; -+} - - int add_mtab(char *fsname, char *mount_point, char *fstype, int flags, char *opts, int freq, int passno) - { -@@ -146,8 +183,16 @@ int add_mtab(char *fsname, char *mount_p - ment.mnt_dir = mount_point; - ment.mnt_type = fstype; - ment.mnt_opts = fix_opts_string(flags, opts); -- ment.mnt_freq = 0; -- ment.mnt_passno= 0; -+ ment.mnt_freq = freq; -+ ment.mnt_passno= passno; -+ -+ if(flags & MS_REMOUNT) { -+ nfs_mntent_t nment; -+ -+ copy_mntent(&ment, &nment); -+ update_mtab(nment.mnt_dir, &nment); -+ return 0; -+ } - - if ((fd = open(MOUNTED"~", O_RDWR|O_CREAT|O_EXCL, 0600)) == -1) { - fprintf(stderr, "Can't get "MOUNTED"~ lock file"); -@@ -242,20 +287,56 @@ static void parse_opts (const char *opti - - } - -+/* -+ * Look for an option in a comma-separated list -+ */ -+int -+contains(const char *list, const char *s) { -+ int n = strlen(s); -+ -+ while (*list) { -+ if (strncmp(list, s, n) == 0 && -+ (list[n] == 0 || list[n] == ',')) -+ return 1; -+ while (*list && *list++ != ',') ; -+ } -+ return 0; -+} -+ -+/* -+ * If list contains "user=peter" and we ask for "user=", return "peter" -+ */ -+char * -+get_value(const char *list, const char *s) { -+ const char *t; -+ int n = strlen(s); -+ -+ while (*list) { -+ if (strncmp(list, s, n) == 0) { -+ s = t = list+n; -+ while (*s && *s != ',') -+ s++; -+ return xstrndup(t, s-t); -+ } -+ while (*list && *list++ != ',') ; -+ } -+ return 0; -+} -+ - static void mount_error(char *node) - { - switch(errno) { - case ENOTDIR: -- printf("%s: mount point %s is not a directory\n", progname, node); -+ fprintf(stderr, "%s: mount point %s is not a directory\n", progname, node); - break; - case EBUSY: -- printf("%s: %s is already mounted or busy\n", progname, node); -+ fprintf(stderr, "%s: %s is already mounted or busy\n", progname, node); - break; - case ENOENT: -- printf("%s: mount point %s does not exist\n", progname, node); -+ fprintf(stderr, "%s: mount point %s does not exist\n", progname, node); - break; - default: -- printf("%s: %s\n", progname, strerror(errno)); -+ fprintf(stderr, "%s: %s\n", progname, strerror(errno)); - } - } - -@@ -264,16 +345,13 @@ int main(int argc, char *argv[]) - int c, flags = 0, nfs_mount_vers = 0, mnt_err = 1, fake = 0; - char *spec, *mount_point, *extra_opts = NULL; - char *mount_opts = NULL, *p; -+ struct mntentchn *mc; -+ uid_t uid = getuid(); - - progname = argv[0]; - if ((p = strrchr(progname, '/')) != NULL) - progname = p+1; - -- if (getuid() != 0) { -- printf("%s: only root can do that.\n", progname); -- exit(1); -- } -- - if(!strncmp(progname, "umount", strlen("umount"))) { - if(argc < 2) { - umount_usage(); -@@ -355,9 +433,33 @@ int main(int argc, char *argv[]) - - spec = argv[1]; - mount_point = canonicalize(argv[2]); -- -+ - parse_opts(mount_opts, &flags, &extra_opts); - -+ if (uid != 0 && !(flags & MS_USERS) && !(flags & MS_USER)) { -+ fprintf(stderr, "%s: permission denied\n", progname); -+ exit(1); -+ } -+ -+ if ((flags & MS_USER || flags & MS_USERS) && uid != 0) { -+ /* check if fstab has entry, and further see if the user or users option is given */ -+ if ((mc = getfsspec(spec)) == NULL && -+ (mc = getfsfile(spec)) == NULL) { -+ fprintf(stderr, "%s: permission denied - invalid option\n", progname); -+ exit(1); -+ } -+ else { -+ if((flags & MS_USER) && !contains(mc->m.mnt_opts, "user")) { -+ fprintf(stderr, "%s: permission denied - invalid option\n", progname); -+ exit(1); -+ } -+ if((flags & MS_USERS) && !contains(mc->m.mnt_opts, "users")) { -+ fprintf(stderr, "%s: permission denied - invalid option\n", progname); -+ exit(1); -+ } -+ } -+ } -+ - if (!strcmp(progname, "mount.nfs4") || nfs_mount_vers == 4) { - nfs_mount_vers = 4; - mnt_err = nfs4mount(spec, mount_point, &flags, &extra_opts, &mount_opts, 0); -@@ -370,16 +472,19 @@ int main(int argc, char *argv[]) - } - - if (!mnt_err && !fake) { -- mnt_err = do_mount_syscall(spec, mount_point, nfs_mount_vers == 4 ? "nfs4" : "nfs", flags, mount_opts); -+ if(!(flags & MS_REMOUNT)) { -+ mnt_err = do_mount_syscall(spec, mount_point, -+ nfs_mount_vers == 4 ? "nfs4" : "nfs", flags, mount_opts); - -- if(mnt_err) { -- mount_error(mount_point); -- exit(-1); -+ if(mnt_err) { -+ mount_error(mount_point); -+ exit(-1); -+ } - } -- -- if(!nomtab) -+ if(!nomtab) { - add_mtab(spec, mount_point, nfs_mount_vers == 4 ? "nfs4" : "nfs", - flags, extra_opts, 0, 0); -+ } - } - - return 0; ---- nfs-utils-1.0.9/utils/mount/nfs_mount.h.orig 2006-07-07 20:04:32.000000000 -0400 -+++ nfs-utils-1.0.9/utils/mount/nfs_mount.h 2006-07-28 11:07:24.000000000 -0400 -@@ -80,5 +80,7 @@ struct nfs_mount_data { - - int nfsmount(const char *, const char *, int *, char **, char **, int *, int); - void mount_errors(char *, int, int); -+int contains(const char *, const char *); -+char *get_value(const char *, const char *); - - #endif /* _NFS_MOUNT_H */ ---- nfs-utils-1.0.9/utils/mount/nfsumount.c.orig 2006-07-07 20:04:32.000000000 -0400 -+++ nfs-utils-1.0.9/utils/mount/nfsumount.c 2006-07-28 11:07:24.000000000 -0400 -@@ -23,12 +23,14 @@ - #include - #include - #include -+#include - - #include "xcommon.h" - #include "fstab.h" - #include "nls.h" - #include "conn.h" - -+#include "nfs_mount.h" - #include "mount_constants.h" - #include "mount.h" - #include "nfsumount.h" -@@ -307,7 +309,7 @@ int _nfsumount(const char *spec, const c - goto out_bad; - return nfs_call_umount(&mnt_server, &dirname); - out_bad: -- printf("%s: %s: not found or not mounted\n", progname, spec); -+ fprintf(stderr, "%s: %s: not found or not mounted\n", progname, spec); - return 0; - } - -@@ -376,6 +378,21 @@ int nfsumount(int argc, char *argv[]) - printf(_("Could not find %s in mtab\n"), spec); - - if(mc) { -+ if(contains(mc->m.mnt_opts, "user") && getuid() != 0) { -+ struct passwd *pw = getpwuid(getuid()); -+ if(!pw || strcmp(pw->pw_name, get_value(mc->m.mnt_opts, "user="))) { -+ fprintf(stderr, "%s: permission denied to unmount %s\n", -+ progname, spec); -+ exit(1); -+ } -+ } else { -+ if(!contains(mc->m.mnt_opts, "users") && getuid() != 0) { -+ fprintf(stderr, "%s: only root can unmount %s from %s\n", -+ progname, mc->m.mnt_fsname, mc->m.mnt_dir); -+ exit(1); -+ } -+ } -+ - ret = _nfsumount(mc->m.mnt_fsname, mc->m.mnt_opts); - if(ret) - ret = add_mtab2(mc->m.mnt_fsname, mc->m.mnt_dir, diff --git a/nfs-utils-1.0.9-mount-quotes.patch b/nfs-utils-1.0.9-mount-quotes.patch deleted file mode 100644 index c3d719e..0000000 --- a/nfs-utils-1.0.9-mount-quotes.patch +++ /dev/null @@ -1,109 +0,0 @@ - -Thi patch avoid the collision between commas in security contexts and the -delimiter betweeen mount options. - -Signed-off-by: Karel Zak -Signed-off-by: Cory Olmo - ---- nfs-utils-1.0.9/utils/mount/nfsmount.c.kzak 2006-12-18 23:52:37.000000000 +0100 -+++ nfs-utils-1.0.9/utils/mount/nfsmount.c 2006-12-18 23:59:34.000000000 +0100 -@@ -548,15 +548,31 @@ - struct pmap *mnt_pmap = &mnt_server->pmap; - struct pmap *nfs_pmap = &nfs_server->pmap; - int len; -- char *opt, *opteq; -+ char *opt, *opteq, *p, *opt_b; - char *mounthost = NULL; - char cbuf[128]; -+ int open_quote = 0; - - data->flags = 0; - *bg = 0; - - len = strlen(new_opts); -- for (opt = strtok(old_opts, ","); opt; opt = strtok(NULL, ",")) { -+ for (p=old_opts, opt_b=NULL; p && *p; p++) { -+ if (!opt_b) -+ opt_b = p; /* begin of the option item */ -+ if (*p == '"') -+ open_quote ^= 1; /* reverse the status */ -+ if (open_quote) -+ continue; /* still in quoted block */ -+ if (*p == ',') -+ *p = '\0'; /* terminate the option item */ -+ if (*p == '\0' || *(p+1) == '\0') { -+ opt = opt_b; /* opt is useful now */ -+ opt_b = NULL; -+ } -+ else -+ continue; /* still somewhere in the option item */ -+ - if (strlen(opt) >= sizeof(cbuf)) - goto bad_parameter; - if ((opteq = strchr(opt, '=')) && isdigit(opteq[1])) { -@@ -671,13 +687,23 @@ - strcspn(opteq+1," \t\n\r,")); - else if (!strcmp(opt, "context")) { - char *context = opteq + 1; -+ int ctxlen = strlen(context); - -- if (strlen(context) > NFS_MAX_CONTEXT_LEN) { -+ if (ctxlen > NFS_MAX_CONTEXT_LEN) { - printf(_("context parameter exceeds limit of %d\n"), - NFS_MAX_CONTEXT_LEN); - goto bad_parameter; - } -- strncpy(data->context, context, NFS_MAX_CONTEXT_LEN); -+ /* The context string is in the format of -+ * "system_u:object_r:...". We only want -+ * the context str between the quotes. -+ */ -+ if (*context == '"') -+ strncpy(data->context, context+1, -+ ctxlen-2); -+ else -+ strncpy(data->context, context, -+ NFS_MAX_CONTEXT_LEN); - } else if (!sloppy) - goto bad_parameter; - sprintf(cbuf, "%s=%s,", opt, opteq+1); ---- nfs-utils-1.0.9/utils/mount/mount.c.kzak 2006-12-18 23:52:37.000000000 +0100 -+++ nfs-utils-1.0.9/utils/mount/mount.c 2006-12-18 23:52:37.000000000 +0100 -@@ -289,18 +289,30 @@ - { - if (options != NULL) { - char *opts = xstrdup(options); -- char *opt; -- int len = strlen(opts) + 20; -- -+ char *opt, *p; -+ int len = strlen(opts) + 256; -+ int open_quote = 0; -+ - *extra_opts = xmalloc(len); - **extra_opts = '\0'; - -- for (opt = strtok(opts, ","); opt; opt = strtok(NULL, ",")) -- parse_opt(opt, flags, *extra_opts, len); -- -+ for (p=opts, opt=NULL; p && *p; p++) { -+ if (!opt) -+ opt = p; /* begin of the option item */ -+ if (*p == '"') -+ open_quote ^= 1; /* reverse the status */ -+ if (open_quote) -+ continue; /* still in quoted block */ -+ if (*p == ',') -+ *p = '\0'; /* terminate the option item */ -+ /* end of option item or last item */ -+ if (*p == '\0' || *(p+1) == '\0') { -+ parse_opt(opt, flags, *extra_opts, len); -+ opt = NULL; -+ } -+ } - free(opts); - } -- - } - - /* diff --git a/nfs-utils-1.0.9-mount-remount.patch b/nfs-utils-1.0.9-mount-remount.patch deleted file mode 100644 index 648c029..0000000 --- a/nfs-utils-1.0.9-mount-remount.patch +++ /dev/null @@ -1,114 +0,0 @@ ---- nfs-utils-1.0.9/utils/mount/mount.c.orig 2006-10-25 10:52:32.000000000 -0400 -+++ nfs-utils-1.0.9/utils/mount/mount.c 2006-10-25 12:09:52.000000000 -0400 -@@ -163,16 +163,29 @@ static char * fix_opts_string (int flags - return new_opts; - } - --void copy_mntent(struct mntent *ment, nfs_mntent_t *nment) -+static inline void dup_mntent(struct mntent *ment, nfs_mntent_t *nment) - { - /* Not sure why nfs_mntent_t should exist */ -- strcpy(nment->mnt_fsname, ment->mnt_fsname); -- strcpy(nment->mnt_dir, ment->mnt_dir); -- strcpy(nment->mnt_type, ment->mnt_type); -- strcpy(nment->mnt_opts, ment->mnt_opts); -+ nment->mnt_fsname = strdup(ment->mnt_fsname); -+ nment->mnt_dir = strdup(ment->mnt_dir); -+ nment->mnt_type = strdup(ment->mnt_type); -+ nment->mnt_opts = strdup(ment->mnt_opts); - nment->mnt_freq = ment->mnt_freq; - nment->mnt_passno = ment->mnt_passno; - } -+static inline void -+free_mntent(struct mntent *ment, int remount) -+{ -+ free(ment->mnt_fsname); -+ free(ment->mnt_dir); -+ free(ment->mnt_type); -+ /* -+ * Note: free(ment->mnt_opts) happens in discard_mntentchn() -+ * via update_mtab() on remouts -+ */ -+ if (!remount) -+ free(ment->mnt_opts); -+} - - int add_mtab(char *fsname, char *mount_point, char *fstype, int flags, char *opts, int freq, int passno) - { -@@ -190,8 +203,9 @@ int add_mtab(char *fsname, char *mount_p - if(flags & MS_REMOUNT) { - nfs_mntent_t nment; - -- copy_mntent(&ment, &nment); -+ dup_mntent(&ment, &nment); - update_mtab(nment.mnt_dir, &nment); -+ free_mntent(&nment, 1); - return 0; - } - -@@ -341,10 +355,11 @@ static void mount_error(char *node) - fprintf(stderr, "%s: %s\n", progname, strerror(errno)); - } - } -+#define NFS_MOUNT_VERS_DEFAULT 3 - - int main(int argc, char *argv[]) - { -- int c, flags = 0, nfs_mount_vers = 0, mnt_err = 1, fake = 0; -+ int c, flags = 0, nfs_mount_vers, mnt_err = 1, fake = 0; - char *spec, *mount_point, *extra_opts = NULL; - char *mount_opts = NULL, *p; - struct mntentchn *mc; -@@ -375,6 +390,10 @@ int main(int argc, char *argv[]) - return 0; - } - -+ nfs_mount_vers = NFS_MOUNT_VERS_DEFAULT; -+ if (!strcmp(progname, "mount.nfs4")) -+ nfs_mount_vers = 4; -+ - while ((c = getopt_long (argc - 2, argv + 2, "rt:vVwfno:hs", - longopts, NULL)) != -1) { - switch (c) { -@@ -465,9 +484,9 @@ int main(int argc, char *argv[]) - } - } - -- if (!strcmp(progname, "mount.nfs4") || nfs_mount_vers == 4) { -- nfs_mount_vers = 4; -- mnt_err = nfs4mount(spec, mount_point, &flags, &extra_opts, &mount_opts, 0); -+ if (nfs_mount_vers == 4) { -+ mnt_err = nfs4mount(spec, mount_point, &flags, -+ &extra_opts, &mount_opts, 0); - } - else { - if (!strcmp(progname, "mount.nfs")) { -@@ -475,21 +494,19 @@ int main(int argc, char *argv[]) - &extra_opts, &mount_opts, &nfs_mount_vers, 0); - } - } -- - if (fake) - return 0; - if (mnt_err) - exit(EX_FAIL); - -- if(!(flags & MS_REMOUNT)) { -- mnt_err = do_mount_syscall(spec, mount_point, -- nfs_mount_vers == 4 ? "nfs4" : "nfs", flags, mount_opts); -- -- if(mnt_err) { -- mount_error(mount_point); -- exit(EX_FAIL); -- } -+ mnt_err = do_mount_syscall(spec, mount_point, -+ nfs_mount_vers == 4 ? "nfs4" : "nfs", flags, mount_opts); -+ -+ if(mnt_err) { -+ mount_error(mount_point); -+ exit(EX_FAIL); - } -+ - if(!nomtab) { - add_mtab(spec, mount_point, nfs_mount_vers == 4 ? "nfs4" : "nfs", - flags, extra_opts, 0, 0); diff --git a/nfs-utils-1.0.9-mount-sloppy.patch b/nfs-utils-1.0.9-mount-sloppy.patch deleted file mode 100644 index cd22b3e..0000000 --- a/nfs-utils-1.0.9-mount-sloppy.patch +++ /dev/null @@ -1,124 +0,0 @@ ---- nfs-utils-1.0.9/utils/mount/nfs4mount.c.sloppy 2006-09-20 12:08:39.000000000 +0200 -+++ nfs-utils-1.0.9/utils/mount/nfs4mount.c 2006-09-20 12:08:39.000000000 +0200 -@@ -50,6 +50,7 @@ - #endif - - extern int verbose; -+extern int sloppy; - - char *IDMAPLCK = DEFAULT_DIR "/rpcidmapd"; - #define idmapd_check() do { \ -@@ -338,7 +339,7 @@ - nocto = !val; - else if (!strcmp(opt, "ac")) - noac = !val; -- else { -+ else if (!sloppy) { - printf(_("unknown nfs mount option: " - "%s%s\n"), val ? "" : "no", opt); - goto fail; ---- nfs-utils-1.0.9/utils/mount/mount.c.sloppy 2006-09-20 12:08:39.000000000 +0200 -+++ nfs-utils-1.0.9/utils/mount/mount.c 2006-09-20 12:10:31.000000000 +0200 -@@ -44,6 +44,7 @@ - int nomtab; - int verbose; - int mounttype; -+int sloppy; - - static struct option longopts[] = { - { "fake", 0, 0, 'f' }, -@@ -239,6 +240,7 @@ - printf("\t-w\t\tMount file system read-write\n"); - printf("\t-f\t\tFake mount, don't actually mount\n"); - printf("\t-n\t\tDo not update /etc/mtab\n"); -+ printf("\t-s\t\tTolerate sloppy mount options rather than failing.\n"); - printf("\t-h\t\tPrint this help\n"); - printf("\tversion\t\tnfs4 - NFS version 4, nfs - older NFS version supported\n"); - printf("\tnfsoptions\tRefer mount.nfs(8) or nfs(5)\n\n"); -@@ -373,7 +375,7 @@ - return 0; - } - -- while ((c = getopt_long (argc - 2, argv + 2, "rt:vVwfno:h", -+ while ((c = getopt_long (argc - 2, argv + 2, "rt:vVwfno:hs", - longopts, NULL)) != -1) { - switch (c) { - case 'r': -@@ -403,6 +405,9 @@ - else - mount_opts = xstrdup(optarg); - break; -+ case 's': -+ ++sloppy; -+ break; - case 128: /* bind */ - mounttype = MS_BIND; - break; ---- nfs-utils-1.0.9/utils/mount/nfsmount.c.sloppy 2006-09-20 12:08:39.000000000 +0200 -+++ nfs-utils-1.0.9/utils/mount/nfsmount.c 2006-09-20 12:08:39.000000000 +0200 -@@ -104,6 +104,7 @@ - static char errbuf[BUFSIZ]; - static char *erreob = &errbuf[BUFSIZ]; - extern int verbose; -+extern int sloppy; - - /* Convert RPC errors into strings */ - int rpc_strerror(int); -@@ -606,13 +607,13 @@ - } else if (!strcmp(opt, "namlen")) { - if (nfs_mount_version >= 2) - data->namlen = val; -- else -+ else if (!sloppy) - goto bad_parameter; - #endif - } else if (!strcmp(opt, "addr")) { - /* ignore */; - continue; -- } else -+ } else if (!sloppy) - goto bad_parameter; - sprintf(cbuf, "%s=%s,", opt, opteq+1); - } else if (opteq) { -@@ -629,7 +630,7 @@ - mnt_pmap->pm_prot = IPPROTO_TCP; - data->flags |= NFS_MOUNT_TCP; - #endif -- } else -+ } else if (!sloppy) - goto bad_parameter; - #if NFS_MOUNT_VERSION >= 5 - } else if (!strcmp(opt, "sec")) { -@@ -658,7 +659,7 @@ - data->pseudoflavor = AUTH_GSS_SPKMI; - else if (!strcmp(secflavor, "spkm3p")) - data->pseudoflavor = AUTH_GSS_SPKMP; -- else { -+ else if (!sloppy) { - printf(_("Warning: Unrecognized security flavor %s.\n"), - secflavor); - goto bad_parameter; -@@ -677,7 +678,7 @@ - goto bad_parameter; - } - strncpy(data->context, context, NFS_MAX_CONTEXT_LEN); -- } else -+ } else if (!sloppy) - goto bad_parameter; - sprintf(cbuf, "%s=%s,", opt, opteq+1); - } else { -@@ -768,9 +769,11 @@ - #endif - } else { - bad_option: -- printf(_("Unsupported nfs mount option: " -- "%s%s\n"), val ? "" : "no", opt); -- goto out_bad; -+ if (!sloppy) { -+ printf(_("Unsupported nfs mount option: " -+ "%s%s\n"), val ? "" : "no", opt); -+ goto out_bad; -+ } - } - sprintf(cbuf, val ? "%s,":"no%s,", opt); - } diff --git a/nfs-utils-1.0.9-nfsmount-authnone.patch b/nfs-utils-1.0.9-nfsmount-authnone.patch deleted file mode 100644 index 3e032b6..0000000 --- a/nfs-utils-1.0.9-nfsmount-authnone.patch +++ /dev/null @@ -1,21 +0,0 @@ ---- nfs-utils-1.0.9/utils/mount/nfsmount.c.orig 2006-10-13 10:32:02.956172000 -0400 -+++ nfs-utils-1.0.9/utils/mount/nfsmount.c 2006-10-13 10:51:31.641546000 -0400 -@@ -1097,12 +1097,14 @@ - - flavor = mountres->auth_flavors.auth_flavors_val; - while (--i >= 0) { -- if (flavor[i] == data.pseudoflavor) -- yum = 1; - #ifdef NFS_MOUNT_DEBUG -- printf("auth flavor %d: %d\n", -- i, flavor[i]); -+ printf("auth flavor[%d] %d\n", i, flavor[i]); - #endif -+ if (flavor[i] == data.pseudoflavor || -+ flavor[i] == AUTH_NONE) { -+ yum = 1; -+ break; -+ } - } - if (!yum) { - fprintf(stderr, diff --git a/nfs-utils-1.0.9-return-mount-error.patch b/nfs-utils-1.0.9-return-mount-error.patch deleted file mode 100644 index 024d12a..0000000 --- a/nfs-utils-1.0.9-return-mount-error.patch +++ /dev/null @@ -1,40 +0,0 @@ ---- nfs-utils-1.0.9/utils/mount/mount.c.orig 2006-09-26 11:32:13.000000000 -0400 -+++ nfs-utils-1.0.9/utils/mount/mount.c 2006-09-26 20:23:50.000000000 -0400 -@@ -476,21 +476,24 @@ - } - } - -- if (!mnt_err && !fake) { -- if(!(flags & MS_REMOUNT)) { -- mnt_err = do_mount_syscall(spec, mount_point, -- nfs_mount_vers == 4 ? "nfs4" : "nfs", flags, mount_opts); -- -- if(mnt_err) { -- mount_error(mount_point); -- exit(-1); -- } -- } -- if(!nomtab) { -- add_mtab(spec, mount_point, nfs_mount_vers == 4 ? "nfs4" : "nfs", -- flags, extra_opts, 0, 0); -+ if (fake) -+ return 0; -+ if (mnt_err) -+ exit(EX_FAIL); -+ -+ if(!(flags & MS_REMOUNT)) { -+ mnt_err = do_mount_syscall(spec, mount_point, -+ nfs_mount_vers == 4 ? "nfs4" : "nfs", flags, mount_opts); -+ -+ if(mnt_err) { -+ mount_error(mount_point); -+ exit(EX_FAIL); - } - } -+ if(!nomtab) { -+ add_mtab(spec, mount_point, nfs_mount_vers == 4 ? "nfs4" : "nfs", -+ flags, extra_opts, 0, 0); -+ } - - return 0; - } diff --git a/nfs-utils-1.1.0-exp-subtree-warn-off.patch b/nfs-utils-1.1.0-exp-subtree-warn-off.patch new file mode 100644 index 0000000..25f87ef --- /dev/null +++ b/nfs-utils-1.1.0-exp-subtree-warn-off.patch @@ -0,0 +1,11 @@ +--- nfs-utils-1.1.0/support/nfs/exports.c.orig 2007-05-10 23:40:57.000000000 -0400 ++++ nfs-utils-1.1.0/support/nfs/exports.c 2007-07-16 09:13:40.000000000 -0400 +@@ -355,7 +355,7 @@ static int valid_uuid(char *uuid) + static int + parseopts(char *cp, struct exportent *ep, int warn, int *had_subtree_opt_ptr) + { +- int had_subtree_opt = 0; ++ int had_subtree_opt = 1; + char *flname = efname?efname:"command line"; + int flline = efp?efp->x_line:0; + diff --git a/nfs-utils-1.1.0-mount-fsc.patch b/nfs-utils-1.1.0-mount-fsc.patch new file mode 100644 index 0000000..72c17be --- /dev/null +++ b/nfs-utils-1.1.0-mount-fsc.patch @@ -0,0 +1,97 @@ +--- nfs-utils-1.1.0/utils/mount/nfsmount.c.orig 2007-05-10 23:40:57.000000000 -0400 ++++ nfs-utils-1.1.0/utils/mount/nfsmount.c 2007-07-25 11:25:33.000000000 -0400 +@@ -733,6 +733,10 @@ parse_options(char *old_opts, struct nfs + data->flags &= ~NFS_MOUNT_SOFT; + if (val) + data->flags |= NFS_MOUNT_SOFT; ++ } else if (!strcmp(opt, "fsc")) { ++ data->flags &= ~NFS_MOUNT_FSCACHE; ++ if (val) ++ data->flags |= NFS_MOUNT_FSCACHE; + } else if (!strcmp(opt, "hard")) { + data->flags &= ~NFS_MOUNT_SOFT; + if (!val) +--- nfs-utils-1.1.0/utils/mount/nfs.man.orig 2007-05-10 23:40:57.000000000 -0400 ++++ nfs-utils-1.1.0/utils/mount/nfs.man 2007-07-25 11:27:55.000000000 -0400 +@@ -288,6 +288,10 @@ Mount the NFS filesystem using the UDP p + Disables NFSv3 READDIRPLUS RPCs. Use this option when + mounting servers that don't support or have broken + READDIRPLUS implementations. ++.TP 1.5i ++.I fsc ++Enable the use of persistent caching to the local disk using ++the FS-Cache facility for the given mount point. + .P + All of the non-value options have corresponding nooption forms. + For example, nointr means don't allow file operations to be +@@ -444,6 +448,10 @@ This extracts a + server performance penalty but it allows two different NFS clients + to get reasonable good results when both clients are actively + writing to common filesystem on the server. ++.TP 1.5i ++.I fsc ++Enable the use of persistent caching to the local disk using ++the FS-Cache facility for the given mount point. + .P + All of the non-value options have corresponding nooption forms. + For example, nointr means don't allow file operations to be +--- nfs-utils-1.1.0/utils/mount/nfs4mount.c.orig 2007-05-10 23:40:57.000000000 -0400 ++++ nfs-utils-1.1.0/utils/mount/nfs4mount.c 2007-07-25 11:25:33.000000000 -0400 +@@ -201,7 +201,7 @@ int nfs4mount(const char *spec, const ch + char *s; + int val; + int bg, soft, intr; +- int nocto, noac; ++ int nocto, noac, fscache; + int retry; + int retval; + time_t timeout, t; +@@ -252,6 +252,7 @@ int nfs4mount(const char *spec, const ch + intr = NFS4_MOUNT_INTR; + nocto = 0; + noac = 0; ++ fscache = 0; + retry = 10000; /* 10000 minutes ~ 1 week */ + + /* +@@ -332,6 +333,8 @@ int nfs4mount(const char *spec, const ch + soft = !val; + else if (!strcmp(opt, "intr")) + intr = val; ++ else if (!strcmp(opt, "fsc")) ++ fscache = val; + else if (!strcmp(opt, "cto")) + nocto = !val; + else if (!strcmp(opt, "ac")) +@@ -347,7 +350,8 @@ int nfs4mount(const char *spec, const ch + data.flags = (soft ? NFS4_MOUNT_SOFT : 0) + | (intr ? NFS4_MOUNT_INTR : 0) + | (nocto ? NFS4_MOUNT_NOCTO : 0) +- | (noac ? NFS4_MOUNT_NOAC : 0); ++ | (noac ? NFS4_MOUNT_NOAC : 0) ++ | (fscache ? NFS4_MOUNT_FSCACHE : 0); + + /* + * Give a warning if the rpc.idmapd daemon is not running +--- nfs-utils-1.1.0/utils/mount/nfs4_mount.h.orig 2007-05-10 23:40:57.000000000 -0400 ++++ nfs-utils-1.1.0/utils/mount/nfs4_mount.h 2007-07-25 11:27:07.000000000 -0400 +@@ -65,7 +65,8 @@ struct nfs4_mount_data { + #define NFS4_MOUNT_NOCTO 0x0010 /* 1 */ + #define NFS4_MOUNT_NOAC 0x0020 /* 1 */ + #define NFS4_MOUNT_STRICTLOCK 0x1000 /* 1 */ +-#define NFS4_MOUNT_FLAGMASK 0xFFFF ++#define NFS4_MOUNT_FSCACHE 0x10000 /* 1 */ ++#define NFS4_MOUNT_FLAGMASK 0x1FFFF + + /* pseudoflavors: */ + +--- nfs-utils-1.1.0/utils/mount/nfs_mount.h.orig 2007-05-10 23:40:57.000000000 -0400 ++++ nfs-utils-1.1.0/utils/mount/nfs_mount.h 2007-07-25 11:26:39.000000000 -0400 +@@ -64,6 +64,7 @@ struct nfs_mount_data { + #define NFS_MOUNT_NOACL 0x0800 /* 4 */ + #define NFS_MOUNT_SECFLAVOUR 0x2000 /* 5 */ + #define NFS_MOUNT_NORDIRPLUS 0x4000 /* 5 */ ++#define NFS_MOUNT_FSCACHE 0x10000 /* 5 */ + + /* security pseudoflavors */ + diff --git a/nfs-utils-1.1.0-mount-v4-errors.patch b/nfs-utils-1.1.0-mount-v4-errors.patch new file mode 100644 index 0000000..c886296 --- /dev/null +++ b/nfs-utils-1.1.0-mount-v4-errors.patch @@ -0,0 +1,77 @@ +--- nfs-utils-1.1.0/utils/mount/mount.c.orig 2007-07-18 16:26:01.000000000 -0400 ++++ nfs-utils-1.1.0/utils/mount/mount.c 2007-07-18 16:37:34.000000000 -0400 +@@ -286,17 +286,24 @@ static void parse_opts (const char *opti + } + } + +-static void mount_error(char *node) ++static void mount_error(char *mount_point, char *node) + { + switch(errno) { + case ENOTDIR: +- fprintf(stderr, "%s: mount point %s is not a directory\n", progname, node); ++ fprintf(stderr, "%s: mount point %s is not a directory\n", ++ progname, mount_point); + break; + case EBUSY: +- fprintf(stderr, "%s: %s is already mounted or busy\n", progname, node); ++ fprintf(stderr, "%s: %s is already mounted or busy\n", progname, ++ mount_point); + break; + case ENOENT: +- fprintf(stderr, "%s: mount point %s does not exist\n", progname, node); ++ if (node) ++ fprintf(stderr, "%s: %s failed, reason given by server: %s\n", ++ progname, node, strerror(errno)); ++ else ++ fprintf(stderr, "%s: mount point %s does not exist\n", progname, ++ mount_point); + break; + default: + fprintf(stderr, "%s: %s\n", progname, strerror(errno)); +@@ -352,6 +359,26 @@ static int start_statd() + #endif + return 0; + } ++static int chk_mountpoint(char *mount_point) ++{ ++ struct stat sb; ++ ++ if (stat(mount_point, &sb) < 0){ ++ mount_error(mount_point, NULL); ++ return 1; ++ } ++ if (S_ISDIR(sb.st_mode) == 0){ ++ errno = ENOTDIR; ++ mount_error(mount_point, NULL); ++ return 1; ++ } ++ if (access(mount_point, X_OK) < 0) { ++ mount_error(mount_point, NULL); ++ return 1; ++ } ++ ++ return 0; ++} + + int main(int argc, char *argv[]) + { +@@ -509,6 +536,9 @@ int main(int argc, char *argv[]) + } + } + ++ if (chk_mountpoint(mount_point)) ++ exit(1); ++ + if (nfs_mount_vers == 4) + mnt_err = nfs4mount(spec, mount_point, &flags, &extra_opts, &mount_opts, 0); + else { +@@ -539,7 +569,7 @@ int main(int argc, char *argv[]) + mount_opts); + + if (mnt_err) { +- mount_error(mount_point); ++ mount_error(mount_point, spec); + exit(EX_FAIL); + } + } diff --git a/nfs-utils-1.1.0-showmount-rpcerror.patch b/nfs-utils-1.1.0-showmount-rpcerror.patch new file mode 100644 index 0000000..6fe5bea --- /dev/null +++ b/nfs-utils-1.1.0-showmount-rpcerror.patch @@ -0,0 +1,20 @@ +--- nfs-utils-1.1.0/utils/showmount/showmount.c.orig 2007-05-10 23:40:57.000000000 -0400 ++++ nfs-utils-1.1.0/utils/showmount/showmount.c 2007-07-16 13:02:42.000000000 -0400 +@@ -242,6 +242,8 @@ static unsigned short getport(struct soc + rpc_createerr.cf_stat = status; + clnt_destroy(client); + return 0; ++ } else if (port == 0) { ++ rpc_createerr.cf_stat = RPC_PROGNOTREGISTERED; + } + + clnt_destroy(client); +@@ -368,7 +370,7 @@ char **argv; + server_addr.sin_port = getport(&server_addr, + MOUNTPROG, MOUNTVERS, IPPROTO_UDP); + if (!server_addr.sin_port) { +- clnt_pcreateerror("portmap getport"); ++ clnt_pcreateerror("showmount"); + exit(1); + } + msock = RPC_ANYSOCK; diff --git a/nfs-utils.spec b/nfs-utils.spec index 014e08d..531b37d 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.0.12 -Release: 7%{?dist} +Version: 1.1.0 +Release: 1%{?dist} Epoch: 1 # group all 32bit related archs @@ -24,35 +24,19 @@ Source15: nfs.sysconfig Patch00: nfs-utils-1.0.5-statdpath.patch Patch01: nfs-utils-1.0.6-mountd.patch -Patch02: nfs-utils-1.0.6-idmap.conf.patch -Patch03: nfs-utils-1.0.6-gssd_mixed_case.patch -Patch04: nfs-utils-1.0.8-privports.patch -Patch05: nfs-utils-1.0.12-export-nosubtree.patch -Patch06: nfs-utils-1.0.9-mount-options-v3.patch -Patch07: nfs-utils-1.0.9-lazy-umount.patch -Patch08: nfs-utils-1.0.9-mount-sloppy.patch -Patch09: nfs-utils-1.0.9-mount-man-nfs.patch -Patch10: nfs-utils-1.0.9-return-mount-error.patch -Patch11: nfs-utils-1.0.9-nfsmount-authnone.patch -Patch12: nfs-utils-1.0.9-mount-remount.patch -Patch13: nfs-utils-1.0.10-mount-nfsvers.patch -Patch14: nfs-utils-1.0.10-udp-no-connect.patch -Patch15: nfs-utils-1.0.10-v4-umounts.patch -Patch16: nfs-utils-1.0.9-mount-quotes.patch -Patch17: nfs-utils-1.0.10-mount-fake.patch -Patch18: nfs-utils-1.0.12-mount-v4-errors.patch -Patch19: nfs-utils-1.0.12-rmtab-ipaddr-manupdate.patch -Patch20: nfs-utils-1.0.12-mountd-memleak.patch -Patch21: nfs-utils-1.0.12-nfsd-macargs.patch -Patch22: nfs-utils-1.0.12-mtab-mis-unlock.patch -Patch23: nfs-utils-1.0.12-mountd-etab.patch -Patch24: nfs-utils-1.0.10-mount-nordirplus.patch +Patch02: nfs-utils-1.0.6-gssd_mixed_case.patch +Patch03: nfs-utils-1.0.12-mountd-memleak.patch +Patch04: nfs-utils-1.0.12-nfsd-macargs.patch +Patch05: nfs-utils-1.0.12-mtab-mis-unlock.patch +Patch06: nfs-utils-1.1.0-exp-subtree-warn-off.patch +Patch07: nfs-utils-1.1.0-showmount-rpcerror.patch +Patch08: nfs-utils-1.1.0-mount-v4-errors.patch %if %{enablefscache} -Patch90: nfs-utils-1.0.9-mount-fsc.patch +Patch90: nfs-utils-1.1.0-mount-fsc.patch %endif -Patch100: nfs-utils-1.0.9-compile.patch +#Patch100: nfs-utils-1.0.9-compile.patch Group: System Environment/Daemons Provides: exportfs = %{epoch}:%{version}-%{release} @@ -63,25 +47,27 @@ Provides: rpc.idmapd = %{epoch}:%{version}-%{release} Provides: rpc.mountd = %{epoch}:%{version}-%{release} Provides: rpc.nfsd = %{epoch}:%{version}-%{release} Provides: rpc.statd = %{epoch}:%{version}-%{release} -Provides: rpc.lockd = %{epoch}:%{version}-%{release} Provides: rpc.gssd = %{epoch}:%{version}-%{release} Provides: rpc.svcgssd = %{epoch}:%{version}-%{release} Provides: mount.nfs = %{epoch}:%{version}-%{release} Provides: mount.nfs4 = %{epoch}:%{version}-%{release} Provides: umount.nfs = %{epoch}:%{version}-%{release} Provides: umount.nfs4 = %{epoch}:%{version}-%{release} +Provides: sm-notify = %{epoch}:%{version}-%{release} +Provides: start-statd = %{epoch}:%{version}-%{release} License: GPL Buildroot: %{_tmppath}/%{name}-%{version}-root Requires: rpcbind, sed, gawk, sh-utils, fileutils, textutils, grep Requires: modutils >= 2.4.26-9 -BuildRequires: nfs-utils-lib-devel libevent-devel libgssapi-devel +BuildRequires: libgssapi-devel >= 0.11 libevent-devel >= 1.3b +BuildRequires: nfs-utils-lib-devel >= 1.1.0 BuildRequires: krb5-libs >= 1.4 autoconf >= 2.57 openldap-devel >= 2.2 -BuildRequires: automake, libtool, keyutils-libs-devel -BuildRequires: tcp_wrappers-devel, e2fsprogs-devel, krb5-devel +BuildRequires: automake, libtool +BuildRequires: e2fsprogs-devel, krb5-devel, tcp_wrappers-devel Requires(pre): shadow-utils >= 4.0.3-25 Requires(pre): /sbin/chkconfig /sbin/nologin -Requires(pre): nfs-utils-lib libevent libgssapi +Requires: nfs-utils-lib >= 1.1.0 libgssapi >= 0.11 libevent >= 1.3b %description The nfs-utils package provides a daemon for the kernel NFS server and @@ -106,29 +92,13 @@ This package also contains the mount.nfs and umount.nfs program. %patch06 -p1 %patch07 -p1 %patch08 -p1 -%patch09 -p1 -%patch10 -p1 -%patch11 -p1 -%patch12 -p1 -%patch13 -p1 -%patch14 -p1 -%patch15 -p1 -%patch16 -p1 -%patch17 -p1 -%patch18 -p1 -%patch19 -p1 -%patch20 -p1 -%patch21 -p1 -%patch22 -p1 -%patch23 -p1 -%patch24 -p1 %if %{enablefscache} %patch90 -p1 %endif # Do the magic to get things to compile -%patch100 -p1 +#%patch100 -p1 # Remove .orig files find . -name "*.orig" | xargs rm -f @@ -167,23 +137,14 @@ install -m 755 %{SOURCE13} $RPM_BUILD_ROOT/etc/rc.d/init.d/rpcgssd install -m 755 %{SOURCE14} $RPM_BUILD_ROOT/etc/rc.d/init.d/rpcsvcgssd install -m 644 %{SOURCE15} $RPM_BUILD_ROOT/etc/sysconfig/nfs -install -m 644 utils/idmapd/idmapd.conf \ - $RPM_BUILD_ROOT/etc/idmapd.conf - mkdir -p $RPM_BUILD_ROOT/var/lib/nfs/rpc_pipefs touch $RPM_BUILD_ROOT/var/lib/nfs/rmtab -mv $RPM_BUILD_ROOT/usr/sbin/{rpc.lockd,rpc.statd} $RPM_BUILD_ROOT/sbin -mv $RPM_BUILD_ROOT/usr/sbin/{mount.*,umount.*} $RPM_BUILD_ROOT/sbin +mv $RPM_BUILD_ROOT/usr/sbin/rpc.statd $RPM_BUILD_ROOT/sbin -mkdir -p $RPM_BUILD_ROOT/var/lib/nfs/statd +mkdir -p $RPM_BUILD_ROOT/var/lib/nfs/statd/sm mkdir -p $RPM_BUILD_ROOT/var/lib/nfs/v4recovery -# we are using quotad from quota utils -rm %{buildroot}/%{_mandir}/man8/rquotad* -rm %{buildroot}/%{_mandir}/man8/rpc.rquotad* -rm %{buildroot}/%{_sbindir}/rpc.rquotad - %clean rm -rf $RPM_BUILD_ROOT @@ -268,17 +229,16 @@ fi %config /etc/rc.d/init.d/rpcgssd %config /etc/rc.d/init.d/rpcsvcgssd %config(noreplace) /etc/sysconfig/nfs -%config(noreplace) /etc/idmapd.conf %dir /var/lib/nfs/v4recovery %dir /var/lib/nfs/rpc_pipefs %dir /var/lib/nfs %dir %attr(700,rpcuser,rpcuser) /var/lib/nfs/statd +%dir %attr(700,rpcuser,rpcuser) /var/lib/nfs/statd/sm %config(noreplace) /var/lib/nfs/xtab %config(noreplace) /var/lib/nfs/etab %config(noreplace) /var/lib/nfs/rmtab %config(noreplace) /var/lib/nfs/state %doc linux-nfs/* -/sbin/rpc.lockd /sbin/rpc.statd /usr/sbin/exportfs /usr/sbin/nfsstat @@ -291,6 +251,8 @@ fi /usr/sbin/rpc.svcgssd /usr/sbin/gss_clnt_send_err /usr/sbin/gss_destroy_creds +/usr/sbin/sm-notify +/usr/sbin/start-statd %{_mandir}/*/* %config /etc/rc.d/init.d/nfslock @@ -300,6 +262,9 @@ fi %attr(4755,root,root) /sbin/umount.nfs4 %changelog +* Sat Jul 28 2007 Steve Dickson 1.1.0-1 +- Upgraded to the latest upstream version (nfs-utils-1.1.0) + * Thu May 24 2007 Steve Dickson 1.0.10-7 - Fixed typo in mount.nfs4 that causes a segfault during error processing (bz 241190) diff --git a/nfs.init b/nfs.init index 5bb7b6c..7948d63 100755 --- a/nfs.init +++ b/nfs.init @@ -15,17 +15,17 @@ # Source networking configuration. if [ ! -f /etc/sysconfig/network ]; then - exit 0 + exit 6 fi . /etc/sysconfig/network # Check that networking is up. -[ "${NETWORKING}" = "no" ] && exit 0 +[ "${NETWORKING}" = "no" ] && exit 6 -[ -x /usr/sbin/rpc.nfsd ] || exit 0 -[ -x /usr/sbin/rpc.mountd ] || exit 0 -[ -x /usr/sbin/exportfs ] || exit 0 +[ -x /usr/sbin/rpc.nfsd ] || exit 5 +[ -x /usr/sbin/rpc.mountd ] || exit 5 +[ -x /usr/sbin/exportfs ] || exit 5 # Don't fail if /etc/exports doesn't exist; create a bare-bones version and continue. [ -r /etc/exports ] || \ @@ -106,7 +106,6 @@ case "$1" in ;; stop) # Stop daemons. - [ -x /usr/sbin/rpc.svcgssd ] && /sbin/service rpcsvcgssd stop echo -n $"Shutting down NFS mountd: " killproc rpc.mountd echo @@ -116,6 +115,7 @@ case "$1" in if [ -n "$RQUOTAD" -a "$RQUOTAD" != "no" ]; then echo -n $"Shutting down NFS quotas: " killproc rpc.rquotad + RETVAL=$? echo fi # Reset the lockd ports if they were set @@ -133,6 +133,7 @@ case "$1" in else action $"Shutting down NFS services: " /bin/false fi + [ -x /usr/sbin/rpc.svcgssd ] && /sbin/service rpcsvcgssd stop rm -f /var/lock/subsys/nfs ;; status) @@ -172,15 +173,10 @@ case "$1" in $0 start } ;; - condstop) - [ -x /usr/sbin/rpc.svcgssd ] && /sbin/service rpcsvcgssd condstop - [ -f /var/lock/subsys/nfs ] && { - $0 stop - } - ;; *) - echo $"Usage: nfs {start|stop|status|restart|reload|condrestart|condstop}" - exit 1 + echo $"Usage: nfs {start|stop|status|restart|reload|condrestart}" + RETVAL=3 + ;; esac -exit $? +exit $RETVAL diff --git a/nfslock.init b/nfslock.init index 82bbdf0..b98b8af 100755 --- a/nfslock.init +++ b/nfslock.init @@ -14,7 +14,7 @@ # Source networking configuration. if [ ! -f /etc/sysconfig/network ]; then - exit 0 + exit 6 fi # Check for and source configuration file @@ -23,7 +23,7 @@ fi . /etc/sysconfig/network # Check that networking is up. -[ "${NETWORKING}" = "no" ] && exit 0 +[ "${NETWORKING}" = "no" ] && exit 6 # Start lockd from userland only if kernel <= 2.2.18 OS_RELEASE=`uname --release` @@ -38,10 +38,10 @@ else fi if [ "$USERLAND_LOCKD" ] ; then - [ -x /sbin/rpc.lockd ] || exit 0 + [ -x /sbin/rpc.lockd ] || exit 5 fi -[ -x /sbin/rpc.statd ] || exit 0 +[ -x /sbin/rpc.statd ] || exit 5 RETVAL=0 if [ -n "${STATD_HOSTNAME}" ]; then @@ -139,14 +139,10 @@ case "$1" in start } ;; - condstop) - [ -f /var/lock/subsys/nfslock ] && { - stop - } - ;; *) - echo $"Usage: $0 {start|stop|status|restart|probe|condrestart|condstop}" - exit 1 + echo $"Usage: $0 {start|stop|status|restart|probe|condrestart}" + RETVAL=3 + ;; esac exit $RETVAL diff --git a/rpcgssd.init b/rpcgssd.init index a6cc8f1..4c603a2 100755 --- a/rpcgssd.init +++ b/rpcgssd.init @@ -4,7 +4,7 @@ # # Authors: Chuck Lever # -# chkconfig: 345 19 69 +# chkconfig: 345 19 85 # description: Starts user-level daemon that manages RPCSEC GSS contexts \ # for the NFSv4 client. @@ -13,18 +13,18 @@ # Source networking configuration. if [ ! -f /etc/sysconfig/network ]; then - exit 0 + exit 6 fi . /etc/sysconfig/network # Check that networking is up. -[ "${NETWORKING}" = "no" ] && exit 0 +[ "${NETWORKING}" = "no" ] && exit 6 -[ ! -x /usr/sbin/rpc.gssd ] && exit 0 +[ ! -x /usr/sbin/rpc.gssd ] && exit 5 # Check for and source configuration file otherwise set defaults [ -f /etc/sysconfig/nfs ] && . /etc/sysconfig/nfs -[ "${SECURE_NFS}" != "yes" ] && exit 0 +[ "${SECURE_NFS}" != "yes" ] && exit 6 # List of kernel modules to load [ -z "${SECURE_NFS_MODS}" ] && SECURE_NFS_MODS="des rpcsec_gss_krb5" @@ -45,26 +45,36 @@ case "$1" in echo -n $"Starting RPC gssd: " - # Load sunrpc which mounts the rpc_pipes fs. - [ -x /sbin/lsmod -a -x /sbin/modprobe ] && { - if ! /sbin/lsmod | grep sunrpc > /dev/null ; then - /sbin/modprobe sunrpc || exit 1 - fi - # Load rpcsec modules - for i in ${SECURE_NFS_MODS} - do - if ! /sbin/lsmod | grep $i > /dev/null ; then - /sbin/modprobe $i || exit 1 - fi - done + # Make sure the rpc_pipefs filesystem is available + [ "${RPCMTAB}" != "noload" ] && { + RPCMTAB=`grep -v '^#' /proc/mounts | \ + awk '{ if ($3 ~ /^rpc_pipefs$/ ) print $2}'` + [ -z "${RPCMTAB}" ] && { + [ -x /sbin/lsmod -a -x /sbin/modprobe ] && { + if ! /sbin/lsmod | grep sunrpc > /dev/null ; then + /sbin/modprobe sunrpc + fi + } + RPCMTAB=`grep -v '^#' /proc/mounts | \ + awk '{ if ($3 ~ /^rpc_pipefs$/ ) print $2}'` + [ -z "${RPCMTAB}" ] && { \ + echo "Error: RPC MTAB does not exist." + exit 6 + } + } + } + [ "${SECURE_NFS_MODS}" != "noload" ] && { + [ -x /sbin/lsmod -a -x /sbin/modprobe ] && { + for i in ${SECURE_NFS_MODS}; do + if ! /sbin/lsmod | grep $i > /dev/null ; then + /sbin/modprobe $i || { + echo "Error: Unable to load '$i' security module." + exit 6; + } + fi + done + } } - # Make sure the mount worked. - [ -z "${RPCMTAB}" ] && RPCMTAB=`grep -v '^#' /proc/mounts | \ - awk '{ if ($3 ~ /^rpc_pipefs$/ ) print $2}'` - [ -z "${RPCMTAB}" ] && { - echo "Error: RPC MTAB does not exist." - exit 1 - } # Start daemon. daemon $prog ${RPCGSSDARGS} @@ -74,7 +84,7 @@ case "$1" in ;; stop) # Stop daemon. - echo -n $"Shutting down RPC gssd: " + echo -n $"Stopping RPC gssd: " killproc $prog RETVAL=$? echo @@ -95,15 +105,10 @@ case "$1" in RETVAL=$? fi ;; - condstop) - if [ -f $LOCKFILE ]; then - $0 stop - RETVAL=$? - fi - ;; *) - echo $"Usage: $0 {start|stop|restart|condstart|condrestart|condstop|status}" - exit 1 + echo $"Usage: $0 {start|stop|restart|condstart|condrestart|status}" + RETVAL=3 + ;; esac exit $RETVAL diff --git a/rpcidmapd.init b/rpcidmapd.init index 11878d0..3c98e92 100755 --- a/rpcidmapd.init +++ b/rpcidmapd.init @@ -4,7 +4,7 @@ # # Authors: Chuck Lever # -# chkconfig: 345 18 68 +# chkconfig: 345 18 85 # description: Starts user-level daemon for NFSv4 that maps user \ # names to UID and GID numbers. @@ -13,14 +13,14 @@ # Source networking configuration. if [ ! -f /etc/sysconfig/network ]; then - exit 0 + exit 6 fi . /etc/sysconfig/network # Check that networking is up. -[ "${NETWORKING}" = "no" ] && exit 0 +[ "${NETWORKING}" = "no" ] && exit 6 -[ ! -x /usr/sbin/rpc.idmapd ] && exit 0 +[ ! -x /usr/sbin/rpc.idmapd ] && exit 5 # Check for and source configuration file otherwise set defaults [ -f /etc/sysconfig/nfs ] && . /etc/sysconfig/nfs @@ -40,20 +40,26 @@ case "$1" in echo -n $"Starting RPC idmapd: " - # Load sunrpc which mounts the rpc_pipes fs. - [ -x /sbin/lsmod -a -x /sbin/modprobe ] && { - if ! /sbin/lsmod | grep sunrpc > /dev/null ; then - /sbin/modprobe sunrpc || exit 1 - fi + # Make sure the rpc_pipefs filesystem is available + [ "${RPCMTAB}" != "noload" ] && { + RPCMTAB=`grep -v '^#' /proc/mounts | \ + awk '{ if ($3 ~ /^rpc_pipefs$/ ) print $2}'` + [ -z "${RPCMTAB}" ] && { + [ -x /sbin/lsmod -a -x /sbin/modprobe ] && { + if ! /sbin/lsmod | grep sunrpc > /dev/null ; then + /sbin/modprobe sunrpc + fi + } + RPCMTAB=`grep -v '^#' /proc/mounts | \ + awk '{ if ($3 ~ /^rpc_pipefs$/ ) print $2}'` + [ -z "${RPCMTAB}" ] && { \ + echo "Error: RPC MTAB does not exist." + exit 6 + } + } } # Make sure the mount worked. - [ -z "${RPCMTAB}" ] && RPCMTAB=`grep -v '^#' /proc/mounts | \ - awk '{ if ($3 ~ /^rpc_pipefs$/ ) print $2}'` - [ -z "${RPCMTAB}" ] && { - echo "Error: RPC MTAB does not exist." - exit 1 - } # Start daemon. daemon $prog ${RPCIDMAPDARGS} @@ -63,7 +69,7 @@ case "$1" in ;; stop) # Stop daemon. - echo -n $"Shutting down RPC idmapd: " + echo -n $"Stopping RPC idmapd: " killproc $prog RETVAL=$? echo @@ -84,15 +90,10 @@ case "$1" in RETVAL=$? fi ;; - condstop) - if [ -f $LOCKFILE ]; then - $0 stop - RETVAL=$? - fi - ;; *) - echo $"Usage: $0 {start|stop|restart|condstart|condrestart|condstop|status}" - exit 1 + echo $"Usage: $0 {start|stop|restart|condstart|condrestart|status}" + RETVAL=3 + ;; esac exit $RETVAL diff --git a/rpcsvcgssd.init b/rpcsvcgssd.init index 12c25a7..227fe05 100755 --- a/rpcsvcgssd.init +++ b/rpcsvcgssd.init @@ -13,18 +13,18 @@ # Source networking configuration. if [ ! -f /etc/sysconfig/network ]; then - exit 0 + exit 6 fi . /etc/sysconfig/network # Check that networking is up. -[ "${NETWORKING}" = "no" ] && exit 0 +[ "${NETWORKING}" = "no" ] && exit 6 -[ ! -x /usr/sbin/rpc.svcgssd ] && exit 0 +[ ! -x /usr/sbin/rpc.svcgssd ] && exit 5 # Check for and source configuration file otherwise set defaults [ -f /etc/sysconfig/nfs ] && . /etc/sysconfig/nfs -[ "${SECURE_NFS}" != "yes" ] && exit 0 +[ "${SECURE_NFS}" != "yes" ] && exit 6 # List of kernel modules to load [ -z "${SECURE_NFS_MODS}" ] && SECURE_NFS_MODS="des rpcsec_gss_krb5" @@ -43,28 +43,39 @@ case "$1" in echo -n $"Starting RPC svcgssd: " - # Load sunrpc which mounts the rpc_pipes fs. - [ -x /sbin/lsmod -a -x /sbin/modprobe ] && { - if ! /sbin/lsmod | grep sunrpc > /dev/null ; then - /sbin/modprobe sunrpc || exit 1 - fi + # Make sure the rpc_pipefs filesystem is available + [ "${RPCMTAB}" != "noload" ] && { + RPCMTAB=`grep -v '^#' /proc/mounts | \ + awk '{ if ($3 ~ /^rpc_pipefs$/ ) print $2}'` + [ -z "${RPCMTAB}" ] && { + [ -x /sbin/lsmod -a -x /sbin/modprobe ] && { + if ! /sbin/lsmod | grep sunrpc > /dev/null ; then + /sbin/modprobe sunrpc + fi + } + RPCMTAB=`grep -v '^#' /proc/mounts | \ + awk '{ if ($3 ~ /^rpc_pipefs$/ ) print $2}'` + [ -z "${RPCMTAB}" ] && { \ + echo "Error: RPC MTAB does not exist." + exit 6 + } + } + } + [ "${SECURE_NFS_MODS}" != "noload" ] && { + [ -x /sbin/lsmod -a -x /sbin/modprobe ] && { # Load rpcsec modules - for i in ${SECURE_NFS_MODS} - do - if ! /sbin/lsmod | grep $i > /dev/null ; then - /sbin/modprobe $i || exit 1 - fi - done + for i in ${SECURE_NFS_MODS} + do + if ! /sbin/lsmod | grep $i > /dev/null ; then + /sbin/modprobe $i || { + echo "Error: Unable to load '$i' security module." + exit 6; + } + fi + done + } } - # Make sure the mount worked. - [ -z "${RPCMTAB}" ] && RPCMTAB=`grep -v '^#' /proc/mounts | \ - awk '{ if ($3 ~ /^rpc_pipefs$/ ) print $2}'` - [ -z "${RPCMTAB}" ] && { - echo "Error: RPC MTAB does not exist." - exit 1 - } - # Start daemon. daemon $prog ${RPCSVCGSSDARGS} RETVAL=$? @@ -94,15 +105,10 @@ case "$1" in RETVAL=$? fi ;; - condstop) - if [ -f $LOCKFILE ]; then - $0 stop - RETVAL=$? - fi - ;; *) - echo $"Usage: $0 {start|stop|restart|condstart|condrestart|condstop|status}" - exit 1 + echo $"Usage: $0 {start|stop|restart|condstart|condrestart|status}" + RETVAL=3 + ;; esac exit $RETVAL diff --git a/sources b/sources index 58a3e7f..8db56d9 100644 --- a/sources +++ b/sources @@ -1,2 +1,2 @@ ae7db9c61c5ad04f83bb99e5caed73da nfs.doc.tar.gz -2c4425cad533d327afce16d30a344e19 nfs-utils-1.0.12.tar.bz2 +42d92ed97f7d4071a017ccac8055cf51 nfs-utils-1.1.0.tar.bz2