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 #define UUCHECK
34 int Uerrors = 0; /* error count */
35
36 /* This unusual include (#include "permission.c") is done because
37 * uucheck wants to use the global static variable in permission.c
38 */
39
40 #include "uucp.h"
41 #include "permission.c"
42 #include "sysfiles.h"
43
44 /* These are here because uucpdefs.c is not used, and
45 * some routines are referenced (never called within uucheck execution)
46 * and not included.
47 */
48
49 #define USAGE "[-v] [-xNUM]"
50
51 int Debug=0;
mkdirs()52 int mkdirs(){ return (0); }
canPath()53 int canPath(){ return (0); }
54 char RemSpool[] = SPOOL; /* this is a dummy for chkpth() -- never used here */
55 char *Spool = SPOOL;
56 char *Pubdir = PUBDIR;
57 char *Bnptr;
58 char Progname[NAMESIZE];
59 /* used for READANY and READSOME macros */
60 struct stat __s_;
61
62 /* This is stuff for uucheck */
63
64 struct tab
65 {
66 char *name;
67 char *value;
68 } tab[] =
69 {
70 #ifdef CORRUPTDIR
71 "CORRUPT", CORRUPTDIR,
72 #endif
73 "LOGUUCP", LOGUUCP,
74 "LOGUUX", LOGUUX,
75 "LOGUUXQT", LOGUUXQT,
76 "LOGCICO", LOGCICO,
77 "SEQDIR", SEQDIR,
78 "STATDIR", STATDIR,
79 "PERMISSIONS", PERMISSIONS,
80 "SYSTEMS", SYSTEMS,
81 "DEVICES", DEVICES ,
82 "DIALCODES", DIALCODES,
83 "DIALERS", DIALERS,
84 #ifdef USRSPOOLLOCKS
85 "USRSPOOLLOCKS", "/var/spool/locks",
86 #endif
87 #ifdef NOSTRANGERS
88 "NOSTRANGERS", NOSTRANGERS,
89 #endif
90 "LIMITS", LIMITS, /* if not defined we'll stat NULL, it's not a bug */
91 "XQTDIR", XQTDIR,
92 "WORKSPACE", WORKSPACE,
93 "admin directory", ADMIN,
94 NULL,
95 };
96
97 extern char *nextarg();
98 int verbose = 0; /* fsck-like verbosity */
99
100 int
main(argc,argv)101 main(argc, argv)
102 int argc;
103 char *argv[];
104 {
105 struct stat statbuf;
106 struct tab *tabptr;
107 int i;
108
109 (void) strcpy(Progname, "uucheck");
110 while ((i = getopt(argc, argv, "vx:")) != EOF) {
111 switch(i){
112
113 case 'v':
114 verbose++;
115 break;
116
117 case 'x':
118 Debug = atoi(optarg);
119 if (Debug <= 0)
120 Debug = 1;
121 #ifdef SMALL
122 fprintf(stderr,
123 "WARNING: uucheck built with SMALL flag defined -- no debug info available\n");
124 #endif /* SMALL */
125 break;
126
127 default:
128 (void) fprintf(stderr, "\tusage: %s %s\n",
129 Progname, USAGE);
130 exit(1);
131 }
132 }
133 if (argc != optind) {
134 (void) fprintf(stderr, "\tusage: %s %s\n", Progname, USAGE);
135 exit(1);
136 }
137
138 if (verbose) printf("*** uucheck: Check Required Files and Directories\n");
139 for (tabptr = tab; tabptr->name != NULL; tabptr++) {
140 if (stat(tabptr->value, &statbuf) < 0) {
141 fprintf(stderr, "%s - ", tabptr->name);
142 perror(tabptr->value);
143 Uerrors++;
144 }
145 }
146
147 if (verbose) printf("*** uucheck: Directories Check Complete\n\n");
148
149 /* check the permissions file */
150
151 if (verbose) printf("*** uucheck: Check %s file\n", PERMISSIONS);
152 Uerrors += checkPerm();
153 if (verbose) printf("*** uucheck: %s Check Complete\n\n", PERMISSIONS);
154
155 return(Uerrors);
156 }
157
158 int
checkPerm()159 checkPerm ()
160 {
161 int type;
162 int error=0;
163 char defaults[BUFSIZ];
164
165 for (type=0; type<2; type++) {
166 /* type = 0 for LOGNAME, 1 for MACHINE */
167
168 if (verbose) printf("** %s \n\n",
169 type == U_MACHINE
170 ?"MACHINE PHASE (when we call or execute their uux requests)"
171 :"LOGNAME PHASE (when they call us)" );
172
173 Fp = fopen(PERMISSIONS, "r");
174 if (Fp == NULL) {
175 if (verbose) printf("can't open %s\n", PERMISSIONS);
176 exit(1);
177 }
178
179 for (;;) {
180 if (parse_tokens(_Flds, NULL) != 0) {
181 fclose(Fp);
182 break;
183 }
184 if (_Flds[type] == NULL)
185 continue;
186
187 /* XXX - need to reset defaults here */
188 fillFlds();
189 /* if no ReadPath set num to 1--Path already set */
190 fillList(U_READPATH, _RPaths);
191 fillList(U_WRITEPATH, _WPaths);
192 fillList(U_NOREADPATH, _NoRPaths);
193 fillList(U_NOWRITEPATH, _NoWPaths);
194 if (_Flds[U_COMMANDS] == NULL) {
195 strcpy(defaults, DEFAULTCMDS);
196 _Flds[U_COMMANDS] = defaults;
197 }
198 fillList(U_COMMANDS, _Commands);
199 error += outLine(type);
200 }
201 if (verbose) printf("\n");
202 }
203 return(error);
204 }
205
206 int
outLine(type)207 outLine(type)
208 int type;
209 {
210 int i;
211 char *p;
212 char *arg, cmd[BUFSIZ];
213 int error = 0;
214 char myname[MAXBASENAME+1];
215
216 if (_Flds[type][0] == 0)
217 return(0);
218
219 if (type == U_LOGNAME) { /* for LOGNAME */
220 p = _Flds[U_LOGNAME];
221 if (verbose) printf("When a system logs in as: ");
222 while (*p != '\0') {
223 p = nextarg(p, &arg);
224 if (verbose) printf("(%s) ", arg);
225 }
226 if (verbose) printf("\n");
227
228 if (callBack()) {
229 if (verbose) printf("\tWe will call them back.\n\n");
230 return(0);
231 }
232 }
233 else { /* MACHINE */
234 p = _Flds[U_MACHINE];
235 if (verbose) printf("When we call system(s): ");
236 while (*p != '\0') {
237 p = nextarg(p, &arg);
238 if (verbose) printf("(%s) ", arg);
239 }
240 if (verbose) printf("\n");
241
242 }
243
244 if (verbose) printf("\tWe %s allow them to request files.\n",
245 requestOK()? "DO" : "DO NOT");
246
247 if (type == U_LOGNAME) {
248 if (verbose) printf("\tWe %s send files queued for them on this call.\n",
249 switchRole()? "WILL" : "WILL NOT");
250 }
251
252 if (verbose) printf("\tThey can send files to\n");
253 if (_Flds[U_WRITEPATH] == NULL) {
254 if (verbose) printf("\t %s (DEFAULT)\n", Pubdir);
255 }
256 else {
257 for (i=0; _WPaths[i] != NULL; i++)
258 if (verbose) printf("\t %s\n", _WPaths[i]);
259 }
260
261 if (_Flds[U_NOWRITEPATH] != NULL) {
262 if (verbose) printf("\tExcept\n");
263 for (i=0; _NoWPaths[i] != NULL; i++)
264 if (verbose) printf("\t %s\n", _NoWPaths[i]);
265 }
266
267 if (verbose) {
268 if (noSpool())
269 (void) printf("\tSent files will be created directly in the target directory.\n");
270 else {
271 (void) printf("\tSent files will be created in %s\n", SPOOL);
272 (void) printf("\t before they are copied to the target directory.\n");
273 }
274 }
275
276 if (requestOK()) {
277 if (verbose) printf("\tThey can request files from\n");
278 if (_Flds[U_READPATH] == NULL) {
279 if (verbose) printf("\t %s (DEFAULT)\n", Pubdir);
280 }
281 else {
282 for (i=0; _RPaths[i] != NULL; i++)
283 if (verbose) printf("\t %s\n", _RPaths[i]);
284 }
285
286 if (_Flds[U_NOREADPATH] != NULL) {
287 if (verbose) printf("\tExcept\n");
288 for (i=0; _NoRPaths[i] != NULL; i++)
289 if (verbose) printf("\t %s\n", _NoRPaths[i]);
290 }
291 }
292
293 myName(myname);
294 if (verbose) printf("\tMyname for the conversation will be %s.\n",
295 myname);
296 if (verbose) printf("\tPUBDIR for the conversation will be %s.\n",
297 Pubdir);
298
299 if (verbose) printf("\n");
300
301 if (type == U_MACHINE) {
302 if (verbose) printf("Machine(s): ");
303 p = _Flds[U_MACHINE];
304 while (*p != '\0') {
305 p = nextarg(p, &arg);
306 if (verbose) printf("(%s) ", arg);
307 }
308 if (verbose) printf("\nCAN execute the following commands:\n");
309 for (i=0; _Commands[i] != NULL; i++) {
310 if (cmdOK(BASENAME(_Commands[i], '/'), cmd) == FALSE) {
311 if (verbose) printf("Software Error in permission.c\n");
312 error++;
313 }
314 if (verbose) printf("command (%s), fullname (%s)\n",
315 BASENAME(_Commands[i], '/'), cmd);
316 }
317 if (verbose) printf("\n");
318 }
319
320 return(error);
321 }
322
323 void
cleanup(s)324 cleanup(s)
325 int s;
326 {
327 exit(s);
328 }
329