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 + -
显示快捷键?