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