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

📄 dname.c

📁 操作系统SunOS 4.1.3版本的源码
💻 C
字号:
/*	@(#)dname.c 1.1 92/07/30 SMI 	*//*	Copyright (c) 1984 AT&T	*//*	  All Rights Reserved  	*//*	THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF AT&T	*//*	The copyright notice above does not evidence any   	*//*	actual or intended publication of such source code.	*/#ident	"@(#)dname:dname.c	1.10"#include <stdio.h>#include <errno.h>#include <ctype.h>#include <sys/types.h>#include <sys/stat.h>#include <rfs/nserve.h>#include <rfs/rfsys.h>#define	DOMAIN	1#define	NETSPEC	2#define	NSNET	"/usr/nserve/netspec"extern char *optarg;extern int   optind;extern char *strpbrk();char *getdname();main(argc, argv)int    argc;char **argv;{	int	c, error = 0;	int	printflag = 0;	int	setflag = 0;	char	*newdomain, *newnetspec;	int	rtn = 0;	/*	 *	Parse the command line.	 */	while ((c = getopt(argc, argv, "dnaD:N:")) != EOF) {		switch (c) {			case 'd':				printflag |= DOMAIN;				break;			case 'n':				printflag |= NETSPEC;				break;			case 'a':				printflag = DOMAIN | NETSPEC;				break;			case 'D':				if (setflag & DOMAIN)					error = 1;				else {					setflag |= DOMAIN;					newdomain = optarg;				}				break;			case 'N':				if (setflag & NETSPEC)					error = 1;				else {					setflag |= NETSPEC;					newnetspec = optarg;				}				break;			case '?':				error = 1;		}	}	if (argc == 1)		printflag = DOMAIN;	if (optind < argc) {		fprintf(stderr, "dname: extra arguments given\n");		error = 1;	}	if (error) {		fprintf(stderr, "dname: usage: dname [-D domain] [-N netspec] [-dna]\n");		exit(1);	}	if (setflag & DOMAIN)		rtn |= setdomain(newdomain);	if (setflag & NETSPEC)		rtn |= setnetspec(newnetspec);	if (printflag)		rtn |= pr_info(printflag);	exit(rtn);	/* NOTREACHED */}staticsetdomain(domain)char	 *domain;{	FILE *fp;	register char *ptr;	int  inval_chr;	if (geteuid() != 0) {		fprintf(stderr, "dname: must be super user to change domain name\n");		return(1);	}	/*	 *	The new domain name must between 1 and 14 characters	 *	and must be alphanumeric, "-",  or "_".	 */	if (strlen(domain) > 14 || strlen(domain) < 1) {		fprintf(stderr, "dname: new domain name must be between 1 and 14 characters in length\n");		return(1);	}	inval_chr = 0;	for (ptr = domain; *ptr; ptr++) {		if (isalnum(*ptr) || *ptr == '_' || *ptr == '-')			continue;		else			inval_chr = 1;	}	if (inval_chr) {		fprintf(stderr, "dname: invalid characters specified in <%s>\n", domain);		fprintf(stderr, "dname: domain name must contain only alpha-numeric, '-', or '_' characters\n");		return(1);	}	if (rfsys(RF_SETDNAME, domain, strlen(domain)+1) < 0) {		if (errno == EEXIST) {			fprintf(stderr, "dname: cannot change domain name while RFS is running\n");		} else {			perror("dname");		}		return(1);	}	if (((fp = fopen(NSDOM,"w")) == NULL)	  || (fputs(domain,fp) == NULL)	  || (chmod(NSDOM, 00644) < 0)	  || (chown(NSDOM, 0, 3) < 0)) {		fprintf(stderr, "dname: warning: error in writing domain name into <%s>\n", NSDOM);	}	/*	 *	Remove the domain password file.	 */	unlink(PASSFILE);	return(0);}staticsetnetspec(netspec)char *netspec;{	FILE *fp;	char  dname[MAXDNAME];	char  path[BUFSIZ];	struct stat sbuf;	if (geteuid() != 0) {		fprintf(stderr, "dname: must be super user to change network specification\n");		return(1);	}	/*	 *	Check to see if RFS is running.  If it is, then	 *	the netspec cannot be changed.	 */	if (rfs_up() == 0) {		fprintf(stderr, "dname: cannot change network specification while RFS is running\n");		return(1);	}	if (*netspec == '\0') {		fprintf(stderr, "dname: network specification cannot have a null value\n");		return(1);	}	sprintf(path, "/dev/%s", netspec);	if (stat(path, &sbuf) < 0) {		fprintf(stderr, "dname: WARNING: %s does not exist\n", path);	}	if (((fp = fopen(NSNET,"w")) == NULL)	  || (fputs(netspec,fp) == NULL)	  || (chmod(NSNET, 00644) < 0)	  || (chown(NSNET, 0, 3) < 0)	  || (fclose(fp) < 0)) {		fprintf(stderr, "dname: error: error in writing network specification into <%s>\n", NSNET);		return(1);	}	return(0);}staticpr_info(flag)int flag;{	int rtn = 0;	if (flag & DOMAIN)		rtn |= printdomain();	if (flag & NETSPEC) {		if (rtn == 0 && (flag & DOMAIN))			putchar(' ');		rtn |= printnetspec();	}	putchar('\n');	return(rtn);}staticprintdomain(){	char *name;	register char *ptr;	int  inval_chr;	if ((name = getdname()) == NULL) {		fprintf(stderr, "dname: domain name not set; contact System Administrator\n");		return(1);	}	inval_chr = 0;	for (ptr = name; *ptr; ptr++) {		if (isalnum(*ptr) || *ptr == '_' || *ptr == '-')			continue;		else			inval_chr = 1;	}	if (strlen(name) > 14 || strlen(name) < 1 || inval_chr == 1) {		fprintf(stderr, "dname: domain name <%s> corrupted; contact System Administrator\n", name);		return(1);	}	printf("%s", name);	return(0);}staticprintnetspec(){	FILE *fp;	char netspec[BUFSIZ];	if (((fp = fopen(NSNET,"r")) == NULL)	|| (fgets(netspec,BUFSIZ,fp) == NULL)) {		fprintf(stderr, "dname: network specification not set; contact System Administrator\n");		return(1);	}	/*	 *	get rid of trailing newline, if there	 */	if (netspec[strlen(netspec)-1] == '\n')		netspec[strlen(netspec)-1] = '\0';	printf("%s", netspec);	fclose(fp);	return(0);}staticchar	*getdname(){	static char dname[MAXDNAME];	FILE	*fp;	/*	 *	If the domain name cannot be obtained from the system,	 *	get it from the domain file.	 */	if ((rfsys(RF_GETDNAME, dname, MAXDNAME) < 0) || (dname[0] == '\0')) {		if (((fp = fopen(NSDOM,"r")) == NULL)		|| (fgets(dname,MAXDNAME,fp) == NULL))			return(NULL);		/*		 *	get rid of trailing newline, if there		 */		if (dname[strlen(dname)-1] == '\n')			dname[strlen(dname)-1] = '\0';		fclose(fp);	}	return(dname);}

⌨️ 快捷键说明

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