📄 t_db.c
字号:
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 + -