BSD 3 development
[unix-history] / usr / src / cmd / uucp / uusecure.c
#include "uucp.h"
#include "sgtty.h"
#include "uucpdefs.h"
#include "signal.h"
#include ".secret"
#define SEP '\t'
#define MAXC 300
/*******
* this program reads a file whose format is
* field1 SEP count field2
* and runs crypt on field2. Count is either blank (read to newline)
* or SEP followed by a count byte.
*/
main (argc,argv)
char *argv[];
{
char str[10];
char tl[MAXC], tr[MAXC], enc[MAXC];
int count, i, ln, clear;
FILE *fp1, *fp2;
struct sgttyb sb;
extern intrEXIT();
signal(SIGQUIT, intrEXIT);
signal(SIGILL, intrEXIT);
signal(SIGTRAP, intrEXIT);
signal(SIGIOT, intrEXIT);
signal(SIGEMT, intrEXIT);
signal(SIGFPE, intrEXIT);
signal(SIGBUS, intrEXIT);
signal(SIGSEGV, intrEXIT);
signal(SIGSYS, intrEXIT);
if (argc < 3)
exit(100);
fp1 = fopen(argv[1], "r");
fp2 = fopen(argv[2], "w");
if (fp1 == NULL || fp2 == NULL)
exit(120);
gtty(0, &sb);
sb.sg_flags &= ~ECHO;
stty(0, &sb);
printf("Passwd:");
gets(str);
sb.sg_flags |= ECHO;
stty(0, &sb);
strcpy(tl, secret);
hdpw(str);
for (ln = 0;; ln++) {
if (gleft(tl, fp1) == 0) {
fclose(fp1);
fclose(fp2);
exit(0);
}
ASSERT(strlen(tl) < MAXC, "LEFT PART LONG %s", tl);
count = gright(tr, fp1, &clear);
ASSERT(count < MAXC, "RIGHT LONG %s", tr);
encrypt(tr, enc, ln, count);
fprintf(fp2, "%s%c", tl, SEP);
if (clear)
fprintf(fp2, "%c%c", SEP, count);
for(i = 0; i < count; i++)
putc(enc[i], fp2);
putc('\n', fp2);
}
}
/***
* rmlock(p) this is a dummy called in ASSERT
*/
rmlock(p)
char *p;
{
return;
}
cleanup(code)
int code;
{
exit(code);
}
intrEXIT() {_exit(77);}