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

📄 rdata.c

📁 bind 9.3结合mysql数据库
💻 C
📖 第 1 页 / 共 3 页
字号:
	if (rdata != NULL) {		REQUIRE(DNS_RDATA_INITIALIZED(rdata));		REQUIRE(DNS_RDATA_VALIDFLAGS(rdata));	}	if (callbacks != NULL) {		REQUIRE(callbacks->warn != NULL);		REQUIRE(callbacks->error != NULL);	}	st = *target;	if (callbacks != NULL)		callback = callbacks->error;	else		callback = default_fromtext_callback;	result = isc_lex_getmastertoken(lexer, &token, isc_tokentype_qstring,					ISC_FALSE);	if (result != ISC_R_SUCCESS) {		name = isc_lex_getsourcename(lexer);		line = isc_lex_getsourceline(lexer);		fromtext_error(callback, callbacks, name, line,			       &token, result);		return (result);	}	if (strcmp(DNS_AS_STR(token), "\\#") == 0)		result = unknown_fromtext(rdclass, type, lexer, mctx, target);	else {		isc_lex_ungettoken(lexer, &token);		FROMTEXTSWITCH	}	/*	 * Consume to end of line / file.	 * If not at end of line initially set error code.	 * Call callback via fromtext_error once if there was an error.	 */	do {		name = isc_lex_getsourcename(lexer);		line = isc_lex_getsourceline(lexer);		tresult = isc_lex_gettoken(lexer, lexoptions, &token);		if (tresult != ISC_R_SUCCESS) {			if (result == ISC_R_SUCCESS)				result = tresult;			if (callback != NULL)				fromtext_error(callback, callbacks, name,					       line, NULL, result);			break;		} else if (token.type != isc_tokentype_eol &&			   token.type != isc_tokentype_eof) {			if (result == ISC_R_SUCCESS)				result = DNS_R_EXTRATOKEN;			if (callback != NULL) {				fromtext_error(callback, callbacks, name,					       line, &token, result);				callback = NULL;			}		} else if (result != ISC_R_SUCCESS && callback != NULL) {			fromtext_error(callback, callbacks, name, line,				       &token, result);			break;		} else {			if (token.type == isc_tokentype_eof)				fromtext_warneof(lexer, callbacks);			break;		}	} while (1);	if (rdata != NULL && result == ISC_R_SUCCESS) {		region.base = isc_buffer_used(&st);		region.length = isc_buffer_usedlength(target) -				isc_buffer_usedlength(&st);		dns_rdata_fromregion(rdata, rdclass, type, &region);	}	if (result != ISC_R_SUCCESS) {		*target = st;	}	return (result);}static isc_result_trdata_totext(dns_rdata_t *rdata, dns_rdata_textctx_t *tctx,	     isc_buffer_t *target){	isc_result_t result = ISC_R_NOTIMPLEMENTED;	isc_boolean_t use_default = ISC_FALSE;	char buf[sizeof("65535")];	isc_region_t sr;	REQUIRE(rdata != NULL);	REQUIRE(tctx->origin == NULL ||		dns_name_isabsolute(tctx->origin) == ISC_TRUE);	/*	 * Some DynDNS meta-RRs have empty rdata.	 */	if ((rdata->flags & DNS_RDATA_UPDATE) != 0) {		INSIST(rdata->length == 0);		return (ISC_R_SUCCESS);	}	TOTEXTSWITCH	if (use_default) {		strlcpy(buf, "\\# ", sizeof(buf));		result = str_totext(buf, target);		dns_rdata_toregion(rdata, &sr);		INSIST(sr.length < 65536);		snprintf(buf, sizeof(buf), "%u", sr.length);		result = str_totext(buf, target);		if (sr.length != 0 && result == ISC_R_SUCCESS) {			if ((tctx->flags & DNS_STYLEFLAG_MULTILINE) != 0)				result = str_totext(" ( ", target);			else				result = str_totext(" ", target);			if (result == ISC_R_SUCCESS)				result = isc_hex_totext(&sr, tctx->width - 2,							tctx->linebreak,							target);			if (result == ISC_R_SUCCESS &&			    (tctx->flags & DNS_STYLEFLAG_MULTILINE) != 0)				result = str_totext(" )", target);		}	}	return (result);}isc_result_tdns_rdata_totext(dns_rdata_t *rdata, dns_name_t *origin, isc_buffer_t *target){	dns_rdata_textctx_t tctx;	REQUIRE(DNS_RDATA_VALIDFLAGS(rdata));	/*	 * Set up formatting options for single-line output.	 */	tctx.origin = origin;	tctx.flags = 0;	tctx.width = 60;	tctx.linebreak = " ";	return (rdata_totext(rdata, &tctx, target));}isc_result_tdns_rdata_tofmttext(dns_rdata_t *rdata, dns_name_t *origin,		    unsigned int flags, unsigned int width,		    char *linebreak, isc_buffer_t *target){	dns_rdata_textctx_t tctx;	REQUIRE(DNS_RDATA_VALIDFLAGS(rdata));	/*	 * Set up formatting options for formatted output.	 */	tctx.origin = origin;	tctx.flags = flags;	if ((flags & DNS_STYLEFLAG_MULTILINE) != 0) {		tctx.width = width;		tctx.linebreak = linebreak;	} else {		tctx.width = 60; /* Used for hex word length only. */		tctx.linebreak = " ";	}	return (rdata_totext(rdata, &tctx, target));}isc_result_tdns_rdata_fromstruct(dns_rdata_t *rdata, dns_rdataclass_t rdclass,		     dns_rdatatype_t type, void *source,		     isc_buffer_t *target){	isc_result_t result = ISC_R_NOTIMPLEMENTED;	isc_buffer_t st;	isc_region_t region;	isc_boolean_t use_default = ISC_FALSE;	REQUIRE(source != NULL);	if (rdata != NULL) {		REQUIRE(DNS_RDATA_INITIALIZED(rdata));		REQUIRE(DNS_RDATA_VALIDFLAGS(rdata));	}	st = *target;	FROMSTRUCTSWITCH	if (use_default)		(void)NULL;	if (rdata != NULL && result == ISC_R_SUCCESS) {		region.base = isc_buffer_used(&st);		region.length = isc_buffer_usedlength(target) -				isc_buffer_usedlength(&st);		dns_rdata_fromregion(rdata, rdclass, type, &region);	}	if (result != ISC_R_SUCCESS)		*target = st;	return (result);}isc_result_tdns_rdata_tostruct(dns_rdata_t *rdata, void *target, isc_mem_t *mctx) {	isc_result_t result = ISC_R_NOTIMPLEMENTED;	isc_boolean_t use_default = ISC_FALSE;	REQUIRE(rdata != NULL);	REQUIRE(DNS_RDATA_VALIDFLAGS(rdata));	TOSTRUCTSWITCH	if (use_default)		(void)NULL;	return (result);}voiddns_rdata_freestruct(void *source) {	dns_rdatacommon_t *common = source;	REQUIRE(source != NULL);	FREESTRUCTSWITCH}isc_result_tdns_rdata_additionaldata(dns_rdata_t *rdata, dns_additionaldatafunc_t add,			 void *arg){	isc_result_t result = ISC_R_NOTIMPLEMENTED;	isc_boolean_t use_default = ISC_FALSE;	/*	 * Call 'add' for each name and type from 'rdata' which is subject to	 * additional section processing.	 */	REQUIRE(rdata != NULL);	REQUIRE(add != NULL);	REQUIRE(DNS_RDATA_VALIDFLAGS(rdata));	ADDITIONALDATASWITCH	/* No additional processing for unknown types */	if (use_default)		result = ISC_R_SUCCESS;	return (result);}isc_result_tdns_rdata_digest(dns_rdata_t *rdata, dns_digestfunc_t digest, void *arg) {	isc_result_t result = ISC_R_NOTIMPLEMENTED;	isc_boolean_t use_default = ISC_FALSE;	isc_region_t r;	/*	 * Send 'rdata' in DNSSEC canonical form to 'digest'.	 */	REQUIRE(rdata != NULL);	REQUIRE(digest != NULL);	REQUIRE(DNS_RDATA_VALIDFLAGS(rdata));	DIGESTSWITCH	if (use_default) {		dns_rdata_toregion(rdata, &r);		result = (digest)(arg, &r);	}	return (result);}isc_boolean_tdns_rdata_checkowner(dns_name_t *name, dns_rdataclass_t rdclass,		     dns_rdatatype_t type, isc_boolean_t wildcard){	isc_boolean_t result;	CHECKOWNERSWITCH	return (result);}isc_boolean_tdns_rdata_checknames(dns_rdata_t *rdata, dns_name_t *owner, dns_name_t *bad){	isc_boolean_t result;	CHECKNAMESSWITCH	return (result);}unsigned intdns_rdatatype_attributes(dns_rdatatype_t type){	RDATATYPE_ATTRIBUTE_SW	if (type >= (dns_rdatatype_t)128 && type < (dns_rdatatype_t)255)		return (DNS_RDATATYPEATTR_UNKNOWN | DNS_RDATATYPEATTR_META);	return (DNS_RDATATYPEATTR_UNKNOWN);}isc_result_tdns_rdatatype_fromtext(dns_rdatatype_t *typep, isc_textregion_t *source) {	unsigned int hash;	unsigned int n;	unsigned char a, b;	n = source->length;	if (n == 0)		return (DNS_R_UNKNOWN);	a = tolower((unsigned char)source->base[0]);	b = tolower((unsigned char)source->base[n - 1]);	hash = ((a + n) * b) % 256;	/*	 * This switch block is inlined via #define, and will use "return"	 * to return a result to the caller if it is a valid (known)	 * rdatatype name.	 */	RDATATYPE_FROMTEXT_SW(hash, source->base, n, typep);	if (source->length > 4 && source->length < (4 + sizeof("65000")) &&	    strncasecmp("type", source->base, 4) == 0) {		char buf[sizeof("65000")];		char *endp;		unsigned int val;		strncpy(buf, source->base + 4, source->length - 4);		buf[source->length - 4] = '\0';		val = strtoul(buf, &endp, 10);		if (*endp == '\0' && val <= 0xffff) {			*typep = (dns_rdatatype_t)val;			return (ISC_R_SUCCESS);		}	}	return (DNS_R_UNKNOWN);}isc_result_tdns_rdatatype_totext(dns_rdatatype_t type, isc_buffer_t *target) {	char buf[sizeof("TYPE65535")];	RDATATYPE_TOTEXT_SW	snprintf(buf, sizeof(buf), "TYPE%u", type);	return (str_totext(buf, target));}voiddns_rdatatype_format(dns_rdatatype_t rdtype,		     char *array, unsigned int size){	isc_result_t result;	isc_buffer_t buf;	isc_buffer_init(&buf, array, size);	result = dns_rdatatype_totext(rdtype, &buf);	/*	 * Null terminate.	 */	if (result == ISC_R_SUCCESS) {		if (isc_buffer_availablelength(&buf) >= 1)			isc_buffer_putuint8(&buf, 0);		else			result = ISC_R_NOSPACE;	}	if (result != ISC_R_SUCCESS) {		snprintf(array, size, "<unknown>");		array[size - 1] = '\0';	}}/* * Private function. */static unsigned intname_length(dns_name_t *name) {	return (name->length);}static isc_result_ttxt_totext(isc_region_t *source, isc_buffer_t *target) {	unsigned int tl;	unsigned int n;	unsigned char *sp;	char *tp;	isc_region_t region;	isc_buffer_availableregion(target, &region);	sp = source->base;	tp = (char *)region.base;	tl = region.length;	n = *sp++;	REQUIRE(n + 1 <= source->length);	if (tl < 1)		return (ISC_R_NOSPACE);	*tp++ = '"';	tl--;	while (n--) {		if (*sp < 0x20 || *sp >= 0x7f) {			if (tl < 4)				return (ISC_R_NOSPACE);			snprintf(tp, 5, "\\%03u", *sp++);			tp += 4;			tl -= 4;			continue;		}		if (*sp == 0x22 || *sp == 0x3b || *sp == 0x5c) {			if (tl < 2)				return (ISC_R_NOSPACE);			*tp++ = '\\';			tl--;		}		if (tl < 1)			return (ISC_R_NOSPACE);		*tp++ = *sp++;		tl--;	}	if (tl < 1)		return (ISC_R_NOSPACE);	*tp++ = '"';	tl--;	isc_buffer_add(target, tp - (char *)region.base);	isc_region_consume(source, *source->base + 1);	return (ISC_R_SUCCESS);}static isc_result_ttxt_fromtext(isc_textregion_t *source, isc_buffer_t *target) {	isc_region_t tregion;	isc_boolean_t escape;	unsigned int n, nrem;	char *s;	unsigned char *t;	int d;	int c;	isc_buffer_availableregion(target, &tregion);	s = source->base;	n = source->length;	t = tregion.base;	nrem = tregion.length;	escape = ISC_FALSE;	if (nrem < 1)		return (ISC_R_NOSPACE);	/*	 * Length byte.	 */	nrem--;	t++;	/*	 * Maximum text string length.	 */	if (nrem > 255)		nrem = 255;	while (n-- != 0) {		c = (*s++) & 0xff;		if (escape && (d = decvalue((char)c)) != -1) {			c = d;			if (n == 0)				return (DNS_R_SYNTAX);			n--;			if ((d = decvalue(*s++)) != -1)				c = c * 10 + d;			else				return (DNS_R_SYNTAX);			if (n == 0)				return (DNS_R_SYNTAX);			n--;			if ((d = decvalue(*s++)) != -1)				c = c * 10 + d;			else				return (DNS_R_SYNTAX);			if (c > 255)				return (DNS_R_SYNTAX);		} else if (!escape && c == '\\') {			escape = ISC_TRUE;			continue;		}		escape = ISC_FALSE;		if (nrem == 0)			return (ISC_R_NOSPACE);		*t++ = c;		nrem--;	}	if (escape)		return (DNS_R_SYNTAX);	*tregion.base = t - tregion.base - 1;	isc_buffer_add(target, *tregion.base + 1);	return (ISC_R_SUCCESS);}static isc_result_ttxt_fromwire(isc_buffer_t *source, isc_buffer_t *target) {	unsigned int n;	isc_region_t sregion;	isc_region_t tregion;	isc_buffer_activeregion(source, &sregion);	if (sregion.length == 0)		return(ISC_R_UNEXPECTEDEND);	n = *sregion.base + 1;	if (n > sregion.length)		return (ISC_R_UNEXPECTEDEND);	isc_buffer_availableregion(target, &tregion);	if (n > tregion.length)		return (ISC_R_NOSPACE);	memcpy(tregion.base, sregion.base, n);	isc_buffer_forward(source, n);	isc_buffer_add(target, n);	return (ISC_R_SUCCESS);}static isc_boolean_tname_prefix(dns_name_t *name, dns_name_t *origin, dns_name_t *target) {	int l1, l2;	if (origin == NULL)		goto return_false;	if (dns_name_compare(origin, dns_rootname) == 0)		goto return_false;	if (!dns_name_issubdomain(name, origin))		goto return_false;	l1 = dns_name_countlabels(name);	l2 = dns_name_countlabels(origin);	if (l1 == l2)		goto return_false;	dns_name_getlabelsequence(name, 0, l1 - l2, target);	return (ISC_TRUE);return_false:	*target = *name;	return (ISC_FALSE);}static isc_result_tstr_totext(const char *source, isc_buffer_t *target) {	unsigned int l;	isc_region_t region;	isc_buffer_availableregion(target, &region);	l = strlen(source);	if (l > region.length)		return (ISC_R_NOSPACE);	memcpy(region.base, source, l);	isc_buffer_add(target, l);	return (ISC_R_SUCCESS);}static isc_result_tinet_totext(int af, isc_region_t *src, isc_buffer_t *target) {	char tmpbuf[64];

⌨️ 快捷键说明

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