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 2017 Gary Mills
24 * Copyright 2005 Sun Microsystems, Inc. All rights reserved.
25 * Use is subject to license terms.
26 */
27
28 /* Copyright (c) 1984, 1986, 1987, 1988, 1989 AT&T */
29 /* All Rights Reserved */
30
31
32 #include "uucp.h"
33
34 #define MAXLENGTH 256
35 #define C_MAX 512
36
37 static void insert();
38 void rproc(), uproc();
39
40 static char Nnament[MAXLENGTH][NAMESIZE];
41 static char *Nptr[MAXLENGTH];
42 static short Nnames = 0;
43
44 int
main(argc,argv)45 main(argc, argv)
46 int argc;
47 char **argv;
48 {
49 int c, i, uopt = 0;
50 char prev[2 * NAMESIZE];
51
52 if (eaccess(GRADES, 04) == -1) {
53 (void) fprintf(stderr, "No administrator defined service grades available on this machine, use single letter/number only\n");
54 exit(0);
55 }
56
57 while ((c = getopt(argc, argv, "x:u")) != EOF)
58 switch(c) {
59 case 'u':
60 uopt++;
61 break;
62 case 'x':
63 Debug = atoi(optarg);
64 if (Debug < 0)
65 Debug = 1;
66 break;
67 default:
68 (void) fprintf(stderr, "usage: uuglist [-u] [-xLEVEL]\n");
69 exit(-1);
70 }
71
72 if (uopt) {
73 Uid = getuid();
74
75 if (Uid == 0)
76 (void) setuid(UUCPUID);
77
78 (void) guinfo(Uid, User);
79
80 uproc();
81 } else
82 rproc();
83
84 for (i = 0; i < Nnames; i++) {
85
86 if (EQUALS(Nptr[i], prev))
87 continue;
88
89 puts(Nptr[i]);
90 (void) strcpy(prev, Nptr[i]);
91 }
92 return (0);
93 }
94 static void
insert(name)95 insert(name)
96 char *name;
97 {
98 int i,j;
99 char *p;
100
101 DEBUG(7, "insert(%s) ", name);
102
103 for (i = Nnames; i > 0; i--)
104 if (strcmp(name, Nptr[i-1]) > 0)
105 break;
106
107 if (i == MAXLENGTH)
108 return;
109
110 if (Nnames == MAXLENGTH)
111 p = strcpy(Nptr[--Nnames], name);
112 else
113 p = strcpy(Nnament[Nnames], name);
114
115 for (j = Nnames; j > i; j--)
116 Nptr[j] = Nptr[j-1];
117
118 DEBUG(7, "insert %s ", p);
119 DEBUG(7, "at %d\n", i);
120 Nptr[i] = p;
121 Nnames++;
122 return;
123 }
124
125 void
rproc()126 rproc()
127 {
128 FILE *cfd;
129 char line[BUFSIZ];
130 char *carray[C_MAX];
131
132 cfd = fopen(GRADES, "r");
133
134 while (rdfulline(cfd, line, BUFSIZ) != 0) {
135
136 (void) getargs(line, carray, C_MAX);
137 insert(carray[0]);
138 }
139
140 (void) fclose(cfd);
141 return;
142 }
143
144 void
uproc()145 uproc()
146 {
147 FILE *cfd;
148 char line[BUFSIZ];
149 char *carray[C_MAX];
150 int na;
151
152 cfd = fopen(GRADES, "r");
153
154 while (rdfulline(cfd, line, BUFSIZ) != 0) {
155
156 na = getargs(line, carray, C_MAX);
157
158 if (upermit(carray, na) != FAIL)
159 insert(carray[0]);
160 }
161
162 (void) fclose(cfd);
163 return;
164 }
165
166 int Dfileused = FALSE;
wfcommit()167 void wfcommit() {}
cleanup()168 void cleanup() {}
gnamef()169 int gnamef() { return (0); }
gdirf()170 int gdirf() { return (0); }
cklock()171 int cklock() { return (0); }
172
173 /*VARARGS*/
174 /*ARGSUSED*/
175 void
assert(s1,s2,i1,s3,i2)176 assert (s1, s2, i1, s3, i2)
177 char *s1, *s2, *s3;
178 int i1, i2;
179 { } /* for ASSERT in gnamef.c */
180
181 /*VARARGS*/
182 /*ARGSUSED*/
183 void
errent(char * s1,char * s2,int i1,char * file,int line)184 errent(char *s1, char *s2, int i1, char *file, int line)
185 {
186 }
187