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

📄 db_test.c

📁 bind-3.2.
💻 C
📖 第 1 页 / 共 2 页
字号:
		if (fgets(s, sizeof s, stdin) == NULL) {			done = ISC_TRUE;			continue;		}		len = strlen(s);		if (len > 0 && s[len - 1] == '\n') {			s[len - 1] = '\0';			len--;		}		if (verbose && dbi != NULL) {			if (dbi->wversion != NULL)				printf("future version (%p)\n", dbi->wversion);			for (i = 0; i < dbi->rcount; i++)				if (dbi->rversions[i] != NULL)					printf("open version %d (%p)\n", i,					       dbi->rversions[i]);		}		dns_name_init(&name, offsets);		if (strcmp(s, "!R") == 0) {			DBI_CHECK(dbi);			if (dbi->rcount == MAXVERSIONS) {				printf("too many open versions\n");				continue;			}			dns_db_currentversion(dbi->db,					      &dbi->rversions[dbi->rcount]);			printf("opened version %d\n", dbi->rcount);			dbi->version = dbi->rversions[dbi->rcount];			version = dbi->version;			dbi->rcount++;			continue;		} else if (strcmp(s, "!W") == 0) {			DBI_CHECK(dbi);			if (dbi->wversion != NULL) {				printf("using existing future version\n");				dbi->version = dbi->wversion;				version = dbi->version;				continue;			}			result = dns_db_newversion(dbi->db, &dbi->wversion);			if (result != ISC_R_SUCCESS)				print_result("", result);			else				printf("newversion\n");			dbi->version = dbi->wversion;			version = dbi->version;			continue;		} else if (strcmp(s, "!C") == 0) {			DBI_CHECK(dbi);			addmode = ISC_FALSE;			delmode = ISC_FALSE;			if (dbi->version == NULL)				continue;			if (dbi->version == dbi->wversion) {				printf("closing future version\n");				dbi->wversion = NULL;			} else {				for (i = 0; i < dbi->rcount; i++) {					if (dbi->version ==					    dbi->rversions[i]) {						dbi->rversions[i] = NULL;					  printf("closing open version %d\n",						 i);						break;					}				}			}			dns_db_closeversion(dbi->db, &dbi->version, ISC_TRUE);			version = NULL;			continue;		} else if (strcmp(s, "!X") == 0) {			DBI_CHECK(dbi);			addmode = ISC_FALSE;			delmode = ISC_FALSE;			if (dbi->version == NULL)				continue;			if (dbi->version == dbi->wversion) {				printf("aborting future version\n");				dbi->wversion = NULL;			} else {				for (i = 0; i < dbi->rcount; i++) {					if (dbi->version ==					    dbi->rversions[i]) {						dbi->rversions[i] = NULL;					  printf("closing open version %d\n",						 i);						break;					}				}			}			dns_db_closeversion(dbi->db, &dbi->version, ISC_FALSE);			version = NULL;			continue;		} else if (strcmp(s, "!A") == 0) {			DBI_CHECK(dbi);			delmode = ISC_FALSE;			if (addmode)				addmode = ISC_FALSE;			else				addmode = ISC_TRUE;			printf("addmode = %s\n", addmode ? "TRUE" : "FALSE");			continue;		} else if (strcmp(s, "!D") == 0) {			DBI_CHECK(dbi);			addmode = ISC_FALSE;			if (delmode)				delmode = ISC_FALSE;			else				delmode = ISC_TRUE;			printf("delmode = %s\n", delmode ? "TRUE" : "FALSE");			continue;		} else if (strcmp(s, "!H") == 0) {			DBI_CHECK(dbi);			if (holdmode)				holdmode = ISC_FALSE;			else				holdmode = ISC_TRUE;			printf("holdmode = %s\n", holdmode ? "TRUE" : "FALSE");			continue;		} else if (strcmp(s, "!HR") == 0) {			DBI_CHECK(dbi);			for (i = 0; i < dbi->hold_count; i++)				dns_db_detachnode(dbi->db,						  &dbi->hold_nodes[i]);			dbi->hold_count = 0;			holdmode = ISC_FALSE;			printf("held nodes have been detached\n");			continue;		} else if (strcmp(s, "!VC") == 0) {			DBI_CHECK(dbi);			printf("switching to current version\n");			dbi->version = NULL;			version = NULL;			continue;		} else if (strstr(s, "!V") == s) {			DBI_CHECK(dbi);			v = atoi(&s[2]);			if (v >= dbi->rcount) {				printf("unknown open version %d\n", v);				continue;			} else if (dbi->rversions[v] == NULL) {				printf("version %d is not open\n", v);				continue;			}			printf("switching to open version %d\n", v);			dbi->version = dbi->rversions[v];			version = dbi->version;			continue;		} else if (strstr(s, "!TR") == s) {			trust = (unsigned int)atoi(&s[3]);			printf("trust level is now %u\n", (unsigned int)trust);			continue;		} else if (strstr(s, "!T") == s) {			type = (unsigned int)atoi(&s[2]);			printf("now searching for type %u\n", type);			continue;		} else if (strcmp(s, "!G") == 0) {			if ((options & DNS_DBFIND_GLUEOK) != 0)				options &= ~DNS_DBFIND_GLUEOK;			else				options |= DNS_DBFIND_GLUEOK;			printf("glue ok = %s\n",			       ((options & DNS_DBFIND_GLUEOK) != 0) ?			       "TRUE" : "FALSE");			continue;		} else if (strcmp(s, "!GV") == 0) {			if ((options & DNS_DBFIND_VALIDATEGLUE) != 0)				options &= ~DNS_DBFIND_VALIDATEGLUE;			else				options |= DNS_DBFIND_VALIDATEGLUE;			printf("validate glue = %s\n",			       ((options & DNS_DBFIND_VALIDATEGLUE) != 0) ?			       "TRUE" : "FALSE");			continue;		} else if (strcmp(s, "!WC") == 0) {			if ((options & DNS_DBFIND_NOWILD) != 0)				options &= ~DNS_DBFIND_NOWILD;			else				options |= DNS_DBFIND_NOWILD;			printf("wildcard matching = %s\n",			       ((options & DNS_DBFIND_NOWILD) == 0) ?			       "TRUE" : "FALSE");			continue;		} else if (strstr(s, "!LS ") == s) {			DBI_CHECK(dbi);			list(dbi, &s[4]);			continue;		} else if (strcmp(s, "!LS") == 0) {			DBI_CHECK(dbi);			list(dbi, NULL);			continue;		} else if (strstr(s, "!DU ") == s) {			DBI_CHECK(dbi);			result = dns_db_dump(dbi->db, dbi->version, s+4);			if (result != ISC_R_SUCCESS) {				printf("\n");				print_result("", result);			}			continue;		} else if (strcmp(s, "!PN") == 0) {			if (printnode)				printnode = ISC_FALSE;			else				printnode = ISC_TRUE;			printf("printnode = %s\n",			       printnode ? "TRUE" : "FALSE");			continue;		} else if (strstr(s, "!P") == s) {			DBI_CHECK(dbi);			v = atoi(&s[2]);			dbi->pause_every = v;			continue;		} else if (strcmp(s, "!+") == 0) {			DBI_CHECK(dbi);			dbi->ascending = ISC_TRUE;			continue;		} else if (strcmp(s, "!-") == 0) {			DBI_CHECK(dbi);			dbi->ascending = ISC_FALSE;			continue;		} else if (strcmp(s, "!DB") == 0) {			dbi = NULL;			origin = dns_rootname;			version = NULL;			printf("now searching all databases\n");			continue;		} else if (strncmp(s, "!DB ", 4) == 0) {			dbi = select_db(s+4);			if (dbi != NULL) {				db = dbi->db;				origin = dns_db_origin(dbi->db);				version = dbi->version;				addmode = ISC_FALSE;				delmode = ISC_FALSE;				holdmode = ISC_FALSE;			} else {				db = NULL;				version = NULL;				origin = dns_rootname;				printf("database not found; "				       "now searching all databases\n");			}			continue;		} else if (strcmp(s, "!ZC") == 0) {			if (find_zonecut)				find_zonecut = ISC_FALSE;			else				find_zonecut = ISC_TRUE;			printf("find_zonecut = %s\n",			       find_zonecut ? "TRUE" : "FALSE");			continue;		} else if (strcmp(s, "!NZ") == 0) {			if (noexact_zonecut)				noexact_zonecut = ISC_FALSE;			else				noexact_zonecut = ISC_TRUE;			printf("noexact_zonecut = %s\n",			       noexact_zonecut ? "TRUE" : "FALSE");			continue;		}		isc_buffer_init(&source, s, len);		isc_buffer_add(&source, len);		isc_buffer_init(&target, b, sizeof(b));		result = dns_name_fromtext(&name, &source, origin,					   ISC_FALSE, &target);		if (result != ISC_R_SUCCESS) {			print_result("bad name: ", result);			continue;		}		if (dbi == NULL) {			zcoptions = 0;			if (noexact_zonecut)				zcoptions |= DNS_DBTABLEFIND_NOEXACT;			db = NULL;			result = dns_dbtable_find(dbtable, &name, zcoptions,						  &db);			if (result != ISC_R_SUCCESS &&			    result != DNS_R_PARTIALMATCH) {				if (!quiet) {					printf("\n");					print_result("", result);				}				continue;			}			isc_buffer_init(&tb1, t1, sizeof(t1));			result = dns_name_totext(dns_db_origin(db), ISC_FALSE,						 &tb1);			if (result != ISC_R_SUCCESS) {				printf("\n");				print_result("", result);				dns_db_detach(&db);				continue;			}			isc_buffer_usedregion(&tb1, &r1);			printf("\ndatabase = %.*s (%s)\n",			       (int)r1.length, r1.base,			       (dns_db_iszone(db)) ? "zone" : "cache");		}		node = NULL;		dns_rdataset_init(&rdataset);		dns_rdataset_init(&sigrdataset);		if (find_zonecut && dns_db_iscache(db)) {			zcoptions = options;			if (noexact_zonecut)				zcoptions |= DNS_DBFIND_NOEXACT;			result = dns_db_findzonecut(db, &name, zcoptions,						    0, &node, fname,						    &rdataset, &sigrdataset);		} else {			result = dns_db_find(db, &name, version, type,					     options, 0, &node, fname,					     &rdataset, &sigrdataset);		}		if (!quiet) {			if (dbi != NULL)				printf("\n");			print_result("", result);		}		found_as = ISC_FALSE;		switch (result) {		case ISC_R_SUCCESS:		case DNS_R_GLUE:		case DNS_R_CNAME:		case DNS_R_ZONECUT:			break;		case DNS_R_DNAME:		case DNS_R_DELEGATION:			found_as = ISC_TRUE;			break;		case DNS_R_NXRRSET:			if (dns_rdataset_isassociated(&rdataset))				break;			if (dbi != NULL) {				if (holdmode) {					RUNTIME_CHECK(dbi->hold_count <						      MAXHOLD);					dbi->hold_nodes[dbi->hold_count++] =						node;					node = NULL;				} else					dns_db_detachnode(db, &node);			} else {				dns_db_detachnode(db, &node);				dns_db_detach(&db);			}			continue;		case DNS_R_NXDOMAIN:			if (dns_rdataset_isassociated(&rdataset))				break;			/* FALLTHROUGH */		default:			if (dbi == NULL)				dns_db_detach(&db);			if (quiet)				print_result("", result);			continue;		}		if (found_as && !quiet) {			isc_buffer_init(&tb1, t1, sizeof(t1));			isc_buffer_init(&tb2, t2, sizeof(t2));			result = dns_name_totext(&name, ISC_FALSE, &tb1);			if (result != ISC_R_SUCCESS) {				print_result("", result);				dns_db_detachnode(db, &node);				if (dbi == NULL)					dns_db_detach(&db);				continue;			}			result = dns_name_totext(fname, ISC_FALSE, &tb2);			if (result != ISC_R_SUCCESS) {				print_result("", result);				dns_db_detachnode(db, &node);				if (dbi == NULL)					dns_db_detach(&db);				continue;			}			isc_buffer_usedregion(&tb1, &r1);			isc_buffer_usedregion(&tb2, &r2);			printf("found %.*s as %.*s\n",			       (int)r1.length, r1.base,			       (int)r2.length, r2.base);		}		if (printnode)			dns_db_printnode(db, node, stdout);		if (!found_as && type == dns_rdatatype_any) {			rdsiter = NULL;			result = dns_db_allrdatasets(db, node, version, 0,						     &rdsiter);			if (result == ISC_R_SUCCESS) {				if (!quiet)					print_rdatasets(fname, rdsiter);				dns_rdatasetiter_destroy(&rdsiter);			} else				print_result("", result);		} else {			if (!quiet)				print_rdataset(fname, &rdataset);			if (dns_rdataset_isassociated(&sigrdataset)) {				if (!quiet)					print_rdataset(fname, &sigrdataset);				dns_rdataset_disassociate(&sigrdataset);			}			if (dbi != NULL && addmode && !found_as) {				rdataset.ttl++;				rdataset.trust = trust;				if (dns_db_iszone(db))					addopts = DNS_DBADD_MERGE;				else					addopts = 0;				result = dns_db_addrdataset(db, node, version,							    0, &rdataset,							    addopts, NULL);				if (result != ISC_R_SUCCESS)					print_result("", result);				if (printnode)					dns_db_printnode(db, node, stdout);			} else if (dbi != NULL && delmode && !found_as) {				result = dns_db_deleterdataset(db, node,							       version, type,							       0);				if (result != ISC_R_SUCCESS)					print_result("", result);				if (printnode)					dns_db_printnode(db, node, stdout);			}			dns_rdataset_disassociate(&rdataset);		}		if (dbi != NULL) {			if (holdmode) {				RUNTIME_CHECK(dbi->hold_count < MAXHOLD);				dbi->hold_nodes[dbi->hold_count++] = node;				node = NULL;			} else				dns_db_detachnode(db, &node);		} else {			dns_db_detachnode(db, &node);			dns_db_detach(&db);		}	}	if (time_lookups) {		isc_uint64_t usec;		(void)isc_time_now(&finish);		usec = isc_time_microdiff(&finish, &start);		printf("elapsed time: %lu.%06lu seconds\n",		       (unsigned long)(usec / 1000000),		       (unsigned long)(usec % 1000000));	}	unload_all();	dns_dbtable_detach(&dbtable);	if (lctx != NULL)		isc_log_destroy(&lctx);	if (!quiet)		isc_mem_stats(mctx, stdout);	return (0);}

⌨️ 快捷键说明

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