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

📄 zoneconf.c

📁 bind 9.3结合mysql数据库
💻 C
📖 第 1 页 / 共 2 页
字号:
	zname = cfg_obj_asstring(cfg_tuple_get(zconfig, "name"));	RETERR(ns_config_getclass(cfg_tuple_get(zconfig, "class"),				  vclass, &zclass));	dns_zone_setclass(zone, zclass);	ztype = zonetype_fromconfig(zoptions);	dns_zone_settype(zone, ztype);	obj = NULL;	result = cfg_map_get(zoptions, "database", &obj);	if (result == ISC_R_SUCCESS)		cpval = cfg_obj_asstring(obj);	else		cpval = default_dbtype;	RETERR(strtoargv(mctx, cpval, &dbargc, &dbargv));	/*	 * ANSI C is strange here.  There is no logical reason why (char **)	 * cannot be promoted automatically to (const char * const *) by the	 * compiler w/o generating a warning.	 */	RETERR(dns_zone_setdbtype(zone, dbargc, (const char * const *)dbargv));	isc_mem_put(mctx, dbargv, dbargc * sizeof(*dbargv));	obj = NULL;	result = cfg_map_get(zoptions, "file", &obj);	if (result == ISC_R_SUCCESS)		filename = cfg_obj_asstring(obj);	RETERR(dns_zone_setfile(zone, filename));	if (ztype == dns_zone_slave)		RETERR(configure_zone_acl(zconfig, vconfig, config,					  "allow-notify", ac, zone,					  dns_zone_setnotifyacl,					  dns_zone_clearnotifyacl));	/*	 * XXXAG This probably does not make sense for stubs.	 */	RETERR(configure_zone_acl(zconfig, vconfig, config,				  "allow-query", ac, zone,				  dns_zone_setqueryacl,				  dns_zone_clearqueryacl));	obj = NULL;	result = ns_config_get(maps, "dialup", &obj);	INSIST(result == ISC_R_SUCCESS);	if (cfg_obj_isboolean(obj)) {		if (cfg_obj_asboolean(obj))			dialup = dns_dialuptype_yes;		else			dialup = dns_dialuptype_no;	} else {		char *dialupstr = cfg_obj_asstring(obj);		if (strcasecmp(dialupstr, "notify") == 0)			dialup = dns_dialuptype_notify;		else if (strcasecmp(dialupstr, "notify-passive") == 0)			dialup = dns_dialuptype_notifypassive;		else if (strcasecmp(dialupstr, "refresh") == 0)			dialup = dns_dialuptype_refresh;		else if (strcasecmp(dialupstr, "passive") == 0)			dialup = dns_dialuptype_passive;		else			INSIST(0);	}	dns_zone_setdialup(zone, dialup);	obj = NULL;	result = ns_config_get(maps, "zone-statistics", &obj);	INSIST(result == ISC_R_SUCCESS);	RETERR(dns_zone_setstatistics(zone, cfg_obj_asboolean(obj)));	/*	 * Configure master functionality.  This applies	 * to primary masters (type "master") and slaves	 * acting as masters (type "slave"), but not to stubs.	 */	if (ztype != dns_zone_stub) {		obj = NULL;		result = ns_config_get(maps, "notify", &obj);		INSIST(result == ISC_R_SUCCESS);		if (cfg_obj_isboolean(obj)) {			if (cfg_obj_asboolean(obj))				notifytype = dns_notifytype_yes;			else				notifytype = dns_notifytype_no;		} else {			char *notifystr = cfg_obj_asstring(obj);			if (strcasecmp(notifystr, "explicit") == 0)				notifytype = dns_notifytype_explicit;			else				INSIST(0);		}		dns_zone_setnotifytype(zone, notifytype);		obj = NULL;		result = ns_config_get(maps, "also-notify", &obj);		if (result == ISC_R_SUCCESS) {			isc_sockaddr_t *addrs = NULL;			isc_uint32_t addrcount;			result = ns_config_getiplist(config, obj, 0, mctx,						     &addrs, &addrcount);			if (result != ISC_R_SUCCESS)				return (result);			result = dns_zone_setalsonotify(zone, addrs,							addrcount);			ns_config_putiplist(mctx, &addrs, addrcount);			if (result != ISC_R_SUCCESS)				return (result);		} else			RETERR(dns_zone_setalsonotify(zone, NULL, 0));		obj = NULL;		result = ns_config_get(maps, "notify-source", &obj);		INSIST(result == ISC_R_SUCCESS);		RETERR(dns_zone_setnotifysrc4(zone, cfg_obj_assockaddr(obj)));		ns_add_reserved_dispatch(ns_g_server, cfg_obj_assockaddr(obj));		obj = NULL;		result = ns_config_get(maps, "notify-source-v6", &obj);		INSIST(result == ISC_R_SUCCESS);		RETERR(dns_zone_setnotifysrc6(zone, cfg_obj_assockaddr(obj)));		ns_add_reserved_dispatch(ns_g_server, cfg_obj_assockaddr(obj));		RETERR(configure_zone_acl(zconfig, vconfig, config,					  "allow-transfer", ac, zone,					  dns_zone_setxfracl,					  dns_zone_clearxfracl));		obj = NULL;		result = ns_config_get(maps, "max-transfer-time-out", &obj);		INSIST(result == ISC_R_SUCCESS);		dns_zone_setmaxxfrout(zone, cfg_obj_asuint32(obj) * 60);		obj = NULL;		result = ns_config_get(maps, "max-transfer-idle-out", &obj);		INSIST(result == ISC_R_SUCCESS);		dns_zone_setidleout(zone, cfg_obj_asuint32(obj) * 60);		obj = NULL;		result =  ns_config_get(maps, "max-journal-size", &obj);		INSIST(result == ISC_R_SUCCESS);		dns_zone_setjournalsize(zone, -1);		if (cfg_obj_isstring(obj)) {			const char *str = cfg_obj_asstring(obj);			INSIST(strcasecmp(str, "unlimited") == 0);			journal_size = ISC_UINT32_MAX / 2;		} else {			isc_resourcevalue_t value;			value = cfg_obj_asuint64(obj);			if (value > ISC_UINT32_MAX / 2) {				cfg_obj_log(obj, ns_g_lctx,					    ISC_LOG_ERROR,					    "'max-journal-size "					    "%" ISC_PRINT_QUADFORMAT "d' "					    "is too large",					    value);				RETERR(ISC_R_RANGE);			}			journal_size = (isc_uint32_t)value;		}		dns_zone_setjournalsize(zone, journal_size);		obj = NULL;		result = ns_config_get(maps, "ixfr-from-differences", &obj);		INSIST(result == ISC_R_SUCCESS);		dns_zone_setoption(zone, DNS_ZONEOPT_IXFRFROMDIFFS,				   cfg_obj_asboolean(obj));		checknames(ztype, maps, &obj);		INSIST(obj != NULL);		if (strcasecmp(cfg_obj_asstring(obj), "warn") == 0) {			fail = ISC_FALSE;			check = ISC_TRUE;		} else if (strcasecmp(cfg_obj_asstring(obj), "fail") == 0) {			fail = check = ISC_TRUE;		} else if (strcasecmp(cfg_obj_asstring(obj), "ignore") == 0) {			fail = check = ISC_FALSE;		} else			INSIST(0);		dns_zone_setoption(zone, DNS_ZONEOPT_CHECKNAMES, check);		dns_zone_setoption(zone, DNS_ZONEOPT_CHECKNAMESFAIL, fail);	}	/*	 * Configure update-related options.  These apply to	 * primary masters only.	 */	if (ztype == dns_zone_master) {		dns_acl_t *updateacl;		RETERR(configure_zone_acl(zconfig, vconfig, config,					  "allow-update", ac, zone,					  dns_zone_setupdateacl,					  dns_zone_clearupdateacl));				updateacl = dns_zone_getupdateacl(zone);		if (updateacl != NULL  && dns_acl_isinsecure(updateacl))			isc_log_write(ns_g_lctx, DNS_LOGCATEGORY_SECURITY,				      NS_LOGMODULE_SERVER, ISC_LOG_WARNING,				      "zone '%s' allows updates by IP "				      "address, which is insecure",				      zname);				RETERR(configure_zone_ssutable(zoptions, zone));		obj = NULL;		result = ns_config_get(maps, "sig-validity-interval", &obj);		INSIST(result == ISC_R_SUCCESS);		dns_zone_setsigvalidityinterval(zone,						cfg_obj_asuint32(obj) * 86400);		obj = NULL;		result = ns_config_get(maps, "key-directory", &obj);		if (result == ISC_R_SUCCESS) {			filename = cfg_obj_asstring(obj);			if (!isc_file_isabsolute(filename)) {				cfg_obj_log(obj, ns_g_lctx, ISC_LOG_ERROR,					    "key-directory '%s' "					    "is not absolute", filename);				return (ISC_R_FAILURE);			}			RETERR(dns_zone_setkeydirectory(zone, filename));		}	} else if (ztype == dns_zone_slave) {		RETERR(configure_zone_acl(zconfig, vconfig, config,					  "allow-update-forwarding", ac, zone,					  dns_zone_setforwardacl,					  dns_zone_clearforwardacl));	}	/*	 * Configure slave functionality.	 */	switch (ztype) {	case dns_zone_slave:	case dns_zone_stub:		obj = NULL;		result = cfg_map_get(zoptions, "masters", &obj);		if (obj != NULL) {			addrs = NULL;			keynames = NULL;			RETERR(ns_config_getipandkeylist(config, obj, mctx,							 &addrs, &keynames,							 &count));			result = dns_zone_setmasterswithkeys(zone, addrs,							     keynames, count);			ns_config_putipandkeylist(mctx, &addrs, &keynames,						  count);		} else			result = dns_zone_setmasters(zone, NULL, 0);		RETERR(result);		multi = ISC_FALSE;		if (count > 1) {			obj = NULL;			result = ns_config_get(maps, "multi-master", &obj);			INSIST(result == ISC_R_SUCCESS);			multi = cfg_obj_asboolean(obj);		}		dns_zone_setoption(zone, DNS_ZONEOPT_MULTIMASTER, multi);		obj = NULL;		result = ns_config_get(maps, "max-transfer-time-in", &obj);		INSIST(result == ISC_R_SUCCESS);		dns_zone_setmaxxfrin(zone, cfg_obj_asuint32(obj) * 60);		obj = NULL;		result = ns_config_get(maps, "max-transfer-idle-in", &obj);		INSIST(result == ISC_R_SUCCESS);		dns_zone_setidlein(zone, cfg_obj_asuint32(obj) * 60);		obj = NULL;		result = ns_config_get(maps, "max-refresh-time", &obj);		INSIST(result == ISC_R_SUCCESS);		dns_zone_setmaxrefreshtime(zone, cfg_obj_asuint32(obj));		obj = NULL;		result = ns_config_get(maps, "min-refresh-time", &obj);		INSIST(result == ISC_R_SUCCESS);		dns_zone_setminrefreshtime(zone, cfg_obj_asuint32(obj));		obj = NULL;		result = ns_config_get(maps, "max-retry-time", &obj);		INSIST(result == ISC_R_SUCCESS);		dns_zone_setmaxretrytime(zone, cfg_obj_asuint32(obj));		obj = NULL;		result = ns_config_get(maps, "min-retry-time", &obj);		INSIST(result == ISC_R_SUCCESS);		dns_zone_setminretrytime(zone, cfg_obj_asuint32(obj));		obj = NULL;		result = ns_config_get(maps, "transfer-source", &obj);		INSIST(result == ISC_R_SUCCESS);		RETERR(dns_zone_setxfrsource4(zone, cfg_obj_assockaddr(obj)));		ns_add_reserved_dispatch(ns_g_server, cfg_obj_assockaddr(obj));		obj = NULL;		result = ns_config_get(maps, "transfer-source-v6", &obj);		INSIST(result == ISC_R_SUCCESS);		RETERR(dns_zone_setxfrsource6(zone, cfg_obj_assockaddr(obj)));		ns_add_reserved_dispatch(ns_g_server, cfg_obj_assockaddr(obj));		obj = NULL;		result = ns_config_get(maps, "alt-transfer-source", &obj);		INSIST(result == ISC_R_SUCCESS);		RETERR(dns_zone_setaltxfrsource4(zone, cfg_obj_assockaddr(obj)));		obj = NULL;		result = ns_config_get(maps, "alt-transfer-source-v6", &obj);		INSIST(result == ISC_R_SUCCESS);		RETERR(dns_zone_setaltxfrsource6(zone, cfg_obj_assockaddr(obj)));		obj = NULL;		(void)ns_config_get(maps, "use-alt-transfer-source", &obj);		if (obj == NULL) {			/*			 * Default off when views are in use otherwise			 * on for BIND 8 compatibility.			 */			view = dns_zone_getview(zone);			if (view != NULL && strcmp(view->name, "_default") == 0)				alt = ISC_TRUE;			else				alt = ISC_FALSE;		} else			alt = cfg_obj_asboolean(obj);		dns_zone_setoption(zone, DNS_ZONEOPT_USEALTXFRSRC, alt);		break;	default:		break;	}	return (ISC_R_SUCCESS);}isc_boolean_tns_zone_reusable(dns_zone_t *zone, cfg_obj_t *zconfig) {	cfg_obj_t *zoptions = NULL;	cfg_obj_t *obj = NULL;	const char *cfilename;	const char *zfilename;	zoptions = cfg_tuple_get(zconfig, "options");	if (zonetype_fromconfig(zoptions) != dns_zone_gettype(zone))		return (ISC_FALSE);	obj = NULL;	(void)cfg_map_get(zoptions, "file", &obj);	if (obj != NULL)		cfilename = cfg_obj_asstring(obj);	else		cfilename = NULL;	zfilename = dns_zone_getfile(zone);	if (!((cfilename == NULL && zfilename == NULL) ||	      (cfilename != NULL && zfilename != NULL &&	       strcmp(cfilename, zfilename) == 0)))	    return (ISC_FALSE);	return (ISC_TRUE);}

⌨️ 快捷键说明

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