nfs_server.c
来自「<B>Digital的Unix操作系统VAX 4.2源码</B>」· C语言 代码 · 共 236 行
C
236 行
#ifndef lintstatic char *sccsid = "@(#)nfs_server.c 4.1 (ULTRIX) 7/2/90";#endif lint/************************************************************************ * * * Copyright (c) 1986 by * * Digital Equipment Corporation, Maynard, MA * * All rights reserved. * * * * This software is furnished under a license and may be used and * * copied only in accordance with the terms of such license and * * with the inclusion of the above copyright notice. This * * software or any other copies thereof may not be provided or * * otherwise made available to any other person. No title to and * * ownership of the software is hereby transferred. * * * * This software is derived from software received from the * * University of California, Berkeley, and from Bell * * Laboratories. Use, duplication, or disclosure is subject to * * restrictions under license agreements with University of * * California and with AT&T. * * * * The information in this software is subject to change without * * notice and should not be construed as a commitment by Digital * * Equipment Corporation. * * * * Digital assumes no responsibility for the use or reliability * * of its software on equipment which is not supplied by Digital. * * * ************************************************************************//* * Portions of this software have been licensed to * Digital Equipment Company, Maynard, MA. * Copyright (c) 1987 Sun Microsystems, Inc. ALL RIGHTS RESERVED. *//* * Modification History: * * 10 Nov 89 -- lebel * Added direct maps, bugfixes, metacharacter handling and * other fun stuff from the reference tape. * 14 Jun 89 -- condylis * Added copyright header. * */#include <stdio.h>#include <rpc/rpc.h>#include "nfs_prot.h"int trace;voidnfs_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;#ifndef notdef /* in brad's original code */ readres nfsproc_read_2_arg;#else notdef /* generated by rpcgen */ readargs nfsproc_read_2_arg;#endif notdef 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)(); extern attrstat *nfsproc_getattr_2(); extern attrstat *nfsproc_setattr_2(); extern void *nfsproc_root_2(); extern diropres *nfsproc_lookup_2(); extern readlinkres *nfsproc_readlink_2(); extern readres *nfsproc_read_2(); extern void *nfsproc_writecache_2(); extern attrstat *nfsproc_write_2(); extern diropres *nfsproc_create_2(); extern nfsstat *nfsproc_remove_2(); extern nfsstat *nfsproc_rename_2(); extern nfsstat *nfsproc_link_2(); extern nfsstat *nfsproc_symlink_2(); extern diropres *nfsproc_mkdir_2(); extern nfsstat *nfsproc_rmdir_2(); extern readdirres *nfsproc_readdir_2(); extern statfsres *nfsproc_statfs_2(); switch (rqstp->rq_proc) { case NULLPROC: (void) svc_sendreply(transp, xdr_void, (caddr_t)NULL); return; 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; } if (rqstp->rq_cred.oa_flavor != AUTH_UNIX) { svcerr_weakauth(transp); return; } bzero(&argument, sizeof(argument)); if (! svc_getargs(transp, xdr_argument, &argument)) { svcerr_decode(transp); return; } if (trace) trace_call(rqstp->rq_proc, &argument); result = (*local)(&argument, rqstp->rq_clntcred); if (trace) trace_return(rqstp->rq_proc, result); if (! svc_sendreply(transp, xdr_result, (caddr_t)result)) { svcerr_systemerr(transp); } if (! svc_freeargs(transp, xdr_argument, &argument)) { exit(1); }}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?