Electroneum
localzone.h
Go to the documentation of this file.
1 /*
2  * services/localzone.h - local zones authority service.
3  *
4  * Copyright (c) 2007, 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 
42 #ifndef SERVICES_LOCALZONE_H
43 #define SERVICES_LOCALZONE_H
44 #include "util/rbtree.h"
45 #include "util/locks.h"
46 #include "util/storage/dnstree.h"
47 #include "util/module.h"
48 #include "services/view.h"
49 struct packed_rrset_data;
50 struct ub_packed_rrset_key;
51 struct regional;
52 struct config_file;
53 struct edns_data;
54 struct query_info;
55 struct sldns_buffer;
56 struct comm_reply;
57 struct config_strlist;
58 
94 };
95 
99 struct local_zones {
104 };
105 
109 struct local_zone {
114 
118  size_t namelen;
120  int namelabs;
124 
130 
136  size_t taglen;
140 
143  struct regional* region;
149 };
150 
154 struct local_data {
160  size_t namelen;
162  int namelabs;
166 };
167 
171 struct local_rrset {
173  struct local_rrset* next;
176 };
177 
186 };
187 
192 struct local_zones* local_zones_create(void);
193 
198 void local_zones_delete(struct local_zones* zones);
199 
207 int local_zones_apply_cfg(struct local_zones* zones, struct config_file* cfg);
208 
216 int local_zone_cmp(const void* z1, const void* z2);
217 
224 int local_data_cmp(const void* d1, const void* d2);
225 
230 void local_zone_delete(struct local_zone* z);
231 
247 struct local_zone* local_zones_tags_lookup(struct local_zones* zones,
248  uint8_t* name, size_t len, int labs, uint16_t dclass, uint16_t dtype,
249  uint8_t* taglist, size_t taglen, int ignoretags);
250 
263 struct local_zone* local_zones_lookup(struct local_zones* zones,
264  uint8_t* name, size_t len, int labs, uint16_t dclass, uint16_t dtype);
265 
271 void local_zones_print(struct local_zones* zones);
272 
304 int local_zones_answer(struct local_zones* zones, struct module_env* env,
305  struct query_info* qinfo, struct edns_data* edns, struct sldns_buffer* buf,
306  struct regional* temp, struct comm_reply* repinfo, uint8_t* taglist,
307  size_t taglen, uint8_t* tagactions, size_t tagactionssize,
308  struct config_strlist** tag_datas, size_t tag_datas_size,
309  char** tagname, int num_tags, struct view* view);
310 
318 int local_zone_str2type(const char* str, enum localzone_type* t);
319 
326 const char* local_zone_type2str(enum localzone_type t);
327 
338 struct local_zone* local_zones_find(struct local_zones* zones,
339  uint8_t* name, size_t len, int labs, uint16_t dclass);
340 
353 struct local_zone* local_zones_add_zone(struct local_zones* zones,
354  uint8_t* name, size_t len, int labs, uint16_t dclass,
355  enum localzone_type tp);
356 
363 void local_zones_del_zone(struct local_zones* zones, struct local_zone* zone);
364 
373 int local_zones_add_RR(struct local_zones* zones, const char* rr);
374 
384 void local_zones_del_data(struct local_zones* zones,
385  uint8_t* name, size_t len, int labs, uint16_t dclass);
386 
387 
396 int parse_dname(const char* str, uint8_t** res, size_t* len, int* labs);
397 
408 int local_data_find_tag_datas(const struct query_info* qinfo,
409  struct config_strlist* list, struct ub_packed_rrset_key* r,
410  struct regional* temp);
411 
431  size_t taglen, const uint8_t* taglist2, size_t taglen2,
432  const uint8_t* tagactions, size_t tagactionssize,
433  enum localzone_type lzt, int* tag, char* const* tagname, int num_tags);
434 
441 int local_zone_enter_defaults(struct local_zones* zones,
442  struct config_file* cfg);
443 
457 int rrstr_get_rr_content(const char* str, uint8_t** nm, uint16_t* type,
458  uint16_t* dclass, time_t* ttl, uint8_t* rr, size_t len,
459  uint8_t** rdata, size_t* rdata_len);
460 
471 int rrset_insert_rr(struct regional* region, struct packed_rrset_data* pd,
472  uint8_t* rdata, size_t rdata_len, time_t ttl, const char* rrstr);
473 
500 
501  /* The rest of the values are only possible as
502  * access-control-tag-action */
503 
512 };
513 
514 #endif /* SERVICES_LOCALZONE_H */
const char * res
Definition: hmac_keccak.cpp:41
rbtree_type data
Definition: localzone.h:146
int local_zones_answer(struct local_zones *zones, struct module_env *env, struct query_info *qinfo, struct edns_data *edns, struct sldns_buffer *buf, struct regional *temp, struct comm_reply *repinfo, uint8_t *taglist, size_t taglen, uint8_t *tagactions, size_t tagactionssize, struct config_strlist **tag_datas, size_t tag_datas_size, char **tagname, int num_tags, struct view *view)
struct addr_tree_node node
Definition: localzone.h:183
struct local_zone * local_zones_tags_lookup(struct local_zones *zones, uint8_t *name, size_t len, int labs, uint16_t dclass, uint16_t dtype, uint8_t *taglist, size_t taglen, int ignoretags)
struct regional * region
Definition: localzone.h:143
int local_zone_cmp(const void *z1, const void *z2)
rbnode_type node
Definition: localzone.h:111
uint8_t * name
Definition: localzone.h:158
struct ub_packed_rrset_key * rrset
Definition: localzone.h:175
void local_zones_delete(struct local_zones *zones)
localzone_type
Definition: localzone.h:64
unsigned short uint16_t
Definition: stdint.h:125
int rrset_insert_rr(struct regional *region, struct packed_rrset_data *pd, uint8_t *rdata, size_t rdata_len, time_t ttl, const char *rrstr)
void local_zones_del_data(struct local_zones *zones, uint8_t *name, size_t len, int labs, uint16_t dclass)
lock_rw_type lock
Definition: localzone.h:129
void local_zones_del_zone(struct local_zones *zones, struct local_zone *zone)
unsigned char uint8_t
Definition: stdint.h:124
const char * name
int namelabs
Definition: localzone.h:162
struct local_rrset * rrsets
Definition: localzone.h:165
size_t taglen
Definition: localzone.h:136
rbnode_type node
Definition: localzone.h:156
int local_zones_apply_cfg(struct local_zones *zones, struct config_file *cfg)
uint16_t dclass
Definition: localzone.h:123
struct local_zone * local_zones_add_zone(struct local_zones *zones, uint8_t *name, size_t len, int labs, uint16_t dclass, enum localzone_type tp)
enum localzone_type type
Definition: localzone.h:132
size_t namelen
Definition: localzone.h:160
uint8_t * name
Definition: localzone.h:116
size_t namelen
Definition: localzone.h:118
int local_zone_str2type(const char *str, enum localzone_type *t)
struct ub_packed_rrset_key * soa
Definition: localzone.h:148
struct local_zone * local_zones_find(struct local_zones *zones, uint8_t *name, size_t len, int labs, uint16_t dclass)
int parse_dname(const char *str, uint8_t **res, size_t *len, int *labs)
int namelabs
Definition: localzone.h:120
struct local_zone * local_zones_lookup(struct local_zones *zones, uint8_t *name, size_t len, int labs, uint16_t dclass, uint16_t dtype)
struct local_zone * parent
Definition: localzone.h:113
int rrstr_get_rr_content(const char *str, uint8_t **nm, uint16_t *type, uint16_t *dclass, time_t *ttl, uint8_t *rr, size_t len, uint8_t **rdata, size_t *rdata_len)
const char * buf
Definition: slow_memmem.cpp:74
enum localzone_type type
Definition: localzone.h:185
void local_zones_print(struct local_zones *zones)
int local_zones_add_RR(struct local_zones *zones, const char *rr)
int local_data_find_tag_datas(const struct query_info *qinfo, struct config_strlist *list, struct ub_packed_rrset_key *r, struct regional *temp)
lock_rw_type lock
Definition: localzone.h:101
void local_zone_delete(struct local_zone *z)
int local_data_cmp(const void *d1, const void *d2)
const char * local_zone_type2str(enum localzone_type t)
respip_action
Definition: localzone.h:483
uint8_t * taglist
Definition: localzone.h:134
struct local_rrset * next
Definition: localzone.h:173
Definition: view.h:66
struct local_zones * local_zones_create(void)
enum localzone_type local_data_find_tag_action(const uint8_t *taglist, size_t taglen, const uint8_t *taglist2, size_t taglen2, const uint8_t *tagactions, size_t tagactionssize, enum localzone_type lzt, int *tag, char *const *tagname, int num_tags)
int local_zone_enter_defaults(struct local_zones *zones, struct config_file *cfg)
struct rbtree_type * override_tree
Definition: localzone.h:139
rbtree_type ztree
Definition: localzone.h:103
int lock_rw_type
Definition: locks.h:261