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

📄 zone.c

📁 bind 9.3结合mysql数据库
💻 C
📖 第 1 页 / 共 5 页
字号:
	result = ISC_R_SUCCESS; invalidate_rdataset:	dns_rdataset_invalidate(&rdataset);	return (result);}/* * zone must be locked. */static isc_result_tzone_get_from_db(dns_db_t *db, dns_name_t *origin, unsigned int *nscount,		 unsigned int *soacount, isc_uint32_t *serial,		 isc_uint32_t *refresh, isc_uint32_t *retry,		 isc_uint32_t *expire, isc_uint32_t *minimum){	dns_dbversion_t *version;	isc_result_t result;	isc_result_t answer = ISC_R_SUCCESS;	dns_dbnode_t *node;	REQUIRE(db != NULL);	REQUIRE(origin != NULL);	version = NULL;	dns_db_currentversion(db, &version);	node = NULL;	result = dns_db_findnode(db, origin, ISC_FALSE, &node);	if (result != ISC_R_SUCCESS) {		answer = result;		goto closeversion;	}	if (nscount != NULL) {		result = zone_count_ns_rr(db, node, version, nscount);		if (result != ISC_R_SUCCESS)			answer = result;	}	if (soacount != NULL || serial != NULL || refresh != NULL	    || retry != NULL || expire != NULL || minimum != NULL) {		result = zone_load_soa_rr(db, node, version, soacount,					  serial, refresh, retry, expire,					  minimum);		if (result != ISC_R_SUCCESS)			answer = result;	}	dns_db_detachnode(db, &node); closeversion:	dns_db_closeversion(db, &version, ISC_FALSE);	return (answer);}voiddns_zone_attach(dns_zone_t *source, dns_zone_t **target) {	REQUIRE(DNS_ZONE_VALID(source));	REQUIRE(target != NULL && *target == NULL);	isc_refcount_increment(&source->erefs, NULL);	*target = source;}voiddns_zone_detach(dns_zone_t **zonep) {	dns_zone_t *zone;	unsigned int refs;	isc_boolean_t free_now = ISC_FALSE;	REQUIRE(zonep != NULL && DNS_ZONE_VALID(*zonep));	zone = *zonep;	isc_refcount_decrement(&zone->erefs, &refs);	if (refs == 0) {		LOCK_ZONE(zone);		/*		 * We just detached the last external reference.		 */		if (zone->task != NULL) {			/*			 * This zone is being managed.  Post			 * its control event and let it clean			 * up synchronously in the context of			 * its task.			 */			isc_event_t *ev = &zone->ctlevent;			isc_task_send(zone->task, &ev);		} else {			/*			 * This zone is not being managed; it has			 * no task and can have no outstanding			 * events.  Free it immediately.			 */			/*			 * Unmanaged zones should not have non-null views;			 * we have no way of detaching from the view here			 * without causing deadlock because this code is called			 * with the view already locked.			 */			INSIST(zone->view == NULL);			free_now = ISC_TRUE;		}		UNLOCK_ZONE(zone);	}	*zonep = NULL;	if (free_now)		zone_free(zone);}voiddns_zone_iattach(dns_zone_t *source, dns_zone_t **target) {	REQUIRE(DNS_ZONE_VALID(source));	REQUIRE(target != NULL && *target == NULL);	LOCK_ZONE(source);	zone_iattach(source, target);	UNLOCK_ZONE(source);}static voidzone_iattach(dns_zone_t *source, dns_zone_t **target) {	/*	 * 'source' locked by caller.	 */	REQUIRE(LOCKED_ZONE(source));	REQUIRE(DNS_ZONE_VALID(source));	REQUIRE(target != NULL && *target == NULL);	INSIST(source->irefs + isc_refcount_current(&source->erefs) > 0);	source->irefs++;	INSIST(source->irefs != 0);	*target = source;}static voidzone_idetach(dns_zone_t **zonep) {	dns_zone_t *zone;	/*	 * 'zone' locked by caller.	 */	REQUIRE(zonep != NULL && DNS_ZONE_VALID(*zonep));	zone = *zonep;	REQUIRE(LOCKED_ZONE(*zonep));	*zonep = NULL;	INSIST(zone->irefs > 0);	zone->irefs--;	INSIST(zone->irefs + isc_refcount_current(&zone->erefs) > 0);}voiddns_zone_idetach(dns_zone_t **zonep) {	dns_zone_t *zone;	isc_boolean_t free_needed;	REQUIRE(zonep != NULL && DNS_ZONE_VALID(*zonep));	zone = *zonep;	*zonep = NULL;	LOCK_ZONE(zone);	INSIST(zone->irefs > 0);	zone->irefs--;	free_needed = exit_check(zone);	UNLOCK_ZONE(zone);	if (free_needed)		zone_free(zone);}isc_mem_t *dns_zone_getmctx(dns_zone_t *zone) {	REQUIRE(DNS_ZONE_VALID(zone));	return (zone->mctx);}dns_zonemgr_t *dns_zone_getmgr(dns_zone_t *zone) {	REQUIRE(DNS_ZONE_VALID(zone));	return (zone->zmgr);}voiddns_zone_setflag(dns_zone_t *zone, unsigned int flags, isc_boolean_t value) {	REQUIRE(DNS_ZONE_VALID(zone));	LOCK_ZONE(zone);	if (value)		DNS_ZONE_SETFLAG(zone, flags);	else		DNS_ZONE_CLRFLAG(zone, flags);	UNLOCK_ZONE(zone);}voiddns_zone_setoption(dns_zone_t *zone, unsigned int option, isc_boolean_t value){	REQUIRE(DNS_ZONE_VALID(zone));	LOCK_ZONE(zone);	if (value)		zone->options |= option;	else		zone->options &= ~option;	UNLOCK_ZONE(zone);}unsigned intdns_zone_getoptions(dns_zone_t *zone) {	REQUIRE(DNS_ZONE_VALID(zone));	return (zone->options);}isc_result_tdns_zone_setxfrsource4(dns_zone_t *zone, isc_sockaddr_t *xfrsource) {	REQUIRE(DNS_ZONE_VALID(zone));	LOCK_ZONE(zone);	zone->xfrsource4 = *xfrsource;	UNLOCK_ZONE(zone);	return (ISC_R_SUCCESS);}isc_sockaddr_t *dns_zone_getxfrsource4(dns_zone_t *zone) {	REQUIRE(DNS_ZONE_VALID(zone));	return (&zone->xfrsource4);}isc_result_tdns_zone_setxfrsource6(dns_zone_t *zone, isc_sockaddr_t *xfrsource) {	REQUIRE(DNS_ZONE_VALID(zone));	LOCK_ZONE(zone);	zone->xfrsource6 = *xfrsource;	UNLOCK_ZONE(zone);	return (ISC_R_SUCCESS);}isc_sockaddr_t *dns_zone_getxfrsource6(dns_zone_t *zone) {	REQUIRE(DNS_ZONE_VALID(zone));	return (&zone->xfrsource6);}isc_result_tdns_zone_setaltxfrsource4(dns_zone_t *zone, isc_sockaddr_t *altxfrsource) {	REQUIRE(DNS_ZONE_VALID(zone));	LOCK_ZONE(zone);	zone->altxfrsource4 = *altxfrsource;	UNLOCK_ZONE(zone);	return (ISC_R_SUCCESS);}isc_sockaddr_t *dns_zone_getaltxfrsource4(dns_zone_t *zone) {	REQUIRE(DNS_ZONE_VALID(zone));	return (&zone->altxfrsource4);}isc_result_tdns_zone_setaltxfrsource6(dns_zone_t *zone, isc_sockaddr_t *altxfrsource) {	REQUIRE(DNS_ZONE_VALID(zone));	LOCK_ZONE(zone);	zone->altxfrsource6 = *altxfrsource;	UNLOCK_ZONE(zone);	return (ISC_R_SUCCESS);}isc_sockaddr_t *dns_zone_getaltxfrsource6(dns_zone_t *zone) {	REQUIRE(DNS_ZONE_VALID(zone));	return (&zone->altxfrsource6);}isc_result_tdns_zone_setnotifysrc4(dns_zone_t *zone, isc_sockaddr_t *notifysrc) {	REQUIRE(DNS_ZONE_VALID(zone));	LOCK_ZONE(zone);	zone->notifysrc4 = *notifysrc;	UNLOCK_ZONE(zone);	return (ISC_R_SUCCESS);}isc_sockaddr_t *dns_zone_getnotifysrc4(dns_zone_t *zone) {	REQUIRE(DNS_ZONE_VALID(zone));	return (&zone->notifysrc4);}isc_result_tdns_zone_setnotifysrc6(dns_zone_t *zone, isc_sockaddr_t *notifysrc) {	REQUIRE(DNS_ZONE_VALID(zone));	LOCK_ZONE(zone);	zone->notifysrc6 = *notifysrc;	UNLOCK_ZONE(zone);	return (ISC_R_SUCCESS);}isc_sockaddr_t *dns_zone_getnotifysrc6(dns_zone_t *zone) {	REQUIRE(DNS_ZONE_VALID(zone));	return (&zone->notifysrc6);}isc_result_tdns_zone_setalsonotify(dns_zone_t *zone, isc_sockaddr_t *notify,		       isc_uint32_t count){	isc_sockaddr_t *new;	REQUIRE(DNS_ZONE_VALID(zone));	REQUIRE(count == 0 || notify != NULL);	LOCK_ZONE(zone);	if (zone->notify != NULL) {		isc_mem_put(zone->mctx, zone->notify,			    zone->notifycnt * sizeof(*new));		zone->notify = NULL;		zone->notifycnt = 0;	}	if (count != 0) {		new = isc_mem_get(zone->mctx, count * sizeof(*new));		if (new == NULL) {			UNLOCK_ZONE(zone);			return (ISC_R_NOMEMORY);		}		memcpy(new, notify, count * sizeof(*new));		zone->notify = new;		zone->notifycnt = count;	}	UNLOCK_ZONE(zone);	return (ISC_R_SUCCESS);}isc_result_tdns_zone_setmasters(dns_zone_t *zone, isc_sockaddr_t *masters,		    isc_uint32_t count){	isc_result_t result;	result = dns_zone_setmasterswithkeys(zone, masters, NULL, count);	return (result);}isc_result_tdns_zone_setmasterswithkeys(dns_zone_t *zone, isc_sockaddr_t *masters,			    dns_name_t **keynames, isc_uint32_t count){	isc_sockaddr_t *new;	isc_result_t result = ISC_R_SUCCESS;	dns_name_t **newname;	unsigned int i;	REQUIRE(DNS_ZONE_VALID(zone));	REQUIRE(count == 0 || masters != NULL);	if (keynames != NULL) {		REQUIRE(count != 0);	}	LOCK_ZONE(zone);	if (zone->masters != NULL) {		isc_mem_put(zone->mctx, zone->masters,			    zone->masterscnt * sizeof(*new));		zone->masters = NULL;	}	if (zone->masterkeynames != NULL) {		for (i = 0; i < zone->masterscnt; i++) {			if (zone->masterkeynames[i] != NULL) {				dns_name_free(zone->masterkeynames[i],					      zone->mctx);				isc_mem_put(zone->mctx,					    zone->masterkeynames[i],					    sizeof(dns_name_t));				zone->masterkeynames[i] = NULL;			}		}		isc_mem_put(zone->mctx, zone->masterkeynames,			    zone->masterscnt * sizeof(dns_name_t *));		zone->masterkeynames = NULL;	}	zone->masterscnt = 0;	/*	 * If count == 0, don't allocate any space for masters or keynames	 * so internally, those pointers are NULL if count == 0	 */	if (count == 0)		goto unlock;	/*	 * masters must countain count elements!	 */	new = isc_mem_get(zone->mctx,			  count * sizeof(isc_sockaddr_t));	if (new == NULL) {		result = ISC_R_NOMEMORY;		goto unlock;	}	memcpy(new, masters, count * sizeof(*new));	zone->masters = new;	zone->masterscnt = count;	DNS_ZONE_CLRFLAG(zone, DNS_ZONEFLG_NOMASTERS);	/*	 * if keynames is non-NULL, it must contain count elements!	 */	if (keynames != NULL) {		newname = isc_mem_get(zone->mctx,				      count * sizeof(dns_name_t *));		if (newname == NULL) {			result = ISC_R_NOMEMORY;			isc_mem_put(zone->mctx, zone->masters,				    count * sizeof(*new));			goto unlock;		}		for (i = 0; i < count; i++)			newname[i] = NULL;		for (i = 0; i < count; i++) {			if (keynames[i] != NULL) {				newname[i] = isc_mem_get(zone->mctx,							 sizeof(dns_name_t));				if (newname[i] == NULL)					goto allocfail;				dns_name_init(newname[i], NULL);				result = dns_name_dup(keynames[i], zone->mctx,						      newname[i]);				if (result != ISC_R_SUCCESS) {				allocfail:					for (i = 0; i < count; i++)						if (newname[i] != NULL)							dns_name_free(							       newname[i],							       zone->mctx);					isc_mem_put(zone->mctx, zone->masters,						    count * sizeof(*new));					isc_mem_put(zone->mctx, newname,						    count * sizeof(*newname));					goto unlock;				}			}		}		zone->masterkeynames = newname;	} unlock:	UNLOCK_ZONE(zone);	return (result);}isc_result_tdns_zone_getdb(dns_zone_t *zone, dns_db_t **dpb) {	isc_result_t result = ISC_R_SUCCESS;	REQUIRE(DNS_ZONE_VALID(zone));	LOCK_ZONE(zone);	if (zone->db == NULL)		result = DNS_R_NOTLOADED;	else		dns_db_attach(zone->db, dpb);	UNLOCK_ZONE(zone);	return (result);}/* * Co-ordinates the starting of routine jobs. */voiddns_zone_maintenance(dns_zone_t *zone) {	const char me[] = "dns_zone_maintenance";	isc_time_t now;	REQUIRE(DNS_ZONE_VALID(zone));	ENTER;	LOCK_ZONE(zone);	TIME_NOW(&now);	zone_settimer(zone, &now);	UNLOCK_ZONE(zone);}static inline isc_boolean_twas_dumping(dns_zone_t *zone) {	isc_boolean_t dumping;	REQUIRE(LOCKED_ZONE(zone));	dumping = DNS_ZONE_FLAG(zone, DNS_ZONEFLG_DUMPING);	DNS_ZONE_SETFLAG(zone, DNS_ZONEFLG_DUMPING);	if (!dumping) {		DNS_ZONE_CLRFLAG(zone, DNS_ZONEFLG_NEEDDUMP);		isc_time_settoepoch(&zone->dumptime);	}	return (dumping);}static voidzone_maintenance(dns_zone_t *zone) {	const char me[] = "zone_maintenance";	isc_time_t now;	isc_result_t result;	isc_boolean_t dumping;

⌨️ 快捷键说明

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