1 /* 2 * iterator/iter_priv.h - iterative resolver private address and domain store 3 * 4 * Copyright (c) 2008, NLnet Labs. All rights reserved. 5 * 6 * This software is open source. 7 * 8 * Redistribution and use in source and binary forms, with or without 9 * modification, are permitted provided that the following conditions 10 * are met: 11 * 12 * Redistributions of source code must retain the above copyright notice, 13 * this list of conditions and the following disclaimer. 14 * 15 * Redistributions in binary form must reproduce the above copyright notice, 16 * this list of conditions and the following disclaimer in the documentation 17 * and/or other materials provided with the distribution. 18 * 19 * Neither the name of the NLNET LABS nor the names of its contributors may 20 * be used to endorse or promote products derived from this software without 21 * specific prior written permission. 22 * 23 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 24 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 25 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 26 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 27 * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 28 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED 29 * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 30 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF 31 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING 32 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 33 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 34 */ 35 36 /** 37 * \file 38 * 39 * This file contains functions to assist the iterator module. 40 * Keep track of the private addresses and lookup fast. 41 */ 42 43 #ifndef ITERATOR_ITER_PRIV_H 44 #define ITERATOR_ITER_PRIV_H 45 #include "util/rbtree.h" 46 struct sldns_buffer; 47 struct iter_env; 48 struct config_file; 49 struct regional; 50 struct rrset_parse; 51 52 /** 53 * Iterator priv structure 54 */ 55 struct iter_priv { 56 /** regional for allocation */ 57 struct regional* region; 58 /** 59 * Tree of the address spans that are blocked. 60 * contents of type addr_tree_node. 61 * No further data need, only presence or absence. 62 */ 63 rbtree_t a; 64 /** 65 * Tree of the domains spans that are allowed to contain 66 * the blocked address spans. 67 * contents of type name_tree_node. 68 * No further data need, only presence or absence. 69 */ 70 rbtree_t n; 71 }; 72 73 /** 74 * Create priv structure 75 * @return new structure or NULL on error. 76 */ 77 struct iter_priv* priv_create(void); 78 79 /** 80 * Delete priv structure. 81 * @param priv: to delete. 82 */ 83 void priv_delete(struct iter_priv* priv); 84 85 /** 86 * Process priv config. 87 * @param priv: where to store. 88 * @param cfg: config options. 89 * @return 0 on error. 90 */ 91 int priv_apply_cfg(struct iter_priv* priv, struct config_file* cfg); 92 93 /** 94 * See if rrset is bad. 95 * Will remove individual RRs that are bad (if possible) to 96 * sanitize the RRset without removing it completely. 97 * @param priv: structure for private address storage. 98 * @param pkt: packet to decompress rrset name in. 99 * @param rrset: the rrset to examine, A or AAAA. 100 * @return true if the rrset is bad and should be removed. 101 */ 102 int priv_rrset_bad(struct iter_priv* priv, struct sldns_buffer* pkt, 103 struct rrset_parse* rrset); 104 105 /** 106 * Get memory used by priv structure. 107 * @param priv: structure for address storage. 108 * @return bytes in use. 109 */ 110 size_t priv_get_mem(struct iter_priv* priv); 111 112 #endif /* ITERATOR_ITER_PRIV_H */ 113