⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 check.c

📁 bind-3.2.
💻 C
📖 第 1 页 / 共 2 页
字号:
			for (i = 0;			     i < sizeof(dialups) / sizeof(dialups[0]);			     i++)			{				if (strcasecmp(dialups[i].name, str) != 0)					continue;				if ((dialups[i].allowed & ztype) == 0) {					cfg_obj_log(obj, logctx,						    ISC_LOG_ERROR,						    "dialup type '%s' is not "						    "allowed in '%s' "						    "zone '%s'",						    str, typestr, zname);					result = ISC_R_FAILURE;				}				break;			}			if (i == sizeof(dialups) / sizeof(dialups[0])) {				cfg_obj_log(obj, logctx, ISC_LOG_ERROR,					    "invalid dialup type '%s' in zone "					    "'%s'", str, zname);				result = ISC_R_FAILURE;			}		}	}	/*	 * Check that forwarding is reasonable.	 */	if (check_forward(zoptions, logctx) != ISC_R_SUCCESS)		result = ISC_R_FAILURE;	/*	 * Check various options.	 */	tresult = check_options(zoptions, logctx);	if (tresult != ISC_R_SUCCESS)		result = tresult;	return (result);}isc_result_tcfg_check_key(cfg_obj_t *key, isc_log_t *logctx) {	cfg_obj_t *algobj = NULL;	cfg_obj_t *secretobj = NULL;	const char *keyname = cfg_obj_asstring(cfg_map_getname(key));		cfg_map_get(key, "algorithm", &algobj);	cfg_map_get(key, "secret", &secretobj);	if (secretobj == NULL || algobj == NULL) {		cfg_obj_log(key, logctx, ISC_LOG_ERROR,			    "key '%s' must have both 'secret' and "			    "'algorithm' defined",			    keyname);		return ISC_R_FAILURE;	}	return ISC_R_SUCCESS;}		static isc_result_tcheck_keylist(cfg_obj_t *keys, isc_symtab_t *symtab, isc_log_t *logctx) {	isc_result_t result = ISC_R_SUCCESS;	isc_result_t tresult;	cfg_listelt_t *element;	for (element = cfg_list_first(keys);	     element != NULL;	     element = cfg_list_next(element))	{		cfg_obj_t *key = cfg_listelt_value(element);		const char *keyname = cfg_obj_asstring(cfg_map_getname(key));		isc_symvalue_t symvalue;		symvalue.as_pointer = NULL;		tresult = isc_symtab_define(symtab, keyname, 1,					    symvalue, isc_symexists_reject);		if (tresult == ISC_R_EXISTS) {			cfg_obj_log(key, logctx, ISC_LOG_ERROR,				    "key '%s': already exists ", keyname);			result = tresult;		} else if (tresult != ISC_R_SUCCESS)			return (tresult);		tresult = cfg_check_key(key, logctx);		if (tresult != ISC_R_SUCCESS)			return (tresult);	}	return (result);}static voidfreekey(char *key, unsigned int type, isc_symvalue_t value, void *userarg) {	UNUSED(type);	UNUSED(value);	isc_mem_free(userarg, key);}static isc_result_tcheck_servers(cfg_obj_t *servers, isc_log_t *logctx) {	isc_result_t result = ISC_R_SUCCESS;	cfg_listelt_t *e1, *e2;	cfg_obj_t *v1, *v2;	isc_sockaddr_t *s1, *s2;	isc_netaddr_t na;	for (e1 = cfg_list_first(servers); e1 != NULL; e1 = cfg_list_next(e1)) {		v1 = cfg_listelt_value(e1);		s1 = cfg_obj_assockaddr(cfg_map_getname(v1));		e2 = e1;		while ((e2 = cfg_list_next(e2)) != NULL) {			v2 = cfg_listelt_value(e2);			s2 = cfg_obj_assockaddr(cfg_map_getname(v2));			if (isc_sockaddr_eqaddr(s1, s2)) {				isc_buffer_t target;				char buf[128];				isc_netaddr_fromsockaddr(&na, s2);				isc_buffer_init(&target, buf, sizeof(buf) - 1);				INSIST(isc_netaddr_totext(&na, &target)				       == ISC_R_SUCCESS);				buf[isc_buffer_usedlength(&target)] = '\0';				cfg_obj_log(v2, logctx, ISC_LOG_ERROR,					    "server '%s': already exists",					    buf);				result = ISC_R_FAILURE;			}		}	}	return (result);}  		static isc_result_tcheck_viewconf(cfg_obj_t *config, cfg_obj_t *vconfig, isc_log_t *logctx, isc_mem_t *mctx){	cfg_obj_t *servers = NULL;	cfg_obj_t *zones = NULL;	cfg_obj_t *keys = NULL;	cfg_listelt_t *element;	isc_symtab_t *symtab = NULL;	isc_result_t result = ISC_R_SUCCESS;	isc_result_t tresult = ISC_R_SUCCESS;	/*	 * Check that all zone statements are syntactically correct and	 * there are no duplicate zones.	 */	tresult = isc_symtab_create(mctx, 100, freekey, mctx,				    ISC_TRUE, &symtab);	if (tresult != ISC_R_SUCCESS)		return (ISC_R_NOMEMORY);	if (vconfig != NULL)		(void)cfg_map_get(vconfig, "zone", &zones);	else		(void)cfg_map_get(config, "zone", &zones);	for (element = cfg_list_first(zones);	     element != NULL;	     element = cfg_list_next(element))	{		cfg_obj_t *zone = cfg_listelt_value(element);		if (check_zoneconf(zone, symtab, logctx, mctx) != ISC_R_SUCCESS)			result = ISC_R_FAILURE;	}	isc_symtab_destroy(&symtab);	/*	 * Check that all key statements are syntactically correct and	 * there are no duplicate keys.	 */	tresult = isc_symtab_create(mctx, 100, NULL, NULL, ISC_TRUE, &symtab);	if (tresult != ISC_R_SUCCESS)		return (ISC_R_NOMEMORY);	cfg_map_get(config, "key", &keys);	tresult = check_keylist(keys, symtab, logctx);	if (tresult == ISC_R_EXISTS)		result = ISC_R_FAILURE;	else if (tresult != ISC_R_SUCCESS) {		isc_symtab_destroy(&symtab);		return (tresult);	}		if (vconfig != NULL) {		keys = NULL;		(void)cfg_map_get(vconfig, "key", &keys);		tresult = check_keylist(keys, symtab, logctx);		if (tresult == ISC_R_EXISTS)			result = ISC_R_FAILURE;		else if (tresult != ISC_R_SUCCESS) {			isc_symtab_destroy(&symtab);			return (tresult);		}	}	isc_symtab_destroy(&symtab);	/*	 * Check that forwarding is reasonable.	 */	if (vconfig == NULL) {		cfg_obj_t *options = NULL;		cfg_map_get(config, "options", &options);		if (options != NULL)			if (check_forward(options, logctx) != ISC_R_SUCCESS)				result = ISC_R_FAILURE;	} else {		if (check_forward(vconfig, logctx) != ISC_R_SUCCESS)			result = ISC_R_FAILURE;	}	if (vconfig != NULL) {		(void)cfg_map_get(vconfig, "server", &servers);		if (servers != NULL &&		    check_servers(servers, logctx) != ISC_R_SUCCESS)			result = ISC_R_FAILURE;	}	if (vconfig != NULL)		tresult = check_options(vconfig, logctx);	else		tresult = check_options(config, logctx);	if (tresult != ISC_R_SUCCESS)		result = tresult;	return (result);}isc_result_tcfg_check_namedconf(cfg_obj_t *config, isc_log_t *logctx, isc_mem_t *mctx) {	cfg_obj_t *options = NULL;	cfg_obj_t *servers = NULL;	cfg_obj_t *views = NULL;	cfg_obj_t *acls = NULL;	cfg_obj_t *obj;	cfg_listelt_t *velement;	isc_result_t result = ISC_R_SUCCESS;	isc_result_t tresult;	static const char *builtin[] = { "localhost", "localnets",					 "any", "none" };	(void)cfg_map_get(config, "options", &options);	if (options != NULL &&	    check_options(options, logctx) != ISC_R_SUCCESS)		result = ISC_R_FAILURE;	(void)cfg_map_get(config, "server", &servers);	if (servers != NULL &&	    check_servers(servers, logctx) != ISC_R_SUCCESS)		result = ISC_R_FAILURE;	(void)cfg_map_get(config, "view", &views);	if (views == NULL) {		if (check_viewconf(config, NULL, logctx, mctx)				   != ISC_R_SUCCESS)			result = ISC_R_FAILURE;	} else {		cfg_obj_t *zones = NULL;		(void)cfg_map_get(config, "zone", &zones);		if (zones != NULL) {			cfg_obj_log(zones, logctx, ISC_LOG_ERROR,				    "when using 'view' statements, "				    "all zones must be in views");			result = ISC_R_FAILURE;		}	}	for (velement = cfg_list_first(views);	     velement != NULL;	     velement = cfg_list_next(velement))	{		cfg_obj_t *view = cfg_listelt_value(velement);		cfg_obj_t *voptions = cfg_tuple_get(view, "options");		if (check_viewconf(config, voptions, logctx, mctx)		    != ISC_R_SUCCESS)			result = ISC_R_FAILURE;	}	if (views != NULL && options != NULL) {		obj = NULL;		tresult = cfg_map_get(options, "cache-file", &obj);		if (tresult == ISC_R_SUCCESS) {			cfg_obj_log(obj, logctx, ISC_LOG_ERROR,				    "'cache-file' cannot be a global "				    "option if views are present");			result = ISC_R_FAILURE;		}	}        tresult = cfg_map_get(config, "acl", &acls);        if (tresult == ISC_R_SUCCESS) {		cfg_listelt_t *elt;		cfg_listelt_t *elt2;		const char *aclname;		for (elt = cfg_list_first(acls);		     elt != NULL;		     elt = cfg_list_next(elt)) {			cfg_obj_t *acl = cfg_listelt_value(elt);			unsigned int i;			aclname = cfg_obj_asstring(cfg_tuple_get(acl, "name"));			for (i = 0;			     i < sizeof(builtin) / sizeof(builtin[0]);			     i++)				if (strcasecmp(aclname, builtin[i]) == 0) {					cfg_obj_log(acl, logctx, ISC_LOG_ERROR,						    "attempt to redefine "						    "builtin acl '%s'",				    		    aclname);					result = ISC_R_FAILURE;					break;				}			for (elt2 = cfg_list_next(elt);			     elt2 != NULL;			     elt2 = cfg_list_next(elt2)) {				cfg_obj_t *acl2 = cfg_listelt_value(elt2);				const char *name;				name = cfg_obj_asstring(cfg_tuple_get(acl2,								      "name"));				if (strcasecmp(aclname, name) == 0) {					cfg_obj_log(acl2, logctx, ISC_LOG_ERROR,						    "attempt to redefine "						    "acl '%s'", name);					result = ISC_R_FAILURE;					break;				}			}		}	}	return (result);}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -