⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 xsend.c

📁 unix v7是最后一个广泛发布的研究型UNIX版本
💻 C
字号:
#include "xmail.h"#include "sys/types.h"#include "pwd.h"#include "sys/stat.h"#include "sys/dir.h"extern int errno;struct stat stbuf;int uid, destuid;char *myname, *dest, *keyfile[128], line[128];struct direct dbuf;char *maildir = "/usr/spool/secretmail/";FILE *kf, *mf, *df;MINT *a[42], *cd[6][128];MINT *msg;char buf[256], eof;int dbg;main(argc, argv) char **argv;{	int i, nmax, len;	char *p;	long now;	if(argc != 2)		xfatal("mail to exactly one person");	uid = getuid();	p =getlogin();	if(p == NULL)		p = getpwuid(uid)->pw_name;	myname = malloc(strlen(p)+1);	strcpy(myname, p);	dest = argv[1];	strcpy(keyfile, maildir);	strcat(keyfile, dest);	strcat(keyfile, ".key");	if(stat(keyfile, &stbuf) <0)		xfatal("addressee not enrolled");	destuid = getpwnam(dest)->pw_uid;	if(destuid != stbuf.st_uid)		fprintf(stderr, "warning: addressee's key file may be subverted\n");	errno = 0;	kf = fopen(keyfile, "r");	if(kf == NULL)		xfatal("addressee's key weird");	df = fopen(maildir, "r");	if(df == NULL)	{	perror(maildir);		exit(1);	}	strcpy(line, dest);	strcat(line, ".%d");	nmax = -1;	for(; !feof(df);)	{	fread(&dbuf, sizeof(dbuf), 1, df);		if(dbuf.d_ino == 0) continue;		if(sscanf(dbuf.d_name, line, &i) != 1)			continue;		if(i>nmax) nmax = i;	}	nmax ++;	for(i=0; i<10; i++)	{	sprintf(line, "%s%s.%d", maildir, dest, nmax+i);		if(creat(line, 0666) >= 0) break;	}	if(i==10) xfatal("cannot create mail file");	mf = fopen(line, "w");	init();	time(&now);	sprintf(buf, "From %s %s", myname, ctime(&now) );#ifdef DBG	dbg = 1;#endif	run();	sprintf(buf, "mail %s <%snotice", dest, maildir);	system(buf);	exit(0);}mkcd(){	int i, j, k, n;	for(i=0; i<42; i++)		nin(a[i], kf);	fclose(kf);	for(i=0; i<6; i++)	for(j=0; j<128; j++)		for(k=j, n=0; k>0 && n<7; n++, k>>=1)			if(k&01) madd(cd[i][j], a[7*i+n], cd[i][j]);}encipher(s) char s[6];{	int i;	msub(msg, msg, msg);	for(i=0; i<6; i++)		madd(msg, cd[i][s[i]&0177], msg);}init(){	int i, j;	msg = itom(0);	for(i=0; i<42; i++)		a[i] = itom(0);	for(i=0; i<6; i++)	for(j=0; j<128; j++)		cd[i][j] = itom(0);	mkcd();}run(){	char *p;	int i, len, eof = 0;	for(;;)	{	len = strlen(buf);		for(i=0; i<len/6; i++)		{			encipher(buf+6*i);			nout(msg, mf);		}		p = buf;		for(i *= 6; i<len; i++)			*p++ = buf[i];		if(eof) return;		fgets(p, sizeof(buf)-6, stdin);		if(strcmp(p, ".\n") == 0 || feof(stdin))		{	for(i=0; i<6; i++) *p++ = ' ';			*p = 0;			eof = 1;		}	}}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -