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