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

📄 auth_getuserpasswd.c

📁 这是一个同样来自贝尔实验室的和UNIX有着渊源的操作系统, 其简洁的设计和实现易于我们学习和理解
💻 C
字号:
#include <u.h>#include <libc.h>#include <auth.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 */	}}UserPasswd*auth_getuserpasswd(AuthGetkey *getkey, char *fmt, ...){	AuthRpc *rpc;	char *f[3], *p, *params;	int fd;	va_list arg;	UserPasswd *up;	up = nil;	rpc = nil;	params = nil;	fd = open("/mnt/factotum/rpc", ORDWR);	if(fd < 0)		goto out;	rpc = auth_allocrpc(fd);	if(rpc == nil)		goto out;	quotefmtinstall();	/* just in case */	va_start(arg, fmt);	params = vsmprint(fmt, arg);	va_end(arg);	if(params == nil)		goto out;	if(dorpc(rpc, "start", params, strlen(params), getkey) != ARok	|| dorpc(rpc, "read", nil, 0, getkey) != ARok)		goto out;	rpc->arg[rpc->narg] = '\0';	if(tokenize(rpc->arg, f, 2) != 2){		werrstr("bad answer from factotum");		goto out;	}	up = malloc(sizeof(*up)+rpc->narg+1);	if(up == nil)		goto out;	p = (char*)&up[1];	strcpy(p, f[0]);	up->user = p;	p += strlen(p)+1;	strcpy(p, f[1]);	up->passwd = p;out:	free(params);	auth_freerpc(rpc);	close(fd);	return up;}

⌨️ 快捷键说明

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