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