亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? smtpserv.c

?? TCPIP協議包
?? C
?? 第 1 頁 / 共 2 頁
字號:
							fprintf(fp,"%s%s\n",
								Hdrs[APPARTO],
								ap->val);
						fputc('\n',fp);
						break;
					}
					fputs(buf,fp);
					rip(buf);
					switch(htype(buf)){
					case TO:
					case CC:
						++tocnt;
						break;
					case RRECEIPT:
						if((cp = getaddress(buf,0))
						   != NULL){
							free(host);
							host = strdup(cp);
						}
						break;
					}
				}
				while((c = fread(buf,1,sizeof(buf),data)) > 0)
					if(fwrite(buf,1,c,fp) != c)
						break;
				if(ferror(fp))
					fail = 1;
				else
					fprintf(fp,"\n");
				/* Leave a blank line between msgs */
				fclose(fp);
				printf("New mail arrived for %s\n",ap->val);
				if(host != NULL){
					rewind(data); /* Send return receipt */
					mdaemon(data,host,NULL,0);
					free(host);
				}
			} else 
				fail = 1;
			(void) rmlock(Mailspool,ap->val);
			if (fail)
				break;
			smtplog("deliver: To: %s From: %s",ap->val,from);
		}
	}
	return fail;
}

/* Return Date/Time in Arpanet format in passed string */
char *
ptime(t)
long *t;
{
	/* Print out the time and date field as
	 *		"DAY day MONTH year hh:mm:ss ZONE"
	 */
	register struct tm *ltm;
	static char tz[4];
	static char str[40];
	char *p, *getenv();
	/* Read the system time */
	ltm = localtime(t);

	if (*tz == '\0')
		if ((p = getenv("TZ")) == NULL)
			strcpy(tz,"UTC");
		else
			strncpy(tz,p,3);

	/* rfc 822 format */
	sprintf(str,"%s, %.2d %s %02d %02d:%02d:%02d %.3s\n",
		Days[ltm->tm_wday],
		ltm->tm_mday,
		Months[ltm->tm_mon],
		ltm->tm_year,
		ltm->tm_hour,
		ltm->tm_min,
		ltm->tm_sec,
		tz);
	return(str);
}

long 
get_msgid()
{
	char sfilename[LINELEN];
	char s[20];
	register long sequence = 0;
	FILE *sfile;

	sprintf(sfilename,"%s/sequence.seq",Mailqdir);
	sfile = fopen(sfilename,READ_TEXT);

	/* if sequence file exists, get the value, otherwise set it */
	if (sfile != NULL) {
		(void) fgets(s,sizeof(s),sfile);
		sequence = atol(s);
	/* Keep it in range of and 8 digit number to use for dos name prefix. */
		if (sequence < 0L || sequence > 99999999L )
			sequence = 0;
		fclose(sfile);
	}

	/* increment sequence number, and write to sequence file */
	sfile = fopen(sfilename,WRITE_TEXT);
	fprintf(sfile,"%ld",++sequence);
	fclose(sfile);
	return sequence;
}

#ifdef	MSDOS
/* Illegal characters in a DOS filename */
static char baddoschars[] = "\"[]:|<>+=;,";
#endif

/* test if mail address is valid */
int
validate_address(s)
char *s;
{
	char *cp;
	int32 addr;

	/* if address has @ in it the check dest address */
	if ((cp = strrchr(s,'@')) != NULL) {
		cp++;
		/* 1st check if its our hostname
		* if not then check the hosts file and see
		* if we can resolve ther address to a know site
		* or one of our aliases
		*/
		if (strcmp(cp,Hostname) != 0) {
			if ((addr = mailroute(cp)) == 0
				&& (Smtpmode & QUEUE) == 0)
				return BADADDR;
			if (ismyaddr(addr) == NULL)
				return DOMAIN;
		}
		
		/* on a local address remove the host name part */
		*--cp = '\0';
	}

	/* if using an external router leave address alone */
	if ((Smtpmode & QUEUE) != 0)
		return LOCAL;

	/* check for the user%host hack */
	if ((cp = strrchr(s,'%')) != NULL) {
		*cp = '@';
		cp++;
		/* reroute based on host name following the % seperator */
		if (mailroute(cp) == 0)
			return BADADDR;
		else
			return DOMAIN;
	}

#ifdef MSDOS	/* dos file name checks */
	/* Check for characters illegal in MS-DOS file names */
	for(cp = baddoschars;*cp != '\0';cp++){
		if(strchr(s,*cp) != NULL)
			return BADADDR;	
	}
#endif
	return LOCAL;
}

