SOURCES: nfs-utils-CITI_NFS4.patch (NEW) - based on nfs-utils-1.0....
qboosh
qboosh at pld-linux.org
Sun Mar 11 01:03:48 CET 2007
Author: qboosh Date: Sun Mar 11 00:03:48 2007 GMT
Module: SOURCES Tag: HEAD
---- Log message:
- based on nfs-utils-1.0.11-CITI_NFS4_ALL-1.dif, adapted for 1.0.12
---- Files affected:
SOURCES:
nfs-utils-CITI_NFS4.patch (NONE -> 1.1) (NEW)
---- Diffs:
================================================================
Index: SOURCES/nfs-utils-CITI_NFS4.patch
diff -u /dev/null SOURCES/nfs-utils-CITI_NFS4.patch:1.1
--- /dev/null Sun Mar 11 01:03:48 2007
+++ SOURCES/nfs-utils-CITI_NFS4.patch Sun Mar 11 01:03:43 2007
@@ -0,0 +1,2674 @@
+
+
+The complete set of CITI nfs-utils patches rolled into one patch.
+
+Changes since 1.0.10-CITI_NFS4_ALL-4:
+
+ * Update to nfs-utils-1.0.11
+
+ * Include missing fslocations files and a small change so that
+ fslocations works.
+
+ * Include several mount patches from Steve Dickson
+
+ * Add a patch to put the mount.nfs[4] and umount.nfs[4] in the
+ place where mount expects them during install.
+
+
+---
+
+ nfs-utils-1.0.11-kwc/Makefile.in | 136
+ nfs-utils-1.0.11-kwc/aclocal.m4 | 250
+ nfs-utils-1.0.11-kwc/configure | 4436 +++++++++++-----
+ nfs-utils-1.0.11-kwc/linux-nfs/Makefile.in | 88
+ nfs-utils-1.0.11-kwc/support/Makefile.in | 120
+ nfs-utils-1.0.11-kwc/support/export/Makefile.in | 113
+ nfs-utils-1.0.11-kwc/support/export/export.c | 2
+ nfs-utils-1.0.11-kwc/support/include/Makefile.in | 124
+ nfs-utils-1.0.11-kwc/support/include/fstab.h | 8
+ nfs-utils-1.0.11-kwc/support/include/nfs/Makefile.in | 88
+ nfs-utils-1.0.11-kwc/support/include/nfs_mntent.h | 8
+ nfs-utils-1.0.11-kwc/support/include/nfslib.h | 6
+ nfs-utils-1.0.11-kwc/support/include/rpcsvc/Makefile.in | 88
+ nfs-utils-1.0.11-kwc/support/include/sys/Makefile.in | 120
+ nfs-utils-1.0.11-kwc/support/include/sys/fs/Makefile.in | 88
+ nfs-utils-1.0.11-kwc/support/misc/Makefile.in | 113
+ nfs-utils-1.0.11-kwc/support/nfs/Makefile.in | 113
+ nfs-utils-1.0.11-kwc/support/nfs/conn.c | 2
+ nfs-utils-1.0.11-kwc/support/nfs/exports.c | 149
+ nfs-utils-1.0.11-kwc/support/nfs/fstab.c | 57
+ nfs-utils-1.0.11-kwc/tools/Makefile.in | 120
+ nfs-utils-1.0.11-kwc/tools/getiversion/Makefile.in | 126
+ nfs-utils-1.0.11-kwc/tools/locktest/Makefile.in | 126
+ nfs-utils-1.0.11-kwc/tools/nlmtest/Makefile.in | 88
+ nfs-utils-1.0.11-kwc/tools/rpcdebug/Makefile.in | 135
+ nfs-utils-1.0.11-kwc/tools/rpcgen/Makefile.in | 198
+ nfs-utils-1.0.11-kwc/utils/Makefile.in | 120
+ nfs-utils-1.0.11-kwc/utils/exportfs/Makefile.in | 130
+ nfs-utils-1.0.11-kwc/utils/exportfs/exportfs.c | 5
+ nfs-utils-1.0.11-kwc/utils/exportfs/exports.man | 14
+ nfs-utils-1.0.11-kwc/utils/gssd/Makefile.in | 356 -
+ nfs-utils-1.0.11-kwc/utils/gssd/context.h | 6
+ nfs-utils-1.0.11-kwc/utils/gssd/context_lucid.c | 391 +
+ nfs-utils-1.0.11-kwc/utils/gssd/context_mit.c | 256
+ nfs-utils-1.0.11-kwc/utils/gssd/gssd.c | 17
+ nfs-utils-1.0.11-kwc/utils/gssd/gssd.h | 3
+ nfs-utils-1.0.11-kwc/utils/gssd/gssd_main_loop.c | 4
+ nfs-utils-1.0.11-kwc/utils/gssd/gssd_proc.c | 22
+ nfs-utils-1.0.11-kwc/utils/gssd/krb5_util.c | 228
+ nfs-utils-1.0.11-kwc/utils/gssd/krb5_util.h | 2
+ nfs-utils-1.0.11-kwc/utils/idmapd/Makefile.in | 124
+ nfs-utils-1.0.11-kwc/utils/lockd/Makefile.in | 126
+ nfs-utils-1.0.11-kwc/utils/mount/Makefile.am | 15
+ nfs-utils-1.0.11-kwc/utils/mount/Makefile.in | 140
+ nfs-utils-1.0.11-kwc/utils/mount/mount.c | 211
+ nfs-utils-1.0.11-kwc/utils/mount/nfs4mount.c | 3
+ nfs-utils-1.0.11-kwc/utils/mount/nfs_mount.h | 4
+ nfs-utils-1.0.11-kwc/utils/mount/nfsmount.c | 70
+ nfs-utils-1.0.11-kwc/utils/mount/nfsumount.c | 53
+ nfs-utils-1.0.11-kwc/utils/mountd/Makefile.in | 182
+ nfs-utils-1.0.11-kwc/utils/mountd/cache.c | 16
+ nfs-utils-1.0.11-kwc/utils/mountd/fsloc.c | 188
+ nfs-utils-1.0.11-kwc/utils/mountd/fsloc.h | 50
+ nfs-utils-1.0.11-kwc/utils/nfsd/Makefile.in | 126
+ nfs-utils-1.0.11-kwc/utils/nfsstat/Makefile.in | 124
+ nfs-utils-1.0.11-kwc/utils/rquotad/Makefile.in | 166
+ nfs-utils-1.0.11-kwc/utils/showmount/Makefile.in | 132
+ nfs-utils-1.0.11-kwc/utils/statd/Makefile.in | 126
+ 58 files changed, 6974 insertions(+), 3338 deletions(-)
+
+--- nfs-utils-1.0.12/utils/mountd/cache.c.orig 2007-02-27 05:55:40.000000000 +0100
++++ nfs-utils-1.0.12/utils/mountd/cache.c 2007-03-11 00:38:34.746218136 +0100
+@@ -445,6 +445,19 @@
+ release_replicas(servers);
+ }
+
++static void write_secinfo(FILE *f, struct exportent *ep)
++{
++ int *p;
++ qword_print(f, "secinfo");
++ for (p=ep->e_secinfo_order; *p>=0; p++)
++ ; /* Do nothing */
++ qword_printint(f, p - ep->e_secinfo_order);
++ for (p=ep->e_secinfo_order; *p>=0; p++) {
++ qword_print(f, secflavor_name[*p]);
++ qword_printint(f, ep->e_secinfo_flags[*p]);
++ }
++}
++
+ static int dump_to_cache(FILE *f, char *domain, char *path, struct exportent *exp)
+ {
+ qword_print(f, domain);
+@@ -466,6 +479,7 @@
+ qword_print(f, "uuid");
+ qword_printhex(f, exp->e_uuid, 16);
+ }
++ write_secinfo(f, exp);
+ }
+ return qword_eol(f);
+ }
+--- nfs-utils-1.0.12/support/nfs/exports.c.orig 2007-02-27 05:55:40.000000000 +0100
++++ nfs-utils-1.0.12/support/nfs/exports.c 2007-03-11 00:39:09.496198423 +0100
+@@ -51,6 +51,10 @@
+ static int parsemaptype(char *type);
+ static void freesquash(void);
+ static void syntaxerr(char *msg);
++static unsigned int parse_flavors(char *str, struct exportent *ep);
++static int secinfo_default(struct exportent *ep);
++static void setflags(int mask, unsigned int *ap, struct exportent *ep);
++static void clearflags(int mask, unsigned int *ap, struct exportent *ep);
+
+ void
+ setexportent(char *fname, char *type)
+@@ -102,6 +106,7 @@
+ def_ee.e_mountpoint = NULL;
+ def_ee.e_fslocmethod = FSLOC_NONE;
+ def_ee.e_fslocdata = NULL;
++ def_ee.e_secinfo_order[0] = -1;
+ def_ee.e_nsquids = 0;
+ def_ee.e_nsqgids = 0;
+
+@@ -182,6 +187,19 @@
+ }
+
+ void
++secinfo_show(FILE *fp, struct exportent *ep)
++{
++ int *p1, *p2;
++ for (p1=ep->e_secinfo_order; *p1>=0; p1=p2) {
++ fprintf(fp, ",sec=%s", secflavor_name[*p1]);
++ for (p2=p1+1; (*p2>=0) && (ep->e_secinfo_flags[*p1]==ep->e_secinfo_flags[*p2]); p2++) {
++ fprintf(fp, ":%s", secflavor_name[*p2]);
++ }
++ fprintf(fp, ",%s", (ep->e_secinfo_flags[*p1] & NFSEXP_READONLY)? "ro" : "rw");
++ }
++}
++
++void
+ putexportent(struct exportent *ep)
+ {
+ FILE *fp;
+@@ -199,7 +217,6 @@
+ fprintf(fp, "%c", esc[i]);
+
+ fprintf(fp, "\t%s(", ep->e_hostname);
+- fprintf(fp, "%s,", (ep->e_flags & NFSEXP_READONLY)? "ro" : "rw");
+ fprintf(fp, "%ssync,", (ep->e_flags & NFSEXP_ASYNC)? "a" : "");
+ fprintf(fp, "%swdelay,", (ep->e_flags & NFSEXP_GATHERED_WRITES)?
+ "" : "no_");
+@@ -276,7 +293,9 @@
+ else
+ fprintf(fp, "%d,", id[i]);
+ }
+- fprintf(fp, "anonuid=%d,anongid=%d)\n", ep->e_anonuid, ep->e_anongid);
++ fprintf(fp, "anonuid=%d,anongid=%d", ep->e_anonuid, ep->e_anongid);
++ secinfo_show(fp, ep);
++ fprintf(fp, ")\n");
+ }
+
+ void
+@@ -325,6 +344,7 @@
+ ee.e_mountpoint = NULL;
+ ee.e_fslocmethod = FSLOC_NONE;
+ ee.e_fslocdata = NULL;
++ ee.e_secinfo_order[0] = -1;
+ ee.e_nsquids = 0;
+ ee.e_nsqgids = 0;
+ ee.e_uuid = NULL;
+@@ -376,6 +396,9 @@
+ int had_subtree_opt = 0;
+ char *flname = efname?efname:"command line";
+ int flline = efp?efp->x_line:0;
++ int *p;
++ unsigned int active = 0;
++ int secmask = NFSEXP_READONLY; /* options that can vary per flavor */
+
+ squids = ep->e_squids; nsquids = ep->e_nsquids;
+ sqgids = ep->e_sqgids; nsqgids = ep->e_nsqgids;
+@@ -398,9 +421,9 @@
+
+ /* process keyword */
+ if (strcmp(opt, "ro") == 0)
+- ep->e_flags |= NFSEXP_READONLY;
++ setflags(NFSEXP_READONLY, &active, ep);
+ else if (strcmp(opt, "rw") == 0)
+- ep->e_flags &= ~NFSEXP_READONLY;
++ clearflags(NFSEXP_READONLY, &active, ep);
+ else if (!strcmp(opt, "secure"))
+ ep->e_flags &= ~NFSEXP_INSECURE_PORT;
+ else if (!strcmp(opt, "insecure"))
+@@ -522,6 +545,10 @@
+ } else if (strncmp(opt, "replicas=", 9) == 0) {
+ ep->e_fslocmethod = FSLOC_REPLICA;
+ ep->e_fslocdata = strdup(opt+9);
++ } else if (strncmp(opt, "sec=", 4) == 0) {
++ active = parse_flavors(opt+4, ep);
++ if (!active)
++ goto bad_option;
+ } else {
+ xlog(L_ERROR, "%s:%d: unknown keyword \"%s\"\n",
+ flname, flline, opt);
+@@ -533,6 +560,12 @@
+ cp++;
+ }
+
++ if (!active)
++ active = secinfo_default(ep);
++ for (p=ep->e_secinfo_order; *p>=0; p++)
++ ep->e_secinfo_flags[*p] |= (ep->e_flags & ~secmask);
++ /* If did not use sec= option, ensure e_flags is backward compatible */
++ ep->e_flags = ep->e_secinfo_flags[ep->e_secinfo_order[0]];
+ ep->e_squids = squids;
+ ep->e_sqgids = sqgids;
+ ep->e_nsquids = nsquids;
+@@ -663,3 +696,107 @@
+ efname, efp?efp->x_line:0, msg);
+ }
+
++char *secflavor_name[SECFLAVOR_COUNT] = { "sys",
++ "krb5",
++ "krb5i",
++ "krb5p",
++ "spkm3",
++ "spkm3i",
++ "spkm3p"
++};
++
++static void
++secinfo_addflavor(int bit, struct exportent *ep)
++{
++ int *p;
++ for (p=ep->e_secinfo_order; *p>=0; p++) {
++ if (*p == bit)
++ return;
++ }
++ *p++ = bit;
++ *p = -1;
++ ep->e_secinfo_flags[bit] = 0;
++}
++
++static int
++secinfo_nameindex(char *name)
++{
++ int i;
++ for (i=0; i<SECFLAVOR_COUNT; i++) {
++ if (strcmp(secflavor_name[i], name) == 0)
++ return i;
++ }
++ return -1;
++}
++
++/* @str is a colon seperated list of security flavors. Their order
++ * is recorded in @ep, and a bitmap corresponding to the list is returned.
++ * A zero return indicates an error.
++ */
++static unsigned int
++parse_flavors(char *str, struct exportent *ep)
++{
++ unsigned int out=0;
++ char *flavor;
++ int bit;
++
++ while ( (flavor=strsep(&str, ":")) ) {
++ bit = secinfo_nameindex(flavor);
++ if (bit == -1) {
++ xlog(L_ERROR, "unknown flavor %s\n", flavor);
++ return 0;
++ }
++ out |= 1<<bit;
++ secinfo_addflavor(bit, ep);
++ }
++ return out;
++}
++
++/* Determine a default security flavor based on ep->e_hostname. */
++static int
++secinfo_default(struct exportent *ep)
++{
++ int i=-1;
++ if (strncmp(ep->e_hostname, "gss/", 4) == 0) {
++ i = secinfo_nameindex(ep->e_hostname + 4);
++ if (i < 0)
++ xlog(L_WARNING, "unknown flavor %s\n", ep->e_hostname);
++ }
++ /* Default to auth_sys */
++ if (i < 0)
++ i = secinfo_nameindex("sys");
++ secinfo_addflavor(i, ep);
++ return 1<<i;
++}
++
++/* Sets the bits in @mask for the appropriate security flavor flags. */
++static void
++setflags(int mask, unsigned int *ap, struct exportent *ep)
++{
++ int active, flavor=0;
++ if (!*ap)
++ *ap = secinfo_default(ep);
++ active = *ap;
++ while (active) {
++ if (active & 1)
++ ep->e_secinfo_flags[flavor] |= mask;
++ flavor++;
++ active >>= 1;
++ }
++}
++
++/* Clears the bits in @mask for the appropriate security flavor flags. */
++static void
++clearflags(int mask, unsigned int *ap, struct exportent *ep)
++{
++ int active, flavor=0;
++ if (!*ap)
++ *ap = secinfo_default(ep);
++ active = *ap;
++ while (active) {
++ if (active & 1)
++ ep->e_secinfo_flags[flavor] &= ~mask;
++ flavor++;
++ active >>= 1;
++ }
++}
+--- nfs-utils-1.0.12/utils/exportfs/exportfs.c.orig 2007-02-27 05:55:40.000000000 +0100
++++ nfs-utils-1.0.12/utils/exportfs/exportfs.c 2007-03-11 00:39:30.569399317 +0100
+@@ -376,10 +376,12 @@
+ continue;
+ }
+ c = '(';
++ /*
+ if (ep->e_flags & NFSEXP_READONLY)
+ c = dumpopt(c, "ro");
+ else
+ c = dumpopt(c, "rw");
++ */
+ if (ep->e_flags & NFSEXP_ASYNC)
+ c = dumpopt(c, "async");
+ if (ep->e_flags & NFSEXP_GATHERED_WRITES)
+@@ -433,6 +435,7 @@
+ break;
+ #endif
+ }
++ secinfo_show(stdout, ep);
+ printf("%c\n", (c != '(')? ')' : ' ');
+ }
+ }
+diff -puN utils/exportfs/exports.man~CITI_NFS4_ALL utils/exportfs/exports.man
+--- nfs-utils-1.0.11/utils/exportfs/exports.man~CITI_NFS4_ALL 2007-02-26 18:52:07.928367000 -0500
++++ nfs-utils-1.0.11-kwc/utils/exportfs/exports.man 2007-02-26 18:52:08.691050000 -0500
+@@ -348,6 +348,20 @@ If the client asks for alternative locat
+ will be given this list of alternatives. (Note that actual replication
+ of the filesystem must be handled elsewhere.)
+
++.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 must have a mountpoint here, though a different
++filesystem is not required; so, for example,
++.IR "mount --bind" " /path /path"
++is sufficient.)
++.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
+diff -puN /dev/null utils/mountd/fsloc.c
+--- /dev/null 2007-02-26 18:43:11.800773059 -0500
++++ nfs-utils-1.0.11-kwc/utils/mountd/fsloc.c 2007-02-26 18:52:08.724017000 -0500
+@@ -0,0 +1,188 @@
++/*
++ * COPYRIGHT (c) 2006
++ * THE REGENTS OF THE UNIVERSITY OF MICHIGAN
++ * ALL RIGHTS RESERVED
++ *
++ * Permission is granted to use, copy, create derivative works
++ * and redistribute this software and such derivative works
++ * for any purpose, so long as the name of The University of
++ * Michigan is not used in any advertising or publicity
++ * pertaining to the use of distribution of this software
++ * without specific, written prior authorization. If the
++ * above copyright notice or any other identification of the
++ * University of Michigan is included in any copy of any
++ * portion of this software, then the disclaimer below must
++ * also be included.
++ *
++ * THIS SOFTWARE IS PROVIDED AS IS, WITHOUT REPRESENTATION
++ * FROM THE UNIVERSITY OF MICHIGAN AS TO ITS FITNESS FOR ANY
++ * PURPOSE, AND WITHOUT WARRANTY BY THE UNIVERSITY OF
++ * MICHIGAN OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING
++ * WITHOUT LIMITATION THE IMPLIED WARRANTIES OF
++ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE
++ * REGENTS OF THE UNIVERSITY OF MICHIGAN SHALL NOT BE LIABLE
++ * FOR ANY DAMAGES, INCLUDING SPECIAL, INDIRECT, INCIDENTAL, OR
++ * CONSEQUENTIAL DAMAGES, WITH RESPECT TO ANY CLAIM ARISING
++ * OUT OF OR IN CONNECTION WITH THE USE OF THE SOFTWARE, EVEN
++ * IF IT HAS BEEN OR IS HEREAFTER ADVISED OF THE POSSIBILITY OF
++ * SUCH DAMAGES.
++ */
++
++#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) {
++ xlog(L_NOTICE, "NULL replicas pointer\n");
++ return;
++ }
++ xlog(L_NOTICE, "replicas listsize=%i\n", sp->h_num);
++ for (i=0; i<sp->h_num; i++) {
++ xlog(L_NOTICE, " %s:%s\n",
++ sp->h_mp[i]->h_host, sp->h_mp[i]->h_path);
++ }
++}
++
++#ifdef DEBUG
++/* 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;
++
++ xlog(L_NOTICE, "called method_stub\n");
++ 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;
++}
++#endif /* DEBUG */
++
++/* Scan @list, which is a NULL-terminated array of strings of the
++ * form path at host[+host], 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 = strchr(list[i], '@');
++ if ((!cp) || list[i][0] != '/') {
++ xlog(L_WARNING, "invalid entry '%s'", list[i]);
++ continue; /* XXX Need better error handling */
++ }
++ res->h_mp[i] = mp;
++ res->h_num++;
++ mp->h_path = strndup(list[i], cp - list[i]);
++ cp++;
++ mp->h_host = strdup(cp);
++ /* hosts are '+' separated, kernel expects ':' separated */
++ while ( (cp = strchr(mp->h_host, '+')) )
++ *cp = ':';
++ }
++ return res;
++}
++
++/* @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;
++
++ xlog(L_NOTICE, "method_list(%s)\n", data);
++ for (ptr--, listsize=1; ptr; ptr=index(ptr, ':'), listsize++)
++ ptr++;
++ list = malloc(listsize * sizeof(char *));
++ copy = strdup(data);
++ if (copy)
++ xlog(L_NOTICE, "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;
++#ifdef DEBUG
++ case FSLOC_STUB:
++ sp = method_stub(data);
++ break;
++#endif
++ default:
++ xlog(L_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);
++}
+diff -puN /dev/null utils/mountd/fsloc.h
+--- /dev/null 2007-02-26 18:43:11.800773059 -0500
++++ nfs-utils-1.0.11-kwc/utils/mountd/fsloc.h 2007-02-26 18:52:08.764976000 -0500
+@@ -0,0 +1,50 @@
++/*
++ * COPYRIGHT (c) 2006
++ * THE REGENTS OF THE UNIVERSITY OF MICHIGAN
++ * ALL RIGHTS RESERVED
++ *
++ * Permission is granted to use, copy, create derivative works
++ * and redistribute this software and such derivative works
++ * for any purpose, so long as the name of The University of
++ * Michigan is not used in any advertising or publicity
++ * pertaining to the use of distribution of this software
++ * without specific, written prior authorization. If the
++ * above copyright notice or any other identification of the
++ * University of Michigan is included in any copy of any
++ * portion of this software, then the disclaimer below must
++ * also be included.
++ *
++ * THIS SOFTWARE IS PROVIDED AS IS, WITHOUT REPRESENTATION
<<Diff was trimmed, longer than 597 lines>>
More information about the pld-cvs-commit
mailing list