SOURCES: nfs-utils-1.0.9-CITI_NFS4_ALL-1.dif (NEW) - from CITI, on...

qboosh qboosh at pld-linux.org
Tue Jul 18 14:03:14 CEST 2006


Author: qboosh                       Date: Tue Jul 18 12:03:14 2006 GMT
Module: SOURCES                       Tag: HEAD
---- Log message:
- from CITI, one hunk adjusted for heimdal patch

---- Files affected:
SOURCES:
   nfs-utils-1.0.9-CITI_NFS4_ALL-1.dif (NONE -> 1.1)  (NEW)

---- Diffs:

================================================================
Index: SOURCES/nfs-utils-1.0.9-CITI_NFS4_ALL-1.dif
diff -u /dev/null SOURCES/nfs-utils-1.0.9-CITI_NFS4_ALL-1.dif:1.1
--- /dev/null	Tue Jul 18 14:03:14 2006
+++ SOURCES/nfs-utils-1.0.9-CITI_NFS4_ALL-1.dif	Tue Jul 18 14:03:08 2006
@@ -0,0 +1,1449 @@
+
+
+The complete set of CITI nfs-utils patches rolled into one patch.
+
+Changes since 1.0.9-CITI_NFS4_ALL-1:
+
+ * Rebase on final nfs-utils-1.0.9
+
+
+---
+
+ nfs-utils-1.0.9-kwc/support/include/exportfs.h |    7 
+ nfs-utils-1.0.9-kwc/support/include/nfslib.h   |    2 
+ nfs-utils-1.0.9-kwc/support/nfs/exports.c      |   35 +
+ nfs-utils-1.0.9-kwc/utils/exportfs/exportfs.c  |   14 
+ nfs-utils-1.0.9-kwc/utils/exportfs/exports.man |   13 
+ nfs-utils-1.0.9-kwc/utils/gssd/context_mit.c   |  507 +++++++++++++++++++++++--
+ nfs-utils-1.0.9-kwc/utils/gssd/context_spkm3.c |   39 -
+ nfs-utils-1.0.9-kwc/utils/gssd/gssd.c          |    2 
+ nfs-utils-1.0.9-kwc/utils/gssd/krb5_util.c     |  226 ++++++++---
+ nfs-utils-1.0.9-kwc/utils/gssd/krb5_util.h     |    2 
+ nfs-utils-1.0.9-kwc/utils/gssd/write_bytes.h   |   13 
+ nfs-utils-1.0.9-kwc/utils/mountd/Makefile.am   |    2 
+ nfs-utils-1.0.9-kwc/utils/mountd/cache.c       |   25 +
+ nfs-utils-1.0.9-kwc/utils/mountd/fsloc.c       |  193 +++++++++
+ nfs-utils-1.0.9-kwc/utils/mountd/fsloc.h       |   20 
+ 15 files changed, 992 insertions(+), 108 deletions(-)
+
+diff -puN utils/gssd/write_bytes.h~CITI_NFS4_ALL utils/gssd/write_bytes.h
+--- nfs-utils-1.0.9/utils/gssd/write_bytes.h~CITI_NFS4_ALL	2006-07-12 09:27:22.000372000 -0400
++++ nfs-utils-1.0.9-kwc/utils/gssd/write_bytes.h	2006-07-12 09:27:22.044372000 -0400
+@@ -63,6 +63,19 @@ write_buffer(char **p, char *end, gss_bu
+ 	return 0;
+ }
+ 
++inline static int
++write_oid(char **p, char *end, gss_OID_desc *arg)
++{
++	int len = (int)arg->length;		/* make an int out of size_t */
++	if (WRITE_BYTES(p, end, len))
++		return -1;
++	if (*p + arg->length > end)
++		return -1;
++	memcpy(*p, arg->elements, len);
++	*p += len;
++	return 0;
++}
++
+ static inline int
+ get_bytes(char **ptr, const char *end, void *res, int len)
+ {
+diff -puN utils/gssd/context_spkm3.c~CITI_NFS4_ALL utils/gssd/context_spkm3.c
+--- nfs-utils-1.0.9/utils/gssd/context_spkm3.c~CITI_NFS4_ALL	2006-07-12 09:27:22.315372000 -0400
++++ nfs-utils-1.0.9-kwc/utils/gssd/context_spkm3.c	2006-07-12 09:27:22.363357000 -0400
+@@ -51,6 +51,7 @@
+  *
+  *	buf->length should be:
+  *
++ *      version 4
+  *	ctx_id 4 + 12
+  *	qop 4
+  *	mech_used 4 + 7
+@@ -70,60 +71,58 @@ prepare_spkm3_ctx_buffer(gss_spkm3_lucid
+ 	char *p, *end;
+ 	unsigned int buf_size = 0;
+ 
+-	buf_size = lctx->ctx_id.length +
+-		sizeof(lctx->ctx_id.length) + sizeof(lctx->qop) +
++	buf_size = sizeof(lctx->version) +
++		lctx->ctx_id.length + sizeof(lctx->ctx_id.length) +
++		sizeof(lctx->endtime) +
+ 		sizeof(lctx->mech_used.length) + lctx->mech_used.length +
+-		sizeof(lctx->ret_flags) + sizeof(lctx->req_flags) +
+-		sizeof(lctx->share_key.length) + lctx->share_key.length +
++		sizeof(lctx->ret_flags) +
+ 		sizeof(lctx->conf_alg.length) + lctx->conf_alg.length +
+ 		sizeof(lctx->derived_conf_key.length) +
+ 		lctx->derived_conf_key.length +
+ 		sizeof(lctx->intg_alg.length) + lctx->intg_alg.length +
+ 		sizeof(lctx->derived_integ_key.length) +
+-		lctx->derived_integ_key.length +
+-		sizeof(lctx->keyestb_alg.length) + lctx->keyestb_alg.length +
+-		sizeof(lctx->owf_alg.length) + lctx->owf_alg.length;
++		lctx->derived_integ_key.length;
+ 
+ 	if (!(buf->value = calloc(1, buf_size)))
+ 		goto out_err;
+ 	p = buf->value;
+ 	end = buf->value + buf_size;
+ 
++	if (WRITE_BYTES(&p, end, lctx->version))
++		goto out_err;
++	printerr(2, "DEBUG: exporting version = %d\n", lctx->version);
++
+ 	if (write_buffer(&p, end, &lctx->ctx_id))
+ 		goto out_err;
++	printerr(2, "DEBUG: exporting ctx_id(%d)\n", lctx->ctx_id.length);
+ 
+-	if (WRITE_BYTES(&p, end, lctx->qop))
++	if (WRITE_BYTES(&p, end, lctx->endtime))
+ 		goto out_err;
++	printerr(2, "DEBUG: exporting endtime = %d\n", lctx->endtime);
+ 
+ 	if (write_buffer(&p, end, &lctx->mech_used))
+ 		goto out_err;
++	printerr(2, "DEBUG: exporting mech oid (%d)\n", lctx->mech_used.length);
+ 
+ 	if (WRITE_BYTES(&p, end, lctx->ret_flags))
+ 		goto out_err;
+-
+-	if (WRITE_BYTES(&p, end, lctx->req_flags))
+-		goto out_err;
+-
+-	if (write_buffer(&p, end, &lctx->share_key))
+-		goto out_err;
++	printerr(2, "DEBUG: exporting ret_flags = %d\n", lctx->ret_flags);
+ 
+ 	if (write_buffer(&p, end, &lctx->conf_alg))
+ 		goto out_err;
++	printerr(2, "DEBUG: exporting conf_alg oid (%d)\n", lctx->conf_alg.length);
+ 
+ 	if (write_buffer(&p, end, &lctx->derived_conf_key))
+ 		goto out_err;
++	printerr(2, "DEBUG: exporting conf key (%d)\n", lctx->derived_conf_key.length);
+ 
+ 	if (write_buffer(&p, end, &lctx->intg_alg))
+ 		goto out_err;
++	printerr(2, "DEBUG: exporting intg_alg oid (%d)\n", lctx->intg_alg.length);
+ 
+ 	if (write_buffer(&p, end, &lctx->derived_integ_key))
+ 		goto out_err;
+-
+-	if (write_buffer(&p, end, &lctx->keyestb_alg))
+-		goto out_err;
+-
+-	if (write_buffer(&p, end, &lctx->owf_alg))
+-		goto out_err;
++	printerr(2, "DEBUG: exporting intg key (%d)\n", lctx->derived_integ_key.length);
+ 
+ 	buf->length = p - (char *)buf->value;
+ 	return 0;
+diff -puN support/include/exportfs.h~CITI_NFS4_ALL support/include/exportfs.h
+--- nfs-utils-1.0.9/support/include/exportfs.h~CITI_NFS4_ALL	2006-07-12 09:27:22.656064000 -0400
++++ nfs-utils-1.0.9-kwc/support/include/exportfs.h	2006-07-12 09:27:23.943470000 -0400
+@@ -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];
+diff -puN support/include/nfslib.h~CITI_NFS4_ALL support/include/nfslib.h
+--- nfs-utils-1.0.9/support/include/nfslib.h~CITI_NFS4_ALL	2006-07-12 09:27:22.807921000 -0400
++++ nfs-utils-1.0.9-kwc/support/include/nfslib.h	2006-07-12 09:27:23.971470000 -0400
+@@ -80,6 +80,8 @@ struct exportent {
+ 	int		e_nsqgids;
+ 	int		e_fsid;
+ 	char *		e_mountpoint;
++	int             e_fslocmethod;
++	char *          e_fslocdata;
+ };
+ 
+ struct rmtabent {
+diff -puN support/nfs/exports.c~CITI_NFS4_ALL support/nfs/exports.c
+--- nfs-utils-1.0.9/support/nfs/exports.c~CITI_NFS4_ALL	2006-07-12 09:27:22.974921000 -0400
++++ nfs-utils-1.0.9-kwc/support/nfs/exports.c	2006-07-12 09:27:24.000470000 -0400
+@@ -94,6 +94,8 @@ getexportent(int fromkernel, int fromexp
+ 	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;
+ 
+@@ -199,7 +201,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:
+@@ -262,6 +279,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 *
+@@ -437,6 +456,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);
+diff -puN utils/exportfs/exportfs.c~CITI_NFS4_ALL utils/exportfs/exportfs.c
+--- nfs-utils-1.0.9/utils/exportfs/exportfs.c~CITI_NFS4_ALL	2006-07-12 09:27:23.136921000 -0400
++++ nfs-utils-1.0.9-kwc/utils/exportfs/exportfs.c	2006-07-12 09:27:24.026470000 -0400
+@@ -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 != '(')? ')' : ' ');
+ 		}
+ 	}
+diff -puN utils/exportfs/exports.man~CITI_NFS4_ALL utils/exportfs/exports.man
+--- nfs-utils-1.0.9/utils/exportfs/exports.man~CITI_NFS4_ALL	2006-07-12 09:27:23.297921000 -0400
++++ nfs-utils-1.0.9-kwc/utils/exportfs/exports.man	2006-07-12 09:27:24.056470000 -0400
+@@ -312,6 +312,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
+diff -puN utils/mountd/cache.c~CITI_NFS4_ALL utils/mountd/cache.c
+--- nfs-utils-1.0.9/utils/mountd/cache.c~CITI_NFS4_ALL	2006-07-12 09:27:23.456813000 -0400
++++ nfs-utils-1.0.9-kwc/utils/mountd/cache.c	2006-07-12 09:27:24.083470000 -0400
+@@ -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);
+diff -puN /dev/null utils/mountd/fsloc.c
+--- /dev/null	2006-07-12 05:08:24.336697000 -0400
++++ nfs-utils-1.0.9-kwc/utils/mountd/fsloc.c	2006-07-12 09:27:24.106470000 -0400
+@@ -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);
++}
+diff -puN /dev/null utils/mountd/fsloc.h
+--- /dev/null	2006-07-12 05:08:24.336697000 -0400
++++ nfs-utils-1.0.9-kwc/utils/mountd/fsloc.h	2006-07-12 09:27:24.128470000 -0400
+@@ -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 */
+diff -puN utils/mountd/Makefile.am~CITI_NFS4_ALL utils/mountd/Makefile.am
+--- nfs-utils-1.0.9/utils/mountd/Makefile.am~CITI_NFS4_ALL	2006-07-12 09:27:23.898470000 -0400
++++ nfs-utils-1.0.9-kwc/utils/mountd/Makefile.am	2006-07-12 09:27:24.146471000 -0400
+@@ -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 \
+diff -puN utils/gssd/gssd.c~CITI_NFS4_ALL utils/gssd/gssd.c
+--- nfs-utils-1.0.9/utils/gssd/gssd.c~CITI_NFS4_ALL	2006-07-12 09:27:24.415404000 -0400
++++ nfs-utils-1.0.9-kwc/utils/gssd/gssd.c	2006-07-12 09:27:24.821019000 -0400
+@@ -157,6 +157,8 @@ main(int argc, char *argv[])
+ 
+ 	/* Process keytab file and get machine credentials */
+ 	gssd_refresh_krb5_machine_creds();
++	/* Determine Kerberos information from the kernel */
++	gssd_obtain_kernel_krb5_info();
+ 
+ 	gssd_run();
+ 	printerr(0, "gssd_run returned!\n");
+diff -puN utils/gssd/krb5_util.c~CITI_NFS4_ALL utils/gssd/krb5_util.c
+--- nfs-utils-1.0.9/utils/gssd/krb5_util.c~CITI_NFS4_ALL	2006-07-12 09:27:24.595224000 -0400
++++ nfs-utils-1.0.9-kwc/utils/gssd/krb5_util.c	2006-07-12 09:27:24.862019000 -0400
+@@ -97,6 +97,7 @@
+ #include "config.h"
+ #include <sys/param.h>
+ #include <rpc/rpc.h>
++#include <sys/types.h>
+ #include <sys/stat.h>
+ #include <sys/socket.h>
+ #include <arpa/inet.h>
+@@ -105,6 +106,7 @@
+ #include <stdlib.h>
+ #include <string.h>
<<Diff was trimmed, longer than 597 lines>>


More information about the pld-cvs-commit mailing list