diff -crN ./Makefile ../cfs-1.3.1-LnxSlckwr/Makefile
*** ./Makefile  Tue Dec 19 18:58:40 1995
--- ../cfs-1.3.1-LnxSlckwr/Makefile     Tue Dec 19 20:56:03 1995
***************
*** 64,76 ****
 #CC=cc
 #COPT=-O -DNOT_ANSI_C -DPROTOTYPES=0
 # for gcc, use
! CC=gcc
 COPT=-O2 -DPROTOTYPES=1

 #1B: paths:
 BINDIR=/usr/local/bin
! ETCDIR=/usr/local/etc
! PRINTCMD=enscript -Gr2
 # you only need RSAREF for ESM
 RSALIB=/usr/mab/rsaref/install/rsaref.a
 RINCLUDES=/usr/mab/rsaref/source
--- 64,100 ----
 #CC=cc
 #COPT=-O -DNOT_ANSI_C -DPROTOTYPES=0
 # for gcc, use
! CC=gcc -Dd_fileno=d_ino  \
! -Dnfsproc_null_2_svc=nfsproc_null_2     \
! -Dnfsproc_getattr_2_svc=nfsproc_getattr_2       \
! -Dnfsproc_setattr_2_svc=nfsproc_setattr_2       \
! -Dnfsproc_root_2_svc=nfsproc_root_2     \
! -Dnfsproc_lookup_2_svc=nfsproc_lookup_2 \
! -Dnfsproc_readlink_2_svc=nfsproc_readlink_2     \
! -Dnfsproc_read_2_svc=nfsproc_read_2     \
! -Dnfsproc_writecache_2_svc=nfsproc_writecache_2 \
! -Dnfsproc_write_2_svc=nfsproc_write_2   \
! -Dnfsproc_create_2_svc=nfsproc_create_2 \
! -Dnfsproc_remove_2_svc=nfsproc_remove_2 \
! -Dnfsproc_rename_2_svc=nfsproc_rename_2 \
! -Dnfsproc_link_2_svc=nfsproc_link_2     \
! -Dnfsproc_symlink_2_svc=nfsproc_symlink_2       \
! -Dnfsproc_mkdir_2_svc=nfsproc_mkdir_2   \
! -Dnfsproc_rmdir_2_svc=nfsproc_rmdir_2   \
! -Dnfsproc_readdir_2_svc=nfsproc_readdir_2       \
! -Dnfsproc_statfs_2_svc=nfsproc_statfs_2 \
! -Dadmproc_null_1_svc=admproc_null_1     \
! -Dadmproc_attach_1_svc=admproc_attach_1 \
! -Dadmproc_detach_1_svc=admproc_detach_1 \
! -Dadmproc_ls_1_svc=admproc_ls_1
!
!
 COPT=-O2 -DPROTOTYPES=1

 #1B: paths:
 BINDIR=/usr/local/bin
! SBINDIR=/usr/local/sbin
! PRINTCMD=lpr
 # you only need RSAREF for ESM
 RSALIB=/usr/mab/rsaref/install/rsaref.a
 RINCLUDES=/usr/mab/rsaref/source
***************
*** 104,110 ****
 # won't compile out of the box, this is the most likely problem.  Replace
 # rpcgen, and things should work fine.
 # See README.linux if you can't make things work.
! #CFLAGS=$(COPT) -I$(RINCLUDES)
 #LIBS=
 #COMPAT=

--- 128,134 ----
 # won't compile out of the box, this is the most likely problem.  Replace
 # rpcgen, and things should work fine.
 # See README.linux if you can't make things work.
! CFLAGS=$(COPT) -I$(RINCLUDES)
 #LIBS=
 #COMPAT=

***************
*** 239,266 ****
 $(COBJS): nfsproto.h admproto.h cfs.h mcg.h safer.h shs.h

 nfsproto_xdr.c: nfsproto.x
!       rpcgen -c -o nfsproto_xdr.c nfsproto.x

 nfsproto_svr.c: nfsproto.x
!       rpcgen -m -o nfsproto_svr.c nfsproto.x

 nfsproto.h: nfsproto.x
!       rpcgen -h -o nfsproto.h nfsproto.x

 admproto_xdr.c: admproto.x
!       rpcgen -c -o admproto_xdr.c admproto.x

 admproto_svr.c: admproto.x
!       rpcgen -m -o admproto_svr.c admproto.x

 admproto.h: admproto.x
!       rpcgen -h -o admproto.h admproto.x

 admproto_clnt.c: admproto.x
!       rpcgen -l -o admproto_clnt.c admproto.x

 clean:
!       rm -f $(OBJS) $(COBJS) $(OTHERS) cfsd cmkdir cattach cdetach cname ccat
       rm -f $(EOBJS) esm

 cfs.shar: $(SRCS) $(ESRCS) $(MANS)
--- 263,290 ----
 $(COBJS): nfsproto.h admproto.h cfs.h mcg.h safer.h shs.h

 nfsproto_xdr.c: nfsproto.x
! #     rpcgen -c -o nfsproto_xdr.c nfsproto.x

 nfsproto_svr.c: nfsproto.x
! #     rpcgen -m -o nfsproto_svr.c nfsproto.x

 nfsproto.h: nfsproto.x
! #     rpcgen -h -o nfsproto.h nfsproto.x

 admproto_xdr.c: admproto.x
! #     rpcgen -c -o admproto_xdr.c admproto.x

 admproto_svr.c: admproto.x
! #     rpcgen -m -o admproto_svr.c admproto.x

 admproto.h: admproto.x
! #     rpcgen -h -o admproto.h admproto.x

 admproto_clnt.c: admproto.x
! #     rpcgen -l -o admproto_clnt.c admproto.x

 clean:
!       rm -f $(OBJS) $(COBJS) cfsd cmkdir cattach cdetach cname ccat
       rm -f $(EOBJS) esm

 cfs.shar: $(SRCS) $(ESRCS) $(MANS)
***************
*** 270,276 ****
       $(PRINTCMD) $(SRCS) cfs.h mcg.h safer.h admproto.h nfsproto.h

 install_cfs: cfsd cattach cdetach cmkdir
!       install -m 0755 -c -o root cfsd $(ETCDIR)
       install -m 0755 -c -o root cattach cdetach cmkdir cpasswd ssh \
                 cname ccat $(BINDIR)
 #     install -m 0755 i o $(BINDIR)
--- 294,300 ----
       $(PRINTCMD) $(SRCS) cfs.h mcg.h safer.h admproto.h nfsproto.h

 install_cfs: cfsd cattach cdetach cmkdir
!       install -m 0755 -c -o root cfsd $(SBINDIR)
       install -m 0755 -c -o root cattach cdetach cmkdir cpasswd ssh \
                 cname ccat $(BINDIR)
 #     install -m 0755 i o $(BINDIR)
