Mercurial > dnsbl
annotate src/context.h @ 89:946fc1bcfb2c stable-5-3
don't load null config pointer, keep the old one
author | carl |
---|---|
date | Sun, 07 Aug 2005 11:26:37 -0700 |
parents | c1280cd3e248 |
children | 962a1f8f1d9f |
rev | line source |
---|---|
73 | 1 #ifndef context_include |
2 #define context_include | |
3 | |
71 | 4 #include "tokenizer.h" |
5 #include <map> | |
6 | |
7 | |
8 enum status {oksofar, // not rejected yet | |
9 white, // whitelisted | |
10 black, // blacklisted | |
75 | 11 reject}; // rejected by a dns list |
71 | 12 |
13 class DNSBL; | |
14 class CONTEXT; | |
73 | 15 class recorder; |
71 | 16 |
17 typedef map<char *, char *, ltstr> string_map; | |
18 typedef set<int> int_set; | |
19 typedef list<char *> string_list; | |
20 typedef DNSBL * DNSBLP; | |
21 typedef list<DNSBLP> dnsblp_list; | |
22 typedef map<char *, DNSBLP, ltstr> dnsblp_map; | |
23 typedef CONTEXT * CONTEXTP; | |
24 typedef list<CONTEXTP> context_list; | |
25 typedef map<char *, CONTEXTP, ltstr> context_map; | |
26 typedef map<char *, int, ltstr> ns_mapper; | |
27 | |
28 struct DNSBL { | |
29 char *name; // nickname for this dns based list | |
30 char *suffix; // blacklist suffix like blackholes.five-ten-sg.com | |
31 char *message; // error message with one or two %s operators for the ip address replacement | |
32 DNSBL(char *n, char *s, char *m); | |
86
c1280cd3e248
add multiple debug syslog levels, remove duplicate dnsbl definitions
carl
parents:
76
diff
changeset
|
33 bool operator==(const DNSBL &rhs); |
71 | 34 }; |
35 | |
36 class CONTEXT { | |
37 CONTEXTP parent; | |
38 char * name; | |
39 context_map children; // map child context names to their contexts | |
40 string_set env_to; // | |
41 string_map env_from; // map senders to white/black/unknown | |
42 context_map env_from_context; // map senders to a child context | |
43 char * env_from_default; // default value for senders that are not found in the map white/black/unknown/inherit | |
44 bool content_filtering; // | |
45 char * content_suffix; // for sbl url body filtering | |
46 char * content_message; // "" | |
47 string_set content_host_ignore;// hosts to ignore for content sbl checking | |
48 string_set content_tlds; // | |
49 string_set html_tags; // set of valid html tags | |
50 int host_limit; // limit on host names | |
51 char * host_limit_message; // error message for excessive host names | |
52 bool host_random; // pick a random selection of host names rather than error for excessive hosts | |
53 int tag_limit; // limit on bad html tags | |
54 char * tag_limit_message; // error message for excessive bad html tags | |
55 dnsblp_map dnsbl_names; // name to dnsbl mapping for lists that are available in this context and children | |
56 dnsblp_list dnsbl_list; // list of dnsbls to be used in this context | |
57 | |
58 public: | |
59 CONTEXT(CONTEXTP parent_, char *name_); | |
60 ~CONTEXT(); | |
61 CONTEXTP get_parent() {return parent;}; | |
76 | 62 bool is_parent(CONTEXTP p); // is p a parent of this? |
71 | 63 char* get_full_name(char *buf, int size); |
64 void add_context(CONTEXTP child) {children[child->name] = child;}; | |
65 bool allow_env_to(char *to) {return (parent) ? parent->cover_env_to(to) : true;}; | |
66 bool cover_env_to(char *to); | |
67 | |
68 void add_to(char *to) {env_to.insert(to);}; | |
69 void add_from(char *from, char *status) {env_from[from] = status;}; | |
70 void add_from_context(char *from, CONTEXTP con) {env_from_context[from] = con;}; | |
71 void set_from_default(char *status) {env_from_default = status;}; | |
72 char* find_from(char *from); | |
75 | 73 CONTEXTP find_context(char *from); |
71 | 74 CONTEXTP find_from_context_name(char *name); |
75 | |
76 void set_content_filtering(bool filter) {content_filtering = filter;}; | |
77 void set_content_suffix(char *suffix) {content_suffix = suffix;}; | |
78 void set_content_message(char *message) {content_message = message;}; | |
79 void add_ignore(char *host) {content_host_ignore.insert(host);}; | |
80 void add_tld(char *tld) {content_tlds.insert(tld);}; | |
81 | |
82 void set_host_limit(int limit) {host_limit = limit;}; | |
83 void set_host_message(char *message) {host_limit_message = message;}; | |
84 void set_host_random(bool random) {host_random = random;}; | |
85 void set_tag_limit(int limit) {tag_limit = limit;}; | |
86 void set_tag_message(char *message) {tag_limit_message = message;}; | |
87 void add_tag(char *tag) {html_tags.insert(tag);}; | |
88 | |
89 void add_dnsbl(char *name, DNSBLP dns) {dnsbl_names[name] = dns;}; | |
90 void add_dnsbl(DNSBLP dns) {dnsbl_list.push_back(dns);}; | |
91 DNSBLP find_dnsbl(char *name); | |
92 | |
76 | 93 bool get_content_filtering() {return content_filtering;}; |
73 | 94 int get_host_limit() {return host_limit;}; |
95 bool get_host_random() {return host_random;}; | |
76 | 96 char* get_content_suffix(); |
97 char* get_content_message(); | |
98 string_set& get_content_host_ignore(); | |
99 string_set& get_content_tlds(); | |
100 string_set& get_html_tags(); | |
101 dnsblp_list& get_dnsbl_list(); | |
73 | 102 |
74 | 103 bool acceptable_content(recorder &memory, char *&msg); |
73 | 104 bool ignore_host(char *host); |
105 | |
71 | 106 void dump(int level = 0); |
107 }; | |
108 | |
109 | |
110 struct CONFIG { | |
111 // the only mutable stuff once it has been loaded from the config file | |
112 int reference_count; // protected by the global config_mutex | |
113 // all the rest is constant after loading from the config file | |
114 int generation; | |
115 time_t load_time; | |
116 string_set config_files; | |
117 context_list contexts; // owns all the contexts, not just top level contexts | |
118 context_map env_to; // map recipient to a filtering context | |
119 CONTEXTP default_context;// for env_to values that don't have their own specific filtering context | |
73 | 120 // the default context is also used for some of the content filtering values |
71 | 121 |
122 CONFIG(); | |
123 ~CONFIG(); | |
124 void add_context(CONTEXTP con); | |
75 | 125 void add_to(char *to, CONTEXTP con); |
126 CONTEXTP find_context(char *to); | |
71 | 127 void dump(); |
128 }; | |
129 | |
130 extern char *token_black; | |
131 extern char *token_content; | |
132 extern char *token_context; | |
133 extern char *token_dccfrom; | |
134 extern char *token_dccto; | |
135 extern char *token_default; | |
136 extern char *token_dnsbl; | |
137 extern char *token_dnsbll; | |
138 extern char *token_envfrom; | |
139 extern char *token_envto; | |
140 extern char *token_filter; | |
141 extern char *token_host_limit; | |
142 extern char *token_html_limit; | |
143 extern char *token_html_tags; | |
144 extern char *token_ignore; | |
145 extern char *token_include; | |
146 extern char *token_inherit; | |
147 extern char *token_lbrace; | |
75 | 148 extern char *token_mailhost; |
71 | 149 extern char *token_many; |
150 extern char *token_off; | |
151 extern char *token_ok; | |
152 extern char *token_ok2; | |
153 extern char *token_on; | |
154 extern char *token_rbrace; | |
155 extern char *token_semi; | |
156 extern char *token_soft; | |
75 | 157 extern char *token_substitute; |
71 | 158 extern char *token_tld; |
159 extern char *token_unknown; | |
160 extern char *token_white; | |
161 | |
162 extern string_set all_strings; // owns all the strings, only modified by the config loader thread | |
163 | |
74 | 164 void discard(string_set &s); |
71 | 165 char* register_string(string_set &s, char *name); |
166 char* register_string(char *name); | |
167 CONFIG *parse_config(char *fn); | |
168 bool load_conf(CONFIG &dc, char *fn); | |
169 void token_init(); | |
73 | 170 |
171 #endif |