nsec3.h revision 1.1.1.4 1 1.1 christos /*
2 1.1 christos * nsec3.h -- nsec3 handling.
3 1.1 christos *
4 1.1 christos * Copyright (c) 2001-2006, NLnet Labs. All rights reserved.
5 1.1 christos *
6 1.1 christos * See LICENSE for the license.
7 1.1 christos *
8 1.1 christos */
9 1.1 christos #ifndef NSEC3_H
10 1.1 christos #define NSEC3_H
11 1.1 christos
12 1.1 christos #ifdef NSEC3
13 1.1 christos struct udb_ptr;
14 1.1 christos struct domain;
15 1.1 christos struct dname;
16 1.1 christos struct region;
17 1.1 christos struct zone;
18 1.1 christos struct namedb;
19 1.1 christos struct query;
20 1.1 christos struct answer;
21 1.1 christos struct rr;
22 1.1 christos
23 1.1 christos /*
24 1.1 christos * calculate prehash information for zone.
25 1.1 christos */
26 1.1 christos void prehash_zone(struct namedb* db, struct zone* zone);
27 1.1 christos /*
28 1.1 christos * calculate prehash for zone, assumes no partial precompile or prehashlist
29 1.1 christos */
30 1.1 christos void prehash_zone_complete(struct namedb* db, struct zone* zone);
31 1.1 christos
32 1.1 christos /*
33 1.1 christos * finds nsec3 that covers the given domain hash.
34 1.1 christos * returns true if the find is exact.
35 1.1 christos */
36 1.1 christos int nsec3_find_cover(struct zone* zone, uint8_t* hash, size_t hashlen,
37 1.1 christos struct domain** result);
38 1.1 christos
39 1.1 christos /*
40 1.1 christos * _answer_ Routines used to add the correct nsec3 record to a query answer.
41 1.1 christos * cnames etc may have been followed, hence original name.
42 1.1 christos */
43 1.1 christos /*
44 1.1 christos * add proof for wildcards that the name below the wildcard.parent
45 1.1 christos * does not exist
46 1.1 christos */
47 1.1 christos void nsec3_answer_wildcard(struct query* query, struct answer* answer,
48 1.1 christos struct domain* wildcard, const struct dname* qname);
49 1.1 christos
50 1.1 christos /*
51 1.1 christos * add NSEC3 to provide domain name but not rrset exists,
52 1.1 christos * this could be a query for a DS or NSEC3 type
53 1.1 christos */
54 1.1 christos void nsec3_answer_nodata(struct query *query, struct answer *answer,
55 1.1 christos struct domain *original);
56 1.1 christos
57 1.1 christos /*
58 1.1 christos * add NSEC3 for a delegation (optout stuff)
59 1.1 christos */
60 1.1 christos void nsec3_answer_delegation(struct query *query, struct answer *answer);
61 1.1 christos
62 1.1 christos /*
63 1.1 christos * add NSEC3 for authoritative answers.
64 1.1 christos * match==0 is an nxdomain.
65 1.1 christos */
66 1.1 christos void nsec3_answer_authoritative(struct domain** match, struct query *query,
67 1.1 christos struct answer *answer, struct domain* closest_encloser,
68 1.1 christos const struct dname* qname);
69 1.1 christos
70 1.1 christos /*
71 1.1 christos * True if domain is a NSEC3 (+RRSIG) data only variety.
72 1.1 christos * pass nonNULL zone to filter for particular zone.
73 1.1 christos */
74 1.1 christos int domain_has_only_NSEC3(struct domain* domain, struct zone* zone);
75 1.1 christos
76 1.1 christos /* get hashed bytes */
77 1.1 christos void nsec3_hash_and_store(struct zone* zone, const struct dname* dname,
78 1.1 christos uint8_t* store);
79 1.1 christos /* see if NSEC3 record uses the params in use for the zone */
80 1.1 christos int nsec3_rr_uses_params(struct rr* rr, struct zone* zone);
81 1.1 christos /* number of NSEC3s that are in the zone chain */
82 1.1 christos int nsec3_in_chain_count(struct domain* domain, struct zone* zone);
83 1.1 christos /* find previous NSEC3, or, lastinzone, or, NULL */
84 1.1 christos struct domain* nsec3_chain_find_prev(struct zone* zone, struct domain* domain);
85 1.1 christos /* clear nsec3 precompile for the zone */
86 1.1 christos void nsec3_clear_precompile(struct namedb* db, struct zone* zone);
87 1.1 christos /* if domain is part of nsec3hashed domains of a zone */
88 1.1 christos int nsec3_domain_part_of_zone(struct domain* d, struct zone* z);
89 1.1 christos /* condition when a domain is precompiled */
90 1.1 christos int nsec3_condition_hash(struct domain* d, struct zone* z);
91 1.1 christos /* condition when a domain is ds precompiled */
92 1.1 christos int nsec3_condition_dshash(struct domain* d, struct zone* z);
93 1.1 christos /* set nsec3param for this zone or NULL if no NSEC3 available */
94 1.1 christos void nsec3_find_zone_param(struct namedb* db, struct zone* zone,
95 1.1.1.4 christos struct rr* avoid_rr, int checkchain);
96 1.1 christos /* hash domain and wcchild, and lookup nsec3 in tree, and precompile */
97 1.1 christos void nsec3_precompile_domain(struct namedb* db, struct domain* domain,
98 1.1 christos struct zone* zone, struct region* tmpregion);
99 1.1 christos /* hash ds_parent_cover, and lookup nsec3 and precompile */
100 1.1 christos void nsec3_precompile_domain_ds(struct namedb* db, struct domain* domain,
101 1.1 christos struct zone* zone);
102 1.1 christos /* put nsec3 into nsec3tree and adjust zonelast */
103 1.1 christos void nsec3_precompile_nsec3rr(struct namedb* db, struct domain* domain,
104 1.1 christos struct zone* zone);
105 1.1 christos /* precompile entire zone, assumes all is null at start */
106 1.1 christos void nsec3_precompile_newparam(struct namedb* db, struct zone* zone);
107 1.1 christos /* create b32.zone for a hash, allocated in the region */
108 1.1 christos const struct dname* nsec3_b32_create(struct region* region, struct zone* zone,
109 1.1 christos unsigned char* hash);
110 1.1 christos /* create trees for nsec3 updates and lookups in zone */
111 1.1 christos void nsec3_zone_trees_create(struct region* region, struct zone* zone);
112 1.1 christos /* lookup zone that contains domain's nsec3 trees */
113 1.1 christos struct zone* nsec3_tree_zone(struct namedb* db, struct domain* domain);
114 1.1 christos /* lookup zone that contains domain's ds tree */
115 1.1 christos struct zone* nsec3_tree_dszone(struct namedb* db, struct domain* domain);
116 1.1 christos
117 1.1 christos #endif /* NSEC3 */
118 1.1 christos #endif /* NSEC3_H*/
119