diff -crN ./README.install ../cfs-1.3.1-LnxSlckwr/README.install
*** ./README.install    Tue Dec 19 18:58:40 1995
--- ../cfs-1.3.1-LnxSlckwr/README.install       Tue Dec 19 19:40:25 1995
***************
*** 56,71 ****
 7) add this to the end of /etc/rc.local (some place after you have
 mountd started):

! if [ -x /usr/local/etc/cfsd ]; then
!       /usr/local/etc/cfsd && \
!               /etc/mount -o port=3049,intr localhost:/null /crypt
 fi

 7a) on some platforms (especially BSDI), you may get better CFS
 performance with a smaller mount blocksize:
! if [ -x /usr/local/etc/cfsd ]; then
!    /usr/local/etc/cfsd && \
!       /etc/mount -o port=3049,intr,rsize=2048,wsize=2048 localhost:/null /crypt
 fi

 8) run the commands in step 7 by hand to get it started now.  you may have to
--- 56,71 ----
 7) add this to the end of /etc/rc.local (some place after you have
 mountd started):

! if [ -x /usr/local/sbin/cfsd ]; then
!       /usr/local/sbin/cfsd && \
!               /bin/mount -o port=3049,intr localhost:/null /crypt
 fi

 7a) on some platforms (especially BSDI), you may get better CFS
 performance with a smaller mount blocksize:
! if [ -x /usr/local/sbin/cfsd ]; then
!    /usr/local/sbin/cfsd && \
!       /bin/mount -o port=3049,intr,rsize=2048,wsize=2048 localhost:/null /crypt
 fi

 8) run the commands in step 7 by hand to get it started now.  you may have to
