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

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

?? mmstatd.c

?? mmstatd包含一個 C庫和服務器
?? C
?? 第 1 頁 / 共 3 頁
字號:
    if (key[KEY_SIZE - 1] == '\0') {	/* Verify if this consists of: '*' and/or '?' pattern, absolute	 * key name or full report request	 */	if (*key == '\0') {	    /* Full statistics report request */	    for (dnod = (struct data_node *)data_list->top; dnod && pipesend;		    dnod = (struct data_node *)dnod->nod.next)		write(fd, &dnod->entry, sizeof(MMSTATENT));	    ddirection = 0;	} else {	    for (ptr = key; *ptr; ptr++)		if (*ptr == '*' || *ptr == '?') break;	    if (*ptr) {		/* Key pattern matching report request */		for (dnod = (struct data_node *)data_list->top;			dnod && pipesend;			dnod = (struct data_node *)dnod->nod.next) {		    if (log_match(dnod->entry.key, key))			write(fd, &dnod->entry, sizeof(MMSTATENT));		}		ddirection = 0;	    } else {		/* Absolute key report request */		hash = mm_strhash64(key);		if (kdirection) {		    for (knod = (struct key_node *)key_list->top; knod;			    knod = (struct key_node *)knod->nod.next)			if (knod->hash == hash) break;		} else {		    for (knod = (struct key_node *)key_list->bottom; knod;			    knod = (struct key_node *)knod->nod.prev)			if (knod->hash == hash) break;		}		kdirection = !kdirection;		if (knod && pipesend) {		    dnod = knod->data;		    write(fd, &dnod->entry, sizeof(MMSTATENT));		}	    }	}    }}static voidrotatestats(char *pattern, char *prefix){    struct key_node *knod;    char key[KEY_SIZE + 1];    /* Sanity check */    if (pattern[KEY_SIZE - 1] == '\0' && prefix[KEY_SIZE - 1] == '\0') {	for (knod = (struct key_node *)key_list->top; knod;		knod = (struct key_node *)knod->nod.next) {	    if (knod->data->entry.persistant &&		    log_match(knod->data->entry.key, pattern)) {		snprintf(key, KEY_SIZE - 1, "%s%s", prefix,			knod->data->entry.key);		mm_strncpy(knod->data->entry.key, key, KEY_SIZE - 1);		knod->hash = mm_strhash64(knod->data->entry.key);	    }	}    }}intmain(int argc, char **argv){    char *conf_file = "/etc/mmstatd.conf", *tmp;    int ret = 0, ngids;    uid_t uid;    gid_t *gids;    LONG facility;    CRES cres;    CARG *cargp;    CARG cargs[] = {	{CAT_STR, 1, 31, CAS_UNTOUCHED, "USER", CONF.USER},	{CAT_STR, 1, 255, CAS_UNTOUCHED, "GROUPS", CONF.GROUPS},	{CAT_STR, 1, 31, CAS_UNTOUCHED, "LOG_FACILITY", CONF.LOG_FACILITY},	{CAT_STR, 1, 255, CAS_UNTOUCHED, "PID_FILE", CONF.PID_FILE},	{CAT_STR, 1, 255, CAS_UNTOUCHED, "LOCK_FILE", CONF.LOCK_FILE},	{CAT_STR, 1, 255, CAS_UNTOUCHED, "LOG_SOCKET", CONF.LOG_SOCKET},	{CAT_STR, 1, 255, CAS_UNTOUCHED, "STAT_SOCKET", CONF.STAT_SOCKET},	{CAT_STR, 1, 127, CAS_UNTOUCHED, "ENV_DIR", CONF.ENV_DIR},	{CAT_STR, 1, 31, CAS_UNTOUCHED, "LOG_GROUP", CONF.LOG_GROUP},	{CAT_STR, 1, 31, CAS_UNTOUCHED, "STAT_GROUP", CONF.STAT_GROUP},	{CAT_VAL, 1, 99999999, CAS_UNTOUCHED, "SYNC_INTERVAL",	    &CONF.SYNC_INTERVAL},	{CAT_VAL, 0, 99999999, CAS_UNTOUCHED, "SYNC_BYTES",	    &CONF.SYNC_BYTES},	{CAT_VAL, 1, 99999999, CAS_UNTOUCHED, "MAX_LOGSIZE",	    &CONF.MAX_LOGSIZE},	{CAT_VAL, 1, 9999, CAS_UNTOUCHED, "STATS_RATE", &CONF.STATS_RATE},	{CAT_VAL, 1, 9999, CAS_UNTOUCHED, "STATS_TIME", &CONF.STATS_TIME},	{CAT_END, 0, 0, 0, NULL, NULL}    };    CMAP cmap[] = {	{"LOG_AUTH", LOG_AUTH},	{"LOG_AUTHPRIV", LOG_AUTHPRIV},	{"LOG_CRON", LOG_CRON},	{"LOG_DAEMON", LOG_DAEMON},	{"LOG_FTP", LOG_FTP},	{"LOG_LPR", LOG_LPR},	{"LOG_MAIL", LOG_MAIL},	{"LOG_NEWS", LOG_NEWS},	{"LOG_SYSLOG", LOG_SYSLOG},	{"LOG_USER", LOG_USER},	{"LOG_UUCP", LOG_UUCP},	{NULL, 0}    };    /* Set defaults */    mm_strcpy(CONF.USER, "mmstatd");    mm_strcpy(CONF.GROUPS, "mmstat staff");    mm_strcpy(CONF.LOG_FACILITY, "LOG_AUTHPRIV");    mm_strcpy(CONF.PID_FILE, "/var/mmstatd/mmstatd.pid");    mm_strcpy(CONF.LOCK_FILE, "/var/mmstatd/mmstatd.lock");    mm_strcpy(CONF.LOG_SOCKET, "/var/mmstatd/mmstatd_log.sock");    mm_strcpy(CONF.STAT_SOCKET, "/var/mmstatd/mmstatd_stat.sock");    mm_strcpy(CONF.ENV_DIR, "/var/mmstatd");    mm_strcpy(CONF.LOG_GROUP, "mmstat");    mm_strcpy(CONF.STAT_GROUP, "staff");    CONF.SYNC_INTERVAL = 1800;    CONF.SYNC_BYTES = 4096;    CONF.MAX_LOGSIZE = 1048576;    CONF.STATS_RATE = 5;    CONF.STATS_TIME = 10;    /* Read config file */    if ((tmp = getenv("MMSTATCONF")))	conf_file = tmp;    if (argc == 2)	conf_file = argv[1];    if (!mmreadcfg(conf_file, cargs, &cres)) {	/* Error parsing configuration file, report which */	printf("\nError parsing /etc/mmstatd.conf\n");	printf("Error  : %s\n", mmreadcfg_strerr(cres.CR_Err));	if (*(cres.CR_Data)) printf("Data   : %s\n", cres.CR_Data);	if (cres.CR_Number != -1) {	    cargp = &cargs[cres.CR_Number];	    printf("Keyword: %s\n", cargp->CA_KW);	    printf("Minimum: %ld\n", cargp->CA_Min);	    printf("Maximum: %ld\n", cargp->CA_Max);	}	printf("\n");	exit(-1);    }    if (!mmmapstring(cmap, CONF.LOG_FACILITY, &facility)) {	printf("\nUnknown syslog facility %s\n\n", CONF.LOG_FACILITY);	exit(-1);    }    openlog(DAEMON_NAME, LOG_PID | LOG_NDELAY, facility);#ifndef NODROPPRIVS    if ((getuid())) {	printf("\nOnly the super user may start this daemon\n\n");	syslog(LOG_NOTICE, "* Only superuser can start me");	exit(-1);    }#else /* NODROPPRIVS */    if ((getuid()) == 0) {	printf("\nCompiled with NODROPPRIVS, refusing to run as uid 0\n\n");	syslog(LOG_NOTICE, "* NODROPPRIVS, refusing to run as uid 0");	exit(-1);    }#endif /* !NODROPPRIVS */    if (!checklock(CONF.LOCK_FILE)) {	printf("\nmmstatd already running\n\n");	exit(-1);    }    /* Post parsing */    if ((uid = mmgetuid(CONF.USER)) == -1) {	printf("\nUnknown USER '%s'\n\n", CONF.USER);	exit(-1);    }    if (!(gids = mmgetgidarray(&ngids, CONF.GROUPS))) {	printf("\nOne or more of following GROUPS unknown: '%s'\n\n",		CONF.GROUPS);	exit(-1);    }    if ((CONF.log_group = mmgetgid(CONF.LOG_GROUP)) == -1) {	printf("\nUnknown LOG_GROUP '%s'\n\n", CONF.LOG_GROUP);	exit(-1);    }    if ((CONF.stat_group = mmgetgid(CONF.STAT_GROUP)) == -1) {	printf("\nUnknown STAT_GROUP '%s'\n\n", CONF.STAT_GROUP);	exit(-1);    }    CONF.max_logsize = (off_t)CONF.MAX_LOGSIZE;    /* Initialization */    librarian_pid = logger_pid = -1;    key_list = data_list = NULL;    pipefds[0] = pipefds[1] = -1;    printf("\r\n+++ %s (%s)\r\n\r\n", DAEMON_NAME, DAEMON_VERSION);    /* Drop root privileges */    if (mmdropprivs(uid, gids, ngids)) {	mmfreegidarray(gids);	/* Launch the librarian process */	if ((librarian_pid = spawn_process(librarian_init, NULL, TRUE))		== -1) {	    syslog(LOG_NOTICE, "* main() - spawn_process(librarian)");	    ret = -1;	}    } else {	ret = -1;	syslog(LOG_NOTICE, "* main() - mmdropprivs()");    }    closelog();    return (ret);}static intlibrarian_init(void *args){    int fd;    syslog(LOG_NOTICE, "Librarian process started");    /* Write PID file */    if ((fd = open(CONF.PID_FILE, O_CREAT | O_TRUNC | O_WRONLY, 0600)) != -1) {	char str[16];	snprintf(str, 15, "%d", getpid());	write(fd, str, mm_strlen(str));	close(fd);    } else	syslog(LOG_NOTICE, "* librarian_init() - Can't write pid file");    /* Perform recovery */    recover_db();    /* Prepare our notification pipe */    if (!(pipe(pipefds))) {	/* Start the logger process */	if ((logger_pid = spawn_process(logger_init, NULL, FALSE)) != -1) {	    char filename[256];	    long lognum;	    off_t logpos;	    int ufd, lfd, max;	    close(pipefds[1]);	    pipefds[1] = -1;	    if ((ufd = unix_init(CONF.STAT_SOCKET, CONF.stat_group, 0660, 16,			    TRUE, TRUE)) != -1) {		syslog(LOG_NOTICE, "Loading database");		/* Because we recovered, lognum and logpos will be 0 */		load_db(&lognum, &logpos);		/* Make sure that we open for reading the file that the logger		 * opened for writing		 */		snprintf(filename, 255, "%s/00000000.log", CONF.ENV_DIR);		max = 10;		while ((lfd = open(filename, O_RDONLY)) == -1 && max) {		    sleep(1);		    max--;		}		if (lfd != -1) {		    /* Finally start main loop */		    librarian_main(pipefds[0], ufd, lfd, &lognum, &logpos);		    close(lfd);		} else		    syslog(LOG_NOTICE, "* librarian_init() - open(%s)",			    filename);		sync_db(lognum, logpos, FALSE);		free_db();		close(ufd);		unlink(CONF.STAT_SOCKET);	    } else		syslog(LOG_NOTICE, "* librarian_init() - unix_init(%s)",			CONF.STAT_SOCKET);	} else	    syslog(LOG_NOTICE,		    "* librarian_init() - spawn_process(librarian)");	close(pipefds[0]);	pipefds[0] = -1;    } else	syslog(LOG_NOTICE, "* librarian_init() - pipe()");    unlink(CONF.PID_FILE);    /* Kill logger daemon */    if (logger_pid != -1) {	int status;	if (!kill(logger_pid, SIGTERM)) waitpid(logger_pid, &status, 0);    }    syslog(LOG_NOTICE, "Exiting librarian");    return (0);}/* Here consists of the main librarian server process. It's function consists * in following the logs created by the logger process in an ASYNC manner, * and process them, managing the database. It also performs total SYNC of the * database to disk at fixed intervals, cleaning up obsolete recovery logs. */static voidlibrarian_main(int pfd, int ufd, int lfd, long *lognum, off_t *logpos){    time_t otim, ttim;    long secs, cnt;    int len;    struct log_entry entries[MAX_TRANSACT + 1];    struct pollfd fds[] = {	{pfd, POLLIN, 0},	{ufd, POLLIN, 0},    };    ttim = time(NULL);    secs = cnt = 0;    while (run) {	otim = time(NULL);	if (poll(fds, 2, 60000) > 0) {	    /* Process more log entries if any */	    if (fds[0].revents & POLLIN) {		if ((len = readlogentries(pfd, entries, MAX_TRANSACT, &lfd,				lognum, logpos)))		    processlogentries(entries, len, TRUE);	    }	    /* Verify if we obtain a report request connection */	    if (fds[1].revents & POLLIN) {		socklen_t addrl;		struct sockaddr addr;		int sfd;		time_t t;		char key[KEY_SIZE + 1], key2[KEY_SIZE + 1], c;		/* Accept connection and send status report */		addrl = sizeof(struct sockaddr);		pipesend = TRUE;		if ((sfd = accept(ufd, &addr, &addrl)) != -1) {		    struct pollfd fds2[] = {			{sfd, POLLIN, 0}		    };		    /* Make sure to drop connection immediately if rate		     * was exceeded		     */		    if ((t = time(NULL)) > ttim + CONF.STATS_TIME) {			ttim = t;			cnt = 0;		    }		    if (cnt < CONF.STATS_RATE) {			cnt++;			if (pipesend) write(sfd, "+", 1);			if (poll(fds2, 1, 250) == 1) {			    if (fds2[0].revents & POLLIN) {				if (read(sfd, &c, 1) == 1) {				    if (c == 's') {					if (read(sfd, key, KEY_SIZE) ==						KEY_SIZE) {					    shutdown(sfd, SHUT_RD);					    if (pipesend) writestats(sfd, key);					}				    } else if (c == 'r') {					if (read(sfd, key, KEY_SIZE) ==						KEY_SIZE &&						read(sfd, key2, KEY_SIZE) ==						KEY_SIZE) {					    rotatestats(key, key2);					    /* Force immediate db sync */					    secs += CONF.SYNC_INTERVAL;					}				    } else					syslog(LOG_NOTICE,					"librarian_main() - invalid req");				} else				    syslog(LOG_NOTICE,					   "librarian_main() - libreq-read()");			    }			}		    } else if (pipesend) write(sfd, "-", 1);		    close(sfd);		}	    }	}	/* Verify if it's time for a sync */	secs += (time(NULL) - otim);	if (secs > CONF.SYNC_INTERVAL) {	    secs = 0;	    sync_db(*lognum, *logpos, FALSE);	}    }}static intlogger_init(void *args){    char filename[256];    long lognum;    off_t logpos;    int ufd, lfd;    syslog(LOG_NOTICE, "Logger process started");    close(pipefds[0]);    pipefds[0] = -1;    lognum = 0;    logpos = 0;    if ((ufd = unix_init(CONF.LOG_SOCKET, CONF.log_group, 0220, 0, FALSE,		    TRUE)) != -1) {	snprintf(filename, 255, "%s/00000000.log", CONF.ENV_DIR);	if ((lfd = open(filename, O_WRONLY | O_CREAT | O_TRUNC, 0600)) != -1) {	    fsync(lfd);	    logger_main(pipefds[1], ufd, lfd, &lognum, &logpos);	    close(lfd);	} else	    syslog(LOG_NOTICE, "logger_init() - open(%s)", filename);	close(ufd);	unlink(CONF.LOG_SOCKET);    } else	syslog(LOG_NOTICE, "logger_init() - unix_init(%s)", CONF.LOG_SOCKET);    close(pipefds[1]);    pipefds[1] = -1;    syslog(LOG_NOTICE, "Exiting logger");    return (0);}/* Here consists of the logger process server, using unix domain sockets. * It's function is to obtain single as well as transaction locked requests * from the various processes, and to generate recovery logs and sync them * to disk as soon as possible. It is of major importance that this process * perform all required sanity checking on the input datagrams, thus preventing * packet attacks resulting in undefined behavior. We do not allow the client * to generate STAT_NEWFILE or STAT_TRANSACT control packets, and we ensure * that they only send valid packet lengths, particularly valid key string * as well. Morover, we make sure to set the euid of the datagram originator. * XXX BUG: There seems to be a pretty serious problem, I seem to misunderstand *     the man pages about recvmsg(), cmsg, etc to obtain user credentials... *     even the data seems to not be right, but the size is. */static voidlogger_main(int pfd, int ufd, int lfd, long *lognum, off_t *logpos){    uid_t uid, euid;    int len, l, i, i2;    enum stat_type t;    char *tmp;    struct log_entry aentries[MAX_TRANSACT + 2], *entries;    struct pollfd fds[] = {	{ufd, POLLIN, 0}    };    /* Prepare transaction header and footer entries, the footer will need     * to be copied earlier in the buffer when the transaction packet is     * smaller than MAX_TRANSACT, to allow using one write() only.     */    entries = &(aentries[1]);    mm_memclr(aentries, sizeof(struct log_entry));    aentries->type = STAT_TRANSACT;    mm_memcpy(&(aentries[MAX_TRANSACT + 1]), aentries,	    sizeof(struct log_entry));    aentries->un.transact.begin = TRUE;    while (run) {	if (poll(fds, 1, -1) > 0) {	    if (fds[0].revents & POLLIN) {		/* New packet to log, may consist of a single operation or		 * of transaction-protected atomic operations array.		 */		if ((len = recvfrom(ufd, entries,				sizeof(struct log_entry) * MAX_TRANSACT,				MSG_WAITALL, NULL, NULL)) > 0) {		    /* XXX Eventually obtain packet sender credentials */		    uid = euid = 0;		    /* Perform some sanity checking, first verify packet size */		    l = 0;		    i2 = 1;		    if ((len >= sizeof(struct log_entry)) &&    			    (len <= sizeof(struct log_entry) * MAX_TRANSACT) &&    			    ((len % sizeof(struct log_entry)) == 0)) {			/* Now verify packet type and key C string validity			 * XXX Should eventually use cleaner code here			 */			l = len / sizeof(struct log_entry);			for (i2 = 0; i2 < l; i2++) {			    t = entries[i2].type;			    if (t != STAT_UPDATE && t != STAT_RESET &&				    t != STAT_DELETE)				break;			    tmp = entries[i2].key;			    for (i = 0; i < KEY_SIZE; i++)				if (!tmp[i] || tmp[i] < 33 || tmp[i] == '%')				    break;			    if (i < 1 || i > KEY_SIZE - 1 ||				    (tmp[i] && (tmp[i] < 33 || tmp[i] == '%')))				break;			    /* Make sure that packet originator uid cannot be			     * spoofed			     */			    entries[i2].uid = euid;			}		    }		    if (i2 == l) {			/* This packet at least won't crash us, it will			 * simply be ignored if invalid to this point.			 * Perform some magic before writing the entry if			 * it consists of a transaction.			 */			if (len == sizeof(struct log_entry)) {			    if (!writelogentries(pfd, entries, 1, &lfd, lognum,					logpos))				syslog(LOG_NOTICE,					"logger_main() - Error writing logs!");			} else {			    t = len / sizeof(struct log_entry);			    if (t < MAX_TRANSACT)				mm_memcpy(&entries[t],					&aentries[MAX_TRANSACT + 1],					sizeof(struct log_entry));			    t += 2;			    if (!writelogentries(pfd, aentries, t, &lfd,					lognum, logpos))				syslog(LOG_NOTICE,				       "logger_main() - Error writing logs!");			}		    } else			syslog(LOG_NOTICE,			       "Illegal packet from uid %d, euid %d, %d bytes",			       uid, euid, len);		} else		    syslog(LOG_NOTICE,			   "logger_main() - Error reading packet!");	    }	}    }}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
午夜视频一区在线观看| 精品国产免费一区二区三区香蕉| 国内精品久久久久影院薰衣草| 亚洲高清视频中文字幕| 亚洲精品成人悠悠色影视| 亚洲欧美另类在线| 亚洲欧美日韩在线| 亚洲一级电影视频| 日韩制服丝袜av| 精品一区二区三区av| 国产一区二区三区电影在线观看| 精品一区二区在线播放| 国产综合色产在线精品 | 99re热这里只有精品视频| 成人美女视频在线观看18| 成人高清视频在线观看| 在线视频一区二区免费| 91精品国产综合久久久蜜臀粉嫩| 欧美一级日韩免费不卡| 国产亚洲福利社区一区| 国产精品福利在线播放| 亚洲成人第一页| 国产精品18久久久久久久久 | 欧美最猛性xxxxx直播| 制服丝袜亚洲网站| 国产欧美一区二区精品仙草咪| 国产精品久久一级| 五月激情六月综合| 国产精品一区二区三区网站| 在线看一区二区| 亚洲精品一区二区三区在线观看| 国产欧美中文在线| 亚洲一二三四区| 国产一区二区0| 欧美高清视频不卡网| 欧美极品xxx| 日韩1区2区3区| 99国产麻豆精品| 欧美zozozo| 亚洲成人激情自拍| 高清国产一区二区三区| 宅男在线国产精品| 亚洲女人的天堂| 国产毛片一区二区| 欧美精品色一区二区三区| 国产精品久久久久精k8| 日本不卡一区二区| 一本大道久久a久久精品综合| 日韩一卡二卡三卡| 亚洲国产wwwccc36天堂| heyzo一本久久综合| 日韩欧美国产高清| 亚洲成av人片在线| 日本韩国欧美一区| 国产精品久久久久婷婷二区次| 久久激情综合网| 欧美三级电影在线看| 亚洲色图一区二区| 成人深夜视频在线观看| 久久亚洲欧美国产精品乐播| 日韩和欧美的一区| 欧美日本一区二区三区四区| 亚洲精品高清在线| 色综合久久天天| 中文字幕亚洲在| eeuss鲁片一区二区三区在线看| 精品伦理精品一区| 蜜臀av一区二区在线观看| 欧美日韩高清一区二区| 亚洲成人精品一区| 6080国产精品一区二区| 日韩精品免费专区| 日韩一级大片在线观看| 免费观看在线综合色| 欧美一区二区美女| 久久97超碰色| 久久丝袜美腿综合| jizz一区二区| 一区二区久久久久久| 欧美性极品少妇| 日韩中文字幕91| 欧美xxxxx牲另类人与| 国内不卡的二区三区中文字幕| 日韩欧美一区中文| 国产麻豆视频一区二区| 国产精品无人区| 成人午夜在线播放| 亚洲欧美另类在线| 在线成人午夜影院| 毛片不卡一区二区| 久久久99免费| 91亚洲男人天堂| 日韩高清电影一区| 国产欧美一区二区精品性色超碰 | 亚洲乱码国产乱码精品精98午夜 | 亚洲色图丝袜美腿| 欧美剧在线免费观看网站| 日本中文字幕一区二区有限公司| 亚洲精品在线观看视频| av电影一区二区| 亚洲国产成人高清精品| 欧美精品一区二区在线播放| 国产一区二区三区黄视频| 1区2区3区欧美| 这里是久久伊人| 成人一区二区三区在线观看| 夜夜嗨av一区二区三区网页| 欧美一级久久久| 99精品欧美一区二区三区综合在线| 一区二区三区欧美日| 日韩女优电影在线观看| www.日韩精品| 裸体健美xxxx欧美裸体表演| 中文字幕在线不卡国产视频| 日韩一区和二区| 99国产精品久久久| 精品在线免费观看| 一区二区三区鲁丝不卡| 久久精品一区二区三区不卡| 欧美性高清videossexo| 成人中文字幕合集| 毛片av一区二区三区| 亚洲精品美腿丝袜| 中文字幕精品在线不卡| 69久久99精品久久久久婷婷| 91在线观看成人| 国内精品伊人久久久久影院对白| 一区二区欧美视频| 国产精品入口麻豆原神| 日韩欧美国产一区二区在线播放| 在线欧美小视频| 成人亚洲精品久久久久软件| 久久er99精品| 蜜乳av一区二区| 视频一区中文字幕国产| 亚洲精品免费一二三区| 中文字幕一区二区三区在线不卡| 久久久久久毛片| 日韩精品一区二区三区视频| 欧美在线观看你懂的| 99国产精品久久久久| eeuss鲁片一区二区三区在线看| 国产一区二区精品久久91| 久久99在线观看| 青青草国产精品97视觉盛宴 | 国产老肥熟一区二区三区| 日韩av中文字幕一区二区| 亚洲国产欧美日韩另类综合| 亚洲制服丝袜在线| 亚洲无线码一区二区三区| 一区二区欧美在线观看| 夜夜爽夜夜爽精品视频| 亚洲成人动漫在线观看| 亚洲sss视频在线视频| 日韩国产高清在线| 日本91福利区| 国产精品一级片| 不卡的电影网站| 色吧成人激情小说| 欧美日韩视频专区在线播放| 欧美亚洲综合久久| 欧美一区二区三区啪啪| 精品国产a毛片| 国产精品区一区二区三区| 亚洲欧洲一区二区三区| 亚洲永久免费av| 男女激情视频一区| 国产精品一区二区男女羞羞无遮挡| 国产成人av电影在线观看| 粉嫩av一区二区三区粉嫩| 91丨九色丨尤物| 91精品国产91综合久久蜜臀| 久久久一区二区三区| 国产精品家庭影院| 香蕉成人伊视频在线观看| 激情成人综合网| 色婷婷一区二区三区四区| 日韩一区二区三区免费观看| 国产亚洲欧美一区在线观看| 亚洲欧美福利一区二区| 日本女优在线视频一区二区| 国产成人精品午夜视频免费| 色狠狠色狠狠综合| 欧美精品一区二区三区高清aⅴ | 中文字幕一区二区三中文字幕| 亚洲另类在线一区| 久久爱另类一区二区小说| 99re热视频精品| 欧美高清www午色夜在线视频| 国产视频亚洲色图| 亚洲一区二区欧美激情| 国产成人精品影院| 制服丝袜日韩国产| 中文字幕一区二区三区不卡在线 | www一区二区| 亚洲精品成人悠悠色影视| 黄色资源网久久资源365| 色国产综合视频| 久久先锋资源网| 日本欧美一区二区三区乱码|