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

📄 zoneconf.c

📁 bind-3.2.
💻 C
📖 第 1 页 / 共 2 页
字号:
	dns_name_t **keynames;	isc_uint32_t count;	char *cpval;	unsigned int dbargc;	char **dbargv;	static char default_dbtype[] = "rbt";	isc_mem_t *mctx = dns_zone_getmctx(zone);	dns_dialuptype_t dialup = dns_dialuptype_no;	dns_zonetype_t ztype;	int i;	i = 0;	if (zconfig != NULL) {		zoptions = cfg_tuple_get(zconfig, "options");		maps[i++] = zoptions;	}	if (vconfig != NULL)		maps[i++] = cfg_tuple_get(vconfig, "options");	if (config != NULL) {		(void)cfg_map_get(config, "options", &options);		if (options != NULL)			maps[i++] = options;	}	maps[i++] = ns_g_defaults;	maps[i++] = NULL;	if (vconfig != NULL)		RETERR(ns_config_getclass(cfg_tuple_get(vconfig, "class"),					  dns_rdataclass_in, &vclass));	else		vclass = dns_rdataclass_in;	/*	 * Configure values common to all zone types.	 */	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);	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);		dns_zone_setnotifysrc4(zone, cfg_obj_assockaddr(obj));		obj = NULL;		result = ns_config_get(maps, "notify-source-v6", &obj);		INSIST(result == ISC_R_SUCCESS);		dns_zone_setnotifysrc6(zone, 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);	}	/*	 * 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);	} 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);		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);		dns_zone_setxfrsource4(zone, cfg_obj_assockaddr(obj));		obj = NULL;		result = ns_config_get(maps, "transfer-source-v6", &obj);		INSIST(result == ISC_R_SUCCESS);		dns_zone_setxfrsource6(zone, cfg_obj_assockaddr(obj));		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 + -