rpms/nfs-utils/FC-6 nfs-utils-1.0.10-exports-nonverbose.patch, NONE, 1.1 nfs-utils-1.0.10-fsloc.patch, NONE, 1.1 nfs-utils.spec, 1.117, 1.118
fedora-cvs-commits at redhat.com
fedora-cvs-commits at redhat.com
Tue Mar 13 20:39:52 UTC 2007
- Previous message (by thread): rpms/pcsc-lite/devel pcsc-lite.spec,1.9,1.10
- Next message (by thread): rpms/kernel/devel patch-2.6.21-rc3-git8.bz2.sign, NONE, 1.1 .cvsignore, 1.585, 1.586 kernel-2.6.spec, 1.2985, 1.2986 sources, 1.548, 1.549 upstream, 1.477, 1.478 patch-2.6.21-rc3-git7.bz2.sign, 1.1, NONE
- Messages sorted by:
[ date ]
[ thread ]
[ subject ]
[ author ]
Author: steved
Update of /cvs/dist/rpms/nfs-utils/FC-6
In directory cvs.devel.redhat.com:/tmp/cvs-serv4683
Modified Files:
nfs-utils.spec
Added Files:
nfs-utils-1.0.10-exports-nonverbose.patch
nfs-utils-1.0.10-fsloc.patch
Log Message:
- Added fs_location support
- Toned down mountd verbosity (bz 214114)
nfs-utils-1.0.10-exports-nonverbose.patch:
cache.c | 2 +-
1 files changed, 1 insertion(+), 1 deletion(-)
--- NEW FILE nfs-utils-1.0.10-exports-nonverbose.patch ---
--- nfs-utils-1.0.10/utils/mountd/cache.c.orig 2006-08-07 02:40:50.000000000 -0400
+++ nfs-utils-1.0.10/utils/mountd/cache.c 2007-03-12 15:29:05.000000000 -0400
@@ -280,7 +280,7 @@ void nfsd_export(FILE *f)
if (!found)
found = exp;
else {
- xlog(L_WARNING, "%s exported to both %s and %s in %s",
+ xlog(D_GENERAL, "%s exported to both %s and %s in %s",
path, exp->m_client->m_hostname, found->m_client->m_hostname,
dom);
}
nfs-utils-1.0.10-fsloc.patch:
support/include/exportfs.h | 7 +
support/include/nfslib.h | 2
support/nfs/exports.c | 35 +++++++-
utils/exportfs/exportfs.c | 14 +++
utils/exportfs/exports.man | 13 +++
utils/mountd/Makefile.am | 2
utils/mountd/cache.c | 25 +++++
utils/mountd/fsloc.c | 193 +++++++++++++++++++++++++++++++++++++++++++++
utils/mountd/fsloc.h | 20 ++++
9 files changed, 308 insertions(+), 3 deletions(-)
--- NEW FILE nfs-utils-1.0.10-fsloc.patch ---
--- nfs-utils-1.0.9/support/include/nfslib.h.orig 2007-02-02 17:43:38.000000000 -0800
+++ nfs-utils-1.0.9/support/include/nfslib.h 2007-02-03 07:36:58.000000000 -0800
@@ -80,6 +80,8 @@ struct exportent {
int e_nsqgids;
int e_fsid;
char * e_mountpoint;
+ int e_fslocmethod;
+ char * e_fslocdata;
};
struct rmtabent {
--- nfs-utils-1.0.9/support/include/exportfs.h.orig 2006-07-07 17:04:32.000000000 -0700
+++ nfs-utils-1.0.9/support/include/exportfs.h 2007-02-03 07:36:58.000000000 -0800
@@ -23,6 +23,13 @@ enum {
MCL_MAXTYPES
};
+enum {
+ FSLOC_NONE = 0,
+ FSLOC_REFER,
+ FSLOC_REPLICA,
+ FSLOC_STUB
+};
+
typedef struct mclient {
struct mclient * m_next;
char m_hostname[NFSCLNT_IDMAX+1];
--- nfs-utils-1.0.9/support/nfs/exports.c.orig 2007-02-02 17:43:38.000000000 -0800
+++ nfs-utils-1.0.9/support/nfs/exports.c 2007-02-03 07:36:58.000000000 -0800
@@ -95,6 +95,8 @@ getexportent(int fromkernel)
ee.e_squids = NULL;
ee.e_sqgids = NULL;
ee.e_mountpoint = NULL;
+ ee.e_fslocmethod = FSLOC_NONE;
+ ee.e_fslocdata = NULL;
ee.e_nsquids = 0;
ee.e_nsqgids = 0;
@@ -200,7 +202,22 @@ putexportent(struct exportent *ep)
if (ep->e_mountpoint)
fprintf(fp, "mountpoint%s%s,",
ep->e_mountpoint[0]?"=":"", ep->e_mountpoint);
-
+ switch (ep->e_fslocmethod) {
+ case FSLOC_NONE:
+ break;
+ case FSLOC_REFER:
+ fprintf(fp, "refer=%s,", ep->e_fslocdata);
+ break;
+ case FSLOC_REPLICA:
+ fprintf(fp, "replicas=%s,", ep->e_fslocdata);
+ break;
+ case FSLOC_STUB:
+ fprintf(fp, "fsloc=stub,");
+ break;
+ default:
+ xlog(L_ERROR, "unknown fsloc method for %s:%s",
+ ep->e_hostname, ep->e_path);
+ }
fprintf(fp, "mapping=");
switch (ep->e_maptype) {
case CLE_MAP_IDENT:
@@ -263,6 +280,8 @@ dupexportent(struct exportent *dst, stru
}
if (src->e_mountpoint)
dst->e_mountpoint = strdup(src->e_mountpoint);
+ if (src->e_fslocdata)
+ dst->e_fslocdata = strdup(src->e_fslocdata);
}
struct exportent *
@@ -435,6 +454,20 @@ bad_option:
ep->e_mountpoint = strdup(mp+1);
else
ep->e_mountpoint = strdup("");
+ } else if (strncmp(opt, "fsloc=", 6) == 0) {
+ if (strcmp(opt+6, "stub") == 0)
+ ep->e_fslocmethod = FSLOC_STUB;
+ else {
+ xlog(L_ERROR, "%s:%d: bad option %s\n",
+ flname, flline, opt);
+ goto bad_option;
+ }
+ } else if (strncmp(opt, "refer=", 6) == 0) {
+ ep->e_fslocmethod = FSLOC_REFER;
+ ep->e_fslocdata = strdup(opt+6);
+ } else if (strncmp(opt, "replicas=", 9) == 0) {
+ ep->e_fslocmethod = FSLOC_REPLICA;
+ ep->e_fslocdata = strdup(opt+9);
} else {
xlog(L_ERROR, "%s:%d: unknown keyword \"%s\"\n",
flname, flline, opt);
--- nfs-utils-1.0.9/utils/exportfs/exports.man.orig 2007-02-02 17:43:38.000000000 -0800
+++ nfs-utils-1.0.9/utils/exportfs/exports.man 2007-02-03 07:36:58.000000000 -0800
@@ -310,6 +310,19 @@ The value 0 has a special meaning when
concept of a root of the overall exported filesystem. The export point
exported with fsid=0 will be used as this root.
+.TP
+.IR refer= path at host[+host][:path at host[+host]]
+A client referencing the export point will be directed to choose from
+the given list an alternative location for the filesystem.
+(Note that the server currently needs to have a filesystem mounted here,
+generally using mount --bind, although it is not actually exported.)
+
+.TP
+.IR replicas= path at host[+host][:path at host[+host]]
+If the client asks for alternative locations for the export point, it
+will be given this list of alternatives. (Note that actual replication
+of the filesystem must be handled elsewhere.)
+
.SS User ID Mapping
.PP
.I nfsd
--- nfs-utils-1.0.9/utils/exportfs/exportfs.c.orig 2006-07-07 17:04:32.000000000 -0700
+++ nfs-utils-1.0.9/utils/exportfs/exportfs.c 2007-02-03 07:36:58.000000000 -0800
@@ -416,7 +416,19 @@ dump(int verbose)
c = dumpopt(c, "anonuid=%d", ep->e_anonuid);
if (ep->e_anongid != -2)
c = dumpopt(c, "anongid=%d", ep->e_anongid);
-
+ switch(ep->e_fslocmethod) {
+ case FSLOC_NONE:
+ break;
+ case FSLOC_REFER:
+ c = dumpopt(c, "refer=%s", ep->e_fslocdata);
+ break;
+ case FSLOC_REPLICA:
+ c = dumpopt(c, "replicas=%s", ep->e_fslocdata);
+ break;
+ case FSLOC_STUB:
+ c = dumpopt(c, "fsloc=stub");
+ break;
+ }
printf("%c\n", (c != '(')? ')' : ' ');
}
}
--- /dev/null 2007-02-01 06:02:10.485551404 -0800
+++ nfs-utils-1.0.9/utils/mountd/fsloc.h 2007-02-03 07:36:58.000000000 -0800
@@ -0,0 +1,20 @@
+#ifndef FSLOC_H
+#define FSLOC_H
+
+#define FSLOC_MAX_LIST 40
+
+struct mount_point {
+ char *h_host;
+ char *h_path;
+};
+
+struct servers {
+ int h_num;
+ struct mount_point *h_mp[FSLOC_MAX_LIST];
+ int h_referral; /* 0=replica, 1=referral */
+};
+
+struct servers *replicas_lookup(int method, char *data, char *key);
+void release_replicas(struct servers *server);
+
+#endif /* FSLOC_H */
--- nfs-utils-1.0.9/utils/mountd/Makefile.am.orig 2006-07-07 17:04:32.000000000 -0700
+++ nfs-utils-1.0.9/utils/mountd/Makefile.am 2007-02-03 07:36:58.000000000 -0800
@@ -8,7 +8,7 @@ KPREFIX = @kprefix@
sbin_PROGRAMS = mountd
mountd_SOURCES = mountd.c mount_dispatch.c auth.c rmtab.c cache.c \
- svc_run.c mountd.h
+ svc_run.c fsloc.c mountd.h
mountd_LDADD = ../../support/export/libexport.a \
../../support/nfs/libnfs.a \
../../support/misc/libmisc.a \
--- /dev/null 2007-02-01 06:02:10.485551404 -0800
+++ nfs-utils-1.0.9/utils/mountd/fsloc.c 2007-02-03 07:36:58.000000000 -0800
@@ -0,0 +1,193 @@
+#include <stdlib.h>
+#include <string.h>
+#include <syslog.h>
+
+#include "fsloc.h"
+#include "exportfs.h"
+
+/* Debugging tool: prints out @servers info to syslog */
+static void replicas_print(struct servers *sp)
+{
+ int i;
+ if (!sp) {
+ syslog(LOG_INFO, "NULL replicas pointer");
+ return;
+ }
+ syslog(LOG_INFO, "replicas listsize=%i", sp->h_num);
+ for (i=0; i<sp->h_num; i++) {
+ syslog(LOG_INFO, "%s:/%s",
+ sp->h_mp[i]->h_host, sp->h_mp[i]->h_path);
+ }
+}
+
+/* Called by setting 'Method = stub' in config file. Just returns
+ * some syntactically correct gibberish for testing purposes.
+ */
+static struct servers *method_stub(char *key)
+{
+ struct servers *sp;
+ struct mount_point *mp;
+
+ syslog(LOG_INFO, "called method_stub");
+ sp = malloc(sizeof(struct servers));
+ if (!sp)
+ return NULL;
+ mp = calloc(1, sizeof(struct mount_point));
+ if (!mp) {
+ free(sp);
+ return NULL;
+ }
+ sp->h_num = 1;
+ sp->h_mp[0] = mp;
+ mp->h_host = strdup("stub_server");
+ mp->h_path = strdup("/my/test/path");
+ sp->h_referral = 1;
+ return sp;
+}
+
+/* Scan @list, which is a NULL-terrminated array of strings of the
+ * form host[:host]:/path, and return corresponding servers structure.
+ */
+static struct servers *parse_list(char **list)
+{
+ int i;
+ struct servers *res;
+ struct mount_point *mp;
+ char *cp;
+
+ res = malloc(sizeof(struct servers));
+ if (!res)
+ return NULL;
+ res->h_num = 0;
+
+ /* parse each of the answers in sucession. */
+ for (i=0; list[i] && i<FSLOC_MAX_LIST; i++) {
+ mp = calloc(1, sizeof(struct mount_point));
+ if (!mp) {
+ release_replicas(res);
+ return NULL;
+ }
+ cp = strstr(list[i], ":/");
+ if (!cp) {
+ syslog(LOG_WARNING, "invalid entry '%s'", list[i]);
+ continue; /* XXX Need better error handling */
+ }
+ res->h_mp[i] = mp;
+ res->h_num++;
+ mp->h_host = strndup(list[i], cp - list[i]);
+ cp++;
+ mp->h_path = strdup(cp);
+ }
+ return res;
+}
+
+/* Converts from path at host[+host][:path at host[+host]] to
+ * host[:host]:path[@host[:host]:path]
+ *
+ * XXX Once the interface is stabilized, we can put the kernel and
+ * userland formats into agreement, so this won't be necessary.
+ */
+static char *strconvert(const char *in)
+{
+ char *path, *ptr, *copy, *rv, *rvptr, *next;
+ next = copy = strdup(in);
+ rvptr = rv = malloc(strlen(in) + 1);
+ if (!copy || !rv)
+ goto error;
+ while (next) {
+ ptr = strsep(&next, ":");
+ path = strsep(&ptr, "@");
+ if (!ptr)
+ goto error;
+ while (*ptr) {
+ if (*ptr == '+') {
+ *rvptr++ = ':';
+ ptr++;
+ }
+ else
+ *rvptr++ = *ptr++;
+ }
+ *rvptr++ = ':';
+ while (*path) {
+ *rvptr++ = *path++;
+ }
+ if (next)
+ *rvptr++ = '@';
+ else
+ *rvptr = '\0';
+ }
+ free(copy);
+ return rv;
+error:
+ free(copy);
+ free(rv);
+ return NULL;
+}
+
+/* @data is a string of form path at host[+host][:path at host[+host]]
+ */
+static struct servers *method_list(char *data)
+{
+ char *copy, *ptr=data;
+ char **list;
+ int i, listsize;
+ struct servers *rv=NULL;
+
+ syslog(LOG_INFO, "method_list(%s)\n", data);
+ for (ptr--, listsize=1; ptr; ptr=index(ptr, ':'), listsize++)
+ ptr++;
+ list = malloc(listsize * sizeof(char *));
+ copy = strconvert(data);
+ syslog(LOG_INFO, "converted to %s\n", copy);
+ if (list && copy) {
+ ptr = copy;
+ for (i=0; i<listsize; i++) {
+ list[i] = strsep(&ptr, "@");
+ }
+ rv = parse_list(list);
+ }
+ free(copy);
+ free(list);
+ replicas_print(rv);
+ return rv;
+}
+
+/* Returns appropriately filled struct servers, or NULL if had a problem */
+struct servers *replicas_lookup(int method, char *data, char *key)
+{
+ struct servers *sp=NULL;
+ switch(method) {
+ case FSLOC_NONE:
+ break;
+ case FSLOC_REFER:
+ sp = method_list(data);
+ if (sp)
+ sp->h_referral = 1;
+ break;
+ case FSLOC_REPLICA:
+ sp = method_list(data);
+ if (sp)
+ sp->h_referral = 0;
+ break;
+ case FSLOC_STUB:
+ sp = method_stub(data);
+ break;
+ default:
+ syslog(LOG_WARNING, "Unknown method = %i", method);
+ }
+ replicas_print(sp);
+ return sp;
+}
+
+void release_replicas(struct servers *server)
+{
+ int i;
+
+ if (!server) return;
+ for (i = 0; i < server->h_num; i++) {
+ free(server->h_mp[i]->h_host);
+ free(server->h_mp[i]->h_path);
+ free(server->h_mp[i]);
+ }
+ free(server);
+}
--- nfs-utils-1.0.9/utils/mountd/cache.c.orig 2006-07-07 17:04:32.000000000 -0700
+++ nfs-utils-1.0.9/utils/mountd/cache.c 2007-02-03 07:36:58.000000000 -0800
@@ -26,6 +26,7 @@
#include "exportfs.h"
#include "mountd.h"
#include "xmalloc.h"
+#include "fsloc.h"
/*
* Support routines for text-based upcalls.
@@ -239,6 +240,29 @@ void nfsd_fh(FILE *f)
return;
}
+static void write_fsloc(FILE *f, struct exportent *ep, char *path)
+{
+ struct servers *servers;
+
+ if (ep->e_fslocmethod == FSLOC_NONE)
+ return;
+
+ servers = replicas_lookup(ep->e_fslocmethod, ep->e_fslocdata, path);
+ if (!servers)
+ return;
+ qword_print(f, "fsloc");
+ qword_printint(f, servers->h_num);
+ if (servers->h_num >= 0) {
+ int i;
+ for (i=0; i<servers->h_num; i++) {
+ qword_print(f, servers->h_mp[i]->h_host);
+ qword_print(f, servers->h_mp[i]->h_path);
+ }
+ }
+ qword_printint(f, servers->h_referral);
+ release_replicas(servers);
+}
+
void nfsd_export(FILE *f)
{
/* requests are:
@@ -295,6 +319,7 @@ void nfsd_export(FILE *f)
qword_printint(f, found->m_export.e_anonuid);
qword_printint(f, found->m_export.e_anongid);
qword_printint(f, found->m_export.e_fsid);
+ write_fsloc(f, &found->m_export, path);
mountlist_add(dom, path);
}
qword_eol(f);
Index: nfs-utils.spec
===================================================================
RCS file: /cvs/dist/rpms/nfs-utils/FC-6/nfs-utils.spec,v
retrieving revision 1.117
retrieving revision 1.118
diff -u -r1.117 -r1.118
--- nfs-utils.spec 1 Mar 2007 22:54:10 -0000 1.117
+++ nfs-utils.spec 13 Mar 2007 20:39:50 -0000 1.118
@@ -1,7 +1,7 @@
Summary: NFS utlilities and supporting clients and daemons for the kernel NFS server.
Name: nfs-utils
Version: 1.0.10
-Release: 6%{?dist}
+Release: 7%{?dist}
Epoch: 1
# group all 32bit related archs
@@ -33,6 +33,8 @@
Patch55: nfs-utils-1.0.9-krb5-memory.patch
Patch56: nfs-utils-1.0.9-idmapd-scandir-leak.patch
Patch57: nfs-utils-1.0.9-idmap-dirscancb-listloop.patch
+Patch58: nfs-utils-1.0.10-fsloc.patch
+Patch59: nfs-utils-1.0.10-exports-nonverbose.patch
%if %{enablemount}
Patch70: nfs-utils-1.0.9-mount-options-v3.patch
@@ -104,6 +106,8 @@
%patch55 -p1
%patch56 -p1
%patch57 -p1
+%patch58 -p1
+%patch59 -p1
%if %{enablemount}
%patch70 -p1
%patch71 -p1
@@ -295,6 +299,10 @@
%endif
%changelog
+* Tue Mar 13 2007 Steve Dickson <steved at redhat.com> 1.0.10-7
+- Added fs_location support
+- Toned down mountd verbosity (bz 214114)
+
* Thu Mar 1 2007 Karel Zak <kzak at redhat.com> 1.0.10-6
- Fixed mount.nfs option -f (bz 227988)
- Fixed mount.nfs mtab lock (bc 227985)
- Previous message (by thread): rpms/pcsc-lite/devel pcsc-lite.spec,1.9,1.10
- Next message (by thread): rpms/kernel/devel patch-2.6.21-rc3-git8.bz2.sign, NONE, 1.1 .cvsignore, 1.585, 1.586 kernel-2.6.spec, 1.2985, 1.2986 sources, 1.548, 1.549 upstream, 1.477, 1.478 patch-2.6.21-rc3-git7.bz2.sign, 1.1, NONE
- Messages sorted by:
[ date ]
[ thread ]
[ subject ]
[ author ]
More information about the fedora-cvs-commits
mailing list