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

📄 res_init.c

📁 bind 9.3结合mysql数据库
💻 C
📖 第 1 页 / 共 2 页
字号:
			if (inet_aton(net, &a)) {			    statp->sort_list[nsort].addr = a;			    if (ISSORTMASK(n)) {				*cp++ = n;				net = cp;				while (*cp && *cp != ';' &&					isascii(*cp) &&					!isspace((unsigned char)*cp))				    cp++;				n = *cp;				*cp = 0;				if (inet_aton(net, &a)) {				    statp->sort_list[nsort].mask = a.s_addr;				} else {				    statp->sort_list[nsort].mask = 					net_mask(statp->sort_list[nsort].addr);				}			    } else {				statp->sort_list[nsort].mask = 				    net_mask(statp->sort_list[nsort].addr);			    }			    nsort++;			}			*cp = n;		    }		    continue;		}#endif		if (MATCH(buf, "options")) {		    res_setoptions(statp, buf + sizeof("options") - 1, "conf");		    continue;		}	    }	    if (nserv > 0) 		statp->nscount = nserv;#ifdef RESOLVSORT	    statp->nsort = nsort;#endif	    (void) fclose(fp);	}/* * Last chance to get a nameserver.  This should not normally * be necessary */#ifdef NO_RESOLV_CONF	if(nserv == 0)		nserv = get_nameservers(statp);#endif	if (statp->defdname[0] == 0 &&	    gethostname(buf, sizeof(statp->defdname) - 1) == 0 &&	    (cp = strchr(buf, '.')) != NULL)		strcpy(statp->defdname, cp + 1);	/* find components of local domain that might be searched */	if (havesearch == 0) {		pp = statp->dnsrch;		*pp++ = statp->defdname;		*pp = NULL;		dots = 0;		for (cp = statp->defdname; *cp; cp++)			dots += (*cp == '.');		cp = statp->defdname;		while (pp < statp->dnsrch + MAXDFLSRCH) {			if (dots < LOCALDOMAINPARTS)				break;			cp = strchr(cp, '.') + 1;    /* we know there is one */			*pp++ = cp;			dots--;		}		*pp = NULL;#ifdef DEBUG		if (statp->options & RES_DEBUG) {			printf(";; res_init()... default dnsrch list:\n");			for (pp = statp->dnsrch; *pp; pp++)				printf(";;\t%s\n", *pp);			printf(";;\t..END..\n");		}#endif	}	if ((cp = getenv("RES_OPTIONS")) != NULL)		res_setoptions(statp, cp, "env");	statp->options |= RES_INIT;	return (0);}static voidres_setoptions(res_state statp, const char *options, const char *source){	const char *cp = options;	int i;	struct __res_state_ext *ext = statp->_u._ext.ext;#ifdef DEBUG	if (statp->options & RES_DEBUG)		printf(";; res_setoptions(\"%s\", \"%s\")...\n",		       options, source);#endif	while (*cp) {		/* skip leading and inner runs of spaces */		while (*cp == ' ' || *cp == '\t')			cp++;		/* search for and process individual options */		if (!strncmp(cp, "ndots:", sizeof("ndots:") - 1)) {			i = atoi(cp + sizeof("ndots:") - 1);			if (i <= RES_MAXNDOTS)				statp->ndots = i;			else				statp->ndots = RES_MAXNDOTS;#ifdef DEBUG			if (statp->options & RES_DEBUG)				printf(";;\tndots=%d\n", statp->ndots);#endif		} else if (!strncmp(cp, "timeout:", sizeof("timeout:") - 1)) {			i = atoi(cp + sizeof("timeout:") - 1);			if (i <= RES_MAXRETRANS)				statp->retrans = i;			else				statp->retrans = RES_MAXRETRANS;#ifdef DEBUG			if (statp->options & RES_DEBUG)				printf(";;\ttimeout=%d\n", statp->retrans);#endif		} else if (!strncmp(cp, "attempts:", sizeof("attempts:") - 1)){			i = atoi(cp + sizeof("attempts:") - 1);			if (i <= RES_MAXRETRY)				statp->retry = i;			else				statp->retry = RES_MAXRETRY;#ifdef DEBUG			if (statp->options & RES_DEBUG)				printf(";;\tattempts=%d\n", statp->retry);#endif		} else if (!strncmp(cp, "debug", sizeof("debug") - 1)) {#ifdef DEBUG			if (!(statp->options & RES_DEBUG)) {				printf(";; res_setoptions(\"%s\", \"%s\")..\n",				       options, source);				statp->options |= RES_DEBUG;			}			printf(";;\tdebug\n");#endif		} else if (!strncmp(cp, "no_tld_query",				    sizeof("no_tld_query") - 1) ||			   !strncmp(cp, "no-tld-query",				    sizeof("no-tld-query") - 1)) {			statp->options |= RES_NOTLDQUERY;		} else if (!strncmp(cp, "inet6", sizeof("inet6") - 1)) {			statp->options |= RES_USE_INET6;		} else if (!strncmp(cp, "rotate", sizeof("rotate") - 1)) {			statp->options |= RES_ROTATE;		} else if (!strncmp(cp, "no-check-names",				    sizeof("no-check-names") - 1)) {			statp->options |= RES_NOCHECKNAME;		}#ifdef RES_USE_EDNS0		else if (!strncmp(cp, "edns0", sizeof("edns0") - 1)) {			statp->options |= RES_USE_EDNS0;		}#endif		else if (!strncmp(cp, "dname", sizeof("dname") - 1)) {			statp->options |= RES_USE_DNAME;		}		else if (!strncmp(cp, "nibble:", sizeof("nibble:") - 1)) {			if (ext == NULL)				goto skip;			cp += sizeof("nibble:") - 1;			i = MIN(strcspn(cp, " \t"), sizeof(ext->nsuffix) - 1);			strncpy(ext->nsuffix, cp, i);			ext->nsuffix[i] = '\0';		}		else if (!strncmp(cp, "nibble2:", sizeof("nibble2:") - 1)) {			if (ext == NULL)				goto skip;			cp += sizeof("nibble2:") - 1;			i = MIN(strcspn(cp, " \t"), sizeof(ext->nsuffix2) - 1);			strncpy(ext->nsuffix2, cp, i);			ext->nsuffix2[i] = '\0';		}		else if (!strncmp(cp, "v6revmode:", sizeof("v6revmode:") - 1)) {			cp += sizeof("v6revmode:") - 1;			/* "nibble" and "bitstring" used to be valid */			if (!strncmp(cp, "single", sizeof("single") - 1)) {				statp->options |= RES_NO_NIBBLE2;			} else if (!strncmp(cp, "both", sizeof("both") - 1)) {				statp->options &=					 ~RES_NO_NIBBLE2;			}		}		else {			/* XXX - print a warning here? */		}   skip:		/* skip to next run of spaces */		while (*cp && *cp != ' ' && *cp != '\t')			cp++;	}}#ifdef RESOLVSORT/* XXX - should really support CIDR which means explicit masks always. */static u_int32_tnet_mask(in)		/* XXX - should really use system's version of this */	struct in_addr in;{	register u_int32_t i = ntohl(in.s_addr);	if (IN_CLASSA(i))		return (htonl(IN_CLASSA_NET));	else if (IN_CLASSB(i))		return (htonl(IN_CLASSB_NET));	return (htonl(IN_CLASSC_NET));}#endifu_intres_randomid(void) {	struct timeval now;	gettimeofday(&now, NULL);	return (0xffff & (now.tv_sec ^ now.tv_usec ^ getpid()));}/* * This routine is for closing the socket if a virtual circuit is used and * the program wants to close it.  This provides support for endhostent() * which expects to close the socket. * * This routine is not expected to be user visible. */voidres_nclose(res_state statp) {	int ns;	if (statp->_vcsock >= 0) { 		(void) close(statp->_vcsock);		statp->_vcsock = -1;		statp->_flags &= ~(RES_F_VC | RES_F_CONN);	}	for (ns = 0; ns < statp->_u._ext.nscount; ns++) {		if (statp->_u._ext.nssocks[ns] != -1) {			(void) close(statp->_u._ext.nssocks[ns]);			statp->_u._ext.nssocks[ns] = -1;		}	}}voidres_ndestroy(res_state statp) {	res_nclose(statp);	if (statp->_u._ext.ext != NULL)		free(statp->_u._ext.ext);	statp->options &= ~RES_INIT;	statp->_u._ext.ext = NULL;}const char *res_get_nibblesuffix(res_state statp) {	if (statp->_u._ext.ext)		return (statp->_u._ext.ext->nsuffix);	return ("ip6.arpa");}const char *res_get_nibblesuffix2(res_state statp) {	if (statp->_u._ext.ext)		return (statp->_u._ext.ext->nsuffix2);	return ("ip6.int");}voidres_setservers(res_state statp, const union res_sockaddr_union *set, int cnt) {	int i, nserv;	size_t size;	/* close open servers */	res_nclose(statp);	/* cause rtt times to be forgotten */	statp->_u._ext.nscount = 0;	nserv = 0;	for (i = 0; i < cnt && nserv < MAXNS; i++) {		switch (set->sin.sin_family) {		case AF_INET:			size = sizeof(set->sin);			if (statp->_u._ext.ext)				memcpy(&statp->_u._ext.ext->nsaddrs[nserv],					&set->sin, size);			if (size <= sizeof(statp->nsaddr_list[nserv]))				memcpy(&statp->nsaddr_list[nserv],					&set->sin, size);			else				statp->nsaddr_list[nserv].sin_family = 0;			nserv++;			break;#ifdef HAS_INET6_STRUCTS		case AF_INET6:			size = sizeof(set->sin6);			if (statp->_u._ext.ext)				memcpy(&statp->_u._ext.ext->nsaddrs[nserv],					&set->sin6, size);			if (size <= sizeof(statp->nsaddr_list[nserv]))				memcpy(&statp->nsaddr_list[nserv],					&set->sin6, size);			else				statp->nsaddr_list[nserv].sin_family = 0;			nserv++;			break;#endif		default:			break;		}		set++;	}	statp->nscount = nserv;	}intres_getservers(res_state statp, union res_sockaddr_union *set, int cnt) {	int i;	size_t size;	u_int16_t family;	for (i = 0; i < statp->nscount && i < cnt; i++) {		if (statp->_u._ext.ext)			family = statp->_u._ext.ext->nsaddrs[i].sin.sin_family;		else 			family = statp->nsaddr_list[i].sin_family;		switch (family) {		case AF_INET:			size = sizeof(set->sin);			if (statp->_u._ext.ext)				memcpy(&set->sin,				       &statp->_u._ext.ext->nsaddrs[i],				       size);			else				memcpy(&set->sin, &statp->nsaddr_list[i],				       size);			break;#ifdef HAS_INET6_STRUCTS		case AF_INET6:			size = sizeof(set->sin6);			if (statp->_u._ext.ext)				memcpy(&set->sin6,				       &statp->_u._ext.ext->nsaddrs[i],				       size);			else				memcpy(&set->sin6, &statp->nsaddr_list[i],				       size);			break;#endif		default:			set->sin.sin_family = 0;			break;		}		set++;	}	return (statp->nscount);}

⌨️ 快捷键说明

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