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

📄 lwtest.c

📁 bind 9.3结合mysql数据库
💻 C
📖 第 1 页 / 共 2 页
字号:
/* * Copyright (C) 2004  Internet Systems Consortium, Inc. ("ISC") * Copyright (C) 2000-2002  Internet Software Consortium. * * Permission to use, copy, modify, and distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH * REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY * AND FITNESS.  IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT, * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE * OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR * PERFORMANCE OF THIS SOFTWARE. *//* $Id: lwtest.c,v 1.22.2.4.2.4 2004/03/08 04:04:37 marka Exp $ */#include <config.h>#include <assert.h>#include <stdlib.h>#include <string.h>#include <isc/net.h>#include <lwres/lwres.h>#include <lwres/netdb.h>#include <lwres/net.h>/* * XXX getnameinfo errors, which don't appear to be standard. */#define ENI_NOSERVNAME  1#define ENI_NOHOSTNAME  2#define ENI_MEMORY      3#define ENI_SYSTEM      4#define ENI_FAMILY      5#define ENI_SALEN       6#define ENI_NOSOCKET    7static int fails = 0;static voidCHECK(lwres_result_t val, const char *msg) {	if (val != 0) {		printf("I:%s returned %d\n", msg, val);		exit(1);	}}static unsigned char TESTSTRING[] =	"This is a test.  This is only a test.  !!!";static lwres_context_t *ctx;static voidtest_noop(void) {	lwres_result_t ret;	lwres_lwpacket_t pkt, pkt2;	lwres_nooprequest_t nooprequest, *nooprequest2;	lwres_noopresponse_t noopresponse, *noopresponse2;	lwres_buffer_t b;	pkt.pktflags = 0;	pkt.serial = 0x11223344;	pkt.recvlength = 0x55667788;	pkt.result = 0;	nooprequest.datalength = strlen((char *)TESTSTRING);	nooprequest.data = TESTSTRING;	ret = lwres_nooprequest_render(ctx, &nooprequest, &pkt, &b);	CHECK(ret, "lwres_nooprequest_render");	/*	 * Now, parse it into a new structure.	 */	lwres_buffer_first(&b);	ret = lwres_lwpacket_parseheader(&b, &pkt2);	CHECK(ret, "lwres_lwpacket_parseheader");	nooprequest2 = NULL;	ret = lwres_nooprequest_parse(ctx, &b, &pkt2, &nooprequest2);	CHECK(ret, "lwres_nooprequest_parse");	assert(nooprequest.datalength == nooprequest2->datalength);	assert(memcmp(nooprequest.data, nooprequest2->data,		       nooprequest.datalength) == 0);	lwres_nooprequest_free(ctx, &nooprequest2);	lwres_context_freemem(ctx, b.base, b.length);	b.base = NULL;	b.length = 0;	pkt.pktflags = 0;	pkt.serial = 0x11223344;	pkt.recvlength = 0x55667788;	pkt.result = 0xdeadbeef;	noopresponse.datalength = strlen((char *)TESTSTRING);	noopresponse.data = TESTSTRING;	ret = lwres_noopresponse_render(ctx, &noopresponse, &pkt, &b);	CHECK(ret, "lwres_noopresponse_render");	/*	 * Now, parse it into a new structure.	 */	lwres_buffer_first(&b);	ret = lwres_lwpacket_parseheader(&b, &pkt2);	CHECK(ret, "lwres_lwpacket_parseheader");	noopresponse2 = NULL;	ret = lwres_noopresponse_parse(ctx, &b, &pkt2, &noopresponse2);	CHECK(ret, "lwres_noopresponse_parse");	assert(noopresponse.datalength == noopresponse2->datalength);	assert(memcmp(noopresponse.data, noopresponse2->data,		       noopresponse.datalength) == 0);	lwres_noopresponse_free(ctx, &noopresponse2);	lwres_context_freemem(ctx, b.base, b.length);	b.base = NULL;	b.length = 0;}static voidtest_gabn(const char *target, lwres_result_t expected, const char *address,	  lwres_uint32_t af){	lwres_gabnresponse_t *res;	unsigned char addrbuf[16];	lwres_addr_t *addr;	char outbuf[64];	unsigned int len;	lwres_result_t ret;	res = NULL;	ret = lwres_getaddrsbyname(ctx, target,				   LWRES_ADDRTYPE_V4 | LWRES_ADDRTYPE_V6,				   &res);	if (ret != expected) {		printf("I:gabn(%s) failed: %d\n", target, ret);		if (res != NULL)			lwres_gabnresponse_free(ctx, &res);		fails++;		return;	}	if (ret == LWRES_R_SUCCESS) {		if (af == LWRES_ADDRTYPE_V4) {			len = 4;			ret = inet_pton(AF_INET, address, addrbuf);			assert(ret == 1);		} else {			len = 16;			ret = inet_pton(AF_INET6, address, addrbuf);			assert(ret == 1);		}		addr = LWRES_LIST_HEAD(res->addrs);		if (addr == NULL) {			printf("I:gabn(%s) returned empty list\n", target);			fails++;			return;		}		while (addr != NULL) {			if (addr->family != af || addr->length != len ||			    memcmp(addr->address, addrbuf, len) == 0)				break;			addr = LWRES_LIST_NEXT(addr, link);		}		if (addr == NULL) {			addr = LWRES_LIST_HEAD(res->addrs);			if (addr->family == LWRES_ADDRTYPE_V4)				(void)inet_ntop(AF_INET, addr->address,						outbuf, sizeof(outbuf));			else				(void)inet_ntop(AF_INET6, addr->address,						outbuf, sizeof(outbuf));			printf("I:gabn(%s) returned %s, expected %s\n",				target, outbuf, address);			fails++;			return;		}	}	if (res != NULL)		lwres_gabnresponse_free(ctx, &res);}static voidtest_gnba(const char *target, lwres_uint32_t af, lwres_result_t expected,	  const char *name){	lwres_gnbaresponse_t *res;	lwres_result_t ret;	unsigned char addrbuf[16];	unsigned int len;	if (af == LWRES_ADDRTYPE_V4) {		len = 4;		ret = inet_pton(AF_INET, target, addrbuf);		assert(ret == 1);	} else {		len = 16;		ret = inet_pton(AF_INET6, target, addrbuf);		assert(ret == 1);	}	res = NULL;	ret = lwres_getnamebyaddr(ctx, af, len, addrbuf, &res);	if (ret != expected) {		printf("I:gnba(%s) failed: %d\n", target, ret);		if (res != NULL)			lwres_gnbaresponse_free(ctx, &res);		fails++;		return;	}	if (ret == LWRES_R_SUCCESS && strcasecmp(res->realname, name) != 0) {		 printf("I:gnba(%s) returned %s, expected %s\n",			target, res->realname, name);		 fails++;		 return;	}	if (res != NULL)		lwres_gnbaresponse_free(ctx, &res);}static voidtest_gethostbyname(const char *name, const char *address) {	struct hostent *hp;	unsigned char addrbuf[16];	int ret;	hp = gethostbyname(name);	if (hp == NULL) {		if (address == NULL && h_errno == HOST_NOT_FOUND)			return;		else if (h_errno != HOST_NOT_FOUND) {			printf("I:gethostbyname(%s) failed: %s\n",			       name, hstrerror(h_errno));			fails++;			return;		} else {			printf("I:gethostbyname(%s) returned not found\n",			       name);			fails++;			return;		}	} else {		ret = inet_pton(AF_INET, address, addrbuf);		assert(ret == 1);		if (memcmp(hp->h_addr_list[0], addrbuf, hp->h_length) != 0) {			char outbuf[16];			(void)inet_ntop(AF_INET, hp->h_addr_list[0],					outbuf, sizeof(outbuf));			printf("I:gethostbyname(%s) returned %s, "			       "expected %s\n", name, outbuf, address);			fails++;			return;		}	}}static voidtest_gethostbyname2(const char *name, const char *address, int af) {	struct hostent *hp;	unsigned char addrbuf[16];	int len, ret;	hp = gethostbyname2(name, af);	if (hp == NULL) {		if (address == NULL && h_errno == HOST_NOT_FOUND)			return;		else if (h_errno != HOST_NOT_FOUND) {			printf("I:gethostbyname(%s) failed: %s\n",			       name, hstrerror(h_errno));			fails++;			return;		} else {			printf("I:gethostbyname(%s) returned not found\n",			       name);			fails++;			return;		}	} else {		if (af == AF_INET)			len = 4;		else			len = 16;		ret = inet_pton(af, address, addrbuf);		assert(ret == 1);		if (hp->h_addrtype != af) {			printf("I:gethostbyname(%s) returned wrong family\n",			       name);			fails++;			return;		}		if (len != (int)hp->h_length ||		    memcmp(hp->h_addr_list[0], addrbuf, hp->h_length) != 0)		{			char outbuf[16];			(void)inet_ntop(af, hp->h_addr_list[0],					outbuf, sizeof(outbuf));			printf("I:gethostbyname(%s) returned %s, "			       "expected %s\n", name, outbuf, address);			fails++;			return;		}	}}static voidtest_getipnodebyname(const char *name, const char *address, int af,		     int v4map, int all){	struct hostent *hp;	unsigned char addrbuf[16];	int len, ret;	int error_num;	int flags = 0;	if (v4map)		flags |= AI_V4MAPPED;	if (all)		flags |= AI_ALL;	hp = getipnodebyname(name, af, flags, &error_num);	if (hp == NULL) {		if (address == NULL && error_num == HOST_NOT_FOUND)			return;		else if (error_num != HOST_NOT_FOUND) {			printf("I:getipnodebyname(%s) failed: %d\n",			       name, error_num);			fails++;			return;		} else {			printf("I:getipnodebyname(%s) returned not found\n",			       name);			fails++;			return;		}	} else {		if (af == AF_INET)			len = 4;		else			len = 16;		ret = inet_pton(af, address, addrbuf);		assert(ret == 1);		if (hp->h_addrtype != af) {			printf("I:getipnodebyname(%s) returned wrong family\n",			       name);			fails++;			return;		}		if (len != (int)hp->h_length ||		    memcmp(hp->h_addr_list[0], addrbuf, hp->h_length) != 0)		{			char outbuf[16];			(void)inet_ntop(af, hp->h_addr_list[0],					outbuf, sizeof(outbuf));			printf("I:getipnodebyname(%s) returned %s, "			       "expected %s\n", name, outbuf, address);			fails++;			return;		}		freehostent(hp);	}}static voidtest_gethostbyaddr(const char *address, int af, const char *name) {	struct hostent *hp;	char addrbuf[16];	int len, ret;	if (af == AF_INET)		len = 4;	else		len = 16;	ret = inet_pton(af, address, addrbuf);	assert(ret == 1);	hp = gethostbyaddr(addrbuf, len, af);	if (hp == NULL) {

⌨️ 快捷键说明

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