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

📄 t_db.c

📁 bind-3.2.
💻 C
📖 第 1 页 / 共 5 页
字号:
	dns_db_detach(&db);	isc_mem_destroy(&mctx);	return(result);}static const char *a6 =	"A call to dns_db_origin(db) returns the origin of the database.";static voidt6(void) {	int	result;	t_assert("dns_db_origin", 6, T_REQUIRED, a6);	result = t_eval("dns_db_origin_data", t_dns_db_origin, 2);	t_result(result);}static const char *a7 =	"A call to dns_db_class(db) returns the class of the database.";#define	CLASSBUFLEN	256static intt_dns_db_class(char **av) {	char			*filename;	char			*class;	int			result;	isc_result_t		dns_result;	isc_result_t		isc_result;	isc_mem_t		*mctx;	dns_db_t		*db;	dns_rdataclass_t	rdataclass;	dns_rdataclass_t	db_rdataclass;	isc_textregion_t	textregion;	filename = T_ARG(0);	class = T_ARG(1);	db = NULL;	mctx = NULL;	t_info("testing with database %s and class %s\n",			filename, class);	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));		return(T_UNRESOLVED);	}	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);	}	dns_result = t_create("rbt", ".", class, "isc_true", mctx, &db);	if (dns_result != ISC_R_SUCCESS) {		t_info("t_create failed %s\n",			dns_result_totext(dns_result));		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 failed %s\n",				dns_result_totext(dns_result));		dns_db_detach(&db);		isc_mem_destroy(&mctx);		return(T_UNRESOLVED);	}	db_rdataclass = dns_db_class(db);	if (db_rdataclass == rdataclass)		result = T_PASS;	else {		char classbuf[DNS_RDATACLASS_FORMATSIZE];		dns_rdataclass_format(db_rdataclass,				      classbuf, sizeof(classbuf));		t_info("dns_db_class returned %s, expected %s\n",		       classbuf, class);		result = T_FAIL;	}	dns_db_detach(&db);	isc_mem_destroy(&mctx);	return(result);}static voidt7(void) {	int	result;	t_assert("dns_db_class", 7, T_REQUIRED, a7);	result = t_eval("dns_db_class_data", t_dns_db_class, 2);	t_result(result);}static const char *a8 =	"A call to dns_db_currentversion() opens the current "	"version for reading.";static intt_dns_db_currentversion(char **av) {	char			*filename;	char			*db_type;	char			*origin;	char			*class;	char			*model;	char			*findname;	char			*findtype;	int			result;	int			len;	dns_db_t		*db;	isc_result_t		dns_result;	isc_result_t		isc_result;	isc_mem_t		*mctx;	dns_dbnode_t		*nodep;	isc_textregion_t	textregion;	isc_buffer_t		findname_buffer;	dns_fixedname_t		dns_findname;	dns_fixedname_t		dns_foundname;	dns_rdataset_t		rdataset;	dns_rdatatype_t		rdatatype;	dns_dbversion_t		*cversionp;	dns_dbversion_t		*nversionp;	result = T_UNRESOLVED;	filename = T_ARG(0);	db_type = T_ARG(1);	origin = T_ARG(2);	class = T_ARG(3);	model = T_ARG(4);	findname = T_ARG(5);	findtype = T_ARG(6);	db = NULL;	mctx = NULL;	t_info("testing using file %s and name %s\n", filename, findname);	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);	}	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);	}	dns_fixedname_init(&dns_findname);	len = strlen(findname);	isc_buffer_init(&findname_buffer, findname, len);	isc_buffer_add(&findname_buffer, len);	dns_result = dns_name_fromtext(dns_fixedname_name(&dns_findname),				&findname_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 = findtype;	textregion.length = strlen(findtype);	dns_result = dns_rdatatype_fromtext(&rdatatype, &textregion);	if (dns_result != ISC_R_SUCCESS) {		t_info("dns_rdatatype_fromtext %s failed %s\n",				findtype,				dns_result_totext(dns_result));		dns_db_detach(&db);		isc_mem_destroy(&mctx);		return(T_UNRESOLVED);	}	/*	 * find a name we know is there	 */	cversionp = NULL;	dns_fixedname_init(&dns_foundname);	dns_rdataset_init(&rdataset);	dns_db_currentversion(db, &cversionp);	nodep = NULL;	dns_result = dns_db_find(db,			dns_fixedname_name(&dns_findname),			cversionp,			rdatatype,			0,			0,			&nodep,			dns_fixedname_name(&dns_foundname),			&rdataset, NULL);	if (dns_result != ISC_R_SUCCESS) {		t_info("unable to find %s using current version\n", findname);		dns_db_closeversion(db, &cversionp, ISC_FALSE);		dns_db_detach(&db);		isc_mem_destroy(&mctx);		return(T_UNRESOLVED);	}	/*	 * create a new version	 * delete the found rdataset in the new version	 * attempt to find the rdataset again and expect the find to fail	 * close/commit the new version	 * attempt to find the rdataset in the current version and	 * expect the find to succeed	 */	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_rdataset_disassociate(&rdataset);		dns_db_closeversion(db, &cversionp, ISC_FALSE);		dns_db_detach(&db);		isc_mem_destroy(&mctx);		return(T_UNRESOLVED);	}	/*	 * Delete the found rdataset in the new version.	 */	dns_result = dns_db_deleterdataset(db, nodep, nversionp, rdatatype, 0);	if (dns_result != ISC_R_SUCCESS) {		t_info("dns_db_deleterdataset failed %s\n",				dns_result_totext(dns_result));		dns_rdataset_disassociate(&rdataset);		dns_db_detachnode(db, &nodep);		dns_db_closeversion(db, &nversionp, ISC_FALSE);		dns_db_closeversion(db, &cversionp, ISC_FALSE);		dns_db_detach(&db);		isc_mem_destroy(&mctx);		return(T_UNRESOLVED);	}	/*	 * Don't need these now.	 */	dns_rdataset_disassociate(&rdataset);	dns_db_detachnode(db, &nodep);	nodep = NULL;	/*	 * Find the deleted rdataset and expect it to fail.	 */	dns_result = dns_db_find(db,			dns_fixedname_name(&dns_findname),			nversionp,			rdatatype,			0,			0,			&nodep,			dns_fixedname_name(&dns_foundname),			&rdataset, NULL);	if ((dns_result != ISC_R_NOTFOUND) && (dns_result != DNS_R_NXDOMAIN)) {		t_info("unexpectedly found %s using current version\n",		       findname);		dns_db_closeversion(db, &cversionp, ISC_FALSE);		dns_db_closeversion(db, &nversionp, ISC_FALSE);		dns_db_detach(&db);		isc_mem_destroy(&mctx);		return(T_FAIL);	}	/*	 * Close/commit the new version.	 */	dns_db_closeversion(db, &nversionp, ISC_TRUE);	/*	 * Find the deleted rdata in the current version.	 */	dns_result = dns_db_find(db, dns_fixedname_name(&dns_findname),				 cversionp, rdatatype, DNS_DBFIND_GLUEOK,				 0, &nodep, dns_fixedname_name(&dns_foundname),				 &rdataset, NULL);	/*	 * And expect it to succeed.	 */	if (dns_result == ISC_R_SUCCESS) {		result = T_PASS;	} else {		t_info("cound not find %s using current version\n", findname);		dns_db_closeversion(db, &cversionp, ISC_FALSE);		dns_db_detach(&db);		isc_mem_destroy(&mctx);		result = T_FAIL;	}	dns_db_detachnode(db, &nodep);	dns_rdataset_disassociate(&rdataset);	dns_db_closeversion(db, &cversionp, ISC_FALSE);	dns_db_detach(&db);	isc_mem_destroy(&mctx);	return(result);}static voidt8(void) {	int	result;	t_assert("dns_db_currentversion", 8, T_REQUIRED, a8);	result = t_eval("dns_db_currentversion_data",			t_dns_db_currentversion, 7);	t_result(result);}static const char *a9 =	"A call to dns_db_newversion() opens a new version for "	"reading and writing.";static intt_dns_db_newversion(char **av) {	char			*filename;	char			*db_type;	char			*origin;	char			*class;	char			*model;	char			*newname;	char			*newtype;	int			result;	int			len;	int			rval;	dns_db_t		*db;	isc_result_t		dns_result;	isc_result_t		isc_result;	isc_mem_t		*mctx;	dns_dbnode_t		*nodep;	dns_dbnode_t		*found_nodep;	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;	/*	 * 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);	}	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);	}	/*	 * 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_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_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_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 = 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_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_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);

⌨️ 快捷键说明

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