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

📄 netname.c

📁 <B>Digital的Unix操作系统VAX 4.2源码</B>
💻 C
字号:
#ifndef lintstatic char *sccsid = "@(#)netname.c	4.2      ULTRIX  9/4/90";#endif lint/**************************************************************** *                                                              * *  Licensed to Digital Equipment Corporation, Maynard, MA      * *              Copyright 1988 Sun Microsystems, Inc.           * *                      All rights reserved.                    * *                                                              * ****************************************************************//*  * Copyright (c) 1988 by Sun Microsystems, Inc. * 1.9 88/02/08  *//* * netname utility routines * convert from unix names to network names and vice-versa * This module is operating system dependent! * What we define here will work with any unix system that has adopted * the sun yp domain architecture. */#include <sys/param.h>#include <rpc/rpc.h>#include <ctype.h>extern char *strncpy();static char OPSYS[] = "unix";static char NETID[] = "netid.byname";	/* * Convert network-name into unix credential */netname2user(netname, uidp, gidp, gidlenp, gidlist)	char netname[MAXNETNAMELEN+1];	int *uidp;	int *gidp;	int *gidlenp;	int *gidlist;{	int stat;	char *val;	char *p;	int vallen;	char *domain;	int gidlen;	stat = yp_get_default_domain(&domain);	if (stat != 0) {		return (0);	}	stat = yp_match(domain, NETID, netname, strlen(netname), &val, &vallen);	if (stat != 0) {		return (0);	}	val[vallen] = 0;	p = val;	*uidp = atois(&p);	if (p == NULL || *p++ != ':') {		free(val);		return (0);	}	*gidp = atois(&p);	if (p == NULL) {		free(val);		return (0);	}	gidlen = 0;	for (gidlen = 0; gidlen < NGROUPS; gidlen++) {			if (*p++ != ',') {			break;		}		gidlist[gidlen] = atois(&p);		if (p == NULL) {			free(val);			return (0);		}	}	*gidlenp = gidlen;	free(val);	return (1);}/* * Convert network-name to hostname */netname2host(netname, hostname, hostlen)	char netname[MAXNETNAMELEN+1];	char *hostname;	int hostlen;{	int stat;	char *val;	int vallen;	char *domain;	stat = yp_get_default_domain(&domain);	if (stat != 0) {		return (0);	}	stat = yp_match(domain, NETID, netname, strlen(netname), &val, &vallen);	if (stat != 0) {		return (0);	}	val[vallen] = 0;	if (*val != '0') {		free(val);		return (0);	}		if (val[1] != ':') {		free(val);		return (0);	}	(void) strncpy(hostname, val + 2, hostlen);	free(val);	return (1);}/* * Figure out my fully qualified network name */getnetname(name)	char name[MAXNETNAMELEN+1];{	int uid;	uid = geteuid(); 	if (uid == 0) {		return (host2netname(name, (char *) NULL, (char *) NULL));	} else {		return (user2netname(name, uid, (char *) NULL));	}}/* * Convert unix cred to network-name */user2netname(netname, uid, domain)	char netname[MAXNETNAMELEN + 1];	int uid;	char *domain;{	char *dfltdom;#define MAXIPRINT	(11)	/* max length of printed integer */	if (domain == NULL) {		if (yp_get_default_domain(&dfltdom) != 0) {			return (0);		}		domain = dfltdom;	}	if (strlen(domain) + 1 + MAXIPRINT > MAXNETNAMELEN) {		return (0);	}	(void) sprintf(netname, "%s.%d@%s", OPSYS, uid, domain);		return (1);}/* * Convert host to network-name */host2netname(netname, host, domain)	char netname[MAXNETNAMELEN + 1];	char *host;	char *domain;{	char *dfltdom;	char hostname[MAXHOSTNAMELEN+1]; 	if (domain == NULL) {		if (yp_get_default_domain(&dfltdom) != 0) {			return (0);		}		domain = dfltdom;	}	if (host == NULL) {		(void) gethostname(hostname, sizeof(hostname));		host = hostname;	}	if (strlen(domain) + 1 + strlen(host) > MAXNETNAMELEN) {		return (0);	} 	(void) sprintf(netname, "%s.%s@%s", OPSYS, host, domain);	return (1);}staticatois(str)	char **str;{	char *p;	int n;	int sign;	if (**str == '-') {		sign = -1;		(*str)++;	} else {		sign = 1;	}	n = 0;	for (p = *str; isdigit(*p); p++) {		n = (10 * n) + (*p - '0');	}	if (p == *str) {		*str = NULL;		return (0);	}	*str = p;		return (n * sign);}

⌨️ 快捷键说明

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