xref: /titanic_52/usr/src/cmd/bnu/uuglist.c (revision 4f364e7c95ee7fd9d5bbeddc1940e92405bb0e72)
1 /*
2  * CDDL HEADER START
3  *
4  * The contents of this file are subject to the terms of the
5  * Common Development and Distribution License, Version 1.0 only
6  * (the "License").  You may not use this file except in compliance
7  * with the License.
8  *
9  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
10  * or http://www.opensolaris.org/os/licensing.
11  * See the License for the specific language governing permissions
12  * and limitations under the License.
13  *
14  * When distributing Covered Code, include this CDDL HEADER in each
15  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
16  * If applicable, add the following below this CDDL HEADER, with the
17  * fields enclosed by brackets "[]" replaced with your own identifying
18  * information: Portions Copyright [yyyy] [name of copyright owner]
19  *
20  * CDDL HEADER END
21  */
22 /*
23  * Copyright 2005 Sun Microsystems, Inc.  All rights reserved.
24  * Use is subject to license terms.
25  */
26 
27 /*	Copyright (c) 1984, 1986, 1987, 1988, 1989 AT&T	*/
28 /*	  All Rights Reserved  	*/
29 
30 
31 #pragma ident	"%Z%%M%	%I%	%E% SMI"
32 
33 #include	"uucp.h"
34 
35 #define MAXLENGTH 256
36 #define C_MAX	  512
37 
38 static void insert();
39 void rproc(), uproc();
40 
41 static char  Nnament[MAXLENGTH][NAMESIZE];
42 static char *Nptr[MAXLENGTH];
43 static short Nnames = 0;
44 
45 int
46 main(argc, argv)
47 int argc;
48 char **argv;
49 {
50 	int c, i, uopt = 0;
51 	char prev[2 * NAMESIZE];
52 
53 	if (eaccess(GRADES, 04) == -1) {
54 		(void) fprintf(stderr, "No administrator defined service grades available on this machine, use single letter/number only\n");
55 		exit(0);
56 	}
57 
58 	while ((c = getopt(argc, argv, "x:u")) != EOF)
59 		switch(c) {
60 		case 'u':
61 			uopt++;
62 			break;
63 		case 'x':
64 			Debug = atoi(optarg);
65 			if (Debug < 0)
66 				Debug = 1;
67 			break;
68 		default:
69 			(void) fprintf(stderr, "usage: uuglist [-u] [-xLEVEL]\n");
70 			exit(-1);
71 		}
72 
73 	if (uopt) {
74 		Uid = getuid();
75 
76 		if (Uid == 0)
77 			(void) setuid(UUCPUID);
78 
79 		(void) guinfo(Uid, User);
80 
81 		uproc();
82 	} else
83 		rproc();
84 
85 	for (i = 0; i < Nnames; i++) {
86 
87 		if (EQUALS(Nptr[i], prev))
88 			continue;
89 
90 		puts(Nptr[i]);
91 		(void) strcpy(prev, Nptr[i]);
92 	}
93 	return (0);
94 }
95 static void
96 insert(name)
97 char *name;
98 {
99 	int i,j;
100 	char *p;
101 
102 	DEBUG(7, "insert(%s) ", name);
103 
104 	for (i = Nnames; i > 0; i--)
105 		if (strcmp(name, Nptr[i-1]) > 0)
106 			break;
107 
108 	if (i == MAXLENGTH)
109 		return;
110 
111 	if (Nnames == MAXLENGTH)
112 		p = strcpy(Nptr[--Nnames], name);
113 	else
114 		p = strcpy(Nnament[Nnames], name);
115 
116 	for (j = Nnames; j > i; j--)
117 		Nptr[j] = Nptr[j-1];
118 
119 	DEBUG(7, "insert %s ", p);
120 	DEBUG(7, "at %d\n", i);
121 	Nptr[i] = p;
122 	Nnames++;
123 	return;
124 }
125 
126 void
127 rproc()
128 {
129 	FILE *cfd;
130 	char line[BUFSIZ];
131 	char *carray[C_MAX];
132 	int na;
133 
134 	cfd = fopen(GRADES, "r");
135 
136 	while (rdfulline(cfd, line, BUFSIZ) != 0) {
137 
138 		na = getargs(line, carray, C_MAX);
139 		insert(carray[0]);
140 	}
141 
142 	(void) fclose(cfd);
143 	return;
144 }
145 
146 void
147 uproc()
148 {
149 	FILE *cfd;
150 	char line[BUFSIZ];
151 	char *carray[C_MAX];
152 	int na;
153 
154 	cfd = fopen(GRADES, "r");
155 
156 	while (rdfulline(cfd, line, BUFSIZ) != 0) {
157 
158 		na = getargs(line, carray, C_MAX);
159 
160 		if (upermit(carray, na) != FAIL)
161 			insert(carray[0]);
162 	}
163 
164 	(void) fclose(cfd);
165 	return;
166 }
167 
168 int Dfileused = FALSE;
169 void wfcommit() {}
170 void cleanup() {}
171 int gnamef() { return (0); }
172 int gdirf() { return (0); }
173 int cklock() { return (0); }
174 
175 /*VARARGS*/
176 /*ARGSUSED*/
177 void
178 assert (s1, s2, i1, s3, i2)
179 char *s1, *s2, *s3;
180 int i1, i2;
181 { }		/* for ASSERT in gnamef.c */
182 
183 /*VARARGS*/
184 /*ARGSUSED*/
185 void
186 errent(s1, s2, i1, file, line)
187 char *s1, *s2, *file;
188 { }
189