- Upgraded to the latest upstream version (nfs-utils-1.1.0)
This commit is contained in:
parent
f543a222e2
commit
cafae3aae5
@ -9,3 +9,4 @@ nfs-utils-1.0.9.tar.bz2
|
|||||||
nfs-utils-1.0.10.tar.bz2
|
nfs-utils-1.0.10.tar.bz2
|
||||||
nfs-utils-1.0.11.tar.bz2
|
nfs-utils-1.0.11.tar.bz2
|
||||||
nfs-utils-1.0.12.tar.bz2
|
nfs-utils-1.0.12.tar.bz2
|
||||||
|
nfs-utils-1.1.0.tar.bz2
|
||||||
|
@ -1,35 +0,0 @@
|
|||||||
|
|
||||||
Signed-off-by: Karel Zak <kzak@redhat.com>
|
|
||||||
|
|
||||||
--- 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);
|
|
||||||
}
|
|
@ -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 *);
|
|
@ -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
|
|
@ -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;
|
|
@ -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);
|
|
||||||
}
|
|
@ -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;
|
|
||||||
}
|
|
||||||
|
|
@ -1,132 +0,0 @@
|
|||||||
commit ec08843916d07c28045398e5b17e7347a8fa0135
|
|
||||||
Author: Steve Dickson <steved@redhat.com>
|
|
||||||
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 <jlayton@redhat.com>
|
|
||||||
|
|
||||||
Signed-off-by: Steve Dickson <steved@redhat.com>
|
|
||||||
|
|
||||||
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 <netinet/in.h>
|
|
||||||
#include <arpa/inet.h>
|
|
||||||
#include <errno.h>
|
|
||||||
+#include <unistd.h>
|
|
||||||
#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);
|
|
@ -1,43 +0,0 @@
|
|||||||
commit 28343730efd6f99efff197bf1efd4b975e874ce4
|
|
||||||
Author: Steve Dickson <steved@redhat.com>
|
|
||||||
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 <steved@redhat.com>
|
|
||||||
|
|
||||||
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.
|
|
@ -1,6 +1,6 @@
|
|||||||
--- ./utils/statd/statd.h.orig 2002-09-01 22:31:23.000000000 -0400
|
--- nfs-utils-1.1.0/utils/statd/statd.h.orig 2007-05-10 23:40:57.000000000 -0400
|
||||||
+++ ./utils/statd/statd.h 2003-07-21 10:45:54.000000000 -0400
|
+++ nfs-utils-1.1.0/utils/statd/statd.h 2007-07-14 05:55:57.000000000 -0400
|
||||||
@@ -13,10 +13,11 @@
|
@@ -16,10 +16,11 @@
|
||||||
/*
|
/*
|
||||||
* Paths and filenames.
|
* Paths and filenames.
|
||||||
*/
|
*/
|
||||||
@ -14,19 +14,19 @@
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define DEFAULT_SM_DIR DEFAULT_DIR_BASE "sm"
|
#define DEFAULT_SM_DIR DEFAULT_DIR_BASE "sm"
|
||||||
--- ./utils/statd/statd.man.orig 2002-09-16 15:23:03.000000000 -0400
|
--- nfs-utils-1.1.0/utils/statd/statd.man.orig 2007-05-10 23:40:57.000000000 -0400
|
||||||
+++ ./utils/statd/statd.man 2003-06-02 15:01:41.000000000 -0400
|
+++ nfs-utils-1.1.0/utils/statd/statd.man 2007-07-14 05:57:20.000000000 -0400
|
||||||
@@ -23,7 +23,7 @@ reboots.
|
@@ -24,7 +24,7 @@ reboots.
|
||||||
For each NFS client or server machine to be monitored,
|
For each NFS client or server machine to be monitored,
|
||||||
.B rpc.statd
|
.B rpc.statd
|
||||||
creates a file in
|
creates a file in
|
||||||
-.BR /var/lib/nfs/sm .
|
-.BR /var/lib/nfs/sm .
|
||||||
+.BR /var/lib/nfs/statd/sm .
|
+.BR /var/lib/nfs/statd/sm .
|
||||||
When starting, it iterates through these files and notifies the
|
When starting, it normally runs
|
||||||
peer
|
.B sm-notify
|
||||||
.B rpc.statd
|
to iterate through these files and notify the
|
||||||
@@ -136,11 +136,11 @@ and
|
@@ -176,11 +176,11 @@ and send notifications to clients. This
|
||||||
manual pages.
|
of an NFS export from another server.
|
||||||
|
|
||||||
.SH FILES
|
.SH FILES
|
||||||
-.BR /var/lib/nfs/state
|
-.BR /var/lib/nfs/state
|
||||||
|
@ -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
|
|
@ -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
|
|
@ -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])
|
|
||||||
|
|
@ -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);
|
|
||||||
}
|
|
||||||
|
|
@ -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" <jrs@world.std.com>
|
|
||||||
+.\" 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" <jrs@world.std.com>
|
|
||||||
+.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)
|
|
||||||
|
|
@ -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 <sys/mount.h>
|
|
||||||
#include <getopt.h>
|
|
||||||
#include <mntent.h>
|
|
||||||
+#include <pwd.h>
|
|
||||||
|
|
||||||
#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 <mntent.h>
|
|
||||||
#include <sys/mount.h>
|
|
||||||
#include <ctype.h>
|
|
||||||
+#include <pwd.h>
|
|
||||||
|
|
||||||
#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,
|
|
@ -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 <kzak@redhat.com>
|
|
||||||
Signed-off-by: Cory Olmo <colmo@TrustedCS.com>
|
|
||||||
|
|
||||||
--- 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);
|
|
||||||
}
|
|
||||||
-
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
@ -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);
|
|
@ -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);
|
|
||||||
}
|
|
@ -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,
|
|
@ -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;
|
|
||||||
}
|
|
11
nfs-utils-1.1.0-exp-subtree-warn-off.patch
Normal file
11
nfs-utils-1.1.0-exp-subtree-warn-off.patch
Normal file
@ -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;
|
||||||
|
|
@ -1,5 +1,42 @@
|
|||||||
--- nfs-utils-1.0.9/utils/mount/nfs4mount.c.orig 2006-10-16 08:32:53.789617000 -0400
|
--- nfs-utils-1.1.0/utils/mount/nfsmount.c.orig 2007-05-10 23:40:57.000000000 -0400
|
||||||
+++ nfs-utils-1.0.9/utils/mount/nfs4mount.c 2006-10-16 08:33:53.098133000 -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
|
@@ -201,7 +201,7 @@ int nfs4mount(const char *spec, const ch
|
||||||
char *s;
|
char *s;
|
||||||
int val;
|
int val;
|
||||||
@ -36,60 +73,25 @@
|
|||||||
|
|
||||||
/*
|
/*
|
||||||
* Give a warning if the rpc.idmapd daemon is not running
|
* 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.1.0/utils/mount/nfs4_mount.h.orig 2007-05-10 23:40:57.000000000 -0400
|
||||||
+++ nfs-utils-1.0.9/utils/mount/nfs_mount.h 2006-10-16 08:33:53.113133000 -0400
|
+++ nfs-utils-1.1.0/utils/mount/nfs4_mount.h 2007-07-25 11:27:07.000000000 -0400
|
||||||
@@ -63,6 +63,7 @@ struct nfs_mount_data {
|
@@ -65,7 +65,8 @@ struct nfs4_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_NOCTO 0x0010 /* 1 */
|
||||||
#define NFS4_MOUNT_NOAC 0x0020 /* 1 */
|
#define NFS4_MOUNT_NOAC 0x0020 /* 1 */
|
||||||
#define NFS4_MOUNT_STRICTLOCK 0x1000 /* 1 */
|
#define NFS4_MOUNT_STRICTLOCK 0x1000 /* 1 */
|
||||||
+#define NFS4_MOUNT_FSCACHE 0x4000 /* 1 */
|
-#define NFS4_MOUNT_FLAGMASK 0xFFFF
|
||||||
#define NFS4_MOUNT_FLAGMASK 0xFFFF
|
+#define NFS4_MOUNT_FSCACHE 0x10000 /* 1 */
|
||||||
|
+#define NFS4_MOUNT_FLAGMASK 0x1FFFF
|
||||||
|
|
||||||
/* pseudoflavors: */
|
/* 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
|
--- nfs-utils-1.1.0/utils/mount/nfs_mount.h.orig 2007-05-10 23:40:57.000000000 -0400
|
||||||
@@ -272,6 +272,10 @@ default UDP protocol. Many NFS servers
|
+++ nfs-utils-1.1.0/utils/mount/nfs_mount.h 2007-07-25 11:26:39.000000000 -0400
|
||||||
.I udp
|
@@ -64,6 +64,7 @@ struct nfs_mount_data {
|
||||||
Mount the NFS filesystem using the UDP protocol. This
|
#define NFS_MOUNT_NOACL 0x0800 /* 4 */
|
||||||
is the default.
|
#define NFS_MOUNT_SECFLAVOUR 0x2000 /* 5 */
|
||||||
+.TP 1.5i
|
#define NFS_MOUNT_NORDIRPLUS 0x4000 /* 5 */
|
||||||
+.I fsc
|
+#define NFS_MOUNT_FSCACHE 0x10000 /* 5 */
|
||||||
+Enable the use of persistent caching to the local disk using
|
|
||||||
+the FS-Cache facility for the given mount point.
|
/* security pseudoflavors */
|
||||||
.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
|
|
@ -1,46 +1,37 @@
|
|||||||
commit 99defadcebf3bf892871f5541bfe762685faccbd
|
--- nfs-utils-1.1.0/utils/mount/mount.c.orig 2007-07-18 16:26:01.000000000 -0400
|
||||||
Author: Steve Dickson <steved@redhat.com>
|
+++ nfs-utils-1.1.0/utils/mount/mount.c 2007-07-18 16:37:34.000000000 -0400
|
||||||
Date: Wed May 9 13:14:26 2007 -0400
|
@@ -286,17 +286,24 @@ static void parse_opts (const char *opti
|
||||||
|
}
|
||||||
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 <steved@redhat.com>
|
|
||||||
|
|
||||||
--- 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 *node)
|
||||||
+static void mount_error(char *mntpnt, char *node)
|
+static void mount_error(char *mount_point, char *node)
|
||||||
{
|
{
|
||||||
switch(errno) {
|
switch(errno) {
|
||||||
case ENOTDIR:
|
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, node);
|
||||||
+ fprintf(stderr, "%s: mount point %s is not a directory\n",
|
+ fprintf(stderr, "%s: mount point %s is not a directory\n",
|
||||||
+ progname, mntpnt);
|
+ progname, mount_point);
|
||||||
break;
|
break;
|
||||||
case EBUSY:
|
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, node);
|
||||||
+ fprintf(stderr, "%s: %s is already mounted or busy\n",
|
+ fprintf(stderr, "%s: %s is already mounted or busy\n", progname,
|
||||||
+ progname, mntpnt);
|
+ mount_point);
|
||||||
break;
|
break;
|
||||||
case ENOENT:
|
case ENOENT:
|
||||||
- fprintf(stderr, "%s: mount point %s does not exist\n", progname, node);
|
- fprintf(stderr, "%s: mount point %s does not exist\n", progname, node);
|
||||||
+ if (node) {
|
+ if (node)
|
||||||
+ fprintf(stderr, "%s: %s failed, reason given by server: %s\n",
|
+ fprintf(stderr, "%s: %s failed, reason given by server: %s\n",
|
||||||
+ progname, node, strerror(errno));
|
+ progname, node, strerror(errno));
|
||||||
+ } else
|
+ else
|
||||||
+ fprintf(stderr, "%s: mount point %s does not exist\n",
|
+ fprintf(stderr, "%s: mount point %s does not exist\n", progname,
|
||||||
+ progname, mntpnt);
|
+ mount_point);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
fprintf(stderr, "%s: %s\n", progname, strerror(errno));
|
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)
|
+static int chk_mountpoint(char *mount_point)
|
||||||
+{
|
+{
|
||||||
@ -62,21 +53,21 @@ Date: Wed May 9 13:14:26 2007 -0400
|
|||||||
+
|
+
|
||||||
+ return 0;
|
+ return 0;
|
||||||
+}
|
+}
|
||||||
#define NFS_MOUNT_VERS_DEFAULT 3
|
|
||||||
|
|
||||||
int main(int argc, char *argv[])
|
int main(int argc, char *argv[])
|
||||||
@@ -493,6 +520,9 @@
|
{
|
||||||
|
@@ -509,6 +536,9 @@ int main(int argc, char *argv[])
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
+ if (chk_mountpoint(mount_point))
|
+ if (chk_mountpoint(mount_point))
|
||||||
+ exit(EX_FAIL);
|
+ exit(1);
|
||||||
+
|
+
|
||||||
if (nfs_mount_vers == 4) {
|
if (nfs_mount_vers == 4)
|
||||||
mnt_err = nfs4mount(spec, mount_point, &flags,
|
mnt_err = nfs4mount(spec, mount_point, &flags, &extra_opts, &mount_opts, 0);
|
||||||
&extra_opts, &mount_opts, 0);
|
else {
|
||||||
@@ -512,7 +542,7 @@
|
@@ -539,7 +569,7 @@ int main(int argc, char *argv[])
|
||||||
flags, mount_opts);
|
mount_opts);
|
||||||
|
|
||||||
if (mnt_err) {
|
if (mnt_err) {
|
||||||
- mount_error(mount_point);
|
- mount_error(mount_point);
|
20
nfs-utils-1.1.0-showmount-rpcerror.patch
Normal file
20
nfs-utils-1.1.0-showmount-rpcerror.patch
Normal file
@ -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;
|
@ -1,8 +1,8 @@
|
|||||||
Summary: NFS utilities and supporting clients and daemons for the kernel NFS server
|
Summary: NFS utilities and supporting clients and daemons for the kernel NFS server
|
||||||
Name: nfs-utils
|
Name: nfs-utils
|
||||||
URL: http://sourceforge.net/projects/nfs
|
URL: http://sourceforge.net/projects/nfs
|
||||||
Version: 1.0.12
|
Version: 1.1.0
|
||||||
Release: 7%{?dist}
|
Release: 1%{?dist}
|
||||||
Epoch: 1
|
Epoch: 1
|
||||||
|
|
||||||
# group all 32bit related archs
|
# group all 32bit related archs
|
||||||
@ -24,35 +24,19 @@ Source15: nfs.sysconfig
|
|||||||
|
|
||||||
Patch00: nfs-utils-1.0.5-statdpath.patch
|
Patch00: nfs-utils-1.0.5-statdpath.patch
|
||||||
Patch01: nfs-utils-1.0.6-mountd.patch
|
Patch01: nfs-utils-1.0.6-mountd.patch
|
||||||
Patch02: nfs-utils-1.0.6-idmap.conf.patch
|
Patch02: nfs-utils-1.0.6-gssd_mixed_case.patch
|
||||||
Patch03: nfs-utils-1.0.6-gssd_mixed_case.patch
|
Patch03: nfs-utils-1.0.12-mountd-memleak.patch
|
||||||
Patch04: nfs-utils-1.0.8-privports.patch
|
Patch04: nfs-utils-1.0.12-nfsd-macargs.patch
|
||||||
Patch05: nfs-utils-1.0.12-export-nosubtree.patch
|
Patch05: nfs-utils-1.0.12-mtab-mis-unlock.patch
|
||||||
Patch06: nfs-utils-1.0.9-mount-options-v3.patch
|
Patch06: nfs-utils-1.1.0-exp-subtree-warn-off.patch
|
||||||
Patch07: nfs-utils-1.0.9-lazy-umount.patch
|
Patch07: nfs-utils-1.1.0-showmount-rpcerror.patch
|
||||||
Patch08: nfs-utils-1.0.9-mount-sloppy.patch
|
Patch08: nfs-utils-1.1.0-mount-v4-errors.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
|
|
||||||
|
|
||||||
%if %{enablefscache}
|
%if %{enablefscache}
|
||||||
Patch90: nfs-utils-1.0.9-mount-fsc.patch
|
Patch90: nfs-utils-1.1.0-mount-fsc.patch
|
||||||
%endif
|
%endif
|
||||||
|
|
||||||
Patch100: nfs-utils-1.0.9-compile.patch
|
#Patch100: nfs-utils-1.0.9-compile.patch
|
||||||
|
|
||||||
Group: System Environment/Daemons
|
Group: System Environment/Daemons
|
||||||
Provides: exportfs = %{epoch}:%{version}-%{release}
|
Provides: exportfs = %{epoch}:%{version}-%{release}
|
||||||
@ -63,25 +47,27 @@ Provides: rpc.idmapd = %{epoch}:%{version}-%{release}
|
|||||||
Provides: rpc.mountd = %{epoch}:%{version}-%{release}
|
Provides: rpc.mountd = %{epoch}:%{version}-%{release}
|
||||||
Provides: rpc.nfsd = %{epoch}:%{version}-%{release}
|
Provides: rpc.nfsd = %{epoch}:%{version}-%{release}
|
||||||
Provides: rpc.statd = %{epoch}:%{version}-%{release}
|
Provides: rpc.statd = %{epoch}:%{version}-%{release}
|
||||||
Provides: rpc.lockd = %{epoch}:%{version}-%{release}
|
|
||||||
Provides: rpc.gssd = %{epoch}:%{version}-%{release}
|
Provides: rpc.gssd = %{epoch}:%{version}-%{release}
|
||||||
Provides: rpc.svcgssd = %{epoch}:%{version}-%{release}
|
Provides: rpc.svcgssd = %{epoch}:%{version}-%{release}
|
||||||
Provides: mount.nfs = %{epoch}:%{version}-%{release}
|
Provides: mount.nfs = %{epoch}:%{version}-%{release}
|
||||||
Provides: mount.nfs4 = %{epoch}:%{version}-%{release}
|
Provides: mount.nfs4 = %{epoch}:%{version}-%{release}
|
||||||
Provides: umount.nfs = %{epoch}:%{version}-%{release}
|
Provides: umount.nfs = %{epoch}:%{version}-%{release}
|
||||||
Provides: umount.nfs4 = %{epoch}:%{version}-%{release}
|
Provides: umount.nfs4 = %{epoch}:%{version}-%{release}
|
||||||
|
Provides: sm-notify = %{epoch}:%{version}-%{release}
|
||||||
|
Provides: start-statd = %{epoch}:%{version}-%{release}
|
||||||
|
|
||||||
License: GPL
|
License: GPL
|
||||||
Buildroot: %{_tmppath}/%{name}-%{version}-root
|
Buildroot: %{_tmppath}/%{name}-%{version}-root
|
||||||
Requires: rpcbind, sed, gawk, sh-utils, fileutils, textutils, grep
|
Requires: rpcbind, sed, gawk, sh-utils, fileutils, textutils, grep
|
||||||
Requires: modutils >= 2.4.26-9
|
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: krb5-libs >= 1.4 autoconf >= 2.57 openldap-devel >= 2.2
|
||||||
BuildRequires: automake, libtool, keyutils-libs-devel
|
BuildRequires: automake, libtool
|
||||||
BuildRequires: tcp_wrappers-devel, e2fsprogs-devel, krb5-devel
|
BuildRequires: e2fsprogs-devel, krb5-devel, tcp_wrappers-devel
|
||||||
Requires(pre): shadow-utils >= 4.0.3-25
|
Requires(pre): shadow-utils >= 4.0.3-25
|
||||||
Requires(pre): /sbin/chkconfig /sbin/nologin
|
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
|
%description
|
||||||
The nfs-utils package provides a daemon for the kernel NFS server and
|
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
|
%patch06 -p1
|
||||||
%patch07 -p1
|
%patch07 -p1
|
||||||
%patch08 -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}
|
%if %{enablefscache}
|
||||||
%patch90 -p1
|
%patch90 -p1
|
||||||
%endif
|
%endif
|
||||||
|
|
||||||
# Do the magic to get things to compile
|
# Do the magic to get things to compile
|
||||||
%patch100 -p1
|
#%patch100 -p1
|
||||||
|
|
||||||
# Remove .orig files
|
# Remove .orig files
|
||||||
find . -name "*.orig" | xargs rm -f
|
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 755 %{SOURCE14} $RPM_BUILD_ROOT/etc/rc.d/init.d/rpcsvcgssd
|
||||||
install -m 644 %{SOURCE15} $RPM_BUILD_ROOT/etc/sysconfig/nfs
|
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
|
mkdir -p $RPM_BUILD_ROOT/var/lib/nfs/rpc_pipefs
|
||||||
|
|
||||||
touch $RPM_BUILD_ROOT/var/lib/nfs/rmtab
|
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/rpc.statd $RPM_BUILD_ROOT/sbin
|
||||||
mv $RPM_BUILD_ROOT/usr/sbin/{mount.*,umount.*} $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
|
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
|
%clean
|
||||||
rm -rf $RPM_BUILD_ROOT
|
rm -rf $RPM_BUILD_ROOT
|
||||||
|
|
||||||
@ -268,17 +229,16 @@ fi
|
|||||||
%config /etc/rc.d/init.d/rpcgssd
|
%config /etc/rc.d/init.d/rpcgssd
|
||||||
%config /etc/rc.d/init.d/rpcsvcgssd
|
%config /etc/rc.d/init.d/rpcsvcgssd
|
||||||
%config(noreplace) /etc/sysconfig/nfs
|
%config(noreplace) /etc/sysconfig/nfs
|
||||||
%config(noreplace) /etc/idmapd.conf
|
|
||||||
%dir /var/lib/nfs/v4recovery
|
%dir /var/lib/nfs/v4recovery
|
||||||
%dir /var/lib/nfs/rpc_pipefs
|
%dir /var/lib/nfs/rpc_pipefs
|
||||||
%dir /var/lib/nfs
|
%dir /var/lib/nfs
|
||||||
%dir %attr(700,rpcuser,rpcuser) /var/lib/nfs/statd
|
%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/xtab
|
||||||
%config(noreplace) /var/lib/nfs/etab
|
%config(noreplace) /var/lib/nfs/etab
|
||||||
%config(noreplace) /var/lib/nfs/rmtab
|
%config(noreplace) /var/lib/nfs/rmtab
|
||||||
%config(noreplace) /var/lib/nfs/state
|
%config(noreplace) /var/lib/nfs/state
|
||||||
%doc linux-nfs/*
|
%doc linux-nfs/*
|
||||||
/sbin/rpc.lockd
|
|
||||||
/sbin/rpc.statd
|
/sbin/rpc.statd
|
||||||
/usr/sbin/exportfs
|
/usr/sbin/exportfs
|
||||||
/usr/sbin/nfsstat
|
/usr/sbin/nfsstat
|
||||||
@ -291,6 +251,8 @@ fi
|
|||||||
/usr/sbin/rpc.svcgssd
|
/usr/sbin/rpc.svcgssd
|
||||||
/usr/sbin/gss_clnt_send_err
|
/usr/sbin/gss_clnt_send_err
|
||||||
/usr/sbin/gss_destroy_creds
|
/usr/sbin/gss_destroy_creds
|
||||||
|
/usr/sbin/sm-notify
|
||||||
|
/usr/sbin/start-statd
|
||||||
%{_mandir}/*/*
|
%{_mandir}/*/*
|
||||||
%config /etc/rc.d/init.d/nfslock
|
%config /etc/rc.d/init.d/nfslock
|
||||||
|
|
||||||
@ -300,6 +262,9 @@ fi
|
|||||||
%attr(4755,root,root) /sbin/umount.nfs4
|
%attr(4755,root,root) /sbin/umount.nfs4
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
* Sat Jul 28 2007 Steve Dickson <steved@redhat.com> 1.1.0-1
|
||||||
|
- Upgraded to the latest upstream version (nfs-utils-1.1.0)
|
||||||
|
|
||||||
* Thu May 24 2007 Steve Dickson <steved@redhat.com> 1.0.10-7
|
* Thu May 24 2007 Steve Dickson <steved@redhat.com> 1.0.10-7
|
||||||
- Fixed typo in mount.nfs4 that causes a segfault during
|
- Fixed typo in mount.nfs4 that causes a segfault during
|
||||||
error processing (bz 241190)
|
error processing (bz 241190)
|
||||||
|
26
nfs.init
26
nfs.init
@ -15,17 +15,17 @@
|
|||||||
|
|
||||||
# Source networking configuration.
|
# Source networking configuration.
|
||||||
if [ ! -f /etc/sysconfig/network ]; then
|
if [ ! -f /etc/sysconfig/network ]; then
|
||||||
exit 0
|
exit 6
|
||||||
fi
|
fi
|
||||||
|
|
||||||
. /etc/sysconfig/network
|
. /etc/sysconfig/network
|
||||||
|
|
||||||
# Check that networking is up.
|
# Check that networking is up.
|
||||||
[ "${NETWORKING}" = "no" ] && exit 0
|
[ "${NETWORKING}" = "no" ] && exit 6
|
||||||
|
|
||||||
[ -x /usr/sbin/rpc.nfsd ] || exit 0
|
[ -x /usr/sbin/rpc.nfsd ] || exit 5
|
||||||
[ -x /usr/sbin/rpc.mountd ] || exit 0
|
[ -x /usr/sbin/rpc.mountd ] || exit 5
|
||||||
[ -x /usr/sbin/exportfs ] || exit 0
|
[ -x /usr/sbin/exportfs ] || exit 5
|
||||||
|
|
||||||
# Don't fail if /etc/exports doesn't exist; create a bare-bones version and continue.
|
# Don't fail if /etc/exports doesn't exist; create a bare-bones version and continue.
|
||||||
[ -r /etc/exports ] || \
|
[ -r /etc/exports ] || \
|
||||||
@ -106,7 +106,6 @@ case "$1" in
|
|||||||
;;
|
;;
|
||||||
stop)
|
stop)
|
||||||
# Stop daemons.
|
# Stop daemons.
|
||||||
[ -x /usr/sbin/rpc.svcgssd ] && /sbin/service rpcsvcgssd stop
|
|
||||||
echo -n $"Shutting down NFS mountd: "
|
echo -n $"Shutting down NFS mountd: "
|
||||||
killproc rpc.mountd
|
killproc rpc.mountd
|
||||||
echo
|
echo
|
||||||
@ -116,6 +115,7 @@ case "$1" in
|
|||||||
if [ -n "$RQUOTAD" -a "$RQUOTAD" != "no" ]; then
|
if [ -n "$RQUOTAD" -a "$RQUOTAD" != "no" ]; then
|
||||||
echo -n $"Shutting down NFS quotas: "
|
echo -n $"Shutting down NFS quotas: "
|
||||||
killproc rpc.rquotad
|
killproc rpc.rquotad
|
||||||
|
RETVAL=$?
|
||||||
echo
|
echo
|
||||||
fi
|
fi
|
||||||
# Reset the lockd ports if they were set
|
# Reset the lockd ports if they were set
|
||||||
@ -133,6 +133,7 @@ case "$1" in
|
|||||||
else
|
else
|
||||||
action $"Shutting down NFS services: " /bin/false
|
action $"Shutting down NFS services: " /bin/false
|
||||||
fi
|
fi
|
||||||
|
[ -x /usr/sbin/rpc.svcgssd ] && /sbin/service rpcsvcgssd stop
|
||||||
rm -f /var/lock/subsys/nfs
|
rm -f /var/lock/subsys/nfs
|
||||||
;;
|
;;
|
||||||
status)
|
status)
|
||||||
@ -172,15 +173,10 @@ case "$1" in
|
|||||||
$0 start
|
$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}"
|
echo $"Usage: nfs {start|stop|status|restart|reload|condrestart}"
|
||||||
exit 1
|
RETVAL=3
|
||||||
|
;;
|
||||||
esac
|
esac
|
||||||
|
|
||||||
exit $?
|
exit $RETVAL
|
||||||
|
18
nfslock.init
18
nfslock.init
@ -14,7 +14,7 @@
|
|||||||
|
|
||||||
# Source networking configuration.
|
# Source networking configuration.
|
||||||
if [ ! -f /etc/sysconfig/network ]; then
|
if [ ! -f /etc/sysconfig/network ]; then
|
||||||
exit 0
|
exit 6
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Check for and source configuration file
|
# Check for and source configuration file
|
||||||
@ -23,7 +23,7 @@ fi
|
|||||||
. /etc/sysconfig/network
|
. /etc/sysconfig/network
|
||||||
|
|
||||||
# Check that networking is up.
|
# Check that networking is up.
|
||||||
[ "${NETWORKING}" = "no" ] && exit 0
|
[ "${NETWORKING}" = "no" ] && exit 6
|
||||||
|
|
||||||
# Start lockd from userland only if kernel <= 2.2.18
|
# Start lockd from userland only if kernel <= 2.2.18
|
||||||
OS_RELEASE=`uname --release`
|
OS_RELEASE=`uname --release`
|
||||||
@ -38,10 +38,10 @@ else
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
if [ "$USERLAND_LOCKD" ] ; then
|
if [ "$USERLAND_LOCKD" ] ; then
|
||||||
[ -x /sbin/rpc.lockd ] || exit 0
|
[ -x /sbin/rpc.lockd ] || exit 5
|
||||||
fi
|
fi
|
||||||
|
|
||||||
[ -x /sbin/rpc.statd ] || exit 0
|
[ -x /sbin/rpc.statd ] || exit 5
|
||||||
|
|
||||||
RETVAL=0
|
RETVAL=0
|
||||||
if [ -n "${STATD_HOSTNAME}" ]; then
|
if [ -n "${STATD_HOSTNAME}" ]; then
|
||||||
@ -139,14 +139,10 @@ case "$1" in
|
|||||||
start
|
start
|
||||||
}
|
}
|
||||||
;;
|
;;
|
||||||
condstop)
|
|
||||||
[ -f /var/lock/subsys/nfslock ] && {
|
|
||||||
stop
|
|
||||||
}
|
|
||||||
;;
|
|
||||||
*)
|
*)
|
||||||
echo $"Usage: $0 {start|stop|status|restart|probe|condrestart|condstop}"
|
echo $"Usage: $0 {start|stop|status|restart|probe|condrestart}"
|
||||||
exit 1
|
RETVAL=3
|
||||||
|
;;
|
||||||
esac
|
esac
|
||||||
|
|
||||||
exit $RETVAL
|
exit $RETVAL
|
||||||
|
57
rpcgssd.init
57
rpcgssd.init
@ -4,7 +4,7 @@
|
|||||||
#
|
#
|
||||||
# Authors: Chuck Lever <cel@netapp.com>
|
# Authors: Chuck Lever <cel@netapp.com>
|
||||||
#
|
#
|
||||||
# chkconfig: 345 19 69
|
# chkconfig: 345 19 85
|
||||||
# description: Starts user-level daemon that manages RPCSEC GSS contexts \
|
# description: Starts user-level daemon that manages RPCSEC GSS contexts \
|
||||||
# for the NFSv4 client.
|
# for the NFSv4 client.
|
||||||
|
|
||||||
@ -13,18 +13,18 @@
|
|||||||
|
|
||||||
# Source networking configuration.
|
# Source networking configuration.
|
||||||
if [ ! -f /etc/sysconfig/network ]; then
|
if [ ! -f /etc/sysconfig/network ]; then
|
||||||
exit 0
|
exit 6
|
||||||
fi
|
fi
|
||||||
. /etc/sysconfig/network
|
. /etc/sysconfig/network
|
||||||
|
|
||||||
# Check that networking is up.
|
# 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
|
# Check for and source configuration file otherwise set defaults
|
||||||
[ -f /etc/sysconfig/nfs ] && . /etc/sysconfig/nfs
|
[ -f /etc/sysconfig/nfs ] && . /etc/sysconfig/nfs
|
||||||
[ "${SECURE_NFS}" != "yes" ] && exit 0
|
[ "${SECURE_NFS}" != "yes" ] && exit 6
|
||||||
|
|
||||||
# List of kernel modules to load
|
# List of kernel modules to load
|
||||||
[ -z "${SECURE_NFS_MODS}" ] && SECURE_NFS_MODS="des rpcsec_gss_krb5"
|
[ -z "${SECURE_NFS_MODS}" ] && SECURE_NFS_MODS="des rpcsec_gss_krb5"
|
||||||
@ -45,25 +45,35 @@ case "$1" in
|
|||||||
|
|
||||||
echo -n $"Starting RPC gssd: "
|
echo -n $"Starting RPC gssd: "
|
||||||
|
|
||||||
# Load sunrpc which mounts the rpc_pipes fs.
|
# 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 ] && {
|
[ -x /sbin/lsmod -a -x /sbin/modprobe ] && {
|
||||||
if ! /sbin/lsmod | grep sunrpc > /dev/null ; then
|
if ! /sbin/lsmod | grep sunrpc > /dev/null ; then
|
||||||
/sbin/modprobe sunrpc || exit 1
|
/sbin/modprobe sunrpc
|
||||||
fi
|
fi
|
||||||
# Load rpcsec modules
|
}
|
||||||
for i in ${SECURE_NFS_MODS}
|
RPCMTAB=`grep -v '^#' /proc/mounts | \
|
||||||
do
|
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
|
if ! /sbin/lsmod | grep $i > /dev/null ; then
|
||||||
/sbin/modprobe $i || exit 1
|
/sbin/modprobe $i || {
|
||||||
|
echo "Error: Unable to load '$i' security module."
|
||||||
|
exit 6;
|
||||||
|
}
|
||||||
fi
|
fi
|
||||||
done
|
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.
|
# Start daemon.
|
||||||
@ -74,7 +84,7 @@ case "$1" in
|
|||||||
;;
|
;;
|
||||||
stop)
|
stop)
|
||||||
# Stop daemon.
|
# Stop daemon.
|
||||||
echo -n $"Shutting down RPC gssd: "
|
echo -n $"Stopping RPC gssd: "
|
||||||
killproc $prog
|
killproc $prog
|
||||||
RETVAL=$?
|
RETVAL=$?
|
||||||
echo
|
echo
|
||||||
@ -95,15 +105,10 @@ case "$1" in
|
|||||||
RETVAL=$?
|
RETVAL=$?
|
||||||
fi
|
fi
|
||||||
;;
|
;;
|
||||||
condstop)
|
|
||||||
if [ -f $LOCKFILE ]; then
|
|
||||||
$0 stop
|
|
||||||
RETVAL=$?
|
|
||||||
fi
|
|
||||||
;;
|
|
||||||
*)
|
*)
|
||||||
echo $"Usage: $0 {start|stop|restart|condstart|condrestart|condstop|status}"
|
echo $"Usage: $0 {start|stop|restart|condstart|condrestart|status}"
|
||||||
exit 1
|
RETVAL=3
|
||||||
|
;;
|
||||||
esac
|
esac
|
||||||
|
|
||||||
exit $RETVAL
|
exit $RETVAL
|
||||||
|
@ -4,7 +4,7 @@
|
|||||||
#
|
#
|
||||||
# Authors: Chuck Lever <cel@netapp.com>
|
# Authors: Chuck Lever <cel@netapp.com>
|
||||||
#
|
#
|
||||||
# chkconfig: 345 18 68
|
# chkconfig: 345 18 85
|
||||||
# description: Starts user-level daemon for NFSv4 that maps user \
|
# description: Starts user-level daemon for NFSv4 that maps user \
|
||||||
# names to UID and GID numbers.
|
# names to UID and GID numbers.
|
||||||
|
|
||||||
@ -13,14 +13,14 @@
|
|||||||
|
|
||||||
# Source networking configuration.
|
# Source networking configuration.
|
||||||
if [ ! -f /etc/sysconfig/network ]; then
|
if [ ! -f /etc/sysconfig/network ]; then
|
||||||
exit 0
|
exit 6
|
||||||
fi
|
fi
|
||||||
. /etc/sysconfig/network
|
. /etc/sysconfig/network
|
||||||
|
|
||||||
# Check that networking is up.
|
# 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
|
# Check for and source configuration file otherwise set defaults
|
||||||
[ -f /etc/sysconfig/nfs ] && . /etc/sysconfig/nfs
|
[ -f /etc/sysconfig/nfs ] && . /etc/sysconfig/nfs
|
||||||
@ -40,20 +40,26 @@ case "$1" in
|
|||||||
|
|
||||||
echo -n $"Starting RPC idmapd: "
|
echo -n $"Starting RPC idmapd: "
|
||||||
|
|
||||||
# Load sunrpc which mounts the rpc_pipes fs.
|
# 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 ] && {
|
[ -x /sbin/lsmod -a -x /sbin/modprobe ] && {
|
||||||
if ! /sbin/lsmod | grep sunrpc > /dev/null ; then
|
if ! /sbin/lsmod | grep sunrpc > /dev/null ; then
|
||||||
/sbin/modprobe sunrpc || exit 1
|
/sbin/modprobe sunrpc
|
||||||
fi
|
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.
|
# 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.
|
# Start daemon.
|
||||||
daemon $prog ${RPCIDMAPDARGS}
|
daemon $prog ${RPCIDMAPDARGS}
|
||||||
@ -63,7 +69,7 @@ case "$1" in
|
|||||||
;;
|
;;
|
||||||
stop)
|
stop)
|
||||||
# Stop daemon.
|
# Stop daemon.
|
||||||
echo -n $"Shutting down RPC idmapd: "
|
echo -n $"Stopping RPC idmapd: "
|
||||||
killproc $prog
|
killproc $prog
|
||||||
RETVAL=$?
|
RETVAL=$?
|
||||||
echo
|
echo
|
||||||
@ -84,15 +90,10 @@ case "$1" in
|
|||||||
RETVAL=$?
|
RETVAL=$?
|
||||||
fi
|
fi
|
||||||
;;
|
;;
|
||||||
condstop)
|
|
||||||
if [ -f $LOCKFILE ]; then
|
|
||||||
$0 stop
|
|
||||||
RETVAL=$?
|
|
||||||
fi
|
|
||||||
;;
|
|
||||||
*)
|
*)
|
||||||
echo $"Usage: $0 {start|stop|restart|condstart|condrestart|condstop|status}"
|
echo $"Usage: $0 {start|stop|restart|condstart|condrestart|status}"
|
||||||
exit 1
|
RETVAL=3
|
||||||
|
;;
|
||||||
esac
|
esac
|
||||||
|
|
||||||
exit $RETVAL
|
exit $RETVAL
|
||||||
|
@ -13,18 +13,18 @@
|
|||||||
|
|
||||||
# Source networking configuration.
|
# Source networking configuration.
|
||||||
if [ ! -f /etc/sysconfig/network ]; then
|
if [ ! -f /etc/sysconfig/network ]; then
|
||||||
exit 0
|
exit 6
|
||||||
fi
|
fi
|
||||||
. /etc/sysconfig/network
|
. /etc/sysconfig/network
|
||||||
|
|
||||||
# Check that networking is up.
|
# 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
|
# Check for and source configuration file otherwise set defaults
|
||||||
[ -f /etc/sysconfig/nfs ] && . /etc/sysconfig/nfs
|
[ -f /etc/sysconfig/nfs ] && . /etc/sysconfig/nfs
|
||||||
[ "${SECURE_NFS}" != "yes" ] && exit 0
|
[ "${SECURE_NFS}" != "yes" ] && exit 6
|
||||||
|
|
||||||
# List of kernel modules to load
|
# List of kernel modules to load
|
||||||
[ -z "${SECURE_NFS_MODS}" ] && SECURE_NFS_MODS="des rpcsec_gss_krb5"
|
[ -z "${SECURE_NFS_MODS}" ] && SECURE_NFS_MODS="des rpcsec_gss_krb5"
|
||||||
@ -43,26 +43,37 @@ case "$1" in
|
|||||||
|
|
||||||
echo -n $"Starting RPC svcgssd: "
|
echo -n $"Starting RPC svcgssd: "
|
||||||
|
|
||||||
# Load sunrpc which mounts the rpc_pipes fs.
|
# 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 ] && {
|
[ -x /sbin/lsmod -a -x /sbin/modprobe ] && {
|
||||||
if ! /sbin/lsmod | grep sunrpc > /dev/null ; then
|
if ! /sbin/lsmod | grep sunrpc > /dev/null ; then
|
||||||
/sbin/modprobe sunrpc || exit 1
|
/sbin/modprobe sunrpc
|
||||||
fi
|
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
|
# Load rpcsec modules
|
||||||
for i in ${SECURE_NFS_MODS}
|
for i in ${SECURE_NFS_MODS}
|
||||||
do
|
do
|
||||||
if ! /sbin/lsmod | grep $i > /dev/null ; then
|
if ! /sbin/lsmod | grep $i > /dev/null ; then
|
||||||
/sbin/modprobe $i || exit 1
|
/sbin/modprobe $i || {
|
||||||
|
echo "Error: Unable to load '$i' security module."
|
||||||
|
exit 6;
|
||||||
|
}
|
||||||
fi
|
fi
|
||||||
done
|
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.
|
# Start daemon.
|
||||||
@ -94,15 +105,10 @@ case "$1" in
|
|||||||
RETVAL=$?
|
RETVAL=$?
|
||||||
fi
|
fi
|
||||||
;;
|
;;
|
||||||
condstop)
|
|
||||||
if [ -f $LOCKFILE ]; then
|
|
||||||
$0 stop
|
|
||||||
RETVAL=$?
|
|
||||||
fi
|
|
||||||
;;
|
|
||||||
*)
|
*)
|
||||||
echo $"Usage: $0 {start|stop|restart|condstart|condrestart|condstop|status}"
|
echo $"Usage: $0 {start|stop|restart|condstart|condrestart|status}"
|
||||||
exit 1
|
RETVAL=3
|
||||||
|
;;
|
||||||
esac
|
esac
|
||||||
|
|
||||||
exit $RETVAL
|
exit $RETVAL
|
||||||
|
Loading…
Reference in New Issue
Block a user