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

📄 lwconfig.c

📁 bind 9.3结合mysql数据库
💻 C
📖 第 1 页 / 共 2 页
字号:
	 * Search and domain are mutually exclusive.	 */	for (i = 0; i < LWRES_CONFMAXSEARCH; i++) {		if (confdata->search[i] != NULL) {			CTXFREE(confdata->search[i],				strlen(confdata->search[i])+1);			confdata->search[i] = NULL;		}	}	confdata->searchnxt = 0;	confdata->domainname = lwres_strdup(ctx, word);	if (confdata->domainname == NULL)		return (LWRES_R_FAILURE);	return (LWRES_R_SUCCESS);}static lwres_result_tlwres_conf_parsesearch(lwres_context_t *ctx,  FILE *fp) {	int idx, delim;	char word[LWRES_CONFMAXLINELEN];	lwres_conf_t *confdata;	confdata = &ctx->confdata;	if (confdata->domainname != NULL) {		/*		 * Search and domain are mutually exclusive.		 */		CTXFREE(confdata->domainname,			strlen(confdata->domainname) + 1);		confdata->domainname = NULL;	}	/*	 * Remove any previous search definitions.	 */	for (idx = 0; idx < LWRES_CONFMAXSEARCH; idx++) {		if (confdata->search[idx] != NULL) {			CTXFREE(confdata->search[idx],				strlen(confdata->search[idx])+1);			confdata->search[idx] = NULL;		}	}	confdata->searchnxt = 0;	delim = getword(fp, word, sizeof(word));	if (strlen(word) == 0U)		return (LWRES_R_FAILURE); /* Nothing else on line. */	idx = 0;	while (strlen(word) > 0U) {		if (confdata->searchnxt == LWRES_CONFMAXSEARCH)			goto ignore; /* Too many domains. */		confdata->search[idx] = lwres_strdup(ctx, word);		if (confdata->search[idx] == NULL)			return (LWRES_R_FAILURE);		idx++;		confdata->searchnxt++;	ignore:		if (delim == EOF || delim == '\n')			break;		else			delim = getword(fp, word, sizeof(word));	}	return (LWRES_R_SUCCESS);}static lwres_result_tlwres_create_addr(const char *buffer, lwres_addr_t *addr, int convert_zero) {	struct in_addr v4;	struct in6_addr v6;	if (lwres_net_aton(buffer, &v4) == 1) {		if (convert_zero) {			unsigned char zeroaddress[] = {0, 0, 0, 0};			unsigned char loopaddress[] = {127, 0, 0, 1};			if (memcmp(&v4, zeroaddress, 4) == 0)				memcpy(&v4, loopaddress, 4);		}		addr->family = LWRES_ADDRTYPE_V4;		addr->length = NS_INADDRSZ;		memcpy((void *)addr->address, &v4, NS_INADDRSZ);	} else if (lwres_net_pton(AF_INET6, buffer, &v6) == 1) {		addr->family = LWRES_ADDRTYPE_V6;		addr->length = NS_IN6ADDRSZ;		memcpy((void *)addr->address, &v6, NS_IN6ADDRSZ);	} else {		return (LWRES_R_FAILURE); /* Unrecognised format. */	}	return (LWRES_R_SUCCESS);}static lwres_result_tlwres_conf_parsesortlist(lwres_context_t *ctx,  FILE *fp) {	int delim, res, idx;	char word[LWRES_CONFMAXLINELEN];	char *p;	lwres_conf_t *confdata;	confdata = &ctx->confdata;	delim = getword(fp, word, sizeof(word));	if (strlen(word) == 0U)		return (LWRES_R_FAILURE); /* Empty line after keyword. */	while (strlen(word) > 0U) {		if (confdata->sortlistnxt == LWRES_CONFMAXSORTLIST)			return (LWRES_R_FAILURE); /* Too many values. */		p = strchr(word, '/');		if (p != NULL)			*p++ = '\0';		idx = confdata->sortlistnxt;		res = lwres_create_addr(word, &confdata->sortlist[idx].addr, 1);		if (res != LWRES_R_SUCCESS)			return (res);		if (p != NULL) {			res = lwres_create_addr(p,						&confdata->sortlist[idx].mask,						0);			if (res != LWRES_R_SUCCESS)				return (res);		} else {			/*			 * Make up a mask.			 */			confdata->sortlist[idx].mask =				confdata->sortlist[idx].addr;			memset(&confdata->sortlist[idx].mask.address, 0xff,			       confdata->sortlist[idx].addr.length);		}		confdata->sortlistnxt++;		if (delim == EOF || delim == '\n')			break;		else			delim = getword(fp, word, sizeof(word));	}	return (LWRES_R_SUCCESS);}static lwres_result_tlwres_conf_parseoption(lwres_context_t *ctx,  FILE *fp) {	int delim;	long ndots;	char *p;	char word[LWRES_CONFMAXLINELEN];	lwres_conf_t *confdata;	REQUIRE(ctx != NULL);	confdata = &ctx->confdata;	delim = getword(fp, word, sizeof(word));	if (strlen(word) == 0U)		return (LWRES_R_FAILURE); /* Empty line after keyword. */	while (strlen(word) > 0U) {		if (strcmp("debug", word) == 0) {			confdata->resdebug = 1;		} else if (strcmp("no_tld_query", word) == 0) {			confdata->no_tld_query = 1;		} else if (strncmp("ndots:", word, 6) == 0) {			ndots = strtol(word + 6, &p, 10);			if (*p != '\0') /* Bad string. */				return (LWRES_R_FAILURE);			if (ndots < 0 || ndots > 0xff) /* Out of range. */				return (LWRES_R_FAILURE);			confdata->ndots = (lwres_uint8_t)ndots;		}		if (delim == EOF || delim == '\n')			break;		else			delim = getword(fp, word, sizeof(word));	}	return (LWRES_R_SUCCESS);}lwres_result_tlwres_conf_parse(lwres_context_t *ctx, const char *filename) {	FILE *fp = NULL;	char word[256];	lwres_result_t rval, ret;	lwres_conf_t *confdata;	int stopchar;	REQUIRE(ctx != NULL);	confdata = &ctx->confdata;	REQUIRE(filename != NULL);	REQUIRE(strlen(filename) > 0U);	REQUIRE(confdata != NULL);	errno = 0;	if ((fp = fopen(filename, "r")) == NULL)		return (LWRES_R_FAILURE);	ret = LWRES_R_SUCCESS;	do {		stopchar = getword(fp, word, sizeof(word));		if (stopchar == EOF) {			rval = LWRES_R_SUCCESS;			break;		}		if (strlen(word) == 0U)			rval = LWRES_R_SUCCESS;		else if (strcmp(word, "nameserver") == 0)			rval = lwres_conf_parsenameserver(ctx, fp);		else if (strcmp(word, "lwserver") == 0)			rval = lwres_conf_parselwserver(ctx, fp);		else if (strcmp(word, "domain") == 0)			rval = lwres_conf_parsedomain(ctx, fp);		else if (strcmp(word, "search") == 0)			rval = lwres_conf_parsesearch(ctx, fp);		else if (strcmp(word, "sortlist") == 0)			rval = lwres_conf_parsesortlist(ctx, fp);		else if (strcmp(word, "options") == 0)			rval = lwres_conf_parseoption(ctx, fp);		else {			/* unrecognised word. Ignore entire line */			rval = LWRES_R_SUCCESS;			stopchar = eatline(fp);			if (stopchar == EOF) {				break;			}		}		if (ret == LWRES_R_SUCCESS && rval != LWRES_R_SUCCESS)			ret = rval;	} while (1);	fclose(fp);	return (ret);}lwres_result_tlwres_conf_print(lwres_context_t *ctx, FILE *fp) {	int i;	int af;	char tmp[sizeof("ffff:ffff:ffff:ffff:ffff:ffff:255.255.255.255")];	const char *p;	lwres_conf_t *confdata;	lwres_addr_t tmpaddr;	REQUIRE(ctx != NULL);	confdata = &ctx->confdata;	REQUIRE(confdata->nsnext <= LWRES_CONFMAXNAMESERVERS);	for (i = 0; i < confdata->nsnext; i++) {		af = lwresaddr2af(confdata->nameservers[i].family);		p = lwres_net_ntop(af, confdata->nameservers[i].address,				   tmp, sizeof(tmp));		if (p != tmp)			return (LWRES_R_FAILURE);		fprintf(fp, "nameserver %s\n", tmp);	}	for (i = 0; i < confdata->lwnext; i++) {		af = lwresaddr2af(confdata->lwservers[i].family);		p = lwres_net_ntop(af, confdata->lwservers[i].address,				   tmp, sizeof(tmp));		if (p != tmp)			return (LWRES_R_FAILURE);		fprintf(fp, "lwserver %s\n", tmp);	}	if (confdata->domainname != NULL) {		fprintf(fp, "domain %s\n", confdata->domainname);	} else if (confdata->searchnxt > 0) {		REQUIRE(confdata->searchnxt <= LWRES_CONFMAXSEARCH);		fprintf(fp, "search");		for (i = 0; i < confdata->searchnxt; i++)			fprintf(fp, " %s", confdata->search[i]);		fputc('\n', fp);	}	REQUIRE(confdata->sortlistnxt <= LWRES_CONFMAXSORTLIST);	if (confdata->sortlistnxt > 0) {		fputs("sortlist", fp);		for (i = 0; i < confdata->sortlistnxt; i++) {			af = lwresaddr2af(confdata->sortlist[i].addr.family);			p = lwres_net_ntop(af,					   confdata->sortlist[i].addr.address,					   tmp, sizeof(tmp));			if (p != tmp)				return (LWRES_R_FAILURE);			fprintf(fp, " %s", tmp);			tmpaddr = confdata->sortlist[i].mask;			memset(&tmpaddr.address, 0xff, tmpaddr.length);			if (memcmp(&tmpaddr.address,				   confdata->sortlist[i].mask.address,				   confdata->sortlist[i].mask.length) != 0) {				af = lwresaddr2af(					    confdata->sortlist[i].mask.family);				p = lwres_net_ntop					(af,					 confdata->sortlist[i].mask.address,					 tmp, sizeof(tmp));				if (p != tmp)					return (LWRES_R_FAILURE);				fprintf(fp, "/%s", tmp);			}		}		fputc('\n', fp);	}	if (confdata->resdebug)		fprintf(fp, "options debug\n");	if (confdata->ndots > 0)		fprintf(fp, "options ndots:%d\n", confdata->ndots);	if (confdata->no_tld_query)		fprintf(fp, "options no_tld_query\n");	return (LWRES_R_SUCCESS);}lwres_conf_t *lwres_conf_get(lwres_context_t *ctx) {	REQUIRE(ctx != NULL);	return (&ctx->confdata);}

⌨️ 快捷键说明

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