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

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

?? match.c

?? OpenSSL Source code for SFTP, SSH, and many others
?? C
字號:
/* * Author: Tatu Ylonen <ylo@cs.hut.fi> * Copyright (c) 1995 Tatu Ylonen <ylo@cs.hut.fi>, Espoo, Finland *                    All rights reserved * Simple pattern matching, with '*' and '?' as wildcards. * * As far as I am concerned, the code I have written for this software * can be used freely for any purpose.  Any derived versions of this * software must be clearly marked as such, and if the derived work is * incompatible with the protocol description in the RFC file, it must be * called by a name other than "ssh" or "Secure Shell". *//* * Copyright (c) 2000 Markus Friedl.  All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright *    notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright *    notice, this list of conditions and the following disclaimer in the *    documentation and/or other materials provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */#include "includes.h"RCSID("$OpenBSD: match.c,v 1.19 2002/03/01 13:12:10 markus Exp $");#include "match.h"#include "xmalloc.h"/* * Returns true if the given string matches the pattern (which may contain ? * and * as wildcards), and zero if it does not match. */intmatch_pattern(const char *s, const char *pattern){	for (;;) {		/* If at end of pattern, accept if also at end of string. */		if (!*pattern)			return !*s;		if (*pattern == '*') {			/* Skip the asterisk. */			pattern++;			/* If at end of pattern, accept immediately. */			if (!*pattern)				return 1;			/* If next character in pattern is known, optimize. */			if (*pattern != '?' && *pattern != '*') {				/*				 * Look instances of the next character in				 * pattern, and try to match starting from				 * those.				 */				for (; *s; s++)					if (*s == *pattern &&					    match_pattern(s + 1, pattern + 1))						return 1;				/* Failed. */				return 0;			}			/*			 * Move ahead one character at a time and try to			 * match at each position.			 */			for (; *s; s++)				if (match_pattern(s, pattern))					return 1;			/* Failed. */			return 0;		}		/*		 * There must be at least one more character in the string.		 * If we are at the end, fail.		 */		if (!*s)			return 0;		/* Check if the next character of the string is acceptable. */		if (*pattern != '?' && *pattern != *s)			return 0;		/* Move to the next character, both in string and in pattern. */		s++;		pattern++;	}	/* NOTREACHED */}/* * Tries to match the string against the * comma-separated sequence of subpatterns (each possibly preceded by ! to * indicate negation).  Returns -1 if negation matches, 1 if there is * a positive match, 0 if there is no match at all. */intmatch_pattern_list(const char *string, const char *pattern, u_int len,    int dolower){	char sub[1024];	int negated;	int got_positive;	u_int i, subi;	got_positive = 0;	for (i = 0; i < len;) {		/* Check if the subpattern is negated. */		if (pattern[i] == '!') {			negated = 1;			i++;		} else			negated = 0;		/*		 * Extract the subpattern up to a comma or end.  Convert the		 * subpattern to lowercase.		 */		for (subi = 0;		    i < len && subi < sizeof(sub) - 1 && pattern[i] != ',';		    subi++, i++)			sub[subi] = dolower && isupper(pattern[i]) ?			    tolower(pattern[i]) : pattern[i];		/* If subpattern too long, return failure (no match). */		if (subi >= sizeof(sub) - 1)			return 0;		/* If the subpattern was terminated by a comma, skip the comma. */		if (i < len && pattern[i] == ',')			i++;		/* Null-terminate the subpattern. */		sub[subi] = '\0';		/* Try to match the subpattern against the string. */		if (match_pattern(string, sub)) {			if (negated)				return -1;		/* Negative */			else				got_positive = 1;	/* Positive */		}	}	/*	 * Return success if got a positive match.  If there was a negative	 * match, we have already returned -1 and never get here.	 */	return got_positive;}/* * Tries to match the host name (which must be in all lowercase) against the * comma-separated sequence of subpatterns (each possibly preceded by ! to * indicate negation).  Returns -1 if negation matches, 1 if there is * a positive match, 0 if there is no match at all. */intmatch_hostname(const char *host, const char *pattern, u_int len){	return match_pattern_list(host, pattern, len, 1);}/* * returns 0 if we get a negative match for the hostname or the ip * or if we get no match at all.  returns 1 otherwise. */intmatch_host_and_ip(const char *host, const char *ipaddr,    const char *patterns){	int mhost, mip;	/* negative ipaddr match */	if ((mip = match_hostname(ipaddr, patterns, strlen(patterns))) == -1)		return 0;	/* negative hostname match */	if ((mhost = match_hostname(host, patterns, strlen(patterns))) == -1)		return 0;	/* no match at all */	if (mhost == 0 && mip == 0)		return 0;	return 1;}/* * match user, user@host_or_ip, user@host_or_ip_list against pattern */intmatch_user(const char *user, const char *host, const char *ipaddr,    const char *pattern){	char *p, *pat;	int ret;	if ((p = strchr(pattern,'@')) == NULL)		return match_pattern(user, pattern);	pat = xstrdup(pattern);	p = strchr(pat, '@');	*p++ = '\0';	if ((ret = match_pattern(user, pat)) == 1)		ret = match_host_and_ip(host, ipaddr, p);	xfree(pat);	return ret;}/* * Returns first item from client-list that is also supported by server-list, * caller must xfree() returned string. */#define	MAX_PROP	40#define	SEP	","char *match_list(const char *client, const char *server, u_int *next){	char *sproposals[MAX_PROP];	char *c, *s, *p, *ret, *cp, *sp;	int i, j, nproposals;	c = cp = xstrdup(client);	s = sp = xstrdup(server);	for ((p = strsep(&sp, SEP)), i=0; p && *p != '\0';	    (p = strsep(&sp, SEP)), i++) {		if (i < MAX_PROP)			sproposals[i] = p;		else			break;	}	nproposals = i;	for ((p = strsep(&cp, SEP)), i=0; p && *p != '\0';	    (p = strsep(&cp, SEP)), i++) {		for (j = 0; j < nproposals; j++) {			if (strcmp(p, sproposals[j]) == 0) {				ret = xstrdup(p);				if (next != NULL)					*next = (cp == NULL) ?					    strlen(c) : cp - c;				xfree(c);				xfree(s);				return ret;			}		}	}	if (next != NULL)		*next = strlen(c);	xfree(c);	xfree(s);	return NULL;}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91丨porny丨户外露出| 久久久精品黄色| 亚洲摸摸操操av| 色婷婷亚洲综合| 亚洲精品写真福利| 在线观看欧美黄色| 日韩高清国产一区在线| 日韩三级视频在线观看| 免费av成人在线| 精品国产乱码91久久久久久网站| 激情综合色综合久久综合| 久久视频一区二区| 99久久亚洲一区二区三区青草| 亚洲人成网站色在线观看| 色婷婷综合久久久久中文| 午夜欧美在线一二页| 欧美大片拔萝卜| eeuss鲁片一区二区三区| 亚洲一区二三区| 欧美一区二区三区在线| 老司机午夜精品| 一色屋精品亚洲香蕉网站| 在线观看免费亚洲| 久久精品国产第一区二区三区| 欧美激情一区不卡| 欧美亚洲愉拍一区二区| 麻豆精品视频在线| 一区精品在线播放| 日本一区二区成人| av激情综合网| 男女男精品视频| 中文字幕中文在线不卡住| 欧美色成人综合| 国产一区二区在线视频| 亚洲激情中文1区| 精品免费日韩av| 在线亚洲人成电影网站色www| 麻豆专区一区二区三区四区五区| 中文字幕亚洲精品在线观看| 欧美色综合久久| 国产99久久久国产精品潘金| 亚洲v中文字幕| 精品国产一区二区三区久久影院| 色综合一区二区| 国产自产高清不卡| 五月天国产精品| 日韩理论电影院| www国产精品av| 欧美日产国产精品| caoporn国产精品| 国产精品资源在线观看| 亚洲r级在线视频| 中文字幕制服丝袜一区二区三区 | 欧美在线观看视频一区二区三区| 久久99国产精品麻豆| 亚洲资源在线观看| 中文字幕成人网| 337p日本欧洲亚洲大胆精品 | 欧美久久一二三四区| 成人福利在线看| 国产精品综合二区| 久久精品国产77777蜜臀| 亚洲成av人综合在线观看| 亚洲黄色小视频| 亚洲国产成人在线| 久久久亚洲综合| 欧美大片日本大片免费观看| 6080午夜不卡| 欧美性欧美巨大黑白大战| 99久久国产综合精品麻豆| 国产精品亚洲午夜一区二区三区| 蜜桃视频一区二区| 日韩经典一区二区| 午夜精品在线视频一区| 亚洲一区二区三区视频在线| 综合激情成人伊人| 亚洲另类色综合网站| 亚洲欧美视频在线观看视频| 国产精品色噜噜| 国产精品成人一区二区三区夜夜夜| 欧美国产综合色视频| 国产日韩欧美亚洲| 国产精品天天看| 国产精品人人做人人爽人人添 | 日本一二三四高清不卡| 久久久精品tv| 国产网站一区二区三区| 国产精品久99| 亚洲伊人伊色伊影伊综合网| 亚洲国产综合在线| 天天做天天摸天天爽国产一区| 五月天亚洲精品| 国内精品伊人久久久久av影院| 国内精品免费在线观看| 国产麻豆成人传媒免费观看| 大胆欧美人体老妇| 91丨国产丨九色丨pron| 欧美性大战xxxxx久久久| 7777精品伊人久久久大香线蕉的| 91精品国产一区二区三区| 日韩网站在线看片你懂的| 久久日韩粉嫩一区二区三区| 国产精品女上位| 亚洲一级片在线观看| 男人的天堂亚洲一区| 国产成人日日夜夜| 在线看日本不卡| 欧美精品乱人伦久久久久久| 精品久久久久久久久久久久包黑料 | 欧美日韩中文另类| 欧美tickling挠脚心丨vk| 国产日韩欧美不卡在线| 夜夜嗨av一区二区三区网页| 麻豆91在线观看| 成人午夜免费电影| 欧美精品乱码久久久久久| 精品电影一区二区三区 | 91在线观看高清| 欧美卡1卡2卡| 国产欧美日韩卡一| 亚洲制服丝袜av| 国产乱码精品一区二区三 | 亚洲国产精品一区二区www在线 | 美国三级日本三级久久99| 成人一道本在线| 欧美日本高清视频在线观看| 久久亚洲精华国产精华液| 亚洲综合精品久久| 成人综合激情网| 制服丝袜亚洲播放| 亚洲男同性恋视频| 国产成人综合网站| 91精品国产麻豆国产自产在线| 国产精品妹子av| 麻豆精品精品国产自在97香蕉| 在线视频你懂得一区二区三区| 久久综合狠狠综合久久激情| 亚洲国产精品久久一线不卡| 大桥未久av一区二区三区中文| 欧美电影免费观看高清完整版在线 | 91黄色免费观看| 26uuu成人网一区二区三区| 亚洲一区自拍偷拍| 不卡av免费在线观看| 精品国产乱子伦一区| 亚洲观看高清完整版在线观看| av午夜精品一区二区三区| 精品国产99国产精品| 日韩精品91亚洲二区在线观看| 在线免费不卡电影| 亚洲四区在线观看| 从欧美一区二区三区| 久久综合九色综合欧美就去吻| 日本成人中文字幕| 欧美日韩国产免费| 亚洲最大成人网4388xx| 成人aa视频在线观看| 国产日韩综合av| 国内久久精品视频| 精品国产乱码久久久久久老虎| 性感美女久久精品| 欧美日韩一区二区在线观看视频| 综合久久给合久久狠狠狠97色| 成人av集中营| 日本一区免费视频| 国产成人aaa| 国产亚洲1区2区3区| 国产精品一二三四区| 精品91自产拍在线观看一区| 久久精品国产亚洲一区二区三区| 337p亚洲精品色噜噜噜| 日韩在线播放一区二区| 欧美三级韩国三级日本三斤| 亚洲国产综合人成综合网站| 欧美偷拍一区二区| 亚洲成人黄色影院| 91精品在线观看入口| 美女在线观看视频一区二区| 欧美一区二区大片| 久久不见久久见免费视频7| 欧美mv和日韩mv的网站| 国内精品写真在线观看| 国产欧美日韩在线看| 99精品视频免费在线观看| 亚洲精品成人悠悠色影视| 色综合久久久久综合体桃花网| 亚洲制服丝袜在线| 69精品人人人人| 国产乱色国产精品免费视频| 国产免费观看久久| 91国产免费看| 日韩国产在线观看| 久久亚洲综合av| 99久久免费精品高清特色大片| 一区二区三区不卡视频| 欧美群妇大交群中文字幕| 久久精品久久综合| 国产精品电影一区二区三区| 日本道在线观看一区二区| 日韩一区精品视频|