xref: /original-bsd/old/berknet/defs.h (revision a8bbbc1e)
1 /*	@(#)defs.h	4.1	(Berkeley)	09/12/82	*/
2 
3 /* sccs id variable */
4 static char *defs_h_sid = "@(#)defs.h	1.5";
5 /*
6    get all the machine dependencies, standard I/O, and the
7    configuration definitions (LOCAL machine, etc.)
8 */
9 
10 # include <stdio.h>
11 
12 # define min(a,b) (a > b ? b : a)
13 # define getremote(S) (remtable[(S)-'a'])
14 
15 /* adjustable parameters, may differ per machine */
16 
17 # define MAXBREAD 	3
18 # define ATIME 		20
19 # define DBV 		0
20 # define BLOCKSIZE 	500
21 # define SIZE 		100
22 # define INITFILE	"/usr/net/initfile"
23 # define NSEND 		20
24 # define SAMPL 		3600		/* 1 hour = 3600 */
25 # define BIGSAMPL 	64800L		/* 18 hours = 64800L */
26 # define LINKS		9
27 # define SUPERUSER 	0
28 /* the size of routing tables, etc. */
29 # define MAXINX 	26
30 
31 /* adjustable parameters, must be same on all machines */
32 
33 /* MAXFILELARGE is the file size limit.  If changed on one machine
34    but not the others, files bigger than the common minimum will
35    be flushed with no guarantee of err msgs. Thus if one link
36    is to be of a different limit than the others, make sure the users
37    know this.
38    MAXDAYFILE is the largest file that will be transmitted across the
39    network during the day on CC machines.
40 */
41 # define MAXFILELARGE	500000L
42 # define MAXDAYFILE	200000L
43 /* the version of the protocol the network speaks */
44 # define VMAJOR		1
45 # define VMINOR 	0
46 /* the time constant added to all time stamps sent around the net */
47 # define TIMEBASE 	282098011L
48 /* the number of mail forwarding hops allowed before looping is detected */
49 # define MAXHOPS	30
50 /* the buffer size used in prot.c */
51 # define MAXNBUF 1024
52 
53 /* non-adjustable constants */
54 
55 /* PARMLIST = max size of variable length parm list used in protocol */
56 # define PARMLIST 2000
57 /* FNS = max length of file name string */
58 # define FNS 80
59 /* NS = length of UNIX user name*/
60 # define NS 10
61 /* returned by prot.c */
62 # define BROKENREAD -2
63 # define WRITEFAIL -3
64 # define INCR 040
65 # define MINSIZE 50
66 # define TRUE 1
67 # define FALSE 0
68 
69 /* flags for packet type (pcode) */
70 # define REQUEST 02
71 # define ACK 04
72 # define PURGE 020
73 
74 /* flags for mach type */
75 # define M_CC 2
76 # define M_INGRES 4
77 # define M_OTHER 6
78 
79 /* codes for cflag, powers of two, max (8 bits - 'a'), others may be added */
80 
81 /* F_QUIET means send back only error messages and output of programs,
82    don't send back confimation with no data */
83 /* F_NONOTIFY means don't send back anything, ever,
84    even if there are errors (used for responses, etc.) */
85 
86 # define F_QUIET 	02
87 # define F_NONOTIFY 	04
88 
89 
90 /*
91    at this point bring in the locally-dependent definitions.
92    this way the above parms may be altered.
93 */
94 /* strings for the netsend and netrecieve logins */
95 # define RESP	"hello hello this is a network"
96 # define RESPSIZE 29
97 # define QUERY	"This login for network use only"
98 # define QSIZE 31
99 # define WHOAREYOU "who are you?"
100 # define WHOSIZE 12
101 
102 # include "mach.h"
103 # include "Paths.h"
104 /* bring in the exit codes */
105 # include <sysexits.h>
106 
107 /* structure declarations */
108 struct packet {
109 	short seqno;
110 	char pcode;
111 	short len;
112 	char chksum;
113 	char data[1];
114 	};
115 
116 struct packet *packptr;	/* just used to get the sizeof to work */
117 # define ACKLENGTH (sizeof *packptr - 1)
118 /* these are the lengths to be read and writ if using high-speed block dev. */
119 /* must be bigger than ACKLENGTH */
120 # define SENDLEN 256
121 
122 /* the chksum is only on a per-perpacket level,
123    which is not enough.
124    There should be a checksum on the entire file as well.
125    */
126 struct dumpstruc {
127 	long longtime, elaptot;				/* in secs */
128 	long nbytesent,nbytercv, bytetot;		/* in bytes */
129 	long lastndays;					/* in days */
130 	long braw, brawtot;				/* raw bytes*/
131 	int nretrans, nabnormal, nloop;
132 	int ncksum,npacksent,npackrcv;
133 	int nnetcp,nnetlpr,nsmail,nnetmail,nresp,nnet;
134 	int npass, nsend, nsendfail;
135 	};
136 
137 struct bstruct {
138 	char *bname;
139 	char bmach;
140 	};
141 /* functions */
142 
143 char *calloc(), *crypt(), *ctime(), *getenv(), *longname();
144 char *comptime(), *getpass(), *handlesp();
145 FILE *fopen(), *fdopen(), *popen(), *mailopen();
146 struct passwd *getpwnam(), *getpwuid(), *PwdCurrent(), *getpwent();
147 struct packet *getpacket();
148 long atol();
149 
150 /* constant variables */
151 extern char *sys_errlist[];
152 char netcmd[],senddir[], resfile[], Bsh[];
153 char machtype[], remtable[];
154 char local;
155 
156 /* variables which are modified */
157 extern errno;
158 int debugflg;
159 char remote;		/* must be global, remote is not initialized*/
160 
161 /* various structure types */
162 
163 /* used to pass around info about user */
164 struct userinfo {
165 	char 	login[NS];
166 	char 	mpasswd[20];
167 	int 	muid;		/* combines uid and gid for FUID */
168 	int 	mgid;		/* unused for FUID */
169 	char	jobno[10];	/* CC crn, length = 0 if null and not */
170 				/*      CC machine (else MAGICCRN ) */
171 	char 	dir[FNS];	/* login directory */
172 	char 	loginshell[FNS];/* login shell */
173 	char 	localname[NS];
174 	char 	defcmd[FNS];
175 	char 	force;		/* if true, always prompt for login and pass */
176 	char 	nonotify;	/* if true, don't send anything back */
177 	char 	nowrite;	/* if true, mail rather than write to user */
178 	char 	quiet;		/* if true, only send a response back if rc !=0
179 				   or if there is stdout or stderr */
180 	} ;
181 
182 /* unique message - id sent with requests */
183 struct messageid {
184 	char 	msg_mch;	/* machine it is on */
185 	int 	msg_pid;	/* process id */
186 	long	msg_ltime;	/* current time */
187 };
188 
189 /* header which describes information transferred across the link */
190 struct header {
191 	char	hd_mchto;		/* 1-letter code for dest. machine */
192 	char	hd_mchfrom;		/* 1-letter code for source machine */
193 	char	hd_snto[NS];		/* login name on mchto mach */
194 	char	hd_snfrom[NS];		/* login name on mchfrom mach */
195 	char    hd_spasswd[20];		/* password for snto */
196 	char	hd_code;		/* request code in protocol */
197 	char	hd_fnonotify;		/* if true, don't send anything back */
198 	char	hd_fquiet;		/* if true, only send back if error */
199 	char	hd_vmajor;		/* major version number */
200 	char	hd_vminor;		/* minor version number */
201 	char 	hd_sttyname[20];	/* tty user is on,e.g. /dev/tty0 */
202 	char 	hd_scmdact[BUFSIZ];	/* the actual cmd the net will exec */
203 	char 	hd_scmdvirt[BUFSIZ];	/* the cmd the user thinks he is exec */
204 	long 	hd_lttytime;		/* the time for tty login in utmp */
205 	long 	hd_ltimesent;		/* the time the request was sent */
206 	char	hd_srespfile[FNS];	/* response file name, if sepecified */
207 	char	hd_sinfile[FNS];	/* remote input file, if sepecified */
208 	char	hd_soutfile[FNS];	/* remote output file, if sepecified */
209 	/* sent but not computed (always MAGICCRN or 0 length) across the net */
210 	char	hd_ijobno[10];		/* CC job number, if applicable */
211 	/* computed, not transferred across the net */
212 	char	hd_addrto[FNS];		/* address of dest. acct */
213 	char	hd_addrfrom[FNS];	/* address of source acct */
214 	/* not now being sent over, will be someday, don't use now */
215 	char	hd_sencpasswd[20];	/* encrypted passwd with nbs 2way enc */
216 	int 	hd_ifilemode;		/* file mode for netcp */
217 	char 	hd_sfndefault[FNS];	/* default filename ext, for netcp */
218 	int	hd_uidfrom;		/* userid on the from machine */
219 	int 	hd_gidfrom;		/* groupid on the from machine */
220 	struct messageid hd_mesgid;	/* message id unique to this request */
221 	char	hd_fcompressed;		/* if true, data is compressed */
222 	char	hd_facctpair;		/* if true, is an accnt pair w/o pwds */
223 	char	hd_addrreplyto[FNS];	/* reply to this address */
224 };
225 
226 /*
227 	this structure defines the various parameters the daemon and testing
228    	programs use -- most of the info comes from netrc.c
229 	NOTE-- this structure is initialized in netrc.c
230 	don't add members without changing that structure
231 */
232 struct daemonparms {
233 	int 	dp_inspeed;	/* for stty, 7=300, 9=1200, 13=9600 baud */
234 	int 	dp_outspeed;	/* for stty, 7=300, 9=1200, 13=9600 baud */
235 	int 	dp_maxbread;	/* number of read time outs allowed */
236 	int 	dp_atime;	/* time to set alarm for timeout */
237 	int 	dp_oatime;	/* default time alarm for timeout */
238 	char 	dp_device[20];	/* name of the network file, e.g. /dev/net-A*/
239 	int 	dp_datasize;	/* length of data part of packet */
240 	int	dp_trynetl;	/* try to use netl, -l disables */
241 	int 	dp_onlyuid;	/* if non-zero, only send this uid's things */
242 	int	dp_linefd;	/* daemon should read and write from this */
243 	char	dp_usehispeed;	/* if true, use high-speed link */
244 	char	dp_hispeedlink[20];/* device name of high speed link */
245 	short	dp_sndorcv;	/* if <0, only send, if > 0, only recieve */
246 	int	dp_linedis;	/* line disc we use, normal is 0 */
247 	int 	dp_pipesim;	/* simulate with pipes */
248 	FILE	*dp_rdfile;	/* if pipesim then should read from this */
249 	int	dp_pwritefd;	/* if pipesim then should write from this */
250 	int	dp_use8bit;	/* use 8 bit protocol */
251 	short	dp_timeout;	/* timeout deamon (dialup) if > 0 */
252 };
253 
254 /* macro implementation of harg due to bugs in Onyx C compiler */
255 # define harg(str) {\
256 	if (argv[0][2]) \
257 		strcpy(str, argv[0]+2); \
258 	else \
259 		{ strcpy(str, argv[1]); argc--; argv++; } \
260 	}
261