static char sccsid
[] = "@(#)header.c 4.1 (Berkeley) %G%";
static char *header_sid
= "@(#)header.c 1.3";
these routines provide a way of transferring the information
in the "header" structure between machines.
Programs calling these routines either read or write
their information into the header structure.
These procedures format the info in a way that is acceptable.
Called by net.c, netdaemon.c, and netq.c.
protocol that is sent (in ASCII):
code, remote mach, local mach, version stamp (2), remote login name,
password, -i, -o, -r files,
local login name, terminal, flag, utmp tty login time,
cc jobno(variable parameter list), current time,
command '\n' real command '\n'
3) use ascii length instead of 4 bytes
4) encrypt the login name, command, and part of data as well
register struct header
*phd
;
/* cflag is initially 'a'. Add the flags as needed. */
if(phd
->hd_fnonotify
)cflag
+= F_NONOTIFY
;
if(phd
->hd_fquiet
)cflag
+= F_QUIET
;
"%c :%c :%c :%c :%c :%s :%s :%s :%s :%s :%s :%s :%c :%lo :%s%s :%ld :",
phd
->hd_code
,phd
->hd_mchto
,phd
->hd_mchfrom
,
phd
->hd_vmajor
+'a',phd
->hd_vminor
+'a',phd
->hd_snto
,
phd
->hd_spasswd
,phd
->hd_sinfile
,phd
->hd_soutfile
,
phd
->hd_snfrom
,phd
->hd_sttyname
,cflag
,phd
->hd_lttytime
,
phd
->hd_ijobno
,genparmlist(phd
),phd
->hd_ltimesent
-TIMEBASE
);
fputs(phd
->hd_scmdact
,fd
);
fputs(phd
->hd_scmdvirt
,fd
);
/* not used, but a good idea */
sprintf(phd
->hd_addrfrom
,"%c:%s",phd
->hd_mchfrom
,phd
->hd_snfrom
);
sprintf(phd
->hd_addrto
, "%c:%s",phd
->hd_mchto
, phd
->hd_snto
);
print out debugging values of a header structure
register struct header
*phd
;
printf("To %s From %s quiet=%c nonotify=%c\n",
phd
->hd_addrto
, phd
->hd_addrfrom
,
chfromf(phd
->hd_fquiet
), chfromf(phd
->hd_fnonotify
));
/* don't print out for security reasons
printf("Password %s\n",phd->hd_spasswd);
printf("Code '%c' Version (%d,%d) Infile '%s'\n",
phd
->hd_code
, phd
->hd_vmajor
,phd
->hd_vminor
,
printf("Outfile '%s' Respfile '%s' TTYName '%s'\n",
phd
->hd_soutfile
,phd
->hd_srespfile
, phd
->hd_sttyname
);
printf("Jobno %s TimeSent %s", phd
->hd_ijobno
,
ctime(&phd
->hd_ltimesent
));
if(phd
->hd_lttytime
!= 0)
printf("TTYTime %s", ctime(&phd
->hd_lttytime
));
printf("Virtual Command \"%s\"\n", phd
->hd_scmdvirt
);
printf("Actual Command \"%s\"\n", phd
->hd_scmdact
);
generate a variable parameter list
(name value, name value, ..., name value)
where names are unquoted single words and values
are unquoted if a single alphanumeric word, and are
surrounded by {} otherwise. \ quotes { and }.
the values are escape-processed, e.g. \n becomes 012.
this function returns such a list.
Returns the null parm list if nothing to give, i.e. "()"
Should also default so single keywords can have on/off
states, and so do not require a value.
Things this variable protocol should specify:
COMPRESS use colin's compression
ACCTPAIR handle acct pairs
MESSAGEID unique number identifying this request.
FILENAME when omitted by netcp, will use FILENAME ext.
REPLYTO the person the response should be sent to
MACHINE2 a second machine (e.g. 3way netcp)
LOGIN2 a second login name
static char *genparmlist(phd
)
register struct header
*phd
;
static char returnstr
[PARMLIST
];