xref: /illumos-gate/usr/src/cmd/bnu/uucp.h (revision 7c478bd9)
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 1998 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 #ifndef _UUCP_H
34 #define _UUCP_H
35 
36 #include <unistd.h>
37 #include <stdlib.h>
38 #include <string.h>
39 #include <locale.h>
40 #include <wchar.h>
41 #include <widec.h>
42 #include <wctype.h>
43 #include <ulimit.h>
44 #include <values.h>
45 
46 #include "parms.h"
47 
48 #ifdef ATTSV
49 #define ATTSVKILL
50 #define ATTSVTTY
51 #define UNAME
52 #ifdef ATTSVR4
53 #define	ATTSVR3
54 #endif /*ATTSVR4*/
55 #endif /*ATTSV*/
56 
57 #ifdef BSD4_3
58 #define BSD4_2
59 #define	BSDINETD
60 #endif /*BSD4_3 */
61 
62 #ifdef DIAL
63 #define EXTERN static
64 #define GLOBAL static
65 #else
66 #define EXTERN extern
67 #define GLOBAL
68 #endif
69 
70 #ifdef BSD4_2
71 #define V7
72 #define ATTSVKILL
73 #undef NONAP	/* conn.c has a nap() for 4.2 -- it's called select() */
74 #undef FASTTIMER
75 #endif /* BSD4_2 */
76 
77 #ifdef V8
78 #define V7
79 #define ATTSVKILL
80 #define UNAME
81 #endif /* V8 */
82 
83 #ifdef FASTTIMER
84 #undef NONAP
85 #endif
86 
87 #include <stdio.h>
88 #include <ctype.h>
89 #include <setjmp.h>
90 #include <sys/param.h>
91 
92 /*
93  * param.h includes types.h and signal.h in 4bsd
94  */
95 #ifdef V7
96 #ifdef ATTSVTTY
97 #include <termio.h>
98 #else /* ATTSVTTY */
99 #include <sgtty.h>
100 #endif /* ATTSVTTY */
101 #include <sys/timeb.h>
102 #ifdef BSD4_2
103 #include <fcntl.h>
104 #endif /* BSD4_2 */
105 #else /* !V7 */
106 #include <termio.h>
107 #include <sys/types.h>
108 #include <signal.h>
109 #include <fcntl.h>
110 #endif /* V7 */
111 
112 #include <sys/stat.h>
113 #include <utime.h>
114 #include <dirent.h>
115 
116 #ifdef BSD4_2
117 #include <sys/time.h>
118 #else /* !BSD4_2 */
119 #include <time.h>
120 #endif /* BSD4_2 */
121 
122 #include <sys/times.h>
123 #include <errno.h>
124 
125 #ifdef ATTSV
126 #ifdef ATTSVR4
127 #include <sys/mkdev.h>
128 #else /* !ATTSVR4 */
129 #include <sys/sysmacros.h>
130 #endif /* ATTSVR4 */
131 #endif /* ATTSV */
132 
133 #ifdef	RT
134 #include "rt/types.h"
135 #include "rt/unix/param.h"
136 #include "rt/stat.h"
137 #include <sys/ustat.h>
138 #endif /* RT */
139 
140 #include <sysexits.h>
141 
142 #ifndef ATTSVR4
143 #define	const
144 #endif /* ATTSVR4 */
145 
146 /* what mode should user files be allowed to have upon creation? */
147 /* NOTE: This does not allow setuid or execute bits on transfer. */
148 #define LEGALMODE (mode_t) 0666
149 
150 /* what mode should public files have upon creation? */
151 #define PUB_FILEMODE (mode_t) 0666
152 
153 /* what mode should log files have upon creation? */
154 #define LOGFILEMODE (mode_t) 0644
155 
156 /* what mode should C. files have upon creation? */
157 #define CFILEMODE (mode_t) 0644
158 
159 /* what mode should D. files have upon creation? */
160 #define DFILEMODE (mode_t) 0600
161 
162 /* define the value of PUBMASK, used for creating "public" directories */
163 #define PUBMASK (mode_t) 0000
164 
165 /* what mode should public directories have upon creation? */
166 #define PUB_DIRMODE (mode_t) 0777
167 
168 /* define the value of DIRMASK, used for creating "system" subdirectories */
169 #define DIRMASK (mode_t) 0022
170 
171 #define MAXSTART	300	/* how long to wait on startup */
172 
173 /* define the last characters for ACU  (used for 801/212 dialers) */
174 #define ACULAST "<"
175 
176 /*  caution - the fillowing names are also in Makefile
177  *    any changes here have to also be made there
178  *
179  * it's a good idea to make directories .foo, since this ensures
180  * that they'll be ignored by processes that search subdirectories in SPOOL
181  *
182  *  XQTDIR=/var/uucp/.Xqtdir
183  *  CORRUPT=/var/uucp/.Corrupt
184  *  LOGDIR=/var/uucp/.Log
185  *  SEQDIR=/var/uucp/.Sequence
186  *  STATDIR=/var/uucp/.Status
187  *
188  */
189 
190 /* where to put the STST. files? */
191 #define STATDIR		"/var/uucp/.Status"
192 
193 /* where should logfiles be kept? */
194 #define LOGUUX		"/var/uucp/.Log/uux"
195 #define LOGUUXQT	"/var/uucp/.Log/uuxqt"
196 #define LOGUUCP		"/var/uucp/.Log/uucp"
197 #define LOGCICO		"/var/uucp/.Log/uucico"
198 
199 /* some sites use /var/uucp/.Corrupt and /var/uucp/.Xqtdir here */
200 /* use caution since things are linked into there from /var/spool/uucp */
201 #define CORRUPTDIR	"/var/spool/uucp/.Corrupt"
202 #define XQTDIR		"/var/spool/uucp/.Xqtdir"
203 
204 /* how much of a system name can we print in a [CX]. file? */
205 /* MAXBASENAME - 1 (pre) - 1 ('.') - 1 (grade) - 4 (sequence number) */
206 #define SYSNSIZE (MAXBASENAME - 7)
207 
208 #ifdef USRSPOOLLOCKS
209 #define LOCKPRE		"/var/spool/locks/LCK."
210 #else /*!USRSPOOLLOCKS*/
211 #define LOCKPRE		"/var/spool/uucp/LCK."
212 #endif /* USRSPOOLLOCKS */
213 
214 #define SQFILE		"/etc/uucp/SQFILE"
215 #define SQTMP		"/etc/uucp/SQTMP"
216 #define SLCKTIME	5400	/* system/device timeout (LCK.. files) */
217 #define DIALCODES	"/etc/uucp/Dialcodes"
218 #define PERMISSIONS	"/etc/uucp/Permissions"
219 #define SYSNAMEFILE	"/etc/uucp/Sysname"
220 
221 #define SPOOL		"/var/spool/uucp"
222 #define SEQDIR		"/var/uucp/.Sequence"
223 
224 #define X_LOCKTIME	3600
225 #ifdef USRSPOOLLOCKS
226 #define SEQLOCK		"/var/spool/locks/LCK.SQ."
227 #define SQLOCK		"/var/spool/locks/LCK.SQ"
228 #define X_LOCK		"/var/spool/locks/LCK.X"
229 #define S_LOCK		"/var/spool/locks/LCK.S"
230 #define L_LOCK		"/var/spool/locks/LK"
231 #define X_LOCKDIR	"/var/spool/locks"	/* must be dir part of above */
232 #else /*!USRSPOOLLOCKS*/
233 #define SEQLOCK		"/var/spool/uucp/LCK.SQ."
234 #define SQLOCK		"/var/spool/uucp/LCK.SQ"
235 #define X_LOCK		"/var/spool/uucp/LCK.X"
236 #define S_LOCK		"/var/spool/uucp/LCK.S"
237 #define L_LOCK		"/var/spool/uucp/LK"
238 #define X_LOCKDIR	"/var/spool/uucp"	/* must be dir part of above */
239 #endif /* USRSPOOLLOCKS */
240 #define X_LOCKPRE	"LCK.X"		/* must be last part of above */
241 #define	S_LOCKPRE	"LCK.S"
242 
243 /*
244  * Note: this should be "/usr/spool/uucppublic", not "/var/spool/uucppublic",
245  * because if a Permissions file entry doesn't explicitly list directories to
246  * which and from which files can be copied you can only copy files to and from
247  * PUBDIR, and most systems out there will think PUBDIR is
248  * "/usr/spool/uucppublic" not "/var/spool/uucppublic" (i.e., if you change
249  * this, other systems may be rudely surprised when they try to get things from
250  * or to PUBDIR).
251  */
252 #define PUBDIR		"/usr/spool/uucppublic"
253 #define ADMIN		"/var/uucp/.Admin"
254 #define ERRLOG		"/var/uucp/.Admin/errors"
255 #define SYSLOG		"/var/uucp/.Admin/xferstats"
256 #define RMTDEBUG	"/var/uucp/.Admin/audit"
257 #define CLEANUPLOGFILE	"/var/uucp/.Admin/uucleanup"
258 #define CMDLOG		"/var/uucp/.Admin/command"
259 #define PERFLOG		"/var/uucp/.Admin/perflog"
260 #define ACCOUNT		"/var/uucp/.Admin/account"
261 #define SECURITY	"/var/uucp/.Admin/security"
262 
263 /*
264  * WORKSPACE should be in the same filesystem as SPOOL so that "mv"
265  * between the two will work.  Otherwise, the file must be copied
266  * and a window exists during which the file is mode 666.
267  */
268 #define	WORKSPACE	"/var/spool/uucp/.Workspace"
269 
270 #define SQTIME		60
271 #define TRYCALLS	2	/* number of tries to dial call */
272 #define MINULIMIT	(1L<<11)	/* minimum reasonable ulimit */
273 #define	MAX_LOCKTRY	5	/* number of attempts to lock device */
274 
275 /*
276  * CDEBUG is for communication line debugging
277  * DEBUG is for program debugging
278  * #define SMALL to compile without the DEBUG code
279  */
280 
281 #ifndef DIAL
282 #define CDEBUG(l, f, s) if (Debug >= l) fprintf(stderr, f, s)
283 #else
284 #define CDEBUG(l, f, s)
285 #define SMALL
286 #endif
287 
288 #ifndef SMALL
289 #define DEBUG(l, f, s) if (Debug >= l) fprintf(stderr, f, s)
290 #else
291 #define DEBUG(l, f, s)
292 #endif /* SMALL */
293 
294 /*
295  * VERBOSE is used by cu and ct to inform the user of progress
296  * In other programs, the Value of Verbose is always 0.
297  */
298 #define VERBOSE(f, s) { if (Verbose > 0) fprintf(stderr, f, s); }
299 
300 #define PREFIX(pre, str)	(strncmp((pre), (str), strlen(pre)) == SAME)
301 #define BASENAME(str, c) ((Bnptr = strrchr((str), c)) ? (Bnptr + 1) : (str))
302 #define EQUALS(a,b)	((a != CNULL) && (b != CNULL) && (strcmp((a),(b))==SAME))
303 #define WEQUALS(a,b)	((a != CNULL) && (b != CNULL) && (wcscmp((a),(b))==SAME))
304 #define EQUALSN(a,b,n)	((a != CNULL) && (b != CNULL) && (strncmp((a),(b),(n))==SAME))
305 #define WEQUALSN(a,b,n)	((a != CNULL) && (b != CNULL) && (wcsncmp((a),(b),(n))==SAME))
306 #define LASTCHAR(s)	(s+strlen(s)-1)
307 
308 #define SAME 0
309 #define ANYREAD 04
310 #define ANYWRITE 02
311 #define FAIL -1
312 #define SUCCESS 0
313 #define NULLCHAR	'\0'
314 #define CNULL ((void *) 0)
315 #define STBNULL (struct sgttyb *) 0
316 #define MASTER 1
317 #define SLAVE 0
318 #define MAXBASENAME 14 /* should be DIRSIZ but that is now fs dependent */
319 #define MAXFULLNAME BUFSIZ
320 #define MAXNAMESIZE	64	/* /var/spool/uucp/<14 chars>/<14 chars>+slop */
321 #define CONNECTTIME 30
322 #define EXPECTTIME 45
323 #define MSGTIME 60
324 #define NAMESIZE MAXBASENAME+1
325 #define	SIZEOFPID	10		/* maximum number of digits in a pid */
326 #define EOTMSG "\004\n\004\n"
327 #define CALLBACK 1
328 
329 /* manifests for sysfiles.c's sysaccess()	*/
330 /* check file access for REAL user id */
331 #define	ACCESS_SYSTEMS	1
332 #define	ACCESS_DEVICES	2
333 #define	ACCESS_DIALERS	3
334 /* check file access for EFFECTIVE user id */
335 #define	EACCESS_SYSTEMS	4
336 #define	EACCESS_DEVICES	5
337 #define	EACCESS_DIALERS	6
338 
339 /* manifest for chkpth flag */
340 #define CK_READ		0
341 #define CK_WRITE	1
342 
343 /*
344  * commands
345  */
346 #define SHELL		"/usr/bin/sh"
347 #define MAIL		"mail"
348 #define UUCICO		"/usr/lib/uucp/uucico"
349 #define UUXQT		"/usr/lib/uucp/uuxqt"
350 #define UUX		"/usr/bin/uux"
351 #define UUCP		"/usr/bin/uucp"
352 
353 
354 /* system status stuff */
355 #define SS_OK			0
356 #define SS_NO_DEVICE		1
357 #define SS_TIME_WRONG		2
358 #define SS_INPROGRESS		3
359 #define SS_CONVERSATION		4
360 #define SS_SEQBAD		5
361 #define SS_LOGIN_FAILED		6
362 #define SS_DIAL_FAILED		7
363 #define SS_BAD_LOG_MCH		8
364 #define SS_LOCKED_DEVICE	9
365 #define SS_ASSERT_ERROR		10
366 #define SS_BADSYSTEM		11
367 #define SS_CANT_ACCESS_DEVICE	12
368 #define SS_DEVICE_FAILED	13	/* used for interface failure */
369 #define SS_WRONG_MCH		14
370 #define SS_CALLBACK		15
371 #define SS_RLOCKED		16
372 #define SS_RUNKNOWN		17
373 #define SS_RLOGIN		18
374 #define SS_UNKNOWN_RESPONSE	19
375 #define SS_STARTUP		20
376 #define SS_CHAT_FAILED		21
377 #define SS_CALLBACK_LOOP	22
378 
379 #define MAXPH	60	/* maximum phone string size */
380 #define	MAXC	BUFSIZ
381 
382 #define	TRUE	1
383 #define	FALSE	0
384 #define NAMEBUF	32
385 
386 /* The call structure is used by ct.c, cu.c, and dial.c.	*/
387 
388 static struct call {
389 	char *speed;		/* transmission baud rate */
390 	char *line;		/* device name for outgoing line */
391 	char *telno;		/* ptr to tel-no digit string */
392 	char *type;		/* type of device to use for call. */
393 };
394 
395 /* structure of an Systems file line */
396 #define F_MAX	50	/* max number of fields in Systems file line */
397 #define F_NAME 0
398 #define F_TIME 1
399 #define F_TYPE 2
400 #define F_CLASS 3	/* an optional prefix and the speed */
401 #define F_PHONE 4
402 #define F_LOGIN 5
403 
404 /* structure of an Devices file line */
405 #define D_TYPE 0
406 #define D_LINE 1
407 #define D_CALLDEV 2
408 #define D_CLASS 3
409 #define D_CALLER 4
410 #define D_ARG 5
411 #define D_MAX	50	/* max number of fields in Devices file line */
412 
413 #define D_ACU 1
414 #define D_DIRECT 2
415 #define D_PROT 4
416 
417 #define GRADES "/etc/uucp/Grades"
418 
419 #define	D_QUEUE	'Z'	/* default queue */
420 
421 /* past here, local changes are not recommended */
422 #define CMDPRE		'C'
423 #define DATAPRE		'D'
424 #define XQTPRE		'X'
425 
426 /*
427  * stuff for command execution
428  */
429 #define X_RQDFILE	'F'
430 #define X_STDIN		'I'
431 #define X_STDOUT	'O'
432 #define X_STDERR	'E'
433 #define X_CMD		'C'
434 #define X_USER		'U'
435 #define X_BRINGBACK	'B'
436 #define X_MAILF		'M'
437 #define X_RETADDR	'R'
438 #define X_COMMENT	'#'
439 #define X_NONZERO	'Z'
440 #define X_SENDNOTHING	'N'
441 #define X_SENDZERO	'n'
442 #define X_JOBID		'J'
443 
444 
445 /* This structure describes call routines */
446 struct caller {
447 	char	*CA_type;
448 	int	(*CA_caller)();
449 };
450 
451 /* structure for a saved C file */
452 
453 static struct cs_struct {
454 	char	file[NAMESIZE];
455 	char	sys[NAMESIZE+5];
456 	char	sgrade[NAMESIZE];
457 	char	grade;
458 	long	jsize;
459 };
460 
461 /* This structure describes dialing routines */
462 struct dialer {
463 	char	*DI_type;
464 	int	(*DI_dialer)();
465 };
466 
467 struct nstat {
468 	pid_t	t_pid;		/* process id				*/
469 	time_t	t_start;	/* start time				*/
470 	time_t	t_scall;	/* start call to system			*/
471 	time_t	t_ecall;	/* end call to system			*/
472 	time_t	t_tacu;		/* acu time				*/
473 	time_t	t_tlog;		/* login time				*/
474 	time_t	t_sftp;		/* start file transfer protocol		*/
475 	time_t	t_sxf;		/* start xfer 				*/
476 	time_t	t_exf;		/* end xfer 				*/
477 	time_t	t_eftp;		/* end file transfer protocol		*/
478 	time_t	t_qtime;	/* time file queued			*/
479 	int	t_ndial;	/* # of dials				*/
480 	int	t_nlogs;	/* # of login trys			*/
481 	struct tms t_tbb;	/* start execution times		*/
482 	struct tms t_txfs;	/* xfer start times			*/
483 	struct tms t_txfe;	/* xfer end times 			*/
484 	struct tms t_tga;	/* garbage execution times		*/
485 };
486 
487 /* This structure describes the values from Limits file */
488 struct limits {
489 	int	totalmax;	/* overall limit */
490 	int	sitemax;	/* limit per site */
491 	char	mode[64];	/* uucico mode */
492 };
493 
494 /* external declarations */
495 
496 EXTERN ssize_t (*Read)(), (*Write)();
497 #if defined(__STDC__)
498 EXTERN int (*Ioctl)(int,int,...);
499 #else
500 EXTERN int (*Ioctl)();
501 #endif
502 EXTERN int Ifn, Ofn;
503 EXTERN int Debug, Verbose;
504 EXTERN uid_t Uid, Euid;		/* user-id and effective-uid */
505 EXTERN long Ulimit;
506 EXTERN mode_t Dev_mode;		/* save device mode here */
507 EXTERN char Wrkdir[];
508 EXTERN long Retrytime;
509 EXTERN char **Env;
510 EXTERN char Uucp[];
511 EXTERN char Pchar;
512 EXTERN struct nstat Nstat;
513 EXTERN char Dc[];			/* line name			*/
514 EXTERN int Seqn;			/* sequence #			*/
515 EXTERN int Role;
516 EXTERN int Sgrades;		/* flag for administrator defined service grades */
517 EXTERN char Grade;
518 EXTERN char Logfile[MAXFULLNAME];
519 EXTERN char Rmtname[MAXFULLNAME];
520 EXTERN char JobGrade[MAXBASENAME+1];
521 EXTERN char User[MAXFULLNAME];
522 EXTERN char Loginuser[NAMESIZE];
523 EXTERN char *Spool;
524 EXTERN char *Pubdir;
525 EXTERN char Myname[];
526 EXTERN char Progname[];
527 EXTERN char RemSpool[];
528 EXTERN char *Bnptr;		/* used when BASENAME macro is expanded */
529 EXTERN char *Shchar;		/* shell meta-charaters */
530 extern char *sys_errlist[];
531 EXTERN int SizeCheck;		/* ulimit check supported flag */
532 EXTERN long RemUlimit;		/* remote ulimit if supported */
533 EXTERN int Restart;		/* checkpoint restart supported flag */
534 
535 EXTERN char Jobid[NAMESIZE];	/* Jobid of current C. file */
536 EXTERN int Uerror;		/* global error code */
537 EXTERN char *UerrorText[];	/* text for error code */
538 
539 /*	Some globals needed for section 2 and section 3 routines */
540 extern char *optarg;	/* for getopt() */
541 extern int optind;	/* for getopt() */
542 
543 #define UERRORTEXT		UerrorText[Uerror]
544 #define UTEXT(x)		UerrorText[x]
545 
546 /* things get kind of tricky beyond this point -- please stay out */
547 
548 #ifdef ATTSV
549 #define index strchr
550 #define rindex strrchr
551 #else /*!ATTSV*/
552 #define strchr index
553 #define strrchr rindex
554 #endif /*ATTSV*/
555 
556 #ifdef BSD4_2
557 #define memcpy(s1,s2,n) bcopy(s2,s1,n)
558 extern void	bcopy();
559 #else
560 #ifndef ATTSVR4
561 #define vfork fork
562 extern char	*memcpy();
563 #endif
564 #endif
565 
566 EXTERN struct stat __s_;
567 #define F_READANY(f)	((fstat((f),&__s_)==0) && ((__s_.st_mode&(0004))!=0) )
568 #define READANY(f)	((stat((f),&__s_)==0) && ((__s_.st_mode&(0004))!=0) )
569 
570 #define WRITEANY(f)	((stat((f),&__s_)==0) && ((__s_.st_mode&(0002))!=0) )
571 #define DIRECTORY(f)	((stat((f),&__s_)==0) && ((__s_.st_mode&(S_IFMT))==S_IFDIR) )
572 #define NOTEMPTY(f)	((stat((f),&__s_)==0) && (__s_.st_size!=0) )
573 
574 /* standard functions used */
575 
576 extern char	*strcat(), *strcpy(), *strncpy(), *strrchr();
577 extern char	*strchr(), *strpbrk();
578 extern char	*index(), *rindex(), *getlogin(), *ttyname(); /*, *malloc();
579 extern char	*calloc(); */
580 extern long	lseek(), atol();
581 extern time_t	time();
582 extern int	pipe(), close(), getopt();
583 extern struct tm	*localtime();
584 extern FILE	*popen();
585 
586 /* uucp functions and subroutine */
587 EXTERN void	(*genbrk)();
588 extern int	iswrk(), gtwvec();			/* anlwrk.c */
589 extern void	findgrade();				/* grades.c */
590 extern void	chremdir(), mkremdir();			/* chremdir.c */
591 extern void	toCorrupt();				/* cpmv.c  */
592 extern int	xmv();					/* cpmv.c  */
593 
594 EXTERN int	getargs();				/* getargs.c */
595 EXTERN void	bsfix();				/* getargs.c */
596 extern char	*_uu_setlocale();			/* getargs.c */
597 extern void	_uu_resetlocale();			/* getargs.c */
598 extern char	*getprm();				/* getprm.c */
599 
600 extern char	*next_token();				/* permission.c */
601 extern char	*nextarg();				/* permission.c */
602 extern int	getuline();				/* permission.c */
603 
604 EXTERN void	logent(), usyslog(), ucloselog();	/* logent.c */
605 extern void	commandlog();				/* logent.c */
606 extern time_t	millitick();				/* logent.c */
607 
608 extern unsigned long	getfilesize();			/* statlog.c */
609 extern void 		putfilesize();			/* statlog.c */
610 
611 EXTERN char	*protoString();				/* permission.c */
612 extern		logFind(), mchFind();			/* permission.c */
613 extern		chkperm(), chkpth();			/* permission.c */
614 extern		cmdOK(), switchRole();			/* permission.c */
615 extern		callBack(), requestOK();		/* permission.c */
616 extern		noSpool();				/* permission.c */
617 extern void	myName();				/* permission.c */
618 
619 extern int	mkdirs();				/* expfile.c */
620 extern int	scanlimit();				/* limits.c */
621 extern void	systat();				/* systat.c */
622 EXTERN int	fd_mklock(), fd_cklock();		/* ulockf.c */
623 EXTERN int	fn_cklock();				/* ulockf.c */
624 EXTERN int	mklock(), cklock(), umlock();		/* ulockf.c */
625 EXTERN void	fd_rmlock(), delock(), rmlock();	/* ulockf.c */
626 extern char	*timeStamp();				/* utility.c */
627 EXTERN void	assert(), errent();			/* utility.c */
628 extern void	uucpname();				/* uucpname.c */
629 extern int	versys();				/* versys.c */
630 extern void	xuuxqt(), xuucico();			/* xqt.c */
631 EXTERN void	cleanup();				/* misc main.c */
632 
633 #define ASSERT(e, s1, s2, i1) if (!(e)) {\
634 	assert(s1, s2, i1, __FILE__, __LINE__);\
635 	cleanup(FAIL);};
636 
637 #ifdef ATTSV
638 void	setbuf();
639 #else /* !ATTSV */
640 int	setbuf(), ftime();
641 char	*mktemp();
642 #endif /*ATTSV*/
643 
644 #ifdef UNAME
645 #include <sys/utsname.h>
646 #endif /* UNAME */
647 
648 #ifndef NOUSTAT
649 #ifdef V7USTAT
650 struct  ustat {
651 	daddr_t	f_tfree;	/* total free */
652 	ino_t	f_tinode;	/* total inodes free */
653 };
654 #else /* !NOUSTAT && !V7USTAT */
655 #ifdef STATFS
656 #include <sys/vfs.h>
657 #else
658 #include <ustat.h>
659 #endif /* STATFS */
660 #endif /* V7USTAT */
661 #endif /* NOUSTAT */
662 
663 #ifdef BSD4_2
664 int	gethostname();
665 #endif /* BSD4_2 */
666 
667 /* messages */
668 EXTERN char *Ct_OPEN;
669 EXTERN char *Ct_WRITE;
670 EXTERN char *Ct_READ;
671 EXTERN char *Ct_CREATE;
672 EXTERN char *Ct_ALLOCATE;
673 EXTERN char *Ct_LOCK;
674 EXTERN char *Ct_STAT;
675 EXTERN char *Ct_CHOWN;
676 EXTERN char *Ct_CHMOD;
677 EXTERN char *Ct_LINK;
678 EXTERN char *Ct_CHDIR;
679 EXTERN char *Ct_UNLINK;
680 EXTERN char *Wr_ROLE;
681 EXTERN char *Ct_CORRUPT;
682 EXTERN char *Ct_FORK;
683 EXTERN char *Ct_CLOSE;
684 EXTERN char *Ct_BADOWN;
685 EXTERN char *Fl_EXISTS;
686 
687 #endif
688