/* place a mail job in the outbound queue */
int
queuejob(dfile,host,to,from)
FILE *dfile;
char *host;
struct list *to;
char *from;
{
	FILE *fp;
	struct list *ap;
	char tmpstring[50], prefix[9], buf[LINELEN];
	register int cnt;

	sprintf(prefix,"%ld",get_msgid());
	mlock(Mailqdir,prefix);
	sprintf(tmpstring,"%s/%s.txt",Mailqdir,prefix);
	if((fp = fopen(tmpstring,WRITE_TEXT)) == NULL) {
		(void) rmlock(Mailqdir,prefix);
		return 1;
	}
	while((cnt = fread(buf, 1, LINELEN, dfile)) > 0)
		if(fwrite(buf, 1, cnt, fp) != cnt)
			break;
	if(ferror(fp)){
		fclose(fp);
		(void) rmlock(Mailqdir,prefix);
		return 1;
	}
	fclose(fp);
	sprintf(tmpstring,"%s/%s.wrk",Mailqdir,prefix);
	if((fp = fopen(tmpstring,WRITE_TEXT)) == NULL) {
		(void) rmlock(Mailqdir,prefix);
		return 1;
	}
	fprintf(fp,"%s\n%s\n",host,from);
	for(ap = to; ap != NULL; ap = ap->next) {
		fprintf(fp,"%s\n",ap->val);
		smtplog("queue job %s To: %s From: %s",prefix,ap->val,from);
	}
	fclose(fp);
	(void) rmlock(Mailqdir,prefix);
	return 0;
}

/* Deliver mail to the appropriate mail boxes */
static int
router_queue(data,from,to)
FILE *data;
char *from;
struct list *to;
{
	int c;
	register struct list *ap;
	FILE *fp;
	char tmpstring[50];
	char prefix[9];

	sprintf(prefix,"%ld",get_msgid());
	mlock(Routeqdir,prefix);
	sprintf(tmpstring,"%s/%s.txt",Routeqdir,prefix);
	if((fp = fopen(tmpstring,WRITE_TEXT)) == NULL) {
		(void) rmlock(Routeqdir,prefix);
		return 1;
	}
	rewind(data);
	while((c = getc(data)) != EOF)
		if(putc(c,fp) == EOF)
			break;
	if(ferror(fp)){
		fclose(fp);
		(void) rmlock(Routeqdir,prefix);
		return 1;
	}
	fclose(fp);
	sprintf(tmpstring,"%s/%s.wrk",Routeqdir,prefix);
	if((fp = fopen(tmpstring,WRITE_TEXT)) == NULL) {
		(void) rmlock(Routeqdir,prefix);
		return 1;
	}
	fprintf(fp,"From: %s\n",from);
	for(ap = to;ap != NULL;ap = ap->next) {
		fprintf(fp,"To: %s\n",ap->val);
	}
	fclose(fp);
	(void) rmlock(Routeqdir,prefix);
	smtplog("rqueue job %s From: %s",prefix,from);
	return 0;
}

/* add an element to the front of the list pointed to by head 
** return NULL if out of memory.
*/
struct list *
addlist(head,val,type)
struct list **head;
char *val;
int type;
{
	register struct list *tp;

	tp = (struct list *)callocw(1,sizeof(struct list));

	tp->next = NULL;

	/* allocate storage for the char string */
	tp->val = strdup(val);
	tp->type = type;

	/* add entry to front of existing list */
	if (*head == NULL)
		*head = tp;
	else {
		tp->next = *head;
		*head = tp;
	}
	return tp;

}

#define SKIPWORD(X) while(*X && *X!=' ' && *X!='\t' && *X!='\n' && *X!= ',') X++;
#define SKIPSPACE(X) while(*X ==' ' || *X =='\t' || *X =='\n' || *X == ',') X++;

