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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? tftpd.c

?? linux tftp源代碼
?? C
?? 第 1 頁 / 共 2 頁
字號:
/* * Copyright (c) 1983 Regents of the University of California. * All rights reserved. * * Redistribution and use in source and binary forms are permitted * provided that the above copyright notice and this paragraph are * duplicated in all such forms and that any documentation, * advertising materials, and other materials related to such * distribution and use acknowledge that the software was developed * by the University of California, Berkeley.  The name of the * University may not be used to endorse or promote products derived * from this software without specific prior written permission. * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. */#ifndef lintchar copyright[] ="@(#) Copyright (c) 1983 Regents of the University of California.\n\ All rights reserved.\n";#endif /* not lint */#ifndef lintstatic char sccsid[] = "@(#)tftpd.c	5.8 (Berkeley) 6/18/88";#endif /* not lint *//* * Trivial file transfer protocol server. * * This version includes many modifications by Jim Guyton <guyton@rand-unix> */#include <sys/types.h>#include <sys/socket.h>#include <sys/ioctl.h>#include <sys/wait.h>#include <sys/stat.h>#include <netinet/in.h>#include "tftp.h"#include <signal.h>#include <stdio.h>#include <errno.h>#include <ctype.h>#include <netdb.h>#include <setjmp.h>#include <syslog.h>#ifdef EMBED#include <unistd.h>#endif#define	TIMEOUT		5extern	int errno;struct	sockaddr_in mysin = { AF_INET };int	peer;int	rexmtval = TIMEOUT;int	maxtimeout = 5*TIMEOUT;#define	PKTSIZE	SEGSIZE+4char	buf[PKTSIZE];char	ackbuf[PKTSIZE];struct	sockaddr_in from;socklen_t	fromlen;#ifdef EMBEDvoid openlog(const char *ident, int option, int facility) { return; }//syslog removed because of already defined as fprintf in syslog.h//void syslog(int priority, const char *format, ...) { return; }/*{ FILE *fp; fp = fopen("/dev/ttyS0", "rw"); fprintf(fp, format); }*/#ifndef fork#define	fork	vfork#endif#endifmain(){	//unsigned char *tp;	register int n;	int on = 1;	short	th_opcode;#ifdef NAOSI_ABS32	naosi_tftpd();#endif	openlog("tftpd", LOG_PID, LOG_DAEMON);	ioctl(0, FIONBIO, &on);/*	if (ioctl(0, FIONBIO, &on) < 0) {		syslog(LOG_ERR, "ioctl(FIONBIO): %m\n");		exit(1);	}*/	fromlen = sizeof (from);	n = recvfrom(0, buf, sizeof (buf), 0,    (struct sockaddr *)&from, &fromlen);	//printf(" retrun n = %d\n",n);	if (n < 0) {	//	syslog(LOG_ERR, "recvfrom: %m\n");	//	exit(1);		_exit(1);	}	/*	 * Now that we have read the message out of the UDP	 * socket, we fork and exit.  Thus, inetd will go back	 * to listening to the tftp port, and the next request	 * to come in will start up a new instance of tftpd.	 *	 * We do this so that inetd can run tftpd in "wait" mode.	 * The problem with tftpd running in "nowait" mode is that	 * inetd may get one or more successful "selects" on the	 * tftp port before we do our receive, so more than one	 * instance of tftpd may be started up.  Worse, if tftpd	 * break before doing the above "recvfrom", inetd would	 * spawn endless instances, clogging the system.	 */#if 0#if 0315 * 0	{		int pid;		int i, j;		for (i = 1; i < 20; i++) {			//pid = fork();			pid = vfork(); //fork not availble 					    if (pid < 0) {				sleep(i);				/*				 * flush out to most recently sent request.				 *				 * This may drop some request, but those				 * will be resent by the clients when				 * they timeout.  The positive effect of				 * this flush is to (try to) prevent more				 * than one tftpd being started up to service				 * a single request from a single client.				 */				j = sizeof from;				i = recvfrom(0, buf, sizeof (buf), 0,				    (struct sockaddr *)&from, &j);				if (i > 0) {					n = i;					fromlen = j;				}		    } else {				break;		    }		}		if (pid < 0) {			//syslog(LOG_ERR, "fork: %m\n");			//exit(1);			_exit(1);		} else if (pid != 0) {			//exit(0);			_exit(0);		}	}#else /* 0315 */	{		int pid;		pid = vfork();		if(pid < 0){			printf("tftpd - fork error\n");			_exit(1);		} else if (pid != 0){			_exit(0);		}	}#endif /* 0315 */#endif	from.sin_family = AF_INET;//	alarm(0);//	close(0);//	close(1);	peer = socket(AF_INET, SOCK_DGRAM, 0);	if (peer < 0) {		//syslog(LOG_ERR, "socket: %m\n");		//exit(1);		_exit(1);	}	if (bind(peer, (struct sockaddr *)&mysin, sizeof (mysin)) < 0) {		//syslog(LOG_ERR, "bind: %m\n");		//exit(1);		_exit(1);	} 	if (connect(peer, ( struct sockaddr *)&from, sizeof(from)) < 0) {		//syslog(LOG_ERR, "connect: %m\n");		//exit(1);		_exit(1);	}	//tp = (unsigned char *)buf;	th_opcode = (buf[0] << 8 | buf[1]);	//th_opcode = ntohs(th_opcode);//printf(" th_opcode %d ========\n",th_opcode);	if (th_opcode == RRQ || th_opcode == WRQ){//printf(" buf %p ========\n",buf);		tftp(buf, n);	}	_exit(0);}int	validate_access();int	sendfile(), recvfile();struct formats {//	char	*f_mode;	char	f_mode[16];	int	(*f_validate)();	int	(*f_send)();	int	(*f_recv)();	int	f_convert;} formats[] = {	{ "netascii",	validate_access,	sendfile,	recvfile, 1 },	{ "octet",	validate_access,	sendfile,	recvfile, 0 },#ifdef notdef	{ "mail",	validate_user,		sendmail,	recvmail, 1 },#endif#if 0326 & 0	{ 0 }#endif};/* * Handle initial connection protocol. */tftp(tp, size)	unsigned char *tp;	int size;{	char *cp, *filename, *mode;	int i, ecode;	struct formats *pf;	short th_opcode;//printf(" tp %p ========\n",tp);	tp = buf;	mode = NULL;	filename = cp = &tp[2];//printf(" filename %s ========\n",filename);again:	while (cp < (char *)tp + size) {		if (*cp == '\0')			break;		cp++;	}//printf(" *********** 1\n");	if (*cp != '\0') {printf("EBADOP 1\n");		nak(EBADOP);		_exit(1);	}//printf(" *********** 2\n");//printf("mode = %p\n",mode);	if (mode == NULL) {//printf(" *********** 3\n");		mode = ++cp;		goto again;	}//printf(" *********** 3\n");	for (cp = mode; *cp; cp++){		if (isupper(*cp))			*cp = tolower(*cp);	}//printf(" *********** 4\n");#if 0326	for (pf = formats, i = sizeof(formats)/sizeof(formats[0]);; pf++){		if (--i < 0){printf("EBADOP 2\n");			nak(EBADOP);			_exit(1);		}		if (strcmp(pf->f_mode, mode) == 0){			break;		}	}#else	for (pf = formats; pf->f_mode; pf++){		if (strcmp(pf->f_mode, mode) == 0)			break;	}//printf(" *********** 5\n");	if (pf->f_mode == 0) {printf("EBADOP 3\n");		nak(EBADOP);		_exit(1);	}#endif//printf(" *********** 6\n");	th_opcode = (tp[0] << 8 | tp[1]);	ecode = validate_access(filename, th_opcode);//printf(" **** ecode = %x\n",ecode);//	ecode = (*pf->f_validate)(filename, tp->th_opcode);	if (ecode) {//printf(" ===== tftp 3\n");		nak(ecode);		_exit(1);	}//printf(" ****  tp->th_opcode %d\n",th_opcode);	if (th_opcode == WRQ)		recvfile(pf);//		(*pf->f_recv)(pf);	else		sendfile(pf);//		(*pf->f_send)(pf);printf(" ------ ftfpd END -------------\n");	_exit(0);}FILE *file;/* * Validate file access.  Since we * have no uid or gid, for now require * file to exist and be publicly * readable/writable. * Note also, full path name must be * given as we have no login directory. */validate_access(filename, mode)	char *filename;	int mode;{	struct stat stbuf;	int	fd;printf(" validate_access  filename = %s\n",filename);	if (*filename != '/')		return (EACCESS);	if (stat(filename, &stbuf) < 0){printf(" ------- validate_access errno %d\n",errno);		return (errno == ENOENT ? ENOTFOUND : EACCESS);	}//printf(" ------- validate_access 1\n");	if (mode == RRQ) {		if ((stbuf.st_mode&(S_IREAD >> 6)) == 0)			return (EACCESS);//printf(" ------- validate_access 2\n");	} else {		if ((stbuf.st_mode&(S_IWRITE >> 6)) == 0)			return (EACCESS);//printf(" ------- validate_access 3\n");	}//printf("mode = %d ============= \n",mode);	fd = open(filename, mode == RRQ ? 0 : 1);	if (fd < 0)		return (errno + 100);

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久久777精品电影网影网| 欧美精品乱码久久久久久 | 亚洲人成电影网站色mp4| 波多野结衣中文字幕一区二区三区| 久久精品日产第一区二区三区高清版 | 91福利小视频| 亚洲成人黄色影院| 日韩精品一区二区三区在线播放 | 99久久精品国产导航| 尤物视频一区二区| 7777精品伊人久久久大香线蕉经典版下载 | 色域天天综合网| 亚洲成人激情av| 欧美大片在线观看一区二区| 激情av综合网| 亚洲同性gay激情无套| 欧美婷婷六月丁香综合色| 免费在线欧美视频| 欧美国产激情二区三区| 欧美视频三区在线播放| 精品一区二区三区免费观看| 国产精品国产a| 欧美一区二区三区播放老司机| 国产高清久久久| 亚洲在线中文字幕| 欧美大片拔萝卜| 99精品视频在线观看| 日本亚洲三级在线| 中文欧美字幕免费| 91麻豆精品国产自产在线观看一区 | 午夜一区二区三区视频| 久久久午夜精品理论片中文字幕| 日本电影亚洲天堂一区| 精品一区二区三区免费视频| 一区二区三区视频在线看| 精品成人在线观看| 在线观看视频一区二区| 国产大陆a不卡| 香蕉久久夜色精品国产使用方法 | 一区二区三区在线观看欧美| 欧美成人性福生活免费看| 色丁香久综合在线久综合在线观看| 另类小说色综合网站| 亚洲一区二区三区四区在线免费观看| 欧美成人r级一区二区三区| 日本高清不卡视频| 成人福利视频网站| 精品一区二区综合| 日本亚洲免费观看| 一区二区三区精品视频| 中文字幕中文乱码欧美一区二区 | 日本女人一区二区三区| 亚洲精品乱码久久久久久黑人| 久久久国产午夜精品| 欧美成人三级在线| 91精品国产综合久久福利 | 91精品国产aⅴ一区二区| 色先锋aa成人| 波多野结衣欧美| 国产精品一区免费在线观看| 久久综合综合久久综合| 日本v片在线高清不卡在线观看| 亚洲人成亚洲人成在线观看图片| 亚洲国产精品精华液2区45| 国产亚洲精品aa| 国产肉丝袜一区二区| 久久精品亚洲乱码伦伦中文| 久久一日本道色综合| 精品欧美一区二区久久| 日韩欧美国产一区二区在线播放 | 午夜精品久久久久久久| 一个色综合网站| 亚洲色图欧美激情| **性色生活片久久毛片| 国产精品毛片久久久久久| 国产亚洲欧美日韩日本| 国产丝袜美腿一区二区三区| 久久久久久久久免费| 久久久www成人免费毛片麻豆 | 亚洲线精品一区二区三区| 一区二区三区波多野结衣在线观看 | 欧美日韩国产中文| 在线不卡的av| 精品国产乱码久久久久久图片 | 日本三级亚洲精品| 久久www免费人成看片高清| 国产一区美女在线| 国产成人精品一区二| 91免费看片在线观看| 91福利在线观看| 欧美一区二区私人影院日本| 精品国免费一区二区三区| 亚洲精品一区二区三区在线观看| 中文字幕免费观看一区| 亚洲日本va午夜在线电影| 亚洲综合在线免费观看| 日韩电影在线免费观看| 国产suv一区二区三区88区| 成人中文字幕电影| 欧美亚洲综合色| 日韩精品影音先锋| 亚洲天堂2014| 麻豆成人免费电影| 成人av片在线观看| 欧美日韩性生活| 日本一区二区三区久久久久久久久不 | 天天综合色天天综合色h| 奇米一区二区三区| av一区二区三区四区| 欧美日韩一二区| 欧美精品一区二区三区高清aⅴ| 国产精品人人做人人爽人人添| 一区二区视频免费在线观看| 日韩不卡免费视频| 成人va在线观看| 91精品一区二区三区久久久久久| 久久久99精品免费观看| 亚洲一级在线观看| 粉嫩绯色av一区二区在线观看| 在线一区二区三区| 国产午夜一区二区三区| 亚洲国产精品久久久男人的天堂| 国产一区二区三区最好精华液| 欧洲色大大久久| 国产精品久久久久影视| 久久成人免费网| 欧亚一区二区三区| 国产精品麻豆视频| 麻豆成人91精品二区三区| 91麻豆免费观看| 久久久久国色av免费看影院| 天堂精品中文字幕在线| 91日韩一区二区三区| 久久午夜羞羞影院免费观看| 亚洲一区二区高清| 94-欧美-setu| 久久精品一区蜜桃臀影院| 日本视频中文字幕一区二区三区| 91国内精品野花午夜精品| 国产欧美视频一区二区| 久久99精品国产| 欧美一区二区三区系列电影| 亚洲男女一区二区三区| 成人黄色综合网站| 久久综合久久99| 久久国产三级精品| 日韩欧美另类在线| 日韩av不卡在线观看| 欧美色国产精品| 亚洲综合免费观看高清完整版在线 | 亚洲一二三区在线观看| 国产不卡在线播放| 久久这里都是精品| 欧美a级一区二区| 欧美一区永久视频免费观看| 五月天中文字幕一区二区| 欧美色综合影院| 亚洲一区二区成人在线观看| 91女神在线视频| 亚洲乱码精品一二三四区日韩在线 | 曰韩精品一区二区| 99久久精品情趣| 亚洲啪啪综合av一区二区三区| av一区二区三区黑人| 1024亚洲合集| 色诱亚洲精品久久久久久| 亚洲精品国产视频| 欧美日韩色一区| 日韩精品一二区| 日韩欧美成人一区二区| 国内久久精品视频| 久久久.com| 97se狠狠狠综合亚洲狠狠| 亚洲综合色噜噜狠狠| 欧美久久久久久久久| 美女国产一区二区| 久久综合中文字幕| 成人sese在线| 亚洲精品免费电影| 91精品国产综合久久国产大片| 麻豆免费看一区二区三区| 精品乱码亚洲一区二区不卡| 精品无人码麻豆乱码1区2区 | 国产欧美一区二区三区鸳鸯浴| 国产98色在线|日韩| 最好看的中文字幕久久| 欧美亚洲动漫制服丝袜| 视频一区视频二区在线观看| 欧美α欧美αv大片| 粉嫩13p一区二区三区| 亚洲美女淫视频| 在线不卡的av| 成人一区二区三区视频在线观看 | 亚洲综合一区二区| 日韩视频免费观看高清在线视频| 久久国产剧场电影| 亚洲免费毛片网站| 91精品国产欧美一区二区18| 国产成人亚洲精品青草天美| 亚洲色图欧洲色图婷婷|