1: /* @(#)defs.h 4.1 (Berkeley) 9/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 {
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: }