1 static char sccsid[] = "@(#)header.c 4.1 (Berkeley) 09/12/82";
2
3 /* sccs id variable */
4 static char *header_sid = "@(#)header.c 1.3";
5 /*
6 header.c
7
8 these routines provide a way of transferring the information
9 in the "header" structure between machines.
10 Programs calling these routines either read or write
11 their information into the header structure.
12 These procedures format the info in a way that is acceptable.
13 Called by net.c, netdaemon.c, and netq.c.
14 */
15 /*
16 protocol that is sent (in ASCII):
17 code, remote mach, local mach, version stamp (2), remote login name,
18 password, -i, -o, -r files,
19 local login name, terminal, flag, utmp tty login time,
20 cc jobno(variable parameter list), current time,
21 command '\n' real command '\n'
22 any data
23
24 changes:
25 1) remove header
26 3) use ascii length instead of 4 bytes
27 4) encrypt the login name, command, and part of data as well
28 */
29 # include "defs.h"
30
31
writehdfd(phd,fd)32 writehdfd(phd,fd)
33 register struct header *phd;
34 FILE *fd;
35 {
36 char *genparmlist();
37 char cflag = 'a';
38
39 /* cflag is initially 'a'. Add the flags as needed. */
40 if(phd->hd_fnonotify)cflag += F_NONOTIFY;
41 if(phd->hd_fquiet)cflag += F_QUIET;
42
43 fprintf(fd,
44 "%c :%c :%c :%c :%c :%s :%s :%s :%s :%s :%s :%s :%c :%lo :%s%s :%ld :",
45 phd->hd_code,phd->hd_mchto,phd->hd_mchfrom,
46 phd->hd_vmajor+'a',phd->hd_vminor+'a',phd->hd_snto,
47 phd->hd_spasswd,phd->hd_sinfile,phd->hd_soutfile,
48 phd->hd_srespfile,
49 phd->hd_snfrom,phd->hd_sttyname,cflag,phd->hd_lttytime,
50 phd->hd_ijobno,genparmlist(phd),phd->hd_ltimesent-TIMEBASE);
51 fputs(phd->hd_scmdact,fd);
52 putc('\n',fd);
53 fputs(phd->hd_scmdvirt,fd);
54 putc('\n',fd);
55 /* not used, but a good idea */
56 sprintf(phd->hd_addrfrom,"%c:%s",phd->hd_mchfrom,phd->hd_snfrom);
57 sprintf(phd->hd_addrto, "%c:%s",phd->hd_mchto, phd->hd_snto);
58 }
59 /*
60 print out debugging values of a header structure
61 */
printhd(phd)62 printhd(phd)
63 register struct header *phd;
64 {
65 if(debugflg){
66 printf("To %s From %s quiet=%c nonotify=%c\n",
67 phd->hd_addrto, phd->hd_addrfrom,
68 chfromf(phd->hd_fquiet), chfromf(phd->hd_fnonotify));
69 /* don't print out for security reasons
70 printf("Password %s\n",phd->hd_spasswd);
71 */
72 printf("Code '%c' Version (%d,%d) Infile '%s'\n",
73 phd->hd_code, phd->hd_vmajor,phd->hd_vminor,
74 phd->hd_sinfile);
75 printf("Outfile '%s' Respfile '%s' TTYName '%s'\n",
76 phd->hd_soutfile,phd->hd_srespfile, phd->hd_sttyname);
77 printf("Jobno %s TimeSent %s", phd->hd_ijobno,
78 ctime(&phd->hd_ltimesent));
79 if(phd->hd_lttytime != 0)
80 printf("TTYTime %s", ctime(&phd->hd_lttytime));
81 printf("Virtual Command \"%s\"\n", phd->hd_scmdvirt);
82 printf("Actual Command \"%s\"\n", phd->hd_scmdact);
83 }
84 }
85 /*
86 generate a variable parameter list
87 the format is:
88 (name value, name value, ..., name value)
89 where names are unquoted single words and values
90 are unquoted if a single alphanumeric word, and are
91 surrounded by {} otherwise. \ quotes { and }.
92 the values are escape-processed, e.g. \n becomes 012.
93 this function returns such a list.
94 Returns the null parm list if nothing to give, i.e. "()"
95
96 Should also default so single keywords can have on/off
97 states, and so do not require a value.
98
99 Things this variable protocol should specify:
100 EPASSWD encrypted passwd
101 FILEMODE file mode
102 FROMUID from users' uid
103 FROMGID from users' gid
104 COMPRESS use colin's compression
105 ACCTPAIR handle acct pairs
106 MESSAGEID unique number identifying this request.
107 FILENAME when omitted by netcp, will use FILENAME ext.
108 REPLYTO the person the response should be sent to
109
110 --- possibly ---
111 MACHINE2 a second machine (e.g. 3way netcp)
112 LOGIN2 a second login name
113 PASSWD2 a second passwd
114
115 */
genparmlist(phd)116 static char *genparmlist(phd)
117 register struct header *phd;
118 {
119 static char returnstr[PARMLIST];
120 strcpy(returnstr,"()");
121 return(returnstr);
122 }
123