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

📄 dnarea.c

📁 这是一个同样来自贝尔实验室的和UNIX有着渊源的操作系统, 其简洁的设计和实现易于我们学习和理解
💻 C
字号:
#include <u.h>#include <libc.h>#include <bio.h>#include <ndb.h>#include <ip.h>#include "dns.h"Area *owned;Area *delegated;/* *  true if a name is in our area */Area*inmyarea(char *name){	int len;	Area *s, *d;	len = strlen(name);	for(s = owned; s; s = s->next){		if(s->len > len)			continue;		if(cistrcmp(s->soarr->owner->name, name + len - s->len) == 0)			if(len == s->len || name[len - s->len - 1] == '.')				break;	}	if(s == 0)		return 0;	for(d = delegated; d; d = d->next){		if(d->len > len)			continue;		if(cistrcmp(d->soarr->owner->name, name + len - d->len) == 0)			if(len == d->len || name[len - d->len - 1] == '.')				return 0;	}	return s;}/* *  our area is the part of the domain tree that *  we serve */voidaddarea(DN *dp, RR *rp, Ndbtuple *t){	Area **l, *s;	if(t->val[0])		l = &delegated;	else		l = &owned;	/*	 *  The area contains a copy of the soa rr that created it.	 *  The owner of the the soa rr should stick around as long	 *  as the area does.	 */	s = emalloc(sizeof(*s));	s->len = strlen(dp->name);	rrcopy(rp, &s->soarr);	s->soarr->owner = dp;	s->soarr->db = 1;	s->soarr->ttl = Hour;	s->neednotify = 1;	s->needrefresh = 0;syslog(0, logfile, "new area %s", dp->name);	s->next = *l;	*l = s;}voidfreearea(Area **l){	Area *s;	while(s = *l){		*l = s->next;		rrfree(s->soarr);		free(s);	}}/* * refresh all areas that need it *  this entails running a command 'zonerefreshprogram'.  This could *  copy over databases from elsewhere or just do a zone transfer. */voidrefresh_areas(Area *s){	int pid;	Waitmsg *w;	for(; s != nil; s = s->next){		if(!s->needrefresh)			continue;		if(zonerefreshprogram == nil){			s->needrefresh = 0;			continue;		}		switch(pid = fork()){		case -1:			break;		case 0:			execl(zonerefreshprogram, "zonerefresh", s->soarr->owner->name, nil);			exits(0);			break;		default:			for(;;){				w = wait();				if(w == nil)					break;				if(w->pid == pid){					if(w->msg == nil || *w->msg == 0)						s->needrefresh = 0;					free(w);					break;				}				free(w);			}		}	}}

⌨️ 快捷键说明

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