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

📄 auth_respond.c

📁 这是一个同样来自贝尔实验室的和UNIX有着渊源的操作系统, 其简洁的设计和实现易于我们学习和理解
💻 C
字号:
#include <u.h>#include <libc.h>#include <auth.h>#include <authsrv.h>#include "authlocal.h"enum {	ARgiveup = 100,};static intdorpc(AuthRpc *rpc, char *verb, char *val, int len, AuthGetkey *getkey){	int ret;	for(;;){		if((ret = auth_rpc(rpc, verb, val, len)) != ARneedkey && ret != ARbadkey)			return ret;		if(getkey == nil)			return ARgiveup;	/* don't know how */		if((*getkey)(rpc->arg) < 0)			return ARgiveup;	/* user punted */	}}intauth_respond(void *chal, uint nchal, char *user, uint nuser, void *resp, uint nresp, AuthGetkey *getkey, char *fmt, ...){	char *p, *s;	va_list arg;	int afd;	AuthRpc *rpc;	Attr *a;	if((afd = open("/mnt/factotum/rpc", ORDWR)) < 0)		return -1;		if((rpc = auth_allocrpc(afd)) == nil){		close(afd);		return -1;	}	quotefmtinstall();	/* just in case */	va_start(arg, fmt);	p = vsmprint(fmt, arg);	va_end(arg);	if(p==nil	|| dorpc(rpc, "start", p, strlen(p), getkey) != ARok	|| dorpc(rpc, "write", chal, nchal, getkey) != ARok	|| dorpc(rpc, "read", nil, 0, getkey) != ARok){		free(p);		close(afd);		auth_freerpc(rpc);		return -1;	}	free(p);	if(rpc->narg < nresp)		nresp = rpc->narg;	memmove(resp, rpc->arg, nresp);	if((a = auth_attr(rpc)) != nil	&& (s = _strfindattr(a, "user")) != nil && strlen(s) < nuser)		strcpy(user, s);	else if(nuser > 0)		user[0] = '\0';	_freeattr(a);	close(afd);	auth_freerpc(rpc);	return nresp;	}

⌨️ 快捷键说明

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