Generate mount*.[ch] and nfs_prot*.[ch] from the .x files.
Delete bogus local versions of mount*.[ch] and nfs_prot*.[ch]. Use v3 protocol by default for NFS mounts. If v3 is not supported, v2 is used automatically. Add a new mount options for NFS, 'nfsv2' to allow the administrator to force the use of the older protocol. Document the new mount options and fix a couple of markup problems.
This commit is contained in:
parent
7255f3ac31
commit
b1184dfe52
@ -14,6 +14,7 @@ SRCS= afs_ops.c am_ops.c clock.c util.c xutil.c \
|
||||
amq_subr.c umount_fs.c host_ops.c nfsx_ops.c \
|
||||
ufs_ops.c ifs_ops.c amd.c get_args.c restart.c wire.c
|
||||
OBJS+= vers.${PROG}.o
|
||||
CFLAGS+=-I${.OBJDIR}
|
||||
CFLAGS+=-I${.CURDIR}/../rpcx
|
||||
CFLAGS+=-I${.CURDIR}/../config
|
||||
CFLAGS+=-I${.CURDIR}/../include
|
||||
@ -23,10 +24,33 @@ CFLAGS+=-DOS_HDR=\"os-${OS}.h\"
|
||||
CFLAGS+=${CONFIG}
|
||||
CFLAGS+=-D_NEW_VFSCONF
|
||||
CLEANFILES+=vers.${PROG}.c vers.${PROG}.o version.amd
|
||||
CLEANFILES+=mount.h mount_xdr.c nfs_prot.h nfs_prot_xdr.c nfs_prot_svc.c
|
||||
RPCCOM = rpcgen
|
||||
MOUNT_X= /usr/include/rpcsvc/mount.x
|
||||
NFS_PROT_X= /usr/include/rpcsvc/nfs_prot.x
|
||||
|
||||
vers.${PROG}.c: ${SRCS:.c=.o}
|
||||
@d=${.CURDIR}/ sh ${.CURDIR}/../config/newvers.sh ${PROG} ${MACHINE} ${OS}
|
||||
|
||||
afs_ops.o host_ops.o nfs_ops.o srvr_nfs.o: mount.h
|
||||
|
||||
mount.h: ${MOUNT_X}
|
||||
${RPCCOM} -h -DWANT_NFS3 ${MOUNT_X} -o ${.TARGET}
|
||||
|
||||
mount_xdr.c: mount.h ${MOUNT_X}
|
||||
${RPCCOM} -c -DWANT_NFS3 ${MOUNT_X} -o ${.TARGET}
|
||||
|
||||
${OBJS}: nfs_prot.h
|
||||
|
||||
nfs_prot.h: ${NFS_PROT_X}
|
||||
${RPCCOM} -h ${NFS_PROT_X} -o ${.TARGET}
|
||||
|
||||
nfs_prot_xdr.c: ${NFS_PROT_X}
|
||||
${RPCCOM} -c ${NFS_PROT_X} -o ${.TARGET}
|
||||
|
||||
nfs_prot_svc.c: ${NFS_PROT_X}
|
||||
${RPCCOM} -m ${NFS_PROT_X} -o ${.TARGET}
|
||||
|
||||
.PATH: ${.CURDIR}/../rpcx ${.CURDIR}/../config
|
||||
.include "Makefile.config"
|
||||
.include "../../Makefile.inc"
|
||||
|
@ -35,7 +35,7 @@
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*
|
||||
* $Id$
|
||||
* $Id: nfs_ops.c,v 1.6 1997/02/22 16:01:37 peter Exp $
|
||||
*/
|
||||
|
||||
#ifndef lint
|
||||
@ -65,7 +65,10 @@ typedef nfs_fh fhandle_t;
|
||||
/*
|
||||
* Convert from nfsstat to UN*X error code
|
||||
*/
|
||||
#define unx_error(e) ((int)(e))
|
||||
#define unx_error(e) ((e) < 10000 ? (int)(e) \
|
||||
: ((e) == MNT3ERR_NOTSUPP ? EOPNOTSUPP \
|
||||
: ((e) == MNT3ERR_SERVERFAULT ? EIO \
|
||||
: EINVAL)))
|
||||
|
||||
/*
|
||||
* The NFS layer maintains a cache of file handles.
|
||||
@ -90,6 +93,16 @@ typedef nfs_fh fhandle_t;
|
||||
* changes. If it does, then you have other
|
||||
* problems...
|
||||
*/
|
||||
typedef struct mountres {
|
||||
int mr_version; /* 1 or 3 */
|
||||
union {
|
||||
struct fhstatus mru_fhstatus; /* mount v1 result */
|
||||
struct mountres3 mru_mountres3; /* mount v3 result */
|
||||
} mr_un;
|
||||
} mountres;
|
||||
#define mr_fhstatus mr_un.mru_fhstatus
|
||||
#define mr_mountres3 mr_un.mru_mountres3
|
||||
|
||||
typedef struct fh_cache fh_cache;
|
||||
struct fh_cache {
|
||||
qelem fh_q; /* List header */
|
||||
@ -97,7 +110,7 @@ struct fh_cache {
|
||||
int fh_error; /* Valid data? */
|
||||
int fh_id; /* Unique id */
|
||||
int fh_cid; /* Callout id */
|
||||
struct fhstatus fh_handle; /* Handle on filesystem */
|
||||
mountres fh_mountres; /* Result of mount rpc */
|
||||
struct sockaddr_in fh_sin; /* Address of mountd */
|
||||
fserver *fh_fs; /* Server holding filesystem */
|
||||
char *fh_path; /* Filesystem on host */
|
||||
@ -116,7 +129,7 @@ static int fh_id = 0;
|
||||
extern qelem fh_head;
|
||||
qelem fh_head = { &fh_head, &fh_head };
|
||||
|
||||
static int call_mountd P((fh_cache*, unsigned long, fwd_fun, voidp));
|
||||
static int call_mountd P((fh_cache*, unsigned long, unsigned long, fwd_fun, voidp));
|
||||
|
||||
AUTH *nfs_auth;
|
||||
|
||||
@ -165,10 +178,24 @@ int done;
|
||||
{
|
||||
fh_cache *fp = find_nfs_fhandle_cache(idv, done);
|
||||
if (fp) {
|
||||
fp->fh_error = pickup_rpc_reply(pkt, len, (voidp) &fp->fh_handle, xdr_fhstatus);
|
||||
if (fp->fh_mountres.mr_version == MOUNTVERS3) {
|
||||
fp->fh_error = pickup_rpc_reply(pkt, len, (voidp) &fp->fh_mountres.mr_mountres3, xdr_mountres3);
|
||||
if (fp->fh_error) {
|
||||
/*
|
||||
* Fall back to version 1 protocol.
|
||||
*/
|
||||
#ifdef DEBUG
|
||||
dlog("mount version 3 refused, retrying with version 1");
|
||||
#endif
|
||||
fp->fh_id = FHID_ALLOC();
|
||||
fp->fh_mountres.mr_version = MOUNTVERS;
|
||||
call_mountd(fp, MOUNTPROC_MNT, MOUNTVERS, got_nfs_fh, fp->fh_wchan);
|
||||
}
|
||||
} else
|
||||
fp->fh_error = pickup_rpc_reply(pkt, len, (voidp) &fp->fh_mountres.mr_fhstatus, xdr_fhstatus);
|
||||
if (!fp->fh_error) {
|
||||
#ifdef DEBUG
|
||||
dlog("got filehandle for %s:%s", fp->fh_fs->fs_host, fp->fh_path);
|
||||
dlog("got filehandle for %s:%s, version=%d", fp->fh_fs->fs_host, fp->fh_path, fp->fh_mountres.mr_version);
|
||||
#endif /* DEBUG */
|
||||
/*
|
||||
* Wakeup anything sleeping on this filehandle
|
||||
@ -205,6 +232,9 @@ fh_cache *fp;
|
||||
dlog("Discarding filehandle for %s:%s", fp->fh_fs->fs_host, fp->fh_path);
|
||||
#endif /* DEBUG */
|
||||
free_srvr(fp->fh_fs);
|
||||
if (fp->fh_mountres.mr_version == MOUNTVERS3
|
||||
&& fp->fh_mountres.mr_mountres3.mountres3_u.mountinfo.fhandle.fhandle3_val)
|
||||
free(fp->fh_mountres.mr_mountres3.mountres3_u.mountinfo.fhandle.fhandle3_val);
|
||||
free((voidp) fp->fh_path);
|
||||
free((voidp) fp);
|
||||
}
|
||||
@ -212,11 +242,12 @@ fh_cache *fp;
|
||||
/*
|
||||
* Determine the file handle for a node
|
||||
*/
|
||||
static int prime_nfs_fhandle_cache P((char *path, fserver *fs, struct fhstatus *fhbuf, voidp wchan));
|
||||
static int prime_nfs_fhandle_cache(path, fs, fhbuf, wchan)
|
||||
static int prime_nfs_fhandle_cache P((char *path, fserver *fs, int forcev2, struct mountres *mrbuf, voidp wchan));
|
||||
static int prime_nfs_fhandle_cache(path, fs, forcev2, mrbuf, wchan)
|
||||
char *path;
|
||||
fserver *fs;
|
||||
struct fhstatus *fhbuf;
|
||||
int forcev2;
|
||||
struct mountres *mrbuf;
|
||||
voidp wchan;
|
||||
{
|
||||
fh_cache *fp, *fp_save = 0;
|
||||
@ -234,11 +265,14 @@ voidp wchan;
|
||||
if (fs == fp->fh_fs && strcmp(path, fp->fh_path) == 0) {
|
||||
switch (fp->fh_error) {
|
||||
case 0:
|
||||
error = fp->fh_error = unx_error(fp->fh_handle.fhs_status);
|
||||
if (fp->fh_mountres.mr_version == MOUNTVERS)
|
||||
error = fp->fh_error = unx_error(fp->fh_mountres.mr_fhstatus.fhs_status);
|
||||
else
|
||||
error = fp->fh_error = unx_error(fp->fh_mountres.mr_mountres3.fhs_status);
|
||||
if (error == 0) {
|
||||
if (fhbuf)
|
||||
bcopy((voidp) &fp->fh_handle, (voidp) fhbuf,
|
||||
sizeof(fp->fh_handle));
|
||||
if (mrbuf)
|
||||
bcopy((voidp) &fp->fh_mountres, (voidp) mrbuf,
|
||||
sizeof(fp->fh_mountres));
|
||||
if (fp->fh_cid)
|
||||
untimeout(fp->fh_cid);
|
||||
fp->fh_cid = timeout(FH_TTL, discard_fh, (voidp) fp);
|
||||
@ -308,6 +342,21 @@ voidp wchan;
|
||||
fp->fh_wchan = wchan;
|
||||
fp->fh_error = -1;
|
||||
fp->fh_cid = timeout(FH_TTL, discard_fh, (voidp) fp);
|
||||
if (forcev2) {
|
||||
/*
|
||||
* Force an NFSv2 mount.
|
||||
*/
|
||||
#ifdef DEBUG
|
||||
dlog("forcing v2 mount");
|
||||
#endif
|
||||
fp->fh_mountres.mr_version = MOUNTVERS;
|
||||
} else {
|
||||
/*
|
||||
* Attempt v3 first.
|
||||
*/
|
||||
fp->fh_mountres.mr_version = MOUNTVERS3;
|
||||
fp->fh_mountres.mr_mountres3.mountres3_u.mountinfo.fhandle.fhandle3_val = NULL;
|
||||
}
|
||||
|
||||
/*
|
||||
* If the address has changed then don't try to re-use the
|
||||
@ -320,7 +369,7 @@ voidp wchan;
|
||||
fp->fh_fs = dup_srvr(fs);
|
||||
fp->fh_path = strdup(path);
|
||||
|
||||
error = call_mountd(fp, MOUNTPROC_MNT, got_nfs_fh, wchan);
|
||||
error = call_mountd(fp, MOUNTPROC_MNT, fp->fh_mountres.mr_version, got_nfs_fh, wchan);
|
||||
if (error) {
|
||||
/*
|
||||
* Local error - cache for a short period
|
||||
@ -355,10 +404,11 @@ int make_nfs_auth P((void))
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int call_mountd P((fh_cache *fp, u_long proc, fwd_fun f, voidp wchan));
|
||||
static int call_mountd(fp, proc, f, wchan)
|
||||
static int call_mountd P((fh_cache *fp, u_long proc, u_long version, fwd_fun f, voidp wchan));
|
||||
static int call_mountd(fp, proc, version, f, wchan)
|
||||
fh_cache *fp;
|
||||
u_long proc;
|
||||
u_long version;
|
||||
fwd_fun f;
|
||||
voidp wchan;
|
||||
{
|
||||
@ -381,7 +431,7 @@ voidp wchan;
|
||||
fp->fh_sin.sin_port = port;
|
||||
}
|
||||
|
||||
rpc_msg_init(&mnt_msg, MOUNTPROG, MOUNTVERS, (unsigned long) 0);
|
||||
rpc_msg_init(&mnt_msg, MOUNTPROG, version, (unsigned long) 0);
|
||||
len = make_rpc_packet(iobuf, sizeof(iobuf), proc,
|
||||
&mnt_msg, (voidp) &fp->fh_path, xdr_nfspath, nfs_auth);
|
||||
|
||||
@ -439,6 +489,24 @@ am_opts *fo;
|
||||
return xmtab;
|
||||
}
|
||||
|
||||
static int forcev2(mf)
|
||||
mntfs *mf;
|
||||
{
|
||||
struct mntent mnt;
|
||||
|
||||
mnt.mnt_dir = mf->mf_mount;
|
||||
mnt.mnt_fsname = mf->mf_info;
|
||||
mnt.mnt_type = MTAB_TYPE_NFS;
|
||||
mnt.mnt_opts = mf->mf_mopts;
|
||||
mnt.mnt_freq = 0;
|
||||
mnt.mnt_passno = 0;
|
||||
|
||||
if (hasmntopt(&mnt, "nfsv2") != NULL)
|
||||
return TRUE;
|
||||
else
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
/*
|
||||
* Initialise am structure for nfs
|
||||
*/
|
||||
@ -447,17 +515,17 @@ mntfs *mf;
|
||||
{
|
||||
if (!mf->mf_private) {
|
||||
int error;
|
||||
struct fhstatus fhs;
|
||||
struct mountres mr;
|
||||
|
||||
char *colon = strchr(mf->mf_info, ':');
|
||||
if (colon == 0)
|
||||
return ENOENT;
|
||||
|
||||
error = prime_nfs_fhandle_cache(colon+1, mf->mf_server, &fhs, (voidp) mf);
|
||||
error = prime_nfs_fhandle_cache(colon+1, mf->mf_server, forcev2(mf), &mr, (voidp) mf);
|
||||
if (!error) {
|
||||
mf->mf_private = (voidp) ALLOC(fhstatus);
|
||||
mf->mf_private = (voidp) ALLOC(mountres);
|
||||
mf->mf_prfree = (void (*)()) free;
|
||||
bcopy((voidp) &fhs, mf->mf_private, sizeof(fhs));
|
||||
bcopy((voidp) &mr, mf->mf_private, sizeof(mr));
|
||||
}
|
||||
return error;
|
||||
}
|
||||
@ -465,9 +533,9 @@ mntfs *mf;
|
||||
return 0;
|
||||
}
|
||||
|
||||
int mount_nfs_fh P((struct fhstatus *fhp, char *dir, char *fs_name, char *opts, mntfs *mf));
|
||||
int mount_nfs_fh(fhp, dir, fs_name, opts, mf)
|
||||
struct fhstatus *fhp;
|
||||
int mount_nfs_fh P((struct mountres *mrp, char *dir, char *fs_name, char *opts, mntfs *mf));
|
||||
int mount_nfs_fh(mrp, dir, fs_name, opts, mf)
|
||||
struct mountres *mrp;
|
||||
char *dir;
|
||||
char *fs_name;
|
||||
char *opts;
|
||||
@ -528,10 +596,14 @@ mntfs *mf;
|
||||
/*
|
||||
* set mount args
|
||||
*/
|
||||
NFS_FH_DREF(nfs_args.fh, (NFS_FH_TYPE) fhp->fhstatus_u.fhs_fhandle);
|
||||
#ifdef NFSv3
|
||||
nfs_args.fhsize = FHSIZE;
|
||||
#endif
|
||||
if (mrp->mr_version == MOUNTVERS) {
|
||||
NFS_FH_DREF(nfs_args.fh, (NFS_FH_TYPE) mrp->mr_fhstatus.fhstatus_u.fhs_fhandle);
|
||||
nfs_args.fhsize = FHSIZE;
|
||||
} else {
|
||||
NFS_FH_DREF(nfs_args.fh, (NFS_FH_TYPE) mrp->mr_mountres3.mountres3_u.mountinfo.fhandle.fhandle3_val);
|
||||
nfs_args.fhsize = mrp->mr_mountres3.mountres3_u.mountinfo.fhandle.fhandle3_len;
|
||||
nfs_args.flags |= NFSMNT_NFSV3;
|
||||
}
|
||||
|
||||
#ifdef ULTRIX_HACK
|
||||
nfs_args.optstr = mnt.mnt_opts;
|
||||
@ -682,7 +754,7 @@ mntfs *mf;
|
||||
#ifdef DEBUG
|
||||
dlog("locating fhandle for %s", fs_name);
|
||||
#endif /* DEBUG */
|
||||
error = prime_nfs_fhandle_cache(colon+1, mf->mf_server, &fhs, (voidp) 0);
|
||||
error = prime_nfs_fhandle_cache(colon+1, mf->mf_server, forcev2(mf), &fhs, (voidp) 0);
|
||||
|
||||
if (error)
|
||||
return error;
|
||||
@ -694,7 +766,7 @@ mntfs *mf;
|
||||
return EINVAL;
|
||||
}
|
||||
|
||||
return mount_nfs_fh((struct fhstatus *) mf->mf_private, dir, fs_name, opts, mf);
|
||||
return mount_nfs_fh((struct mountres *) mf->mf_private, dir, fs_name, opts, mf);
|
||||
}
|
||||
|
||||
static int nfs_fmount(mf)
|
||||
@ -767,7 +839,7 @@ am_node *mp;
|
||||
f.fh_id = 0;
|
||||
f.fh_error = 0;
|
||||
(void) prime_nfs_fhandle_cache(colon+1, mf->mf_server, (struct fhstatus *) 0, (voidp) mf);
|
||||
(void) call_mountd(&f, MOUNTPROC_UMNT, (fwd_fun) 0, (voidp) 0);
|
||||
(void) call_mountd(&f, MOUNTPROC_UMNT, MOUNTVERS, (fwd_fun) 0, (voidp) 0);
|
||||
*colon = ':';
|
||||
}
|
||||
#endif /* INFORM_MOUNTD */
|
||||
|
@ -37,7 +37,7 @@
|
||||
*
|
||||
* @(#)os-bsd44.h 8.2 (Berkeley) 5/10/95
|
||||
*
|
||||
* $Id: os-bsd44.h,v 1.8 1997/03/11 15:51:36 peter Exp $
|
||||
* $Id: os-bsd44.h,v 1.9 1997/03/12 08:29:44 peter Exp $
|
||||
*
|
||||
* 4.4 BSD definitions for Amd (automounter)
|
||||
*/
|
||||
@ -114,7 +114,6 @@
|
||||
(dst).addrlen = sizeof(*src); \
|
||||
(dst).sotype = SOCK_DGRAM; \
|
||||
(dst).proto = 0; \
|
||||
(dst).fhsize = FHSIZE; \
|
||||
(dst).wsize = NFS_WSIZE; \
|
||||
(dst).rsize = NFS_RSIZE; \
|
||||
(dst).readdirsize = NFS_READDIRSIZE; \
|
||||
|
@ -37,7 +37,7 @@
|
||||
@c
|
||||
@c @(#)amdref.texinfo 8.1 (Berkeley) 6/6/93
|
||||
@c
|
||||
@c $Id$
|
||||
@c $Id: amdref.texinfo,v 1.4 1997/02/22 16:03:12 peter Exp $
|
||||
@c
|
||||
@setfilename amdref.info
|
||||
@c @setfilename /usr/local/emacs/info/amd
|
||||
@ -1384,6 +1384,8 @@ Use NFS compression protocol.
|
||||
Use BSD directory group-id semantics.
|
||||
@item intr
|
||||
Allow keyboard interrupts on hard mounts.
|
||||
@item nfsv2
|
||||
Use the version 2 NFS protocol in preference to version 3.
|
||||
@item noconn
|
||||
Don't make a connection on datagram transports.
|
||||
@item nocto
|
||||
@ -3076,11 +3078,11 @@ host @{
|
||||
The options that can be given as host attributes are shown below.
|
||||
|
||||
@menu
|
||||
* netif Option: FSinfo host netif:
|
||||
* config Option: FSinfo host config:
|
||||
* arch Option: FSinfo host arch:
|
||||
* os Option: FSinfo host os:
|
||||
* cluster Option: FSinfo host cluster:
|
||||
* netif Option: FSinfo host netif
|
||||
* config Option: FSinfo host config
|
||||
* arch Option: FSinfo host arch
|
||||
* os Option: FSinfo host os
|
||||
* cluster Option: FSinfo host cluster
|
||||
@end menu
|
||||
|
||||
@node FSinfo host netif, FSinfo host config, , FSinfo host attributes
|
||||
@ -3275,13 +3277,13 @@ fs /dev/dsk/5s0 @{
|
||||
@end example
|
||||
|
||||
@menu
|
||||
* fstype Option: FSinfo filesystems fstype:
|
||||
* opts Option: FSinfo filesystems opts:
|
||||
* passno Option: FSinfo filesystems passno:
|
||||
* freq Option: FSinfo filesystems freq:
|
||||
* mount Option: FSinfo filesystems mount:
|
||||
* dumpset Option: FSinfo filesystems dumpset:
|
||||
* log Option: FSinfo filesystems log:
|
||||
* fstype Option: FSinfo filesystems fstype
|
||||
* opts Option: FSinfo filesystems opts
|
||||
* passno Option: FSinfo filesystems passno
|
||||
* freq Option: FSinfo filesystems freq
|
||||
* mount Option: FSinfo filesystems mount
|
||||
* dumpset Option: FSinfo filesystems dumpset
|
||||
* log Option: FSinfo filesystems log
|
||||
@end menu
|
||||
|
||||
@node FSinfo filesystems fstype, FSinfo filesystems opts, , FSinfo filesystems
|
||||
|
@ -37,7 +37,7 @@
|
||||
*
|
||||
* @(#)amq_svc.c 8.1 (Berkeley) 6/6/93
|
||||
*
|
||||
* $Id$
|
||||
* $Id: amq_svc.c,v 1.3 1997/02/22 16:04:03 peter Exp $
|
||||
*
|
||||
*/
|
||||
|
||||
@ -120,7 +120,7 @@ amq_program_1(rqstp, transp)
|
||||
return;
|
||||
}
|
||||
bzero((char *)&argument, sizeof(argument));
|
||||
if (!svc_getargs(transp, xdr_argument, &argument)) {
|
||||
if (!svc_getargs(transp, xdr_argument, (caddr_t) &argument)) {
|
||||
svcerr_decode(transp);
|
||||
return;
|
||||
}
|
||||
@ -128,7 +128,7 @@ amq_program_1(rqstp, transp)
|
||||
if (result != NULL && !svc_sendreply(transp, xdr_result, result)) {
|
||||
svcerr_systemerr(transp);
|
||||
}
|
||||
if (!svc_freeargs(transp, xdr_argument, &argument)) {
|
||||
if (!svc_freeargs(transp, xdr_argument, (caddr_t) &argument)) {
|
||||
plog(XLOG_FATAL, "unable to free rpc arguments in amqprog_1");
|
||||
going_down(1);
|
||||
}
|
||||
|
@ -1,124 +0,0 @@
|
||||
/*
|
||||
* Copyright (c) 1990 Jan-Simon Pendry
|
||||
* Copyright (c) 1990 Imperial College of Science, Technology & Medicine
|
||||
* Copyright (c) 1990, 1993
|
||||
* The Regents of the University of California. All rights reserved.
|
||||
*
|
||||
* This code is derived from software contributed to Berkeley by
|
||||
* Jan-Simon Pendry at Imperial College, London.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* 3. All advertising materials mentioning features or use of this software
|
||||
* must display the following acknowledgement:
|
||||
* This product includes software developed by the University of
|
||||
* California, Berkeley and its contributors.
|
||||
* 4. Neither the name of the University nor the names of its contributors
|
||||
* may be used to endorse or promote products derived from this software
|
||||
* without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
|
||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*
|
||||
* @(#)mount.h 8.1 (Berkeley) 6/6/93
|
||||
*
|
||||
* $Id$
|
||||
*
|
||||
*/
|
||||
|
||||
#define MNTPATHLEN 1024
|
||||
#define MNTNAMLEN 255
|
||||
#define FHSIZE 32
|
||||
|
||||
typedef char fhandle[FHSIZE];
|
||||
bool_t xdr_fhandle();
|
||||
|
||||
|
||||
struct fhstatus {
|
||||
u_int fhs_status;
|
||||
union {
|
||||
fhandle fhs_fhandle;
|
||||
} fhstatus_u;
|
||||
};
|
||||
typedef struct fhstatus fhstatus;
|
||||
bool_t xdr_fhstatus();
|
||||
|
||||
|
||||
typedef char *dirpath;
|
||||
bool_t xdr_dirpath();
|
||||
|
||||
|
||||
typedef char *name;
|
||||
bool_t xdr_name();
|
||||
|
||||
|
||||
typedef struct mountbody *mountlist;
|
||||
bool_t xdr_mountlist();
|
||||
|
||||
|
||||
struct mountbody {
|
||||
name ml_hostname;
|
||||
dirpath ml_directory;
|
||||
mountlist ml_next;
|
||||
};
|
||||
typedef struct mountbody mountbody;
|
||||
bool_t xdr_mountbody();
|
||||
|
||||
|
||||
typedef struct groupnode *groups;
|
||||
bool_t xdr_groups();
|
||||
|
||||
|
||||
struct groupnode {
|
||||
name gr_name;
|
||||
groups gr_next;
|
||||
};
|
||||
typedef struct groupnode groupnode;
|
||||
bool_t xdr_groupnode();
|
||||
|
||||
|
||||
typedef struct exportnode *exports;
|
||||
bool_t xdr_exports();
|
||||
|
||||
|
||||
struct exportnode {
|
||||
dirpath ex_dir;
|
||||
groups ex_groups;
|
||||
exports ex_next;
|
||||
};
|
||||
typedef struct exportnode exportnode;
|
||||
bool_t xdr_exportnode();
|
||||
|
||||
|
||||
#define MOUNTPROG ((u_long)100005)
|
||||
#define MOUNTVERS ((u_long)1)
|
||||
#define MOUNTPROC_NULL ((u_long)0)
|
||||
extern voidp mountproc_null_1();
|
||||
#define MOUNTPROC_MNT ((u_long)1)
|
||||
extern fhstatus *mountproc_mnt_1();
|
||||
#define MOUNTPROC_DUMP ((u_long)2)
|
||||
extern mountlist *mountproc_dump_1();
|
||||
#define MOUNTPROC_UMNT ((u_long)3)
|
||||
extern voidp mountproc_umnt_1();
|
||||
#define MOUNTPROC_UMNTALL ((u_long)4)
|
||||
extern voidp mountproc_umntall_1();
|
||||
#define MOUNTPROC_EXPORT ((u_long)5)
|
||||
extern exports *mountproc_export_1();
|
||||
#define MOUNTPROC_EXPORTALL ((u_long)6)
|
||||
extern exports *mountproc_exportall_1();
|
||||
|
@ -1,206 +0,0 @@
|
||||
/*
|
||||
* Copyright (c) 1989 Jan-Simon Pendry
|
||||
* Copyright (c) 1989 Imperial College of Science, Technology & Medicine
|
||||
* Copyright (c) 1989, 1993
|
||||
* The Regents of the University of California. All rights reserved.
|
||||
*
|
||||
* This code is derived from software contributed to Berkeley by
|
||||
* Jan-Simon Pendry at Imperial College, London.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* 3. All advertising materials mentioning features or use of this software
|
||||
* must display the following acknowledgement:
|
||||
* This product includes software developed by the University of
|
||||
* California, Berkeley and its contributors.
|
||||
* 4. Neither the name of the University nor the names of its contributors
|
||||
* may be used to endorse or promote products derived from this software
|
||||
* without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
|
||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*
|
||||
* @(#)mount_xdr.c 8.1 (Berkeley) 6/6/93
|
||||
*
|
||||
* $Id$
|
||||
*
|
||||
*/
|
||||
|
||||
#include "am.h"
|
||||
#include "mount.h"
|
||||
|
||||
|
||||
bool_t
|
||||
xdr_fhandle(xdrs, objp)
|
||||
XDR *xdrs;
|
||||
fhandle objp;
|
||||
{
|
||||
if (!xdr_opaque(xdrs, objp, FHSIZE)) {
|
||||
return (FALSE);
|
||||
}
|
||||
return (TRUE);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
bool_t
|
||||
xdr_fhstatus(xdrs, objp)
|
||||
XDR *xdrs;
|
||||
fhstatus *objp;
|
||||
{
|
||||
if (!xdr_u_int(xdrs, &objp->fhs_status)) {
|
||||
return (FALSE);
|
||||
}
|
||||
switch (objp->fhs_status) {
|
||||
case 0:
|
||||
if (!xdr_fhandle(xdrs, objp->fhstatus_u.fhs_fhandle)) {
|
||||
return (FALSE);
|
||||
}
|
||||
break;
|
||||
}
|
||||
return (TRUE);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
bool_t
|
||||
xdr_dirpath(xdrs, objp)
|
||||
XDR *xdrs;
|
||||
dirpath *objp;
|
||||
{
|
||||
if (!xdr_string(xdrs, objp, MNTPATHLEN)) {
|
||||
return (FALSE);
|
||||
}
|
||||
return (TRUE);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
bool_t
|
||||
xdr_name(xdrs, objp)
|
||||
XDR *xdrs;
|
||||
name *objp;
|
||||
{
|
||||
if (!xdr_string(xdrs, objp, MNTNAMLEN)) {
|
||||
return (FALSE);
|
||||
}
|
||||
return (TRUE);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
bool_t
|
||||
xdr_mountlist(xdrs, objp)
|
||||
XDR *xdrs;
|
||||
mountlist *objp;
|
||||
{
|
||||
if (!xdr_pointer(xdrs, (char **)objp, sizeof(struct mountbody), xdr_mountbody)) {
|
||||
return (FALSE);
|
||||
}
|
||||
return (TRUE);
|
||||
}
|
||||
|
||||
|
||||
|
||||
bool_t
|
||||
xdr_mountbody(xdrs, objp)
|
||||
XDR *xdrs;
|
||||
mountbody *objp;
|
||||
{
|
||||
if (!xdr_name(xdrs, &objp->ml_hostname)) {
|
||||
return (FALSE);
|
||||
}
|
||||
if (!xdr_dirpath(xdrs, &objp->ml_directory)) {
|
||||
return (FALSE);
|
||||
}
|
||||
if (!xdr_mountlist(xdrs, &objp->ml_next)) {
|
||||
return (FALSE);
|
||||
}
|
||||
return (TRUE);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
bool_t
|
||||
xdr_groups(xdrs, objp)
|
||||
XDR *xdrs;
|
||||
groups *objp;
|
||||
{
|
||||
if (!xdr_pointer(xdrs, (char **)objp, sizeof(struct groupnode), xdr_groupnode)) {
|
||||
return (FALSE);
|
||||
}
|
||||
return (TRUE);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
bool_t
|
||||
xdr_groupnode(xdrs, objp)
|
||||
XDR *xdrs;
|
||||
groupnode *objp;
|
||||
{
|
||||
if (!xdr_name(xdrs, &objp->gr_name)) {
|
||||
return (FALSE);
|
||||
}
|
||||
if (!xdr_groups(xdrs, &objp->gr_next)) {
|
||||
return (FALSE);
|
||||
}
|
||||
return (TRUE);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
bool_t
|
||||
xdr_exports(xdrs, objp)
|
||||
XDR *xdrs;
|
||||
exports *objp;
|
||||
{
|
||||
if (!xdr_pointer(xdrs, (char **)objp, sizeof(struct exportnode), xdr_exportnode)) {
|
||||
return (FALSE);
|
||||
}
|
||||
return (TRUE);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
bool_t
|
||||
xdr_exportnode(xdrs, objp)
|
||||
XDR *xdrs;
|
||||
exportnode *objp;
|
||||
{
|
||||
if (!xdr_dirpath(xdrs, &objp->ex_dir)) {
|
||||
return (FALSE);
|
||||
}
|
||||
if (!xdr_groups(xdrs, &objp->ex_groups)) {
|
||||
return (FALSE);
|
||||
}
|
||||
if (!xdr_exports(xdrs, &objp->ex_next)) {
|
||||
return (FALSE);
|
||||
}
|
||||
return (TRUE);
|
||||
}
|
||||
|
||||
|
@ -1,389 +0,0 @@
|
||||
/*
|
||||
* Copyright (c) 1990 Jan-Simon Pendry
|
||||
* Copyright (c) 1990 Imperial College of Science, Technology & Medicine
|
||||
* Copyright (c) 1990, 1993
|
||||
* The Regents of the University of California. All rights reserved.
|
||||
*
|
||||
* This code is derived from software contributed to Berkeley by
|
||||
* Jan-Simon Pendry at Imperial College, London.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* 3. All advertising materials mentioning features or use of this software
|
||||
* must display the following acknowledgement:
|
||||
* This product includes software developed by the University of
|
||||
* California, Berkeley and its contributors.
|
||||
* 4. Neither the name of the University nor the names of its contributors
|
||||
* may be used to endorse or promote products derived from this software
|
||||
* without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
|
||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*
|
||||
* @(#)nfs_prot.h 8.1 (Berkeley) 6/6/93
|
||||
*
|
||||
* $Id$
|
||||
*
|
||||
*/
|
||||
|
||||
#define xdr_nfsstat xdr_enum
|
||||
#define xdr_ftype xdr_enum
|
||||
|
||||
#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;
|
||||
/* static 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;
|
||||
/* static 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;
|
||||
/* static 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;
|
||||
/* static bool_t xdr_sattr(); */
|
||||
|
||||
|
||||
typedef char *filename;
|
||||
/* static 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];
|
||||
/* static 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;
|
||||
/* static bool_t xdr_entry(); */
|
||||
|
||||
|
||||
struct dirlist {
|
||||
entry *entries;
|
||||
bool_t eof;
|
||||
};
|
||||
typedef struct dirlist dirlist;
|
||||
/* static 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 voidp 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 voidp 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 voidp 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();
|
||||
|
@ -1,198 +0,0 @@
|
||||
/*
|
||||
* Copyright (c) 1989 Jan-Simon Pendry
|
||||
* Copyright (c) 1989 Imperial College of Science, Technology & Medicine
|
||||
* Copyright (c) 1989, 1993
|
||||
* The Regents of the University of California. All rights reserved.
|
||||
*
|
||||
* This code is derived from software contributed to Berkeley by
|
||||
* Jan-Simon Pendry at Imperial College, London.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* 3. All advertising materials mentioning features or use of this software
|
||||
* must display the following acknowledgement:
|
||||
* This product includes software developed by the University of
|
||||
* California, Berkeley and its contributors.
|
||||
* 4. Neither the name of the University nor the names of its contributors
|
||||
* may be used to endorse or promote products derived from this software
|
||||
* without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
|
||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*
|
||||
* @(#)nfs_prot_svc.c 8.1 (Berkeley) 6/6/93
|
||||
*
|
||||
* $Id$
|
||||
*
|
||||
*/
|
||||
|
||||
#include "am.h"
|
||||
|
||||
void nfs_program_2(rqstp, transp)
|
||||
struct svc_req *rqstp;
|
||||
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)) {
|
||||
plog(XLOG_FATAL, "unable to free rpc arguments in nfs_program_1");
|
||||
going_down(1);
|
||||
}
|
||||
}
|
||||
|
@ -1,627 +0,0 @@
|
||||
/*
|
||||
* Copyright (c) 1989 Jan-Simon Pendry
|
||||
* Copyright (c) 1989 Imperial College of Science, Technology & Medicine
|
||||
* Copyright (c) 1989, 1993
|
||||
* The Regents of the University of California. All rights reserved.
|
||||
*
|
||||
* This code is derived from software contributed to Berkeley by
|
||||
* Jan-Simon Pendry at Imperial College, London.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* 3. All advertising materials mentioning features or use of this software
|
||||
* must display the following acknowledgement:
|
||||
* This product includes software developed by the University of
|
||||
* California, Berkeley and its contributors.
|
||||
* 4. Neither the name of the University nor the names of its contributors
|
||||
* may be used to endorse or promote products derived from this software
|
||||
* without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
|
||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*
|
||||
* @(#)nfs_prot_xdr.c 8.1 (Berkeley) 6/6/93
|
||||
*
|
||||
* $Id$
|
||||
*
|
||||
*/
|
||||
|
||||
#include "am.h"
|
||||
|
||||
|
||||
#ifndef xdr_nfsstat
|
||||
bool_t
|
||||
xdr_nfsstat(xdrs, objp)
|
||||
XDR *xdrs;
|
||||
nfsstat *objp;
|
||||
{
|
||||
if (!xdr_enum(xdrs, (enum_t *)objp)) {
|
||||
return (FALSE);
|
||||
}
|
||||
return (TRUE);
|
||||
}
|
||||
#endif /* xdr_nfsstat */
|
||||
|
||||
|
||||
|
||||
#ifndef xdr_ftype
|
||||
static bool_t
|
||||
xdr_ftype(xdrs, objp)
|
||||
XDR *xdrs;
|
||||
ftype *objp;
|
||||
{
|
||||
if (!xdr_enum(xdrs, (enum_t *)objp)) {
|
||||
return (FALSE);
|
||||
}
|
||||
return (TRUE);
|
||||
}
|
||||
#endif /* xdr_ftype */
|
||||
|
||||
|
||||
|
||||
bool_t
|
||||
xdr_nfs_fh(xdrs, objp)
|
||||
XDR *xdrs;
|
||||
nfs_fh *objp;
|
||||
{
|
||||
if (!xdr_opaque(xdrs, objp->data, NFS_FHSIZE)) {
|
||||
return (FALSE);
|
||||
}
|
||||
return (TRUE);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
static 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);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
static 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);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
static 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);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
static 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);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
static 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);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
static 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);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
static 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);
|
||||
}
|
Loading…
Reference in New Issue
Block a user