xref: /original-bsd/old/berknet/header.c (revision 0a83ae40)
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 
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 }
123