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

📄 check.c

📁 bind 9.3结合mysql数据库
💻 C
📖 第 1 页 / 共 3 页
字号:
	if (tresult != ISC_R_SUCCESS)		result = tresult;	return (result);}isc_result_tbind9_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));		(void)cfg_map_get(key, "algorithm", &algobj);	(void)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 = key;		tresult = isc_symtab_define(symtab, keyname, 1,					    symvalue, isc_symexists_reject);		if (tresult == ISC_R_EXISTS) {			const char *file;			unsigned int line;			RUNTIME_CHECK(isc_symtab_lookup(symtab, keyname,					    1, &symvalue) == ISC_R_SUCCESS);			file = cfg_obj_file(symvalue.as_pointer);			line = cfg_obj_line(symvalue.as_pointer);			if (file == NULL)				file = "<unknown file>";			cfg_obj_log(key, logctx, ISC_LOG_ERROR,				    "key '%s': already exists "				    "previous definition: %s:%u",				    keyname, file, line);			result = tresult;		} else if (tresult != ISC_R_SUCCESS)			return (tresult);		tresult = bind9_check_key(key, logctx);		if (tresult != ISC_R_SUCCESS)			return (tresult);	}	return (result);}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;	cfg_obj_t *ts;	char buf[128];	const char *xfr;	isc_buffer_t target;	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));		ts = NULL;		if (isc_sockaddr_pf(s1) == AF_INET)			xfr = "transfer-source-v6";		else			xfr = "transfer-source";		(void)cfg_map_get(v1, xfr, &ts);		if (ts != NULL) {			isc_netaddr_fromsockaddr(&na, s1);			isc_buffer_init(&target, buf, sizeof(buf) - 1);			RUNTIME_CHECK(isc_netaddr_totext(&na, &target)				      == ISC_R_SUCCESS);			buf[isc_buffer_usedlength(&target)] = '\0';			cfg_obj_log(v1, logctx, ISC_LOG_ERROR,				    "server '%s': %s not valid", buf, xfr);			result = ISC_R_FAILURE;		}		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)) {				const char *file = cfg_obj_file(v1);				unsigned int line = cfg_obj_line(v1);				if (file == NULL)					file = "<unknown file>";				isc_netaddr_fromsockaddr(&na, s2);				isc_buffer_init(&target, buf, sizeof(buf) - 1);				RUNTIME_CHECK(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 "					    "previous definition: %s:%u",					    buf, file, line);				result = ISC_R_FAILURE;			}		}	}	return (result);}		static isc_result_tcheck_viewconf(cfg_obj_t *config, cfg_obj_t *vconfig, dns_rdataclass_t vclass,	       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_FALSE, &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))	{		isc_result_t tresult;		cfg_obj_t *zone = cfg_listelt_value(element);		tresult = check_zoneconf(zone, config, symtab, vclass,					 logctx, mctx);		if (tresult != 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);	(void)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;		(void)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;	}	/*	 * Check that dual-stack-servers is reasonable.	 */	if (vconfig == NULL) {		cfg_obj_t *options = NULL;		(void)cfg_map_get(config, "options", &options);		if (options != NULL)			if (check_dual_stack(options, logctx) != ISC_R_SUCCESS)				result = ISC_R_FAILURE;	} else {		if (check_dual_stack(vconfig, logctx) != ISC_R_SUCCESS)			result = ISC_R_FAILURE;	}	/*	 * Check that rrset-order is reasonable.	 */	if (vconfig != NULL) {		if (check_order(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, mctx);	else		tresult = check_options(config, logctx, mctx);	if (tresult != ISC_R_SUCCESS)		result = tresult;	return (result);}isc_result_tbind9_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 *kals = NULL;	cfg_obj_t *obj;	cfg_listelt_t *velement;	isc_result_t result = ISC_R_SUCCESS;	isc_result_t tresult;	isc_symtab_t *symtab = NULL;	static const char *builtin[] = { "localhost", "localnets",					 "any", "none"};	(void)cfg_map_get(config, "options", &options);	if (options != NULL &&	    check_options(options, logctx, mctx) != 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;	if (options != NULL && 	    check_order(options, logctx) != ISC_R_SUCCESS)		result = ISC_R_FAILURE;	(void)cfg_map_get(config, "view", &views);	if (views != NULL && options != NULL)		if (check_dual_stack(options, logctx) != ISC_R_SUCCESS)			result = ISC_R_FAILURE;	if (views == NULL) {		if (check_viewconf(config, NULL, dns_rdataclass_in,				   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;		}	}	tresult = isc_symtab_create(mctx, 100, NULL, NULL, ISC_TRUE, &symtab);	if (tresult != ISC_R_SUCCESS)		result = tresult;	for (velement = cfg_list_first(views);	     velement != NULL;	     velement = cfg_list_next(velement))	{		cfg_obj_t *view = cfg_listelt_value(velement);		cfg_obj_t *vname = cfg_tuple_get(view, "name");		cfg_obj_t *voptions = cfg_tuple_get(view, "options");		cfg_obj_t *vclassobj = cfg_tuple_get(view, "class");		dns_rdataclass_t vclass = dns_rdataclass_in;		isc_result_t tresult = ISC_R_SUCCESS;		const char *key = cfg_obj_asstring(vname);		isc_symvalue_t symvalue;		if (cfg_obj_isstring(vclassobj)) {			isc_textregion_t r;			DE_CONST(cfg_obj_asstring(vclassobj), r.base);			r.length = strlen(r.base);			tresult = dns_rdataclass_fromtext(&vclass, &r);			if (tresult != ISC_R_SUCCESS)				cfg_obj_log(vclassobj, logctx, ISC_LOG_ERROR,					    "view '%s': invalid class %s",					    cfg_obj_asstring(vname), r.base);		}		if (tresult == ISC_R_SUCCESS && symtab != NULL) {			symvalue.as_pointer = view;			tresult = isc_symtab_define(symtab, key, vclass,						    symvalue,						    isc_symexists_reject);			if (tresult == ISC_R_EXISTS) {				const char *file;				unsigned int line;				RUNTIME_CHECK(isc_symtab_lookup(symtab, key,				           vclass, &symvalue) == ISC_R_SUCCESS);				file = cfg_obj_file(symvalue.as_pointer);				line = cfg_obj_line(symvalue.as_pointer);				cfg_obj_log(view, logctx, ISC_LOG_ERROR,					    "view '%s': already exists "					    "previous definition: %s:%u",					    key, file, line);				result = tresult;			} else if (result != ISC_R_SUCCESS) {				result = tresult;			} else if ((strcasecmp(key, "_bind") == 0 &&				    vclass == dns_rdataclass_ch) ||				   (strcasecmp(key, "_default") == 0 &&				    vclass == dns_rdataclass_in)) {				cfg_obj_log(view, logctx, ISC_LOG_ERROR,					    "attempt to redefine builtin view "					    "'%s'", key);				result = ISC_R_EXISTS;			}		}		if (tresult == ISC_R_SUCCESS)			tresult = check_viewconf(config, voptions,						 vclass, logctx, mctx);		if (tresult != ISC_R_SUCCESS)			result = ISC_R_FAILURE;	}	if (symtab != NULL)		isc_symtab_destroy(&symtab);	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) {					const char *file = cfg_obj_file(acl);					unsigned int line = cfg_obj_line(acl);					if (file == NULL)						file = "<unknown file>";					cfg_obj_log(acl2, logctx, ISC_LOG_ERROR,						    "attempt to redefine "						    "acl '%s' previous "						    "definition: %s:%u",						     name, file, line);					result = ISC_R_FAILURE;				}			}		}	}        tresult = cfg_map_get(config, "kal", &kals);        if (tresult == ISC_R_SUCCESS) {		cfg_listelt_t *elt;		cfg_listelt_t *elt2;		const char *aclname;		for (elt = cfg_list_first(kals);		     elt != NULL;		     elt = cfg_list_next(elt)) {			cfg_obj_t *acl = cfg_listelt_value(elt);			aclname = cfg_obj_asstring(cfg_tuple_get(acl, "name"));			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) {					const char *file = cfg_obj_file(acl);					unsigned int line = cfg_obj_line(acl);					if (file == NULL)						file = "<unknown file>";					cfg_obj_log(acl2, logctx, ISC_LOG_ERROR,						    "attempt to redefine "						    "kal '%s' previous "						    "definition: %s:%u",						     name, file, line);					result = ISC_R_FAILURE;				}			}		}	}	return (result);}

⌨️ 快捷键说明

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