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

📄 t_db.c

📁 package of develop dns
💻 C
📖 第 1 页 / 共 5 页
字号:
	isc_textregion_t	textregion;	isc_buffer_t		newname_buffer;	dns_fixedname_t		dns_newname;	dns_fixedname_t		dns_foundname;	dns_rdata_t		added_rdata = DNS_RDATA_INIT;	const char *		added_rdata_data;	dns_rdataset_t		added_rdataset;	dns_rdata_t		found_rdata = DNS_RDATA_INIT;	dns_rdataset_t		found_rdataset;	dns_rdatatype_t		rdatatype;	dns_rdataclass_t	rdataclass;	dns_dbversion_t		*nversionp;	dns_rdatalist_t		rdatalist;	result = T_UNRESOLVED;	filename = T_ARG(0);	db_type = T_ARG(1);	origin = T_ARG(2);	class = T_ARG(3);	model = T_ARG(4);	newname = T_ARG(5);	newtype = T_ARG(6);	db = NULL;	mctx = NULL;	ectx = NULL;	/*	 * Open a new version, add some data, commit it,	 * close it, open a new version, and check that changes	 * are present.	 */	t_info("testing using file %s and name %s\n", filename, newname);	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);	}	isc_result = isc_entropy_create(mctx, &ectx);	if (isc_result != ISC_R_SUCCESS) {		t_info("isc_entropy_create failed %s\n",				isc_result_totext(isc_result));		isc_mem_destroy(&mctx);		return(T_UNRESOLVED);	}	isc_result = isc_hash_create(mctx, ectx, DNS_NAME_MAXWIRE);	if (isc_result != ISC_R_SUCCESS) {		t_info("isc_hash_create failed %s\n",				isc_result_totext(isc_result));		isc_entropy_detach(&ectx);		isc_mem_destroy(&mctx);		return(T_UNRESOLVED);	}	dns_result = t_create(db_type, origin, class, model, mctx, &db);	if (dns_result != ISC_R_SUCCESS) {		isc_hash_destroy();		isc_entropy_detach(&ectx);		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_hash_destroy();		isc_entropy_detach(&ectx);		isc_mem_destroy(&mctx);		return(T_UNRESOLVED);	}	/*	 * Add a new name.	 */	dns_fixedname_init(&dns_newname);	len = strlen(newname);	isc_buffer_init(&newname_buffer, newname, len);	isc_buffer_add(&newname_buffer, len);	dns_result = dns_name_fromtext(dns_fixedname_name(&dns_newname),				&newname_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_hash_destroy();		isc_entropy_detach(&ectx);		isc_mem_destroy(&mctx);		return(T_UNRESOLVED);	}	nodep = NULL;	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_detach(&db);		isc_hash_destroy();		isc_entropy_detach(&ectx);		isc_mem_destroy(&mctx);		return(T_UNRESOLVED);	}	/*	 * Open a new version and associate some rdata with the new name.	 */	textregion.base = newtype;	textregion.length = strlen(newtype);	dns_result = dns_rdatatype_fromtext(&rdatatype, &textregion);	if (dns_result != ISC_R_SUCCESS) {		t_info("dns_rdatatype_fromtext %s failed %s\n",				newtype,				dns_result_totext(dns_result));		dns_db_detachnode(db, &nodep);		dns_db_detach(&db);		isc_hash_destroy();		isc_entropy_detach(&ectx);		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_hash_destroy();		isc_entropy_detach(&ectx);		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 = rdatatype;	dns_rdataset_init(&added_rdataset);	rdatalist.type = 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_hash_destroy();		isc_entropy_detach(&ectx);		isc_mem_destroy(&mctx);		return(T_UNRESOLVED);	}	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_hash_destroy();		isc_entropy_detach(&ectx);		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_hash_destroy();		isc_entropy_detach(&ectx);		isc_mem_destroy(&mctx);		return(T_UNRESOLVED);	}	/*	 * Close and commit the version.	 */	dns_db_closeversion(db, &nversionp, ISC_TRUE);	dns_db_detachnode(db, &nodep);	if (dns_rdataset_isassociated(&added_rdataset))		dns_rdataset_disassociate(&added_rdataset);	nodep = NULL;	/*	 * Open a new version and find the data we added.	 */	dns_fixedname_init(&dns_foundname);	dns_rdataset_init(&found_rdataset);	nversionp = NULL;	found_nodep = NULL;	dns_db_newversion(db, &nversionp);	/*	 * Find the recently added name and rdata.	 */	dns_result = dns_db_find(db, dns_fixedname_name(&dns_newname),				 nversionp, rdatatype, 0, 0, &found_nodep,				 dns_fixedname_name(&dns_foundname),				 &found_rdataset, NULL);	if (dns_result != ISC_R_SUCCESS) {		/* XXXWPK - NXRRSET ???  reference counts ??? */		t_info("dns_db_find failed %s\n",		       dns_result_totext(dns_result));		dns_db_closeversion(db, &nversionp, ISC_FALSE);		dns_db_detachnode(db, &found_nodep);		if (dns_rdataset_isassociated(&found_rdataset))			dns_rdataset_disassociate(&found_rdataset);		dns_db_detach(&db);		isc_hash_destroy();		isc_entropy_detach(&ectx);		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_hash_destroy();		isc_entropy_detach(&ectx);		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) {		result = T_PASS;	} else {		t_info("dns_rdata_compare returned %d\n", rval);		result = T_FAIL;	}	/*	 * Don't need these now.	 */	dns_db_closeversion(db, &nversionp, ISC_FALSE);	if (dns_rdataset_isassociated(&found_rdataset))		dns_rdataset_disassociate(&found_rdataset);	dns_db_detachnode(db, &found_nodep);	dns_db_detach(&db);	isc_hash_destroy();	isc_entropy_detach(&ectx);	isc_mem_destroy(&mctx);	return(result);}static voidt9(void) {	int	result;	t_assert("dns_db_newversion", 9, T_REQUIRED, a9);	result = t_eval("dns_db_newversion_data", t_dns_db_newversion, 7);	t_result(result);}static const char *a10 =	"When versionp points to a read-write version and commit is "	"ISC_TRUE, a call to dns_db_closeversion(db, versionp, commit) "	"causes all changes made in the version to take effect, "	"and returns ISC_R_SUCCESS.";static intt_dns_db_closeversion_1(char **av) {	char			*filename;	char			*db_type;	char			*origin;	char			*class;	char			*model;	char			*new_name;	char			*new_type;	char			*existing_name;	char			*existing_type;	int			result;	int			len;	int			rval;	int			nfails;	dns_db_t		*db;	isc_result_t		dns_result;	isc_result_t		isc_result;	isc_mem_t		*mctx;	isc_entropy_t		*ectx;	dns_dbnode_t		*nodep;	isc_textregion_t	textregion;	isc_buffer_t		name_buffer;	dns_fixedname_t		dns_newname;	dns_fixedname_t		dns_foundname;	dns_fixedname_t		dns_existingname;	dns_rdata_t		added_rdata = DNS_RDATA_INIT;	const char *		added_rdata_data;	dns_rdataset_t		added_rdataset;	dns_rdata_t		found_rdata = DNS_RDATA_INIT;	dns_rdataset_t		found_rdataset;	dns_rdatatype_t		new_rdatatype;	dns_rdatatype_t		existing_rdatatype;	dns_rdataclass_t	rdataclass;	dns_dbversion_t		*nversionp;	dns_dbversion_t		*cversionp;	dns_rdatalist_t		rdatalist;	filename = T_ARG(0);	db_type = T_ARG(1);	origin = T_ARG(2);	class = T_ARG(3);	model = T_ARG(4);	new_name = T_ARG(5);	new_type = T_ARG(6);	existing_name = T_ARG(7);	existing_type = T_ARG(8);	nfails = 0;	result = T_UNRESOLVED;	db = NULL;	mctx = NULL;	ectx = NULL;	/*	 * Open a new version, add some data,	 * remove some data, close with commit, open the current	 * version and check that changes are present.	 */	t_info("testing using file %s and name %s\n", filename, new_name);	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);	}	isc_result = isc_entropy_create(mctx, &ectx);	if (isc_result != ISC_R_SUCCESS) {		t_info("isc_entropy_create failed %s\n",				isc_result_totext(isc_result));		isc_mem_destroy(&mctx);		return(T_UNRESOLVED);	}	isc_result = isc_hash_create(mctx, ectx, DNS_NAME_MAXWIRE);	if (isc_result != ISC_R_SUCCESS) {		t_info("isc_hash_create failed %s\n",				isc_result_totext(isc_result));		isc_entropy_detach(&ectx);		isc_mem_destroy(&mctx);		return(T_UNRESOLVED);	}	dns_result = t_create(db_type, origin, class, model, mctx, &db);	if (dns_result != ISC_R_SUCCESS) {		isc_hash_destroy();		isc_entropy_detach(&ectx);		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_hash_destroy();		isc_entropy_detach(&ectx);		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_hash_destroy();		isc_entropy_detach(&ectx);		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_hash_destroy();		isc_entropy_detach(&ectx);		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_hash_destroy();		isc_entropy_detach(&ectx);		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_hash_destroy();		isc_entropy_detach(&ectx);		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_hash_destroy();		isc_entropy_detach(&ectx);		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_hash_destroy();		isc_entropy_detach(&ectx);		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_hash_destroy();		isc_entropy_detach(&ectx);		isc_mem_destroy(&mctx);		return(T_UNRESOLVED);	}	/*

⌨️ 快捷键说明

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