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

📄 db_secure.c

📁 早期freebsd实现
💻 C
字号:
#ifndef LINTstatic char rcsid[] = "$Id: db_secure.c,v 1.4 1993/11/03 12:26:04 vixie Exp $";#endif/* this file was contributed by Gregory Neil Shapiro of WPI in August 1993 */#include <stdio.h>#include <sys/types.h>#include <sys/socket.h>#include <netinet/in.h>#include <arpa/nameser.h>#include <arpa/inet.h>#include <syslog.h>#include "named.h"#ifdef SECURE_ZONES#ifndef SECURE_ZONE_RR#define SECURE_ZONE_RR "secure_zone"#endif#ifndef MASK_SEP#define MASK_SEP ':'#endifint build_secure_netlist(zp)	struct zoneinfo *zp;{	struct netinfo *ntp = NULL, **netlistp, **end;	char buf[BUFSIZ];	struct hashbuf *htp;	struct namebuf *snp;	struct databuf *dp;	char *fname, *dname, dnbuf[MAXDNAME];	int errs = 0, securezone = 0;	if (zp->secure_nets) {	  free_netlist(&zp->secure_nets);	}	netlistp = &zp->secure_nets;	end = netlistp;	strcat(strcat(strcpy(dnbuf, SECURE_ZONE_RR), "."), zp->z_origin);	dname = dnbuf;	htp = hashtab;	if ((snp = nlookup(dname, &htp, &fname, 0)) == NULL) {		dprintf(1, (ddt,			    "build_secure_netlist(%s): FAIL on nlookup %s\n",			    zp->z_origin, dname));		zp->secure_nets=NULL;		return(0);	}	/* A parent's RR's aren't valid */	if (strcasecmp(snp->n_dname, SECURE_ZONE_RR)) {	  zp->secure_nets=NULL;	  return(0);	}	/* Collect secure nets into secure_nets */	for (dp = snp->n_data; dp != NULL; dp = dp->d_next) {		char *maskptr = NULL;		if (!match(dp, C_ANY, T_TXT)) {			continue;		}		bzero(buf, sizeof(buf));		bcopy(dp->d_data+1, buf, dp->d_size-1);		maskptr=strchr(buf, MASK_SEP);		if (maskptr) {			*maskptr++ = 0;		}		dprintf(3, (ddt,			    "build_secure_netlist(%s): Found secure zone %s\n",			    zp->z_origin, buf));		if (ntp == NULL) {			ntp = (struct netinfo *)malloc(sizeof(struct netinfo));			if (!ntp) {				dprintf(1, (ddt,				    "build_secure_netlist (%s): malloc fail\n",					    zp->z_origin));				syslog(LOG_ERR,				    "build_secure_netlist (%s): Out of Memory",				       zp->z_origin);				if (!securezone) {				  zp->secure_nets=NULL;				}				return(1);			}		}		if (!inet_aton(buf, &ntp->my_addr)) {			dprintf(1, (ddt,				"build_secure_netlist (%s): Bad address: %s\n",				    zp->z_origin, buf));			syslog(LOG_ERR,			       "build_secure_netlist (%s): Bad address: %s", 			       zp->z_origin, buf);			errs++;			continue;			}		if (maskptr && *maskptr) {			if (*maskptr == 'h' || *maskptr == 'H') {				ntp->mask = (u_int32_t)-1;			} else {                              if (!inet_aton(maskptr, &ntp->mask)) {					dprintf(1, (ddt,				   "build_secure_netlist (%s): Bad mask: %s\n",						    zp->z_origin, maskptr));					syslog(LOG_ERR,				     "build_secure_netlist (%s): Bad mask: %s",					       zp->z_origin, maskptr);					errs++;					continue;				}				}    		} else {			ntp->mask = net_mask(ntp->my_addr);		}		if (ntp->my_addr.s_addr & ~(ntp->mask)) {			dprintf(1, (ddt, 		 "build_secure_netlist (%s): addr (%s) is not in mask (x%x)\n",				    zp->z_origin,				    inet_ntoa(ntp->my_addr),				    ntp->mask));			syslog(LOG_WARNING, 		   "build_secure_netlist (%s): addr (%s) is not in mask (x%x)",			       zp->z_origin,			       inet_ntoa(ntp->my_addr),			       ntp->mask);			errs++;		}		ntp->next = NULL;		ntp->net = ntp->my_addr.s_addr & ntp->mask;		/* Check for duplicates */		if (net_on_netlist(ntp->my_addr, *netlistp)) {			dprintf(1, (ddt, 			   "build_secure_netlist (%s): duplicate address %s\n",				    zp->z_origin, inet_ntoa(ntp->my_addr)));			syslog(LOG_WARNING, 			   "build_secure_netlist (%s): duplicate address %s\n",			       zp->z_origin, inet_ntoa(ntp->my_addr));			errs++;			continue;		}		*end = ntp;		end = &ntp->next;		ntp = NULL;		securezone++;	}	if (ntp) {		free((char *)ntp);	}	if (!securezone) {	  zp->secure_nets=NULL;	}#ifdef DEBUG	if (debug > 1) {		for (ntp = *netlistp;  ntp != NULL;  ntp = ntp->next) {			fprintf(ddt, "ntp x%x net x%x mask x%x",				ntp, ntp->net, ntp->mask);			fprintf(ddt, " my_addr x%x", ntp->my_addr);			fprintf(ddt, " %s", inet_ntoa(ntp->my_addr));			fprintf(ddt, " next x%x\n", ntp->next);		}	}#endif	return(errs);}#endif /*SECURE_ZONES*/

⌨️ 快捷键说明

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