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= [EMAIL PROTECTED]:[EMAIL PROTECTED]
++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= [EMAIL PROTECTED]:[EMAIL PROTECTED]
++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 [EMAIL PROTECTED], 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 [EMAIL PROTECTED]:[EMAIL PROTECTED]
++ */
++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>>
_______________________________________________
pld-cvs-commit mailing list
[email protected]
http://lists.pld-linux.org/mailman/listinfo/pld-cvs-commit

Reply via email to