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

📄 t_db.c

📁 package of develop dns
💻 C
📖 第 1 页 / 共 5 页
字号:
	dns_fixedname_t		dns_origin;	dns_fixedname_t		dns_dborigin;	isc_buffer_t		origin_buffer;	db = NULL;	mctx = NULL;	ectx = NULL;	filename = T_ARG(0);	origin = T_ARG(1);	t_info("testing with database %s and origin %s\n",			filename, origin);	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("rbt", origin, "in", "isc_true", mctx, &db);	if (dns_result != ISC_R_SUCCESS) {		t_info("t_create failed %s\n",			dns_result_totext(dns_result));		isc_hash_destroy();		isc_entropy_detach(&ectx);		isc_mem_destroy(&mctx);		return(T_UNRESOLVED);	}	dns_fixedname_init(&dns_origin);	dns_fixedname_init(&dns_dborigin);	len = strlen(origin);	isc_buffer_init(&origin_buffer, origin, len);	isc_buffer_add(&origin_buffer, len);	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_hash_destroy();		isc_entropy_detach(&ectx);		isc_mem_destroy(&mctx);		return(T_UNRESOLVED);	}	dns_result = dns_name_fromtext(dns_fixedname_name(&dns_origin),				&origin_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);	}	order = dns_name_compare(dns_fixedname_name(&dns_origin),				 dns_db_origin(db));	if (order == 0) {		result = T_PASS;	} else {		t_info("dns_name_compare returned %d\n", order);		result = T_FAIL;	}	dns_db_detach(&db);	isc_hash_destroy();	isc_entropy_detach(&ectx);	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;	isc_entropy_t		*ectx;	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;	ectx = 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);	}	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("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_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 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);	}	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_hash_destroy();	isc_entropy_detach(&ectx);	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;	isc_entropy_t		*ectx;	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;	ectx = 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);	}	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);	}	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_hash_destroy();		isc_entropy_detach(&ectx);		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_hash_destroy();		isc_entropy_detach(&ectx);		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_hash_destroy();		isc_entropy_detach(&ectx);		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_hash_destroy();		isc_entropy_detach(&ectx);		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_hash_destroy();		isc_entropy_detach(&ectx);		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_hash_destroy();		isc_entropy_detach(&ectx);		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_hash_destroy();		isc_entropy_detach(&ectx);		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_hash_destroy();	isc_entropy_detach(&ectx);	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;	isc_entropy_t		*ectx;	dns_dbnode_t		*nodep;	dns_dbnode_t		*found_nodep;

⌨️ 快捷键说明

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