8 Area *owned, *delegated;
11 * true if a name is in our area
20 for(s = owned; s; s = s->next){
23 if(cistrcmp(s->soarr->owner->name, name + len - s->len) == 0)
24 if(len == s->len || name[len - s->len - 1] == '.')
30 /* name is in area `s' */
31 for(d = delegated; d; d = d->next){
34 if(cistrcmp(d->soarr->owner->name, name + len - d->len) == 0)
35 if(len == d->len || name[len - d->len - 1] == '.')
36 return nil; /* name is in a delegated subarea */
39 return s; /* name is in area `s' and not in a delegated subarea */
43 * our area is the part of the domain tree that
47 addarea(DN *dp, RR *rp, Ndbtuple *t)
58 for (s = *l; s != nil; s = s->next)
59 if(s->soarr->owner == dp) {
61 return; /* we've already got one */
65 * The area contains a copy of the soa rr that created it.
66 * The owner of the the soa rr should stick around as long
69 s = emalloc(sizeof(*s));
70 s->len = strlen(dp->name);
71 rrcopy(rp, &s->soarr);
79 dnslog("new area %s %s", dp->name,
80 l == &delegated? "delegated": "owned");
96 memset(s, 0, sizeof *s); /* cause trouble */
103 * refresh all areas that need it
104 * this entails running a command 'zonerefreshprogram'. This could
105 * copy over databases from elsewhere or just do a zone transfer.
108 refresh_areas(Area *s)
113 for(; s != nil; s = s->next){
117 if(zonerefreshprogram == nil){
124 sleep(1000); /* don't fork again immediately */
128 execl(zonerefreshprogram, "zonerefresh",
129 s->soarr->owner->name, nil);
130 exits("exec zonerefresh failed");
132 while ((w = wait()) != nil && w->pid != pid)
134 if (w && w->pid == pid)
135 if(w->msg == nil || *w->msg == '\0')