Commit | Line | Data |
---|---|---|
68f029a2 KM |
1 | static char sccsid[] = "@(#)header.c 4.1 (Berkeley) %G%"; |
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 | ||
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 | */ | |
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 | */ | |
116 | static char *genparmlist(phd) | |
117 | register struct header *phd; | |
118 | { | |
119 | static char returnstr[PARMLIST]; | |
120 | strcpy(returnstr,"()"); | |
121 | return(returnstr); | |
122 | } |