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