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

📄 t_db.c

📁 bind-3.2.
💻 C
📖 第 1 页 / 共 5 页
字号:
	dns_result = t_create(db_type, origin, class, model, mctx, &db);	if (dns_result != ISC_R_SUCCESS) {		isc_mem_destroy(&mctx);		return(T_UNRESOLVED);	}	dns_result = dns_db_load(db, filename);	if (dns_result != ISC_R_SUCCESS) {		t_info("dns_db_load returned %s\n",				dns_result_totext(dns_result));		dns_db_detach(&db);		isc_mem_destroy(&mctx);		return(T_UNRESOLVED);	}	/*	 * Remove all rdata for an existing name.	 */	dns_fixedname_init(&dns_existingname);	len = strlen(existing_name);	isc_buffer_init(&name_buffer, existing_name, len);	isc_buffer_add(&name_buffer, len);	dns_result = dns_name_fromtext(dns_fixedname_name(&dns_existingname),			&name_buffer, NULL, ISC_FALSE, NULL);	if (dns_result != ISC_R_SUCCESS) {		t_info("dns_name_fromtext failed %s\n",			dns_result_totext(dns_result));		dns_db_detach(&db);		isc_mem_destroy(&mctx);		return(T_UNRESOLVED);	}	textregion.base = existing_type;	textregion.length = strlen(existing_type);	dns_result = dns_rdatatype_fromtext(&existing_rdatatype, &textregion);	if (dns_result != ISC_R_SUCCESS) {		t_info("dns_rdatatype_fromtext %s failed %s\n",				existing_type,				dns_result_totext(dns_result));		dns_db_detachnode(db, &nodep);		dns_db_detach(&db);		isc_mem_destroy(&mctx);		return(T_UNRESOLVED);	}	nodep = NULL;	dns_result = dns_db_findnode(db, dns_fixedname_name(&dns_existingname),				ISC_FALSE, &nodep);	if (dns_result != ISC_R_SUCCESS) {		t_info("dns_db_findnode %s\n",				dns_result_totext(dns_result));		dns_db_detach(&db);		isc_mem_destroy(&mctx);		return(T_UNRESOLVED);	}	/*	 * Open a new version.	 */	nversionp = NULL;	dns_result = dns_db_newversion(db, &nversionp);	if (dns_result != ISC_R_SUCCESS) {		t_info("dns_db_newversion failed %s\n",				dns_result_totext(dns_result));		dns_db_detachnode(db, &nodep);		dns_db_detach(&db);		isc_mem_destroy(&mctx);		return(T_UNRESOLVED);	}	dns_result = dns_db_deleterdataset(db, nodep, nversionp,					   existing_rdatatype, 0);	if (dns_result != ISC_R_SUCCESS) {		t_info("dns_db_deleterdataset failed %s\n",				dns_result_totext(dns_result));		dns_db_closeversion(db, &nversionp, ISC_FALSE);		dns_db_detachnode(db, &nodep);		dns_db_detach(&db);		isc_mem_destroy(&mctx);		return(T_UNRESOLVED);	}	/*	 * add a new name and associate some rdata with it	 */	dns_db_detachnode(db, &nodep);	nodep = NULL;	dns_fixedname_init(&dns_newname);	len = strlen(new_name);	isc_buffer_init(&name_buffer, new_name, len);	isc_buffer_add(&name_buffer, len);	dns_result = dns_name_fromtext(dns_fixedname_name(&dns_newname),				       &name_buffer, NULL, ISC_FALSE, NULL);	if (dns_result != ISC_R_SUCCESS) {		t_info("dns_name_fromtext failed %s\n",		       dns_result_totext(dns_result));		dns_db_closeversion(db, &nversionp, ISC_FALSE);		dns_db_detach(&db);		isc_mem_destroy(&mctx);		return(T_UNRESOLVED);	}	dns_result = dns_db_findnode(db, dns_fixedname_name(&dns_newname),				     ISC_TRUE, &nodep);	if (dns_result != ISC_R_SUCCESS) {		t_info("dns_db_findnode failed %s\n",		       dns_result_totext(dns_result));		dns_db_closeversion(db, &nversionp, ISC_FALSE);		dns_db_detach(&db);		isc_mem_destroy(&mctx);		return(T_UNRESOLVED);	}	textregion.base = new_type;	textregion.length = strlen(new_type);	dns_result = dns_rdatatype_fromtext(&new_rdatatype, &textregion);	if (dns_result != ISC_R_SUCCESS) {		t_info("dns_rdatatype_fromtext %s failed %s\n",		       new_type, dns_result_totext(dns_result));		dns_db_detachnode(db, &nodep);		dns_db_detach(&db);		isc_mem_destroy(&mctx);		return(T_UNRESOLVED);	}	textregion.base = class;	textregion.length = strlen(class);	dns_result = dns_rdataclass_fromtext(&rdataclass, &textregion);	if (dns_result != ISC_R_SUCCESS) {		t_info("dns_rdataclass_fromtext failed %s\n",		       dns_result_totext(dns_result));		dns_db_detachnode(db, &nodep);		dns_db_detach(&db);		isc_mem_destroy(&mctx);		return(T_UNRESOLVED);	}	dns_rdata_init(&added_rdata);	added_rdata_data = "\x10\x00\x00\x01";	DE_CONST(added_rdata_data, added_rdata.data);	added_rdata.length = 4;	added_rdata.rdclass = rdataclass;	added_rdata.type = new_rdatatype;	dns_rdataset_init(&added_rdataset);	rdatalist.type = new_rdatatype;	rdatalist.covers = 0;	rdatalist.rdclass = rdataclass;	rdatalist.ttl = 0;	ISC_LIST_INIT(rdatalist.rdata);	ISC_LIST_APPEND(rdatalist.rdata, &added_rdata, link);	dns_result = dns_rdatalist_tordataset(&rdatalist, &added_rdataset);	if (dns_result != ISC_R_SUCCESS) {		t_info("dns_rdatalist_tordataset failed %s\n",		       dns_result_totext(dns_result));		dns_db_detachnode(db, &nodep);		dns_db_detach(&db);		isc_mem_destroy(&mctx);		return(T_UNRESOLVED);	}	dns_result = dns_db_addrdataset(db, nodep, nversionp, 0,				&added_rdataset, 0, NULL);	if (dns_result != ISC_R_SUCCESS) {		t_info("dns_db_addrdataset failed %s\n",		       dns_result_totext(dns_result));		dns_db_closeversion(db, &nversionp, ISC_FALSE);		dns_db_detachnode(db, &nodep);		dns_db_detach(&db);		isc_mem_destroy(&mctx);		return(T_UNRESOLVED);	}	/*	 * Check that our changes took.	 */	dns_db_detachnode(db, &nodep);	nodep = NULL;	dns_fixedname_init(&dns_foundname);	dns_rdataset_init(&found_rdataset);	/*	 * Find the recently added name and rdata.	 */	dns_result = dns_db_find(db, dns_fixedname_name(&dns_newname),				 nversionp, new_rdatatype, 0, 0, &nodep,				 dns_fixedname_name(&dns_foundname),				 &found_rdataset, NULL);	if ((dns_result == ISC_R_NOTFOUND) ||	    (dns_result == DNS_R_NXDOMAIN) ||	    (dns_result == DNS_R_NXRRSET)) {		t_info("dns_db_find failed %s\n",		       dns_result_totext(dns_result));		dns_db_closeversion(db, &nversionp, ISC_FALSE);		dns_db_detachnode(db, &nodep);		if (dns_rdataset_isassociated(&found_rdataset))			dns_rdataset_disassociate(&found_rdataset);		dns_db_detach(&db);		isc_mem_destroy(&mctx);		return(T_FAIL);	}	dns_result = dns_rdataset_first(&found_rdataset);	if (dns_result != ISC_R_SUCCESS) {		t_info("dns_rdataset_first failed %s\n",				dns_result_totext(dns_result));		dns_db_detachnode(db, &nodep);		if (dns_rdataset_isassociated(&found_rdataset))			dns_rdataset_disassociate(&found_rdataset);		dns_db_closeversion(db, &nversionp, ISC_FALSE);		dns_db_detach(&db);		isc_mem_destroy(&mctx);		return(T_FAIL);	}	/*	 * Now make sure its what we expect.	 */	dns_rdata_init(&found_rdata);	dns_rdataset_current(&found_rdataset, &found_rdata);	rval = dns_rdata_compare(&added_rdata, &found_rdata);	if (rval != 0) {		t_info("dns_rdata_compare returned %d\n", rval);		++nfails;	}	/*	 * Now check the rdata deletion.	 */	if (dns_rdataset_isassociated(&found_rdataset))		dns_rdataset_disassociate(&found_rdataset);	dns_rdataset_init(&found_rdataset);	dns_db_detachnode(db, &nodep);	nodep = NULL;	dns_fixedname_init(&dns_foundname);	dns_result = dns_db_find(db,			dns_fixedname_name(&dns_existingname),			nversionp,			existing_rdatatype,			0,			0,			&nodep,			dns_fixedname_name(&dns_foundname),			&found_rdataset, NULL);	if ((dns_result != ISC_R_NOTFOUND) && (dns_result != DNS_R_NXDOMAIN)) {		t_info("dns_db_find %s returned %s\n", existing_name,		       dns_result_totext(dns_result));		if (dns_rdataset_isassociated(&found_rdataset))			dns_rdataset_disassociate(&found_rdataset);		dns_db_detachnode(db, &nodep);		++nfails;	}	/*	 * Close the version without a commit.	 */	dns_db_closeversion(db, &nversionp, ISC_FALSE);	/*	 * Open the current version and check changes.	 */	dns_fixedname_init(&dns_foundname);	dns_rdataset_init(&found_rdataset);	cversionp = NULL;	dns_db_currentversion(db, &cversionp);	/*	 * Find the recently added name and rdata.	 */	dns_result = dns_db_find(db,			dns_fixedname_name(&dns_newname),			cversionp,			new_rdatatype,			0,			0,			&nodep,			dns_fixedname_name(&dns_foundname),			&found_rdataset, NULL);	if ((dns_result != ISC_R_NOTFOUND) && (dns_result != DNS_R_NXDOMAIN)) {		t_info("dns_db_find %s returned %s\n", new_name,				dns_result_totext(dns_result));		dns_rdataset_disassociate(&found_rdataset);		dns_db_detachnode(db, &nodep);		dns_db_closeversion(db, &cversionp, ISC_FALSE);		dns_db_detach(&db);		isc_mem_destroy(&mctx);		return(T_FAIL);	}	/*	 * Now check the rdata deletion.	 */	nodep = NULL;	dns_rdataset_init(&found_rdataset);	dns_fixedname_init(&dns_foundname);	dns_result = dns_db_find(db, dns_fixedname_name(&dns_existingname),				 cversionp, existing_rdatatype, 0, 0,				 &nodep, dns_fixedname_name(&dns_foundname),				 &found_rdataset, NULL);	if ((dns_result == ISC_R_NOTFOUND) ||	    (dns_result == DNS_R_NXDOMAIN) ||	    (dns_result == DNS_R_NXRRSET)) {		t_info("dns_db_find %s returned %s\n", existing_name,		       dns_result_totext(dns_result));		dns_rdataset_disassociate(&found_rdataset);		dns_db_detachnode(db, &nodep);		++nfails;	}	dns_db_detachnode(db, &nodep);	dns_rdataset_disassociate(&found_rdataset);	dns_db_closeversion(db, &cversionp, ISC_FALSE);	dns_db_detach(&db);	isc_mem_destroy(&mctx);	if (nfails == 0)		result = T_PASS;	else		result = T_FAIL;	return(result);}static voidt11(void) {	int	result;	t_assert("dns_db_closeversion", 11, T_REQUIRED, a11);	result = t_eval("dns_db_closeversion_2_data",			t_dns_db_closeversion_2, 9);	t_result(result);}static const char *a12 =	"A call to dns_db_expirenode() marks as stale all records at node  "	"which expire at or before 'now'. If 'now' is zero, then the current  "	"time will be used.";static intt_dns_db_expirenode(char **av) {	char			*filename;	char			*db_type;	char			*origin;	char			*class;	char			*existing_name;	char			*node_xtime;	char			*find_xtime;	char			*exp_find_result;	int			result;	int			len;	dns_db_t		*db;	isc_result_t		dns_result;	isc_result_t		exp_result;	isc_result_t		isc_result;	isc_mem_t		*mctx;	dns_dbnode_t		*nodep;	isc_buffer_t		name_buffer;	dns_fixedname_t		dns_foundname;	dns_fixedname_t		dns_existingname;	isc_stdtime_t		node_expire_time;	isc_stdtime_t		find_expire_time;	isc_stdtime_t		now;	dns_rdataset_t		rdataset;	filename = T_ARG(0);	db_type = T_ARG(1);	origin = T_ARG(2);	class = T_ARG(3);	existing_name = T_ARG(4);	node_xtime = T_ARG(5);	find_xtime = T_ARG(6);	exp_find_result = T_ARG(7);	result = T_UNRESOLVED;	/*	 * Find a node, mark it as stale, do a dns_db_find on the name and	 * expect it to fail.	 */	t_info("testing using file %s and name %s\n", filename, existing_name);	node_expire_time = (isc_stdtime_t) strtol(node_xtime, NULL, 10);	find_expire_time = (isc_stdtime_t) strtol(find_xtime, NULL, 10);	exp_result = t_dns_result_fromtext(exp_find_result);	isc_stdtime_get(&now);	dns_fixedname_init(&dns_existingname);	len = strlen(existing_name);	isc_buffer_init(&name_buffer, existing_name, len);	isc_buffer_add(&name_buffer, len);	dns_result = dns_name_fromtext(dns_fixedname_name(&dns_existingname),				       &name_buffer, NULL, ISC_FALSE, NULL);	if (dns_result != ISC_R_SUCCESS) {		t_info("dns_name_fromtext failed %s\n",		       dns_result_totext(dns_result));		return(T_UNRESOLVED);	}	mctx = NULL;	isc_result = isc_mem_create(0, 0, &mctx);	if (isc_result != ISC_R_SUCCESS) {		t_info("isc_mem_create failed %s\n",		       isc_result_totext(isc_result));		return(T_UNRESOLVED);	}	db = NULL;	dns_result = t_create(db_type, origin, class, "cache", mctx, &db);	if (dns_result != ISC_R_SUCCESS) {		isc_mem_destroy(&mctx);		return(T_UNRESOLVED);	}	dns_result = dns_db_load(db, filename);	if (dns_result != ISC_R_SUCCESS) {		t_info("dns_db_load returned %s\n",		       dns_result_totext(dns_result));		dns_db_detach(&db);		isc_mem_destroy(&mctx);		return(T_UNRESOLVED);	}	nodep = NULL;	/*	 * Check that the node is there.	 */	dns_result = dns_db_findnode(db, dns_fixedname_name(&dns_existingname),				     ISC_FALSE, &nodep);	if (dns_result != ISC_R_SUCCESS) {		t_info("unable to find %s\n", existing_name);		dns_db_detach(&db);		isc_mem_destroy(&mctx);		return(T_UNRESOLVED);	}	/*	 * Expire it.	 */	if (node_expire_time != 0)		node_expire_time += now;	dns_result = dns_db_expirenode(db, nodep, node_expire_time);	if (dns_result != ISC_R_SUCCESS) {		t_info("dns_db_expirenode failed %s\n",		       dns_result_totext(dns_result));		dns_db_detachnode(db, &nodep);		dns_db_detach(&db);		isc_mem_destroy(&mctx);		return(T_FAIL);	}	dns_fixedname_init(&dns_foundname);	dns_rdataset_init(&rdataset);	dns_db_detachnode(db, &nodep);	nodep = NULL;	if (find_expire_time != 0)		find_expire_time += now;	dns_result = dns_db_find(db,				 dns_fixedname_name(&dns_existingname),				 NULL,				 dns_rdatatype_any,				 0,				 find_expire_time,				 &nodep,				 dns_fixedname_name(&dns_foundname),				 &rdataset, NULL);	if (dns_result == exp_result) {		result = T_PASS;	} else {		t_info("dns_db_find %s returned %s\n", existing_name,		       dns_result_totext(dns_result));		result = T_FAIL;	}	if ((dns_result != ISC_R_NOTFOUND) &&	    (dns_result != DNS_R_NXDOMAIN) &&	    (dns_result != DNS_R_NXRRSET)) {		/*		 * Don't need to disassociate the rdataset because		 * we're searching with dns_rdatatype_any.		 */		dns_db_detachnode(db, &nodep);	}	dns_db_detach(&db);	isc_mem_destroy(&mctx);	return(result);}static voidt12(void) {	int	result;	t_assert("dns_db_expirenode", 12, T_REQUIRED, a12);	result = t_eval("dns_db_expirenode_data", t_dns_db_expirenode, 8);	t_result(result);}static const char *a13 =	"If the node name exists, then a call to "	"dns_db_findnode(db, name, ISC_FALSE, nodep) initializes nodep "

⌨️ 快捷键说明

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