diff -crN ./admproto.h ../cfs-1.3.1-LnxSlckwr/admproto.h
*** ./admproto.h        Thu Jan  1 01:00:00 1970
--- ../cfs-1.3.1-LnxSlckwr/admproto.h   Mon Dec 18 04:00:52 1995
***************
*** 0 ****
--- 1,119 ----
+ /*
+  * Please do not edit this file.
+  * It was generated using rpcgen.
+  */
+
+ #include <rpc/types.h>
+
+
+ enum cfsstat {
+       CFS_OK = 0,
+       CFSERR_PERM = 1,
+       CFSERR_IFULL = 2,
+       CFSERR_NOINS = 3,
+       CFSERR_EXIST = 4,
+       CFSERR_NODIR = 5,
+       CFSERR_BADKEY = 6,
+       CFSERR_BADNAME = 7,
+ };
+ typedef enum cfsstat cfsstat;
+ bool_t xdr_cfsstat();
+
+ enum ciphers {
+       CFS_STD_DES = 0,
+       CFS_THREE_DES = 1,
+       CFS_IDEA = 2,
+       CFS_BLOWFISH = 3,
+       CFS_SKIPJACK = 4,
+       CFS_MACGUFFIN = 5,
+       CFS_SAFER_SK128 = 6,
+ };
+ typedef enum ciphers ciphers;
+ bool_t xdr_ciphers();
+ #define CFS_MAXCOMP 255
+ #define CFS_MAXNAME 1024
+
+ struct cfs_adm_deskey {
+       long pl;
+       u_char primary[8];
+       u_char secondary[8];
+ };
+ typedef struct cfs_adm_deskey cfs_adm_deskey;
+ bool_t xdr_cfs_adm_deskey();
+
+ struct cfs_adm_3deskey {
+       long pl;
+       u_char primary1[8];
+       u_char primary2[8];
+       u_char secondary1[8];
+       u_char secondary2[8];
+ };
+ typedef struct cfs_adm_3deskey cfs_adm_3deskey;
+ bool_t xdr_cfs_adm_3deskey();
+
+ struct cfs_adm_blowkey {
+       long pl;
+       u_char primary[16];
+       u_char secondary[16];
+ };
+ typedef struct cfs_adm_blowkey cfs_adm_blowkey;
+ bool_t xdr_cfs_adm_blowkey();
+
+ struct cfs_adm_mcgkey {
+       long pl;
+       u_char primary[16];
+       u_char secondary[16];
+ };
+ typedef struct cfs_adm_mcgkey cfs_adm_mcgkey;
+ bool_t xdr_cfs_adm_mcgkey();
+
+ struct cfs_adm_saferkey {
+       long pl;
+       u_char primary[16];
+       u_char secondary[16];
+ };
+ typedef struct cfs_adm_saferkey cfs_adm_saferkey;
+ bool_t xdr_cfs_adm_saferkey();
+
+ struct cfs_admkey {
+       ciphers cipher;
+       union {
+               cfs_adm_deskey deskey;
+               cfs_adm_3deskey des3key;
+               cfs_adm_blowkey blowkey;
+               cfs_adm_mcgkey mcgkey;
+               cfs_adm_saferkey saferkey;
+       } cfs_admkey_u;
+ };
+ typedef struct cfs_admkey cfs_admkey;
+ bool_t xdr_cfs_admkey();
+
+ struct cfs_attachargs {
+       char *dirname;
+       char *name;
+       cfs_admkey key;
+       int uid;
+       int highsec;
+       bool_t anon;
+       int expire;
+       int idle;
+       int smsize;
+ };
+ typedef struct cfs_attachargs cfs_attachargs;
+ bool_t xdr_cfs_attachargs();
+
+ struct cfs_detachargs {
+       char *name;
+       int uid;
+ };
+ typedef struct cfs_detachargs cfs_detachargs;
+ bool_t xdr_cfs_detachargs();
+
+ #define ADM_PROGRAM ((u_long)0x31234567)
+ #define ADM_VERSION ((u_long)2)
+ #define ADMPROC_NULL ((u_long)0)
+ extern void *admproc_null_2();
+ #define ADMPROC_ATTACH ((u_long)1)
+ extern cfsstat *admproc_attach_2();
+ #define ADMPROC_DETACH ((u_long)2)
+ extern cfsstat *admproc_detach_2();
diff -crN ./admproto_clnt.c ../cfs-1.3.1-LnxSlckwr/admproto_clnt.c
*** ./admproto_clnt.c   Thu Jan  1 01:00:00 1970
--- ../cfs-1.3.1-LnxSlckwr/admproto_clnt.c      Mon Dec 18 04:00:52 1995
***************
*** 0 ****
--- 1,52 ----
+ /*
+  * Please do not edit this file.
+  * It was generated using rpcgen.
+  */
+
+ #include <rpc/rpc.h>
+ #include "admproto.h"
+
+ /* Default timeout can be changed using clnt_control() */
+ static struct timeval TIMEOUT = { 25, 0 };
+
+ void *
+ admproc_null_2(argp, clnt)
+       void *argp;
+       CLIENT *clnt;
+ {
+       static char res;
+
+       bzero((char *)&res, sizeof(res));
+       if (clnt_call(clnt, ADMPROC_NULL, xdr_void, argp, xdr_void, &res, TIMEOUT) != RPC_SUCCESS) {
+               return (NULL);
+       }
+       return ((void *)&res);
+ }
+
+ cfsstat *
+ admproc_attach_2(argp, clnt)
+       cfs_attachargs *argp;
+       CLIENT *clnt;
+ {
+       static cfsstat res;
+
+       bzero((char *)&res, sizeof(res));
+       if (clnt_call(clnt, ADMPROC_ATTACH, xdr_cfs_attachargs, argp, xdr_cfsstat, &res, TIMEOUT) != RPC_SUCCESS) {
+               return (NULL);
+       }
+       return (&res);
+ }
+
+ cfsstat *
+ admproc_detach_2(argp, clnt)
+       cfs_detachargs *argp;
+       CLIENT *clnt;
+ {
+       static cfsstat res;
+
+       bzero((char *)&res, sizeof(res));
+       if (clnt_call(clnt, ADMPROC_DETACH, xdr_cfs_detachargs, argp, xdr_cfsstat, &res, TIMEOUT) != RPC_SUCCESS) {
+               return (NULL);
+       }
+       return (&res);
+ }
diff -crN ./admproto_svr.c ../cfs-1.3.1-LnxSlckwr/admproto_svr.c
*** ./admproto_svr.c    Thu Jan  1 01:00:00 1970
--- ../cfs-1.3.1-LnxSlckwr/admproto_svr.c       Mon Dec 18 04:00:52 1995
***************
*** 0 ****
--- 1,60 ----
+ /*
+  * Please do not edit this file.
+  * It was generated using rpcgen.
+  */
+
+ #include <stdio.h>
+ #include <rpc/rpc.h>
+ #include "admproto.h"
+
+ void
+ adm_program_2(rqstp, transp)
+       struct svc_req *rqstp;
+       register SVCXPRT *transp;
+ {
+       union {
+               cfs_attachargs admproc_attach_2_arg;
+               cfs_detachargs admproc_detach_2_arg;
+       } argument;
+       char *result;
+       bool_t (*xdr_argument)(), (*xdr_result)();
+       char *(*local)();
+
+       switch (rqstp->rq_proc) {
+       case ADMPROC_NULL:
+               xdr_argument = xdr_void;
+               xdr_result = xdr_void;
+               local = (char *(*)()) admproc_null_2;
+               break;
+
+       case ADMPROC_ATTACH:
+               xdr_argument = xdr_cfs_attachargs;
+               xdr_result = xdr_cfsstat;
+               local = (char *(*)()) admproc_attach_2;
+               break;
+
+       case ADMPROC_DETACH:
+               xdr_argument = xdr_cfs_detachargs;
+               xdr_result = xdr_cfsstat;
+               local = (char *(*)()) admproc_detach_2;
+               break;
+
+       default:
+               svcerr_noproc(transp);
+               return;
+       }
+       bzero((char *)&argument, sizeof(argument));
+       if (!svc_getargs(transp, xdr_argument, &argument)) {
+               svcerr_decode(transp);
+               return;
+       }
+       result = (*local)(&argument, rqstp);
+       if (result != NULL && !svc_sendreply(transp, xdr_result, result)) {
+               svcerr_systemerr(transp);
+       }
+       if (!svc_freeargs(transp, xdr_argument, &argument)) {
+               fprintf(stderr, "unable to free arguments");
+               exit(1);
+       }
+       return;
+ }
diff -crN ./admproto_xdr.c ../cfs-1.3.1-LnxSlckwr/admproto_xdr.c
*** ./admproto_xdr.c    Thu Jan  1 01:00:00 1970
--- ../cfs-1.3.1-LnxSlckwr/admproto_xdr.c       Mon Dec 18 04:00:52 1995
***************
*** 0 ****
--- 1,207 ----
+ /*
+  * Please do not edit this file.
+  * It was generated using rpcgen.
+  */
+
+ #include <rpc/rpc.h>
+ #include "admproto.h"
+
+ bool_t
+ xdr_cfsstat(xdrs, objp)
+       XDR *xdrs;
+       cfsstat *objp;
+ {
+       if (!xdr_enum(xdrs, (enum_t *)objp)) {
+               return (FALSE);
+       }
+       return (TRUE);
+ }
+
+ bool_t
+ xdr_ciphers(xdrs, objp)
+       XDR *xdrs;
+       ciphers *objp;
+ {
+       if (!xdr_enum(xdrs, (enum_t *)objp)) {
+               return (FALSE);
+       }
+       return (TRUE);
+ }
+
+ bool_t
+ xdr_cfs_adm_deskey(xdrs, objp)
+       XDR *xdrs;
+       cfs_adm_deskey *objp;
+ {
+       if (!xdr_long(xdrs, &objp->pl)) {
+               return (FALSE);
+       }
+       if (!xdr_vector(xdrs, (char *)objp->primary, 8, sizeof(u_char), xdr_u_char)) {
+               return (FALSE);
+       }
+       if (!xdr_vector(xdrs, (char *)objp->secondary, 8, sizeof(u_char), xdr_u_char)) {
+               return (FALSE);
+       }
+       return (TRUE);
+ }
+
+ bool_t
+ xdr_cfs_adm_3deskey(xdrs, objp)
+       XDR *xdrs;
+       cfs_adm_3deskey *objp;
+ {
+       if (!xdr_long(xdrs, &objp->pl)) {
+               return (FALSE);
+       }
+       if (!xdr_vector(xdrs, (char *)objp->primary1, 8, sizeof(u_char), xdr_u_char)) {
+               return (FALSE);
+       }
+       if (!xdr_vector(xdrs, (char *)objp->primary2, 8, sizeof(u_char), xdr_u_char)) {
+               return (FALSE);
+       }
+       if (!xdr_vector(xdrs, (char *)objp->secondary1, 8, sizeof(u_char), xdr_u_char)) {
+               return (FALSE);
+       }
+       if (!xdr_vector(xdrs, (char *)objp->secondary2, 8, sizeof(u_char), xdr_u_char)) {
+               return (FALSE);
+       }
+       return (TRUE);
+ }
+
+ bool_t
+ xdr_cfs_adm_blowkey(xdrs, objp)
+       XDR *xdrs;
+       cfs_adm_blowkey *objp;
+ {
+       if (!xdr_long(xdrs, &objp->pl)) {
+               return (FALSE);
+       }
+       if (!xdr_vector(xdrs, (char *)objp->primary, 16, sizeof(u_char), xdr_u_char)) {
+               return (FALSE);
+       }
+       if (!xdr_vector(xdrs, (char *)objp->secondary, 16, sizeof(u_char), xdr_u_char)) {
+               return (FALSE);
+       }
+       return (TRUE);
+ }
+
+ bool_t
+ xdr_cfs_adm_mcgkey(xdrs, objp)
+       XDR *xdrs;
+       cfs_adm_mcgkey *objp;
+ {
+       if (!xdr_long(xdrs, &objp->pl)) {
+               return (FALSE);
+       }
+       if (!xdr_vector(xdrs, (char *)objp->primary, 16, sizeof(u_char), xdr_u_char)) {
+               return (FALSE);
+       }
+       if (!xdr_vector(xdrs, (char *)objp->secondary, 16, sizeof(u_char), xdr_u_char)) {
+               return (FALSE);
+       }
+       return (TRUE);
+ }
+
+ bool_t
+ xdr_cfs_adm_saferkey(xdrs, objp)
+       XDR *xdrs;
+       cfs_adm_saferkey *objp;
+ {
+       if (!xdr_long(xdrs, &objp->pl)) {
+               return (FALSE);
+       }
+       if (!xdr_vector(xdrs, (char *)objp->primary, 16, sizeof(u_char), xdr_u_char)) {
+               return (FALSE);
+       }
+       if (!xdr_vector(xdrs, (char *)objp->secondary, 16, sizeof(u_char), xdr_u_char)) {
+               return (FALSE);
+       }
+       return (TRUE);
+ }
+
+ bool_t
+ xdr_cfs_admkey(xdrs, objp)
+       XDR *xdrs;
+       cfs_admkey *objp;
+ {
+       if (!xdr_ciphers(xdrs, &objp->cipher)) {
+               return (FALSE);
+       }
+       switch (objp->cipher) {
+       case CFS_STD_DES:
+               if (!xdr_cfs_adm_deskey(xdrs, &objp->cfs_admkey_u.deskey)) {
+                       return (FALSE);
+               }
+               break;
+       case CFS_THREE_DES:
+               if (!xdr_cfs_adm_3deskey(xdrs, &objp->cfs_admkey_u.des3key)) {
+                       return (FALSE);
+               }
+               break;
+       case CFS_BLOWFISH:
+               if (!xdr_cfs_adm_blowkey(xdrs, &objp->cfs_admkey_u.blowkey)) {
+                       return (FALSE);
+               }
+               break;
+       case CFS_MACGUFFIN:
+               if (!xdr_cfs_adm_mcgkey(xdrs, &objp->cfs_admkey_u.mcgkey)) {
+                       return (FALSE);
+               }
+               break;
+       case CFS_SAFER_SK128:
+               if (!xdr_cfs_adm_saferkey(xdrs, &objp->cfs_admkey_u.saferkey)) {
+                       return (FALSE);
+               }
+               break;
+       }
+       return (TRUE);
+ }
+
+ bool_t
+ xdr_cfs_attachargs(xdrs, objp)
+       XDR *xdrs;
+       cfs_attachargs *objp;
+ {
+       if (!xdr_string(xdrs, &objp->dirname, CFS_MAXNAME)) {
+               return (FALSE);
+       }
+       if (!xdr_string(xdrs, &objp->name, CFS_MAXCOMP)) {
+               return (FALSE);
+       }
+       if (!xdr_cfs_admkey(xdrs, &objp->key)) {
+               return (FALSE);
+       }
+       if (!xdr_int(xdrs, &objp->uid)) {
+               return (FALSE);
+       }
+       if (!xdr_int(xdrs, &objp->highsec)) {
+               return (FALSE);
+       }
+       if (!xdr_bool(xdrs, &objp->anon)) {
+               return (FALSE);
+       }
+       if (!xdr_int(xdrs, &objp->expire)) {
+               return (FALSE);
+       }
+       if (!xdr_int(xdrs, &objp->idle)) {
+               return (FALSE);
+       }
+       if (!xdr_int(xdrs, &objp->smsize)) {
+               return (FALSE);
+       }
+       return (TRUE);
+ }
+
+ bool_t
+ xdr_cfs_detachargs(xdrs, objp)
+       XDR *xdrs;
+       cfs_detachargs *objp;
+ {
+       if (!xdr_string(xdrs, &objp->name, CFS_MAXCOMP)) {
+               return (FALSE);
+       }
+       if (!xdr_int(xdrs, &objp->uid)) {
+               return (FALSE);
+       }
+       return (TRUE);
+ }
diff -crN ./nfsproto.h ../cfs-1.3.1-LnxSlckwr/nfsproto.h
*** ./nfsproto.h        Thu Jan  1 01:00:00 1970
--- ../cfs-1.3.1-LnxSlckwr/nfsproto.h   Mon Dec 18 04:00:52 1995
***************
*** 0 ****
--- 1,320 ----
+ /*
+  * Please do not edit this file.
+  * It was generated using rpcgen.
+  */
+
+ #include <rpc/types.h>
+
+ #define NFS_PORT 2049
+ #define NFS_MAXDATA 8192
+ #define NFS_MAXPATHLEN 1024
+ #define NFS_MAXNAMLEN 255
+ #define NFS_FHSIZE 32
+ #define NFS_COOKIESIZE 4
+ #define NFS_FIFO_DEV -1
+ #define NFSMODE_FMT 0170000
+ #define NFSMODE_DIR 0040000
+ #define NFSMODE_CHR 0020000
+ #define NFSMODE_BLK 0060000
+ #define NFSMODE_REG 0100000
+ #define NFSMODE_LNK 0120000
+ #define NFSMODE_SOCK 0140000
+ #define NFSMODE_FIFO 0010000
+
+ enum nfsstat {
+       NFS_OK = 0,
+       NFSERR_PERM = 1,
+       NFSERR_NOENT = 2,
+       NFSERR_IO = 5,
+       NFSERR_NXIO = 6,
+       NFSERR_ACCES = 13,
+       NFSERR_EXIST = 17,
+       NFSERR_NODEV = 19,
+       NFSERR_NOTDIR = 20,
+       NFSERR_ISDIR = 21,
+       NFSERR_FBIG = 27,
+       NFSERR_NOSPC = 28,
+       NFSERR_ROFS = 30,
+       NFSERR_NAMETOOLONG = 63,
+       NFSERR_NOTEMPTY = 66,
+       NFSERR_DQUOT = 69,
+       NFSERR_STALE = 70,
+       NFSERR_WFLUSH = 99,
+ };
+ typedef enum nfsstat nfsstat;
+ bool_t xdr_nfsstat();
+
+ enum ftype {
+       NFNON = 0,
+       NFREG = 1,
+       NFDIR = 2,
+       NFBLK = 3,
+       NFCHR = 4,
+       NFLNK = 5,
+       NFSOCK = 6,
+       NFBAD = 7,
+       NFFIFO = 8,
+ };
+ typedef enum ftype ftype;
+ bool_t xdr_ftype();
+
+ struct nfs_fh {
+       char data[NFS_FHSIZE];
+ };
+ typedef struct nfs_fh nfs_fh;
+ bool_t xdr_nfs_fh();
+
+ struct nfstime {
+       u_int seconds;
+       u_int useconds;
+ };
+ typedef struct nfstime nfstime;
+ bool_t xdr_nfstime();
+
+ struct fattr {
+       ftype type;
+       u_int mode;
+       u_int nlink;
+       u_int uid;
+       u_int gid;
+       u_int size;
+       u_int blocksize;
+       u_int rdev;
+       u_int blocks;
+       u_int fsid;
+       u_int fileid;
+       nfstime atime;
+       nfstime mtime;
+       nfstime ctime;
+ };
+ typedef struct fattr fattr;
+ bool_t xdr_fattr();
+
+ struct sattr {
+       u_int mode;
+       u_int uid;
+       u_int gid;
+       u_int size;
+       nfstime atime;
+       nfstime mtime;
+ };
+ typedef struct sattr sattr;
+ bool_t xdr_sattr();
+
+ typedef char *filename;
+ bool_t xdr_filename();
+
+ typedef char *nfspath;
+ bool_t xdr_nfspath();
+
+ struct attrstat {
+       nfsstat status;
+       union {
+               fattr attributes;
+       } attrstat_u;
+ };
+ typedef struct attrstat attrstat;
+ bool_t xdr_attrstat();
+
+ struct sattrargs {
+       nfs_fh file;
+       sattr attributes;
+ };
+ typedef struct sattrargs sattrargs;
+ bool_t xdr_sattrargs();
+
+ struct diropargs {
+       nfs_fh dir;
+       filename name;
+ };
+ typedef struct diropargs diropargs;
+ bool_t xdr_diropargs();
+
+ struct diropokres {
+       nfs_fh file;
+       fattr attributes;
+ };
+ typedef struct diropokres diropokres;
+ bool_t xdr_diropokres();
+
+ struct diropres {
+       nfsstat status;
+       union {
+               diropokres diropres;
+       } diropres_u;
+ };
+ typedef struct diropres diropres;
+ bool_t xdr_diropres();
+
+ struct readlinkres {
+       nfsstat status;
+       union {
+               nfspath data;
+       } readlinkres_u;
+ };
+ typedef struct readlinkres readlinkres;
+ bool_t xdr_readlinkres();
+
+ struct readargs {
+       nfs_fh file;
+       u_int offset;
+       u_int count;
+       u_int totalcount;
+ };
+ typedef struct readargs readargs;
+ bool_t xdr_readargs();
+
+ struct readokres {
+       fattr attributes;
+       struct {
+               u_int data_len;
+               char *data_val;
+       } data;
+ };
+ typedef struct readokres readokres;
+ bool_t xdr_readokres();
+
+ struct readres {
+       nfsstat status;
+       union {
+               readokres reply;
+       } readres_u;
+ };
+ typedef struct readres readres;
+ bool_t xdr_readres();
+
+ struct writeargs {
+       nfs_fh file;
+       u_int beginoffset;
+       u_int offset;
+       u_int totalcount;
+       struct {
+               u_int data_len;
+               char *data_val;
+       } data;
+ };
+ typedef struct writeargs writeargs;
+ bool_t xdr_writeargs();
+
+ struct createargs {
+       diropargs where;
+       sattr attributes;
+ };
+ typedef struct createargs createargs;
+ bool_t xdr_createargs();
+
+ struct renameargs {
+       diropargs from;
+       diropargs to;
+ };
+ typedef struct renameargs renameargs;
+ bool_t xdr_renameargs();
+
+ struct linkargs {
+       nfs_fh from;
+       diropargs to;
+ };
+ typedef struct linkargs linkargs;
+ bool_t xdr_linkargs();
+
+ struct symlinkargs {
+       diropargs from;
+       nfspath to;
+       sattr attributes;
+ };
+ typedef struct symlinkargs symlinkargs;
+ bool_t xdr_symlinkargs();
+
+ typedef char nfscookie[NFS_COOKIESIZE];
+ bool_t xdr_nfscookie();
+
+ struct readdirargs {
+       nfs_fh dir;
+       nfscookie cookie;
+       u_int count;
+ };
+ typedef struct readdirargs readdirargs;
+ bool_t xdr_readdirargs();
+
+ struct entry {
+       u_int fileid;
+       filename name;
+       nfscookie cookie;
+       struct entry *nextentry;
+ };
+ typedef struct entry entry;
+ bool_t xdr_entry();
+
+ struct dirlist {
+       entry *entries;
+       bool_t eof;
+ };
+ typedef struct dirlist dirlist;
+ bool_t xdr_dirlist();
+
+ struct readdirres {
+       nfsstat status;
+       union {
+               dirlist reply;
+       } readdirres_u;
+ };
+ typedef struct readdirres readdirres;
+ bool_t xdr_readdirres();
+
+ struct statfsokres {
+       u_int tsize;
+       u_int bsize;
+       u_int blocks;
+       u_int bfree;
+       u_int bavail;
+ };
+ typedef struct statfsokres statfsokres;
+ bool_t xdr_statfsokres();
+
+ struct statfsres {
+       nfsstat status;
+       union {
+               statfsokres reply;
+       } statfsres_u;
+ };
+ typedef struct statfsres statfsres;
+ bool_t xdr_statfsres();
+
+ #define NFS_PROGRAM ((u_long)100003)
+ #define NFS_VERSION ((u_long)2)
+ #define NFSPROC_NULL ((u_long)0)
+ extern void *nfsproc_null_2();
+ #define NFSPROC_GETATTR ((u_long)1)
+ extern attrstat *nfsproc_getattr_2();
+ #define NFSPROC_SETATTR ((u_long)2)
+ extern attrstat *nfsproc_setattr_2();
+ #define NFSPROC_ROOT ((u_long)3)
+ extern void *nfsproc_root_2();
+ #define NFSPROC_LOOKUP ((u_long)4)
+ extern diropres *nfsproc_lookup_2();
+ #define NFSPROC_READLINK ((u_long)5)
+ extern readlinkres *nfsproc_readlink_2();
+ #define NFSPROC_READ ((u_long)6)
+ extern readres *nfsproc_read_2();
+ #define NFSPROC_WRITECACHE ((u_long)7)
+ extern void *nfsproc_writecache_2();
+ #define NFSPROC_WRITE ((u_long)8)
+ extern attrstat *nfsproc_write_2();
+ #define NFSPROC_CREATE ((u_long)9)
+ extern diropres *nfsproc_create_2();
+ #define NFSPROC_REMOVE ((u_long)10)
+ extern nfsstat *nfsproc_remove_2();
+ #define NFSPROC_RENAME ((u_long)11)
+ extern nfsstat *nfsproc_rename_2();
+ #define NFSPROC_LINK ((u_long)12)
+ extern nfsstat *nfsproc_link_2();
+ #define NFSPROC_SYMLINK ((u_long)13)
+ extern nfsstat *nfsproc_symlink_2();
+ #define NFSPROC_MKDIR ((u_long)14)
+ extern diropres *nfsproc_mkdir_2();
+ #define NFSPROC_RMDIR ((u_long)15)
+ extern nfsstat *nfsproc_rmdir_2();
+ #define NFSPROC_READDIR ((u_long)16)
+ extern readdirres *nfsproc_readdir_2();
+ #define NFSPROC_STATFS ((u_long)17)
+ extern statfsres *nfsproc_statfs_2();
diff -crN ./nfsproto_svr.c ../cfs-1.3.1-LnxSlckwr/nfsproto_svr.c
*** ./nfsproto_svr.c    Thu Jan  1 01:00:00 1970
--- ../cfs-1.3.1-LnxSlckwr/nfsproto_svr.c       Mon Dec 18 04:00:52 1995
***************
*** 0 ****
--- 1,163 ----
+ /*
+  * Please do not edit this file.
+  * It was generated using rpcgen.
+  */
+
+ #include <stdio.h>
+ #include <rpc/rpc.h>
+ #include "nfsproto.h"
+
+ void
+ nfs_program_2(rqstp, transp)
+       struct svc_req *rqstp;
+       register SVCXPRT *transp;
+ {
+       union {
+               nfs_fh nfsproc_getattr_2_arg;
+               sattrargs nfsproc_setattr_2_arg;
+               diropargs nfsproc_lookup_2_arg;
+               nfs_fh nfsproc_readlink_2_arg;
+               readargs nfsproc_read_2_arg;
+               writeargs nfsproc_write_2_arg;
+               createargs nfsproc_create_2_arg;
+               diropargs nfsproc_remove_2_arg;
+               renameargs nfsproc_rename_2_arg;
+               linkargs nfsproc_link_2_arg;
+               symlinkargs nfsproc_symlink_2_arg;
+               createargs nfsproc_mkdir_2_arg;
+               diropargs nfsproc_rmdir_2_arg;
+               readdirargs nfsproc_readdir_2_arg;
+               nfs_fh nfsproc_statfs_2_arg;
+       } argument;
+       char *result;
+       bool_t (*xdr_argument)(), (*xdr_result)();
+       char *(*local)();
+
+       switch (rqstp->rq_proc) {
+       case NFSPROC_NULL:
+               xdr_argument = xdr_void;
+               xdr_result = xdr_void;
+               local = (char *(*)()) nfsproc_null_2;
+               break;
+
+       case NFSPROC_GETATTR:
+               xdr_argument = xdr_nfs_fh;
+               xdr_result = xdr_attrstat;
+               local = (char *(*)()) nfsproc_getattr_2;
+               break;
+
+       case NFSPROC_SETATTR:
+               xdr_argument = xdr_sattrargs;
+               xdr_result = xdr_attrstat;
+               local = (char *(*)()) nfsproc_setattr_2;
+               break;
+
+       case NFSPROC_ROOT:
+               xdr_argument = xdr_void;
+               xdr_result = xdr_void;
+               local = (char *(*)()) nfsproc_root_2;
+               break;
+
+       case NFSPROC_LOOKUP:
+               xdr_argument = xdr_diropargs;
+               xdr_result = xdr_diropres;
+               local = (char *(*)()) nfsproc_lookup_2;
+               break;
+
+       case NFSPROC_READLINK:
+               xdr_argument = xdr_nfs_fh;
+               xdr_result = xdr_readlinkres;
+               local = (char *(*)()) nfsproc_readlink_2;
+               break;
+
+       case NFSPROC_READ:
+               xdr_argument = xdr_readargs;
+               xdr_result = xdr_readres;
+               local = (char *(*)()) nfsproc_read_2;
+               break;
+
+       case NFSPROC_WRITECACHE:
+               xdr_argument = xdr_void;
+               xdr_result = xdr_void;
+               local = (char *(*)()) nfsproc_writecache_2;
+               break;
+
+       case NFSPROC_WRITE:
+               xdr_argument = xdr_writeargs;
+               xdr_result = xdr_attrstat;
+               local = (char *(*)()) nfsproc_write_2;
+               break;
+
+       case NFSPROC_CREATE:
+               xdr_argument = xdr_createargs;
+               xdr_result = xdr_diropres;
+               local = (char *(*)()) nfsproc_create_2;
+               break;
+
+       case NFSPROC_REMOVE:
+               xdr_argument = xdr_diropargs;
+               xdr_result = xdr_nfsstat;
+               local = (char *(*)()) nfsproc_remove_2;
+               break;
+
+       case NFSPROC_RENAME:
+               xdr_argument = xdr_renameargs;
+               xdr_result = xdr_nfsstat;
+               local = (char *(*)()) nfsproc_rename_2;
+               break;
+
+       case NFSPROC_LINK:
+               xdr_argument = xdr_linkargs;
+               xdr_result = xdr_nfsstat;
+               local = (char *(*)()) nfsproc_link_2;
+               break;
+
+       case NFSPROC_SYMLINK:
+               xdr_argument = xdr_symlinkargs;
+               xdr_result = xdr_nfsstat;
+               local = (char *(*)()) nfsproc_symlink_2;
+               break;
+
+       case NFSPROC_MKDIR:
+               xdr_argument = xdr_createargs;
+               xdr_result = xdr_diropres;
+               local = (char *(*)()) nfsproc_mkdir_2;
+               break;
+
+       case NFSPROC_RMDIR:
+               xdr_argument = xdr_diropargs;
+               xdr_result = xdr_nfsstat;
+               local = (char *(*)()) nfsproc_rmdir_2;
+               break;
+
+       case NFSPROC_READDIR:
+               xdr_argument = xdr_readdirargs;
+               xdr_result = xdr_readdirres;
+               local = (char *(*)()) nfsproc_readdir_2;
+               break;
+
+       case NFSPROC_STATFS:
+               xdr_argument = xdr_nfs_fh;
+               xdr_result = xdr_statfsres;
+               local = (char *(*)()) nfsproc_statfs_2;
+               break;
+
+       default:
+               svcerr_noproc(transp);
+               return;
+       }
+       bzero((char *)&argument, sizeof(argument));
+       if (!svc_getargs(transp, xdr_argument, &argument)) {
+               svcerr_decode(transp);
+               return;
+       }
+       result = (*local)(&argument, rqstp);
+       if (result != NULL && !svc_sendreply(transp, xdr_result, result)) {
+               svcerr_systemerr(transp);
+       }
+       if (!svc_freeargs(transp, xdr_argument, &argument)) {
+               fprintf(stderr, "unable to free arguments");
+               exit(1);
+       }
+       return;
+ }
diff -crN ./nfsproto_xdr.c ../cfs-1.3.1-LnxSlckwr/nfsproto_xdr.c
*** ./nfsproto_xdr.c    Thu Jan  1 01:00:00 1970
--- ../cfs-1.3.1-LnxSlckwr/nfsproto_xdr.c       Mon Dec 18 04:00:52 1995
***************
*** 0 ****
--- 1,503 ----
+ /*
+  * Please do not edit this file.
+  * It was generated using rpcgen.
+  */
+
+ #include <rpc/rpc.h>
+ #include "nfsproto.h"
+
+ bool_t
+ xdr_nfsstat(xdrs, objp)
+       XDR *xdrs;
+       nfsstat *objp;
+ {
+       if (!xdr_enum(xdrs, (enum_t *)objp)) {
+               return (FALSE);
+       }
+       return (TRUE);
+ }
+
+ bool_t
+ xdr_ftype(xdrs, objp)
+       XDR *xdrs;
+       ftype *objp;
+ {
+       if (!xdr_enum(xdrs, (enum_t *)objp)) {
+               return (FALSE);
+       }
+       return (TRUE);
+ }
+
+ bool_t
+ xdr_nfs_fh(xdrs, objp)
+       XDR *xdrs;
+       nfs_fh *objp;
+ {
+       if (!xdr_opaque(xdrs, objp->data, NFS_FHSIZE)) {
+               return (FALSE);
+       }
+       return (TRUE);
+ }
+
+ bool_t
+ xdr_nfstime(xdrs, objp)
+       XDR *xdrs;
+       nfstime *objp;
+ {
+       if (!xdr_u_int(xdrs, &objp->seconds)) {
+               return (FALSE);
+       }
+       if (!xdr_u_int(xdrs, &objp->useconds)) {
+               return (FALSE);
+       }
+       return (TRUE);
+ }
+
+ bool_t
+ xdr_fattr(xdrs, objp)
+       XDR *xdrs;
+       fattr *objp;
+ {
+       if (!xdr_ftype(xdrs, &objp->type)) {
+               return (FALSE);
+       }
+       if (!xdr_u_int(xdrs, &objp->mode)) {
+               return (FALSE);
+       }
+       if (!xdr_u_int(xdrs, &objp->nlink)) {
+               return (FALSE);
+       }
+       if (!xdr_u_int(xdrs, &objp->uid)) {
+               return (FALSE);
+       }
+       if (!xdr_u_int(xdrs, &objp->gid)) {
+               return (FALSE);
+       }
+       if (!xdr_u_int(xdrs, &objp->size)) {
+               return (FALSE);
+       }
+       if (!xdr_u_int(xdrs, &objp->blocksize)) {
+               return (FALSE);
+       }
+       if (!xdr_u_int(xdrs, &objp->rdev)) {
+               return (FALSE);
+       }
+       if (!xdr_u_int(xdrs, &objp->blocks)) {
+               return (FALSE);
+       }
+       if (!xdr_u_int(xdrs, &objp->fsid)) {
+               return (FALSE);
+       }
+       if (!xdr_u_int(xdrs, &objp->fileid)) {
+               return (FALSE);
+       }
+       if (!xdr_nfstime(xdrs, &objp->atime)) {
+               return (FALSE);
+       }
+       if (!xdr_nfstime(xdrs, &objp->mtime)) {
+               return (FALSE);
+       }
+       if (!xdr_nfstime(xdrs, &objp->ctime)) {
+               return (FALSE);
+       }
+       return (TRUE);
+ }
+
+ bool_t
+ xdr_sattr(xdrs, objp)
+       XDR *xdrs;
+       sattr *objp;
+ {
+       if (!xdr_u_int(xdrs, &objp->mode)) {
+               return (FALSE);
+       }
+       if (!xdr_u_int(xdrs, &objp->uid)) {
+               return (FALSE);
+       }
+       if (!xdr_u_int(xdrs, &objp->gid)) {
+               return (FALSE);
+       }
+       if (!xdr_u_int(xdrs, &objp->size)) {
+               return (FALSE);
+       }
+       if (!xdr_nfstime(xdrs, &objp->atime)) {
+               return (FALSE);
+       }
+       if (!xdr_nfstime(xdrs, &objp->mtime)) {
+               return (FALSE);
+       }
+       return (TRUE);
+ }
+
+ bool_t
+ xdr_filename(xdrs, objp)
+       XDR *xdrs;
+       filename *objp;
+ {
+       if (!xdr_string(xdrs, objp, NFS_MAXNAMLEN)) {
+               return (FALSE);
+       }
+       return (TRUE);
+ }
+
+ bool_t
+ xdr_nfspath(xdrs, objp)
+       XDR *xdrs;
+       nfspath *objp;
+ {
+       if (!xdr_string(xdrs, objp, NFS_MAXPATHLEN)) {
+               return (FALSE);
+       }
+       return (TRUE);
+ }
+
+ bool_t
+ xdr_attrstat(xdrs, objp)
+       XDR *xdrs;
+       attrstat *objp;
+ {
+       if (!xdr_nfsstat(xdrs, &objp->status)) {
+               return (FALSE);
+       }
+       switch (objp->status) {
+       case NFS_OK:
+               if (!xdr_fattr(xdrs, &objp->attrstat_u.attributes)) {
+                       return (FALSE);
+               }
+               break;
+       }
+       return (TRUE);
+ }
+
+ bool_t
+ xdr_sattrargs(xdrs, objp)
+       XDR *xdrs;
+       sattrargs *objp;
+ {
+       if (!xdr_nfs_fh(xdrs, &objp->file)) {
+               return (FALSE);
+       }
+       if (!xdr_sattr(xdrs, &objp->attributes)) {
+               return (FALSE);
+       }
+       return (TRUE);
+ }
+
+ bool_t
+ xdr_diropargs(xdrs, objp)
+       XDR *xdrs;
+       diropargs *objp;
+ {
+       if (!xdr_nfs_fh(xdrs, &objp->dir)) {
+               return (FALSE);
+       }
+       if (!xdr_filename(xdrs, &objp->name)) {
+               return (FALSE);
+       }
+       return (TRUE);
+ }
+
+ bool_t
+ xdr_diropokres(xdrs, objp)
+       XDR *xdrs;
+       diropokres *objp;
+ {
+       if (!xdr_nfs_fh(xdrs, &objp->file)) {
+               return (FALSE);
+       }
+       if (!xdr_fattr(xdrs, &objp->attributes)) {
+               return (FALSE);
+       }
+       return (TRUE);
+ }
+
+ bool_t
+ xdr_diropres(xdrs, objp)
+       XDR *xdrs;
+       diropres *objp;
+ {
+       if (!xdr_nfsstat(xdrs, &objp->status)) {
+               return (FALSE);
+       }
+       switch (objp->status) {
+       case NFS_OK:
+               if (!xdr_diropokres(xdrs, &objp->diropres_u.diropres)) {
+                       return (FALSE);
+               }
+               break;
+       }
+       return (TRUE);
+ }
+
+ bool_t
+ xdr_readlinkres(xdrs, objp)
+       XDR *xdrs;
+       readlinkres *objp;
+ {
+       if (!xdr_nfsstat(xdrs, &objp->status)) {
+               return (FALSE);
+       }
+       switch (objp->status) {
+       case NFS_OK:
+               if (!xdr_nfspath(xdrs, &objp->readlinkres_u.data)) {
+                       return (FALSE);
+               }
+               break;
+       }
+       return (TRUE);
+ }
+
+ bool_t
+ xdr_readargs(xdrs, objp)
+       XDR *xdrs;
+       readargs *objp;
+ {
+       if (!xdr_nfs_fh(xdrs, &objp->file)) {
+               return (FALSE);
+       }
+       if (!xdr_u_int(xdrs, &objp->offset)) {
+               return (FALSE);
+       }
+       if (!xdr_u_int(xdrs, &objp->count)) {
+               return (FALSE);
+       }
+       if (!xdr_u_int(xdrs, &objp->totalcount)) {
+               return (FALSE);
+       }
+       return (TRUE);
+ }
+
+ bool_t
+ xdr_readokres(xdrs, objp)
+       XDR *xdrs;
+       readokres *objp;
+ {
+       if (!xdr_fattr(xdrs, &objp->attributes)) {
+               return (FALSE);
+       }
+       if (!xdr_bytes(xdrs, (char **)&objp->data.data_val, (u_int *)&objp->data.data_len, NFS_MAXDATA)) {
+               return (FALSE);
+       }
+       return (TRUE);
+ }
+
+ bool_t
+ xdr_readres(xdrs, objp)
+       XDR *xdrs;
+       readres *objp;
+ {
+       if (!xdr_nfsstat(xdrs, &objp->status)) {
+               return (FALSE);
+       }
+       switch (objp->status) {
+       case NFS_OK:
+               if (!xdr_readokres(xdrs, &objp->readres_u.reply)) {
+                       return (FALSE);
+               }
+               break;
+       }
+       return (TRUE);
+ }
+
+ bool_t
+ xdr_writeargs(xdrs, objp)
+       XDR *xdrs;
+       writeargs *objp;
+ {
+       if (!xdr_nfs_fh(xdrs, &objp->file)) {
+               return (FALSE);
+       }
+       if (!xdr_u_int(xdrs, &objp->beginoffset)) {
+               return (FALSE);
+       }
+       if (!xdr_u_int(xdrs, &objp->offset)) {
+               return (FALSE);
+       }
+       if (!xdr_u_int(xdrs, &objp->totalcount)) {
+               return (FALSE);
+       }
+       if (!xdr_bytes(xdrs, (char **)&objp->data.data_val, (u_int *)&objp->data.data_len, NFS_MAXDATA)) {
+               return (FALSE);
+       }
+       return (TRUE);
+ }
+
+ bool_t
+ xdr_createargs(xdrs, objp)
+       XDR *xdrs;
+       createargs *objp;
+ {
+       if (!xdr_diropargs(xdrs, &objp->where)) {
+               return (FALSE);
+       }
+       if (!xdr_sattr(xdrs, &objp->attributes)) {
+               return (FALSE);
+       }
+       return (TRUE);
+ }
+
+ bool_t
+ xdr_renameargs(xdrs, objp)
+       XDR *xdrs;
+       renameargs *objp;
+ {
+       if (!xdr_diropargs(xdrs, &objp->from)) {
+               return (FALSE);
+       }
+       if (!xdr_diropargs(xdrs, &objp->to)) {
+               return (FALSE);
+       }
+       return (TRUE);
+ }
+
+ bool_t
+ xdr_linkargs(xdrs, objp)
+       XDR *xdrs;
+       linkargs *objp;
+ {
+       if (!xdr_nfs_fh(xdrs, &objp->from)) {
+               return (FALSE);
+       }
+       if (!xdr_diropargs(xdrs, &objp->to)) {
+               return (FALSE);
+       }
+       return (TRUE);
+ }
+
+ bool_t
+ xdr_symlinkargs(xdrs, objp)
+       XDR *xdrs;
+       symlinkargs *objp;
+ {
+       if (!xdr_diropargs(xdrs, &objp->from)) {
+               return (FALSE);
+       }
+       if (!xdr_nfspath(xdrs, &objp->to)) {
+               return (FALSE);
+       }
+       if (!xdr_sattr(xdrs, &objp->attributes)) {
+               return (FALSE);
+       }
+       return (TRUE);
+ }
+
+ bool_t
+ xdr_nfscookie(xdrs, objp)
+       XDR *xdrs;
+       nfscookie objp;
+ {
+       if (!xdr_opaque(xdrs, objp, NFS_COOKIESIZE)) {
+               return (FALSE);
+       }
+       return (TRUE);
+ }
+
+ bool_t
+ xdr_readdirargs(xdrs, objp)
+       XDR *xdrs;
+       readdirargs *objp;
+ {
+       if (!xdr_nfs_fh(xdrs, &objp->dir)) {
+               return (FALSE);
+       }
+       if (!xdr_nfscookie(xdrs, objp->cookie)) {
+               return (FALSE);
+       }
+       if (!xdr_u_int(xdrs, &objp->count)) {
+               return (FALSE);
+       }
+       return (TRUE);
+ }
+
+ bool_t
+ xdr_entry(xdrs, objp)
+       XDR *xdrs;
+       entry *objp;
+ {
+       if (!xdr_u_int(xdrs, &objp->fileid)) {
+               return (FALSE);
+       }
+       if (!xdr_filename(xdrs, &objp->name)) {
+               return (FALSE);
+       }
+       if (!xdr_nfscookie(xdrs, objp->cookie)) {
+               return (FALSE);
+       }
+       if (!xdr_pointer(xdrs, (char **)&objp->nextentry, sizeof(entry), xdr_entry)) {
+               return (FALSE);
+       }
+       return (TRUE);
+ }
+
+ bool_t
+ xdr_dirlist(xdrs, objp)
+       XDR *xdrs;
+       dirlist *objp;
+ {
+       if (!xdr_pointer(xdrs, (char **)&objp->entries, sizeof(entry), xdr_entry)) {
+               return (FALSE);
+       }
+       if (!xdr_bool(xdrs, &objp->eof)) {
+               return (FALSE);
+       }
+       return (TRUE);
+ }
+
+ bool_t
+ xdr_readdirres(xdrs, objp)
+       XDR *xdrs;
+       readdirres *objp;
+ {
+       if (!xdr_nfsstat(xdrs, &objp->status)) {
+               return (FALSE);
+       }
+       switch (objp->status) {
+       case NFS_OK:
+               if (!xdr_dirlist(xdrs, &objp->readdirres_u.reply)) {
+                       return (FALSE);
+               }
+               break;
+       }
+       return (TRUE);
+ }
+
+ bool_t
+ xdr_statfsokres(xdrs, objp)
+       XDR *xdrs;
+       statfsokres *objp;
+ {
+       if (!xdr_u_int(xdrs, &objp->tsize)) {
+               return (FALSE);
+       }
+       if (!xdr_u_int(xdrs, &objp->bsize)) {
+               return (FALSE);
+       }
+       if (!xdr_u_int(xdrs, &objp->blocks)) {
+               return (FALSE);
+       }
+       if (!xdr_u_int(xdrs, &objp->bfree)) {
+               return (FALSE);
+       }
+       if (!xdr_u_int(xdrs, &objp->bavail)) {
+               return (FALSE);
+       }
+       return (TRUE);
+ }
+
+ bool_t
+ xdr_statfsres(xdrs, objp)
+       XDR *xdrs;
+       statfsres *objp;
+ {
+       if (!xdr_nfsstat(xdrs, &objp->status)) {
+               return (FALSE);
+       }
+       switch (objp->status) {
+       case NFS_OK:
+               if (!xdr_statfsokres(xdrs, &objp->statfsres_u.reply)) {
+                       return (FALSE);
+               }
+               break;
+       }
+       return (TRUE);
+ }