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

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

?? clparse.c

?? open source dhcp server client etc...
?? C
?? 第 1 頁 / 共 3 頁
字號:
/* clparse.c   Parser for dhclient config and lease files... *//* * Copyright (c) 1996-2001 Internet Software Consortium. * 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. * 3. Neither the name of The Internet Software Consortium nor the names *    of its contributors may be used to endorse or promote products derived *    from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE INTERNET SOFTWARE CONSORTIUM AND * CONTRIBUTORS ``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 INTERNET SOFTWARE CONSORTIUM OR * CONTRIBUTORS 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. * * This software has been written for the Internet Software Consortium * by Ted Lemon in cooperation with Vixie Enterprises and Nominum, Inc. * To learn more about the Internet Software Consortium, see * ``http://www.isc.org/''.  To learn more about Vixie Enterprises, * see ``http://www.vix.com''.   To learn more about Nominum, Inc., see * ``http://www.nominum.com''. */#ifndef lintstatic char copyright[] ="$Id: clparse.c,v 1.62.2.1 2001/06/01 17:26:44 mellon Exp $ Copyright (c) 1996-2001 The Internet Software Consortium.  All rights reserved.\n";#endif /* not lint */#include "dhcpd.h"static TIME parsed_time;struct client_config top_level_config;u_int32_t default_requested_options [] = {	DHO_SUBNET_MASK,	DHO_BROADCAST_ADDRESS,	DHO_TIME_OFFSET,	DHO_ROUTERS,	DHO_DOMAIN_NAME,	DHO_DOMAIN_NAME_SERVERS,	DHO_HOST_NAME,	0};/* client-conf-file :== client-declarations END_OF_FILE   client-declarations :== <nil>			 | client-declaration			 | client-declarations client-declaration */isc_result_t read_client_conf (){	struct client_config *config;	struct client_state *state;	struct interface_info *ip;	isc_result_t status;	/* Set up the initial dhcp option universe. */	initialize_common_option_spaces ();	/* Initialize the top level client configuration. */	memset (&top_level_config, 0, sizeof top_level_config);	/* Set some defaults... */	top_level_config.timeout = 60;	top_level_config.select_interval = 0;	top_level_config.reboot_timeout = 10;	top_level_config.retry_interval = 300;	top_level_config.backoff_cutoff = 15;	top_level_config.initial_interval = 3;	top_level_config.bootp_policy = P_ACCEPT;	top_level_config.script_name = path_dhclient_script;	top_level_config.requested_options = default_requested_options;	top_level_config.omapi_port = -1;	group_allocate (&top_level_config.on_receipt, MDL);	if (!top_level_config.on_receipt)		log_fatal ("no memory for top-level on_receipt group");	group_allocate (&top_level_config.on_transmission, MDL);	if (!top_level_config.on_transmission)		log_fatal ("no memory for top-level on_transmission group");	status = read_client_conf_file (path_dhclient_conf,					(struct interface_info *)0,					&top_level_config);	if (status != ISC_R_SUCCESS) {		;#ifdef LATER		/* Set up the standard name service updater routine. */		parse = (struct parse *)0;		status = new_parse (&parse, -1, default_client_config,				    (sizeof default_client_config) - 1,				    "default client configuration", 0);		if (status != ISC_R_SUCCESS)			log_fatal ("can't begin default client config!");		do {			token = peek_token (&val, (unsigned *)0, cfile);			if (token == END_OF_FILE)				break;			parse_client_statement (cfile,						(struct interface_info *)0,						&top_level_config);		} while (1);		end_parse (&parse);#endif	}	/* Set up state and config structures for clients that don't	   have per-interface configuration statements. */	config = (struct client_config *)0;	for (ip = interfaces; ip; ip = ip -> next) {		if (!ip -> client) {			ip -> client = (struct client_state *)				dmalloc (sizeof (struct client_state), MDL);			if (!ip -> client)				log_fatal ("no memory for client state.");			memset (ip -> client, 0, sizeof *(ip -> client));			ip -> client -> interface = ip;		}		if (!ip -> client -> config) {			if (!config) {				config = (struct client_config *)					dmalloc (sizeof (struct client_config),						 MDL);				if (!config)				    log_fatal ("no memory for client config.");				memcpy (config, &top_level_config,					sizeof top_level_config);			}			ip -> client -> config = config;		}	}	return status;}int read_client_conf_file (const char *name, struct interface_info *ip,			   struct client_config *client){	int file;	struct parse *cfile;	const char *val;	int token;	isc_result_t status;		if ((file = open (name, O_RDONLY)) < 0)		return uerr2isc (errno);	cfile = (struct parse *)0;	new_parse (&cfile, file, (char *)0, 0, path_dhclient_conf, 0);	do {		token = peek_token (&val, (unsigned *)0, cfile);		if (token == END_OF_FILE)			break;		parse_client_statement (cfile, ip, client);	} while (1);	token = next_token (&val, (unsigned *)0, cfile);	status = (cfile -> warnings_occurred		  ? ISC_R_BADPARSE		  : ISC_R_SUCCESS);	close (file);	end_parse (&cfile);	return status;}/* lease-file :== client-lease-statements END_OF_FILE   client-lease-statements :== <nil>		     | client-lease-statements LEASE client-lease-statement */void read_client_leases (){	int file;	struct parse *cfile;	const char *val;	int token;	/* Open the lease file.   If we can't open it, just return -	   we can safely trust the server to remember our state. */	if ((file = open (path_dhclient_db, O_RDONLY)) < 0)		return;	cfile = (struct parse *)0;	new_parse (&cfile, file, (char *)0, 0, path_dhclient_db, 0);	do {		token = next_token (&val, (unsigned *)0, cfile);		if (token == END_OF_FILE)			break;		if (token != LEASE) {			log_error ("Corrupt lease file - possible data loss!");			skip_to_semi (cfile);			break;		} else			parse_client_lease_statement (cfile, 0);	} while (1);	close (file);	end_parse (&cfile);}/* client-declaration :== 	SEND option-decl |	DEFAULT option-decl |	SUPERSEDE option-decl |	PREPEND option-decl |	APPEND option-decl |	hardware-declaration |	REQUEST option-list |	REQUIRE option-list |	TIMEOUT number |	RETRY number |	REBOOT number |	SELECT_TIMEOUT number |	SCRIPT string |	VENDOR_SPACE string |	interface-declaration |	LEASE client-lease-statement |	ALIAS client-lease-statement |	KEY key-definition */void parse_client_statement (cfile, ip, config)	struct parse *cfile;	struct interface_info *ip;	struct client_config *config;{	int token;	const char *val;	struct option *option;	struct executable_statement *stmt, **p;	enum statement_op op;	int lose;	char *name;	struct data_string key_id;	enum policy policy;	int known;	int tmp, i;	isc_result_t status;	switch (peek_token (&val, (unsigned *)0, cfile)) {	      case INCLUDE:		next_token (&val, (unsigned *)0, cfile);		token = next_token (&val, (unsigned *)0, cfile);		if (token != STRING) {			parse_warn (cfile, "filename string expected.");			skip_to_semi (cfile);		} else {			status = read_client_conf_file (val, ip, config);			if (status != ISC_R_SUCCESS)				parse_warn (cfile, "%s: bad parse.", val);			parse_semi (cfile);		}		return;			      case KEY:		next_token (&val, (unsigned *)0, cfile);		if (ip) {			/* This may seem arbitrary, but there's a reason for			   doing it: the authentication key database is not			   scoped.  If we allow the user to declare a key other			   than in the outer scope, the user is very likely to			   believe that the key will only be used in that			   scope.  If the user only wants the key to be used on			   one interface, because it's known that the other			   interface may be connected to an insecure net and			   the secret key is considered sensitive, we don't			   want to lull them into believing they've gotten			   their way.   This is a bit contrived, but people			   tend not to be entirely rational about security. */			parse_warn (cfile, "key definition not allowed here.");			skip_to_semi (cfile);			break;		}		parse_key (cfile);		return;		/* REQUIRE can either start a policy statement or a		   comma-seperated list of names of required options. */	      case REQUIRE:		next_token (&val, (unsigned *)0, cfile);		token = peek_token (&val, (unsigned *)0, cfile);		if (token == AUTHENTICATION) {			policy = P_REQUIRE;			goto do_policy;		}		parse_option_list (cfile, &config -> required_options);		return;	      case IGNORE:		next_token (&val, (unsigned *)0, cfile);		policy = P_IGNORE;		goto do_policy;	      case ACCEPT:		next_token (&val, (unsigned *)0, cfile);		policy = P_ACCEPT;		goto do_policy;	      case PREFER:		next_token (&val, (unsigned *)0, cfile);		policy = P_PREFER;		goto do_policy;	      case DONT:		next_token (&val, (unsigned *)0, cfile);		policy = P_DONT;		goto do_policy;	      do_policy:		token = next_token (&val, (unsigned *)0, cfile);		if (token == AUTHENTICATION) {			if (policy != P_PREFER &&			    policy != P_REQUIRE &&			    policy != P_DONT) {				parse_warn (cfile,					    "invalid authentication policy.");				skip_to_semi (cfile);				return;			}			config -> auth_policy = policy;		} else if (token != TOKEN_BOOTP) {			if (policy != P_PREFER &&			    policy != P_IGNORE &&			    policy != P_ACCEPT) {				parse_warn (cfile, "invalid bootp policy.");				skip_to_semi (cfile);				return;			}			config -> bootp_policy = policy;		} else {			parse_warn (cfile, "expecting a policy type.");			skip_to_semi (cfile);			return;		} 		break;	      case OPTION:		token = next_token (&val, (unsigned *)0, cfile);		token = peek_token (&val, (unsigned *)0, cfile);		if (token == SPACE) {			if (ip) {				parse_warn (cfile,					    "option space definitions %s",					    " may not be scoped.");				skip_to_semi (cfile);				break;			}			parse_option_space_decl (cfile);			return;		}		option = parse_option_name (cfile, 1, &known);		if (!option)			return;		token = next_token (&val, (unsigned *)0, cfile);		if (token != CODE) {			parse_warn (cfile, "expecting \"code\" keyword.");			skip_to_semi (cfile);			free_option (option, MDL);			return;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
成人av在线资源| 国产精品美女久久久久aⅴ国产馆| 欧美一区二区三区男人的天堂| 国产欧美综合在线观看第十页 | 欧美高清在线一区二区| 亚洲国产精品自拍| 不卡一区二区中文字幕| 欧美成人精品福利| 亚洲国产精品自拍| 91福利视频在线| 国产精品久久三| 午夜精品影院在线观看| www.日韩大片| 久久人人超碰精品| 久久精品噜噜噜成人88aⅴ| 91国产精品成人| 亚洲人成在线播放网站岛国| 国产成人亚洲综合a∨婷婷图片| 91精品黄色片免费大全| 亚洲一二三专区| 99精品视频免费在线观看| 日韩一区二区三区四区五区六区| 亚洲毛片av在线| 成人激情av网| 欧美经典一区二区| 国产酒店精品激情| 久久久另类综合| 黄色小说综合网站| 欧美成人vps| 捆绑紧缚一区二区三区视频| 欧美久久久久久蜜桃| 日日夜夜精品视频免费| 欧美日韩亚洲综合| 亚洲va天堂va国产va久| 欧美片网站yy| 秋霞午夜鲁丝一区二区老狼| 91精品国产一区二区| 日本女人一区二区三区| 欧美成人精品3d动漫h| 免费不卡在线视频| 精品久久一区二区| 成人午夜激情在线| 国产精品网站导航| 色婷婷综合激情| 亚洲一区二区综合| 欧美一区二区久久| 国产伦精品一区二区三区免费迷 | 欧美不卡在线视频| 国内成+人亚洲+欧美+综合在线 | 日韩精品在线一区二区| 麻豆91免费看| 久久久久久久久岛国免费| 国产很黄免费观看久久| 中文字幕一区二区三区四区 | 欧美一区二区在线免费播放| 蜜臀久久99精品久久久久久9 | 成人免费视频国产在线观看| 亚洲免费毛片网站| 欧美日本视频在线| 极品少妇一区二区| 最新日韩在线视频| 4438成人网| 国产高清不卡一区| 一区二区三区高清| 日韩欧美国产1| aaa国产一区| 亚洲18色成人| 国产精品天天看| 欧日韩精品视频| 国产精品69毛片高清亚洲| 亚洲乱码日产精品bd| 日韩免费电影一区| 99精品欧美一区二区三区小说| 亚洲成av人片www| 国产欧美精品国产国产专区| 欧美色视频一区| 国产精品一区二区三区乱码| 亚洲香蕉伊在人在线观| 国产丝袜美腿一区二区三区| 欧美色视频一区| 国产91精品一区二区麻豆网站| 亚洲午夜精品在线| 国产精品人人做人人爽人人添| 欧美丰满一区二区免费视频| 成人av网址在线| 蜜桃av一区二区在线观看| 亚洲狠狠丁香婷婷综合久久久| 精品理论电影在线| 欧美另类变人与禽xxxxx| 不卡大黄网站免费看| 久久91精品国产91久久小草| 亚洲一级不卡视频| 日韩一区在线看| 国产午夜精品理论片a级大结局| 欧美日韩一级片在线观看| av在线免费不卡| 精品无码三级在线观看视频| 亚洲一卡二卡三卡四卡五卡| 亚洲三级久久久| 国产欧美一区视频| 欧美成va人片在线观看| 欧美狂野另类xxxxoooo| 欧美最新大片在线看| 91在线云播放| 91美女片黄在线观看91美女| 国产sm精品调教视频网站| 国产在线精品不卡| 精品影院一区二区久久久| 天堂影院一区二区| 亚洲一本大道在线| 亚洲一区二区视频在线观看| 亚洲美腿欧美偷拍| 亚洲精品国产精品乱码不99 | 日韩欧美高清dvd碟片| 欧美美女网站色| 在线播放91灌醉迷j高跟美女| 欧美视频三区在线播放| 欧美色偷偷大香| 欧美日本视频在线| 91精品国产免费久久综合| 欧美一区二区三区在线观看视频| 欧美日韩国产天堂| 91精品国产黑色紧身裤美女| 欧美色图在线观看| 欧美另类高清zo欧美| 日韩精品中文字幕一区| 久久久精品欧美丰满| 欧美激情一区二区| 国产精品久久久久一区二区三区共| 国产精品视频在线看| 亚洲视频一二三区| 亚洲国产美国国产综合一区二区| 亚洲18女电影在线观看| 久久精品国产久精国产| 国产成人啪午夜精品网站男同| 国产999精品久久久久久| 91蜜桃婷婷狠狠久久综合9色| 欧美最猛性xxxxx直播| 日韩一区二区三区精品视频 | 国产成人亚洲精品青草天美| 91蜜桃传媒精品久久久一区二区| 欧美综合欧美视频| 欧美一区二区三区电影| 国产蜜臀97一区二区三区| 亚洲已满18点击进入久久| 麻豆成人免费电影| 99久久精品国产一区| 欧美高清www午色夜在线视频| 久久女同互慰一区二区三区| 亚洲婷婷在线视频| 99国产精品一区| 欧美偷拍一区二区| 精品日本一线二线三线不卡| 国产精品国产三级国产普通话三级 | 一区二区在线免费观看| 日韩国产在线一| 波多野结衣91| 91.com在线观看| 国产精品传媒在线| 久久99精品一区二区三区| 97久久精品人人做人人爽50路| 7777精品伊人久久久大香线蕉完整版 | 亚洲一区二区三区小说| 国产美女娇喘av呻吟久久| 色噜噜狠狠色综合欧洲selulu| 欧美mv和日韩mv的网站| 亚洲综合色网站| 国产成人免费网站| 欧美浪妇xxxx高跟鞋交| 亚洲视频在线观看一区| 国产一区二区精品久久99 | 一本大道久久精品懂色aⅴ| 日韩免费福利电影在线观看| 一区二区三区四区中文字幕| 狠狠色狠狠色综合日日91app| 在线观看91视频| 国产精品国产自产拍在线| 久久国产综合精品| 欧美日韩国产首页| 依依成人综合视频| 成人激情校园春色| 国产免费成人在线视频| 久久精品国产99| 欧美日韩中文另类| 亚洲欧美另类小说视频| 成人三级伦理片| 久久久久久免费| 精品亚洲成a人| 日韩精品一区在线| 日本三级韩国三级欧美三级| 在线看国产日韩| 亚洲国产综合人成综合网站| 91麻豆.com| 亚洲欧美国产高清| 91丝袜美女网| 亚洲欧美福利一区二区| 91久久香蕉国产日韩欧美9色| **欧美大码日韩| 99国产麻豆精品| 一区二区在线观看视频|