⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 pcnfsd.c

📁 这是一个同样来自贝尔实验室的和UNIX有着渊源的操作系统, 其简洁的设计和实现易于我们学习和理解
💻 C
字号:
#include "all.h"static void	pcinit(int, char**);static int	pcnull(int, Rpccall*, Rpccall*);static int	pcinfo(int, Rpccall*, Rpccall*);static int	pcauth(int, Rpccall*, Rpccall*);static int	pc1auth(int, Rpccall*, Rpccall*);static int	pcfacilities[15];static char	no_comment[] = "Trust me.";static char	pc_vers[] = "@(#)pcnfsd_v2.c	1.6 - rpc.pcnfsd V2.0 (c) 1994 P9, GmbH";static char	pc_home[] = "merrimack:/";static Procmap pcproc[] = {	/* pcnfsd v2 */	0, pcnull,	1, pcinfo,	13, pcauth,	0, 0};static Procmap pc1proc[] = { 	/* pc-nfsd v1 */	0, pcnull,	1, pc1auth,	0, 0};int	myport = 1111;Progmap progmap[] = {	150001, 2, pcinit, pcproc,	150001, 1, 0, pc1proc,	0, 0, 0,};voidmain(int argc, char *argv[]){	server(argc, argv, myport, progmap);}static voidpcinit(int argc, char **argv){	Procmap *p;	int i;	char *config = "config";	ARGBEGIN{	case 'c':		config = ARGF();		break;	default:		if(argopt(ARGC()) < 0)			sysfatal("usage: %s %s [-c config]", argv0, commonopts);		break;	}ARGEND;	clog("pc init\n");	for(i=0; i<nelem(pcfacilities); i++)		pcfacilities[i] = -1;	for(p=pcproc; p->procp; p++)		pcfacilities[p->procno] = 100;	readunixidmaps(config);}static intpcnull(int n, Rpccall *cmd, Rpccall *reply){	USED(n, cmd, reply);	return 0;}static voidscramble(String *x){	int i;	for(i=0; i<x->n; i++)		x->s[i] = (x->s[i] ^ 0x5b) & 0x7f;}static intpcinfo(int n, Rpccall *cmd, Rpccall *reply){	uchar *argptr = cmd->args;	uchar *dataptr = reply->results;	String vers, cm;	int i;	chat("host=%I, port=%ld: pcinfo...",		cmd->host, cmd->port);	if(n <= 16)		return garbage(reply, "count too small");	argptr += string2S(argptr, &vers);	argptr += string2S(argptr, &cm);	if(argptr != &((uchar *)cmd->args)[n])		return garbage(reply, "bad count");	chat("\"%.*s\",\"%.*s\"\n", utfnlen(vers.s, vers.n), vers.s, utfnlen(cm.s, cm.n), cm.s);	PLONG(sizeof(pc_vers)-1);	PPTR(pc_vers, sizeof(pc_vers)-1);	PLONG(sizeof(no_comment)-1);	PPTR(no_comment, sizeof(no_comment)-1);	PLONG(nelem(pcfacilities));	for(i=0; i<nelem(pcfacilities); i++)		PLONG(pcfacilities[i]);	return dataptr - (uchar *)reply->results;}static intpc1auth(int n, Rpccall *cmd, Rpccall *reply){	uchar *argptr = cmd->args;	uchar *dataptr = reply->results;	String id, pw;	Unixidmap *m;	int uid;	chat("host=%I, port=%ld: pcauth...",		cmd->host, cmd->port);	if(n <= 8)		return garbage(reply, "count too small");	argptr += string2S(argptr, &id);	argptr += string2S(argptr, &pw);	if(argptr != &((uchar*)cmd->args)[n])		return garbage(reply, "bad count");	scramble(&id);	scramble(&pw);	m = pair2idmap("pcnfsd", cmd->host);	uid = -1;	if(m)		uid = name2id(&m->u.ids, id.s);	if(uid < 0)		uid = 1;	chat("\"%.*s\",\"%.*s\" uid=%d\n", utfnlen(id.s, id.n), id.s, utfnlen(pw.s, pw.n), pw.s, uid);	PLONG(0);	/* status */	PLONG(uid);	/* uid */	PLONG(uid);	/* gid */	return dataptr - (uchar*)reply->results;}static intpcauth(int n, Rpccall *cmd, Rpccall *reply){	uchar *argptr = cmd->args;	uchar *dataptr = reply->results;	String sys, id, pw, cm;	Unixidmap *m;	int uid;	chat("host=%I, port=%ld: pcauth...",		cmd->host, cmd->port);	if(n <= 16)		return garbage(reply, "count too small");	argptr += string2S(argptr, &sys);	argptr += string2S(argptr, &id);	argptr += string2S(argptr, &pw);	argptr += string2S(argptr, &cm);	if(argptr != &((uchar *)cmd->args)[n])		return garbage(reply, "bad count");	scramble(&id);	scramble(&pw);	m = pair2idmap("pcnfsd", cmd->host);	uid = -1;	if(m)		uid = name2id(&m->u.ids, id.s);	if(uid < 0)		uid = 1;	chat("\"%.*s\",\"%.*s\",\"%.*s\",\"%.*s\"\n", utfnlen(sys.s, sys.n), sys.s,		utfnlen(id.s, id.n), id.s, utfnlen(pw.s, pw.n), pw.s, utfnlen(cm.s, cm.n), cm.s);	PLONG(0);	/* status - OK */	PLONG(uid);	PLONG(uid);	/* gid */	PLONG(0);	/* ngids */	PLONG(sizeof(pc_home)-1);	PPTR(pc_home, sizeof(pc_home)-1);	PLONG(0);	/* umask */	PLONG(sizeof(no_comment)-1);	PPTR(no_comment, sizeof(no_comment)-1);	return dataptr - (uchar *)reply->results;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -