• Home
  • Raw
  • Download

Lines Matching refs:crecp

67 static void cache_free(struct crec *crecp);
68 static void cache_unlink(struct crec *crecp);
69 static void cache_link(struct crec *crecp);
71 static void cache_hash(struct crec *crecp);
75 struct crec *crecp; in cache_init() local
85 crecp = safe_malloc(daemon->cachesize*sizeof(struct crec)); in cache_init()
87 for (i=0; i < daemon->cachesize; i++, crecp++) in cache_init()
89 cache_link(crecp); in cache_init()
90 crecp->flags = 0; in cache_init()
91 crecp->uid = uid++; in cache_init()
154 static void cache_hash(struct crec *crecp) in cache_hash() argument
161 struct crec **up = hash_bucket(cache_get_name(crecp)); in cache_hash()
163 if (!(crecp->flags & F_REVERSE)) in cache_hash()
168 if (crecp->flags & F_IMMORTAL) in cache_hash()
172 crecp->hash_next = *up; in cache_hash()
173 *up = crecp; in cache_hash()
176 static void cache_free(struct crec *crecp) in cache_free() argument
178 crecp->flags &= ~F_FORWARD; in cache_free()
179 crecp->flags &= ~F_REVERSE; in cache_free()
180 crecp->uid = uid++; /* invalidate CNAMES pointing to this. */ in cache_free()
183 cache_tail->next = crecp; in cache_free()
185 cache_head = crecp; in cache_free()
186 crecp->prev = cache_tail; in cache_free()
187 crecp->next = NULL; in cache_free()
188 cache_tail = crecp; in cache_free()
191 if (crecp->flags & F_BIGNAME) in cache_free()
193 crecp->name.bname->next = big_free; in cache_free()
194 big_free = crecp->name.bname; in cache_free()
195 crecp->flags &= ~F_BIGNAME; in cache_free()
200 static void cache_link(struct crec *crecp) in cache_link() argument
203 cache_head->prev = crecp; in cache_link()
204 crecp->next = cache_head; in cache_link()
205 crecp->prev = NULL; in cache_link()
206 cache_head = crecp; in cache_link()
208 cache_tail = crecp; in cache_link()
212 static void cache_unlink (struct crec *crecp) in cache_unlink() argument
214 if (crecp->prev) in cache_unlink()
215 crecp->prev->next = crecp->next; in cache_unlink()
217 cache_head = crecp->next; in cache_unlink()
219 if (crecp->next) in cache_unlink()
220 crecp->next->prev = crecp->prev; in cache_unlink()
222 cache_tail = crecp->prev; in cache_unlink()
225 char *cache_get_name(struct crec *crecp) in cache_get_name() argument
227 if (crecp->flags & F_BIGNAME) in cache_get_name()
228 return crecp->name.bname->name; in cache_get_name()
229 else if (crecp->flags & (F_DHCP | F_CONFIG)) in cache_get_name()
230 return crecp->name.namep; in cache_get_name()
232 return crecp->name.sname; in cache_get_name()
235 static int is_outdated_cname_pointer(struct crec *crecp) in is_outdated_cname_pointer() argument
237 if (!(crecp->flags & F_CNAME)) in is_outdated_cname_pointer()
240 if (crecp->addr.cname.cache && crecp->addr.cname.uid == crecp->addr.cname.cache->uid) in is_outdated_cname_pointer()
246 static int is_expired(time_t now, struct crec *crecp) in is_expired() argument
248 if (crecp->flags & F_IMMORTAL) in is_expired()
251 if (difftime(now, crecp->ttd) < 0) in is_expired()
272 struct crec *crecp, **up; in cache_scan_free() local
276 for (up = hash_bucket(name), crecp = *up; crecp; crecp = crecp->hash_next) in cache_scan_free()
277 if (is_expired(now, crecp) || is_outdated_cname_pointer(crecp)) in cache_scan_free()
279 *up = crecp->hash_next; in cache_scan_free()
280 if (!(crecp->flags & (F_HOSTS | F_DHCP))) in cache_scan_free()
282 cache_unlink(crecp); in cache_scan_free()
283 cache_free(crecp); in cache_scan_free()
286 else if ((crecp->flags & F_FORWARD) && in cache_scan_free()
287 ((flags & crecp->flags & (F_IPV4 | F_IPV6)) || ((crecp->flags | flags) & F_CNAME)) && in cache_scan_free()
288 hostname_isequal(cache_get_name(crecp), name)) in cache_scan_free()
290 if (crecp->flags & (F_HOSTS | F_DHCP)) in cache_scan_free()
292 *up = crecp->hash_next; in cache_scan_free()
293 cache_unlink(crecp); in cache_scan_free()
294 cache_free(crecp); in cache_scan_free()
297 up = &crecp->hash_next; in cache_scan_free()
308 for (crecp = hash_table[i], up = &hash_table[i]; in cache_scan_free()
309 crecp && ((crecp->flags & F_REVERSE) || !(crecp->flags & F_IMMORTAL)); in cache_scan_free()
310 crecp = crecp->hash_next) in cache_scan_free()
311 if (is_expired(now, crecp)) in cache_scan_free()
313 *up = crecp->hash_next; in cache_scan_free()
314 if (!(crecp->flags & (F_HOSTS | F_DHCP))) in cache_scan_free()
316 cache_unlink(crecp); in cache_scan_free()
317 cache_free(crecp); in cache_scan_free()
320 else if (!(crecp->flags & (F_HOSTS | F_DHCP)) && in cache_scan_free()
321 (flags & crecp->flags & F_REVERSE) && in cache_scan_free()
322 (flags & crecp->flags & (F_IPV4 | F_IPV6)) && in cache_scan_free()
323 memcmp(&crecp->addr.addr, addr, addrlen) == 0) in cache_scan_free()
325 *up = crecp->hash_next; in cache_scan_free()
326 cache_unlink(crecp); in cache_scan_free()
327 cache_free(crecp); in cache_scan_free()
330 up = &crecp->hash_next; in cache_scan_free()
495 struct crec *cache_find_by_name(struct crec *crecp, char *name, time_t now, unsigned short prot) in cache_find_by_name() argument
499 if (crecp) /* iterating */ in cache_find_by_name()
500 ans = crecp->next; in cache_find_by_name()
508 for (up = hash_bucket(name), crecp = *up; crecp; crecp = next) in cache_find_by_name()
510 next = crecp->hash_next; in cache_find_by_name()
512 if (!is_expired(now, crecp) && !is_outdated_cname_pointer(crecp)) in cache_find_by_name()
514 if ((crecp->flags & F_FORWARD) && in cache_find_by_name()
515 (crecp->flags & prot) && in cache_find_by_name()
516 hostname_isequal(cache_get_name(crecp), name)) in cache_find_by_name()
518 if (crecp->flags & (F_HOSTS | F_DHCP)) in cache_find_by_name()
520 *chainp = crecp; in cache_find_by_name()
521 chainp = &crecp->next; in cache_find_by_name()
525 cache_unlink(crecp); in cache_find_by_name()
526 cache_link(crecp); in cache_find_by_name()
534 if (insert && (crecp->flags & (F_REVERSE | F_IMMORTAL)) == ins_flags) in cache_find_by_name()
536 *up = crecp->hash_next; in cache_find_by_name()
537 crecp->hash_next = *insert; in cache_find_by_name()
538 *insert = crecp; in cache_find_by_name()
539 insert = &crecp->hash_next; in cache_find_by_name()
546 ins_flags = crecp->flags & (F_REVERSE | F_IMMORTAL); in cache_find_by_name()
548 up = &crecp->hash_next; in cache_find_by_name()
553 up = &crecp->hash_next; in cache_find_by_name()
558 *up = crecp->hash_next; in cache_find_by_name()
559 if (!(crecp->flags & (F_HOSTS | F_DHCP))) in cache_find_by_name()
561 cache_unlink(crecp); in cache_find_by_name()
562 cache_free(crecp); in cache_find_by_name()
579 struct crec *cache_find_by_addr(struct crec *crecp, struct all_addr *addr, in cache_find_by_addr() argument
589 if (crecp) /* iterating */ in cache_find_by_addr()
590 ans = crecp->next; in cache_find_by_addr()
601 for (crecp = hash_table[i], up = &hash_table[i]; in cache_find_by_addr()
602 crecp && (crecp->flags & F_REVERSE); in cache_find_by_addr()
603 crecp = crecp->hash_next) in cache_find_by_addr()
604 if (!is_expired(now, crecp)) in cache_find_by_addr()
606 if ((crecp->flags & prot) && in cache_find_by_addr()
607 memcmp(&crecp->addr.addr, addr, addrlen) == 0) in cache_find_by_addr()
609 if (crecp->flags & (F_HOSTS | F_DHCP)) in cache_find_by_addr()
611 *chainp = crecp; in cache_find_by_addr()
612 chainp = &crecp->next; in cache_find_by_addr()
616 cache_unlink(crecp); in cache_find_by_addr()
617 cache_link(crecp); in cache_find_by_addr()
620 up = &crecp->hash_next; in cache_find_by_addr()
624 *up = crecp->hash_next; in cache_find_by_addr()
625 if (!(crecp->flags & (F_HOSTS | F_DHCP))) in cache_find_by_addr()
627 cache_unlink(crecp); in cache_find_by_addr()
628 cache_free(crecp); in cache_find_by_addr()