/* check for and alias and expand alias into a address list */
static struct list *
expandalias(head, user)
struct list **head;
char *user;
{
	FILE *fp;
	register char *s,*p;
	struct rr *rrp, *rrlp;
	int inalias = 0;
	struct list *tp;
	char buf[LINELEN];
	
	/* no alias file found */
	if ((fp = fopen(Alias, READ_TEXT)) == NULL) {
		/* Try MB, MG or MR domain name records */
		rrlp = rrp = resolve_mailb(user);
		while(rrp != NULL){
			if(rrp->rdlength > 0){
				/* remove the trailing dot */
				rrp->rdata.name[rrp->rdlength-1] = '\0';
				/* replace first dot with @ if there is no @ */
				if(strchr(rrp->rdata.name,'@') == NULL
				   && (p = strchr(rrp->rdata.name,'.')) !=
				   NULL)
					*p = '@';
				if(strchr(rrp->rdata.name,'@') != NULL)
					tp = addlist(head,rrp->rdata.name,
						     DOMAIN);
				else
					tp = addlist(head,rrp->rdata.name,
						     LOCAL);
				++inalias;
			}
			rrp = rrp->next;
		}
		free_rr(rrlp);
		if(inalias)
			return tp;
		else
			return addlist(head, user, LOCAL);
	}

	while (fgets(buf,LINELEN,fp) != NULL) {
		p = buf;
		if ( *p == '#' || *p == '\0')
			continue;
		rip(p);

		/* if not in an matching entry skip continuation lines */
		if (!inalias && isspace(*p))
			continue;

		/* when processing an active alias check for a continuation */
		if (inalias) {
			if (!isspace(*p)) 
				break;	/* done */
		} else {
			s = p;
			SKIPWORD(p);
			*p++ = '\0';	/* end the alias name */
			if (strcmp(s,user) != 0)
				continue;	/* no match go on */
			inalias = 1;
		}

		/* process the recipients on the alias line */
		SKIPSPACE(p);
		while(*p != '\0' && *p != '#') {
			s = p;
			SKIPWORD(p);
			if (*p != '\0')
				*p++ = '\0';

			/* find hostname */
			if (strchr(s,'@') != NULL)
				tp = addlist(head,s,DOMAIN);
			else
				tp = addlist(head,s,LOCAL);
			SKIPSPACE(p);
		}
	}
	(void) fclose(fp);

	if (inalias)	/* found and processed and alias. */
		return tp;

	/* no alias found treat as a local address */
	return addlist(head, user, LOCAL);
}

static void
smtplog(char *fmt, ...)
{
	va_list ap;
	char *cp;
	long t;
	FILE *fp;

	if ((fp = fopen(Maillog,APPEND_TEXT)) == NULL)
		return;
	time(&t);
	cp = ctime(&t);
	rip(cp);
	fprintf(fp,"%s ",cp);
	va_start(ap,fmt);
	vfprintf(fp,fmt,ap);
	va_end(ap);
	fprintf(fp,"\n");
	fclose(fp);
}
/* send mail to a single user. Can be called from the ax24 mailbox or
** from the return mail function in the smtp client 
*/
static int
mailuser(data,from,to)
FILE *data;
char *from;
char *to;
{

		int address_type, ret;
		struct list *tolist = NULL;

		/* check if address is ok */
		if ((address_type = validate_address(to)) == BADADDR) {
			return 1;
		}
		/* if a local address check for an alias */
		if (address_type == LOCAL)
			expandalias(&tolist, to);
		else
			/* a remote address is added to the list */
			addlist(&tolist, to, address_type);
		ret = mailit(data,from,tolist);
		del_list(tolist);
		return ret;

}

/* Mailer daemon return mail mechanism */
int
mdaemon(data,to,lp,bounce)
FILE *data;		/* pointer to rewound data file */
char *to;		/* Overridden by Errors-To: line if bounce is true */
struct list *lp;	/* error log for failed mail */
int bounce;		/* True for failed mail, otherwise return receipt */
{
	time_t t;
	FILE *tfile;
	char buf[LINELEN], *cp, *newto = NULL;
	int cnt;
	if(to == NULL || (to != NULL && *to == '\0') || bounce){
		while(fgets(buf,sizeof(buf),data) != NULL) {
			if(buf[0] == '\n')
				break;
			/* Look for Errors-To: */
			if(htype(buf) == ERRORSTO &&
			   (cp = getaddress(buf,0)) != NULL){
				free(newto);
				newto = strdup(cp);
				break;
			}
		}
		if(newto == NULL && ((to != NULL && *to == '\0') ||
		   to == NULL))
			return -1;
		rewind(data);
	}
	if((tfile = tmpfile()) == NULL)
		return -1;
	time(&t);
	fprintf(tfile,"%s%s",Hdrs[DATE],ptime(&t));
	fprintf(tfile,"%s<%ld@%s>\n",Hdrs[MSGID],get_msgid(),Hostname);
	fprintf(tfile,"%sMAILER-DAEMON@%s (Mail Delivery Subsystem)\n",
		Hdrs[FROM],Hostname);
	fprintf(tfile,"%s%s\n",Hdrs[TO],newto != NULL ? newto : to);
	fprintf(tfile,"%s%s\n\n",Hdrs[SUBJECT],
		bounce ? "Failed mail" : "Return receipt");
	if(bounce) {
		fprintf(tfile,"  ===== transcript follows =====\n\n");
		for (; lp != NULL; lp = lp->next)
			fprintf(tfile,"%s\n",lp->val);
		fprintf(tfile,"\n");
	}
	fprintf(tfile,"  ===== %s follows ====\n",
		bounce ? "Unsent message" : "Message header");

	while(fgets(buf,sizeof(buf),data) != NULL){
		if(buf[0] == '\n')
			break;
		fputs(buf,tfile);
	}
	if(bounce){
		fputc('\n',tfile);
		while((cnt = fread(buf,1,sizeof(buf),data)) > 0)
			fwrite(buf,1,cnt,tfile);
	}
	fseek(tfile,0L,0);
	/* A null From<> so no looping replys to MAIL-DAEMONS */
	(void) mailuser(tfile,"",newto != NULL ? newto : to);
	fclose(tfile);
	free(newto);
	return 0;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品免费丝袜| 国内精品免费**视频| 狠狠v欧美v日韩v亚洲ⅴ| 99re这里只有精品视频首页| 日韩免费观看高清完整版在线观看| 欧美国产日本视频| 国产综合色在线| 欧美一级夜夜爽| 亚洲国产毛片aaaaa无费看| 欧美日韩国产三级| 亚洲视频免费看| 成人丝袜高跟foot| 久久亚洲免费视频| 麻豆成人91精品二区三区| 欧美午夜影院一区| 一区二区三区四区视频精品免费| 国产99久久精品| 久久一夜天堂av一区二区三区| 日韩影视精彩在线| 欧美日本免费一区二区三区| 一区二区免费视频| 日本丶国产丶欧美色综合| 国产精品女人毛片| 成人理论电影网| 中文字幕的久久| voyeur盗摄精品| 中文字幕一区二区三区蜜月| 成人av网站在线| 国产精品护士白丝一区av| kk眼镜猥琐国模调教系列一区二区| 久久婷婷成人综合色| 国产乱码一区二区三区| www久久精品| 国产精品香蕉一区二区三区| 久久久午夜精品| 不卡的电影网站| 一区二区三区在线免费| 欧美色倩网站大全免费| 亚洲mv在线观看| 日韩一区二区三区观看| 精油按摩中文字幕久久| 久久久久久久综合色一本| 丰满白嫩尤物一区二区| 最新日韩在线视频| 欧美在线观看18| 人人精品人人爱| 精品国产123| 成人午夜av在线| 一区二区三区在线播| 欧美精品在线一区二区三区| 精品一区二区在线观看| 一区二区中文字幕在线| 欧美片在线播放| 国产精品白丝jk黑袜喷水| 亚洲乱码精品一二三四区日韩在线| 91久久精品国产91性色tv| 日韩av成人高清| 国产日韩欧美综合一区| 欧洲另类一二三四区| 久久精品国产**网站演员| 国产精品色哟哟| 欧美日韩亚洲综合在线| 国产精品综合久久| 亚洲成人在线免费| 国产欧美日本一区视频| 欧美日韩在线综合| 国产精品系列在线观看| 亚洲国产精品综合小说图片区| 精品盗摄一区二区三区| 色综合天天综合网国产成人综合天| 美国十次综合导航| 亚洲人快播电影网| 国产亚洲欧美日韩日本| 欧美日韩国产高清一区二区三区| 国产乱国产乱300精品| 亚洲不卡在线观看| 18欧美乱大交hd1984| 精品sm捆绑视频| 欧美三级视频在线播放| 高清日韩电视剧大全免费| 午夜精品国产更新| 亚洲黄网站在线观看| 国产日产欧美一区| 欧美精品 国产精品| 91片黄在线观看| 国产激情一区二区三区| 日本v片在线高清不卡在线观看| 国产精品的网站| 久久综合九色欧美综合狠狠| 欧美日韩成人高清| 在线看不卡av| 91免费版在线看| 国产成人一区在线| 韩国精品免费视频| 麻豆精品视频在线| 婷婷国产v国产偷v亚洲高清| 伊人夜夜躁av伊人久久| 欧美激情一区二区三区蜜桃视频| 精品国产免费一区二区三区四区 | 精品国产一区二区三区久久久蜜月| 在线日韩av片| 91看片淫黄大片一级在线观看| 国产精品123| 国产黑丝在线一区二区三区| 久久精品国产精品亚洲红杏| 青椒成人免费视频| 日本不卡不码高清免费观看| 日韩**一区毛片| 奇米精品一区二区三区在线观看| 亚洲国产日日夜夜| 亚洲成av人片在线观看| 日日夜夜精品免费视频| 五月天婷婷综合| 免费不卡在线观看| 老汉av免费一区二区三区| 琪琪久久久久日韩精品| 久久国产精品第一页| 韩国午夜理伦三级不卡影院| 激情综合色播五月| 国产很黄免费观看久久| 从欧美一区二区三区| 99久久国产综合精品女不卡| 91久久一区二区| 欧美日韩久久久久久| 宅男噜噜噜66一区二区66| 日韩欧美二区三区| 国产女主播视频一区二区| 国产精品国产三级国产aⅴ原创 | 精品一区二区久久久| 国产精品2024| 97久久久精品综合88久久| 欧美综合欧美视频| 精品日韩99亚洲| 国产精品欧美久久久久一区二区| 亚洲精品高清在线| 六月丁香婷婷色狠狠久久| 国产91精品露脸国语对白| 在线视频国内自拍亚洲视频| 日韩色视频在线观看| 国产精品毛片久久久久久| 亚洲精品国产精品乱码不99| 免费在线一区观看| 成人av小说网| 欧美人伦禁忌dvd放荡欲情| 久久久99久久| 亚洲一区在线视频观看| 久久97超碰国产精品超碰| 不卡电影一区二区三区| 欧美一区二区三区不卡| 国产精品美女视频| 麻豆国产欧美日韩综合精品二区| 国产成人日日夜夜| 欧美精品丝袜中出| 最新国产精品久久精品| 喷水一区二区三区| 91免费版在线看| 久久久久久影视| 首页亚洲欧美制服丝腿| 成人黄色小视频| 欧美xxxxxxxx| 亚洲成人免费影院| 成人高清伦理免费影院在线观看| 91麻豆精品国产综合久久久久久| 国产精品高潮呻吟久久| 美女任你摸久久| 欧美久久久久免费| 亚洲丝袜美腿综合| 国产精品综合久久| 日韩免费福利电影在线观看| 亚洲精品免费在线| 成人av电影观看| 国产视频一区二区在线| 日韩国产精品久久| 欧美综合一区二区| 一区二区在线看| 北条麻妃国产九九精品视频| 精品国产青草久久久久福利| 无吗不卡中文字幕| 色域天天综合网| 日韩一区在线看| 成人国产视频在线观看| 国产日韩精品一区二区三区| 久久狠狠亚洲综合| 日韩色视频在线观看| 日本少妇一区二区| 欧美精品一二三| 日本伊人精品一区二区三区观看方式| 色欧美片视频在线观看| 亚洲天堂网中文字| 91在线免费视频观看| 亚洲欧洲日产国产综合网| 99热精品一区二区| 亚洲人吸女人奶水| 欧洲国内综合视频| 夜夜嗨av一区二区三区网页| 91丨porny丨最新| 一区二区视频免费在线观看| 91麻豆精东视频| 亚洲综合网站在线观看| 欧美人成免费网站|