1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
|
/*
* $Id$
*/
#ifndef CFG_FILE_H
#define CFG_FILE_H
#include "config.h"
#include <sys/types.h>
#ifndef HAVE_OWN_QUEUE_H
#include <sys/queue.h>
#else
#include "queue.h"
#endif
#include <netinet/in.h>
#include <sys/un.h>
#include <event.h>
#include <glib.h>
#include "mem_pool.h"
#include "upstream.h"
#include "memcached.h"
#include "filter.h"
#define DEFAULT_BIND_PORT 768
#define DEFAULT_CONTROL_PORT 7608
#define MAX_MEMCACHED_SERVERS 48
#define DEFAULT_MEMCACHED_PORT 11211
/* Memcached timeouts */
#define DEFAULT_MEMCACHED_CONNECT_TIMEOUT 1000
/* Upstream timeouts */
#define DEFAULT_UPSTREAM_ERROR_TIME 10
#define DEFAULT_UPSTREAM_ERROR_TIME 10
#define DEFAULT_UPSTREAM_DEAD_TIME 300
#define DEFAULT_UPSTREAM_MAXERRORS 10
/* Statfile pool size, 50Mb */
#define DEFAULT_STATFILE_SIZE 52428800L
/* 1 worker by default */
#define DEFAULT_WORKERS_NUM 1
#define yyerror(fmt, ...) \
fprintf (stderr, "Config file parse error!\non line: %d\n", yylineno); \
fprintf (stderr, "while reading text: %s\nreason: ", yytext); \
fprintf (stderr, fmt, ##__VA_ARGS__); \
fprintf (stderr, "\n")
#define yywarn(fmt, ...) \
fprintf (stderr, "Config file parse warning!\non line %d\n", yylineno); \
fprintf (stderr, "while reading text: %s\nreason: ", yytext); \
fprintf (stderr, fmt, ##__VA_ARGS__); \
fprintf (stderr, "\n")
struct expression;
enum { VAL_UNDEF=0, VAL_TRUE, VAL_FALSE };
enum rspamd_regexp_type {
REGEXP_NONE = 0,
REGEXP_HEADER,
REGEXP_MIME,
REGEXP_MESSAGE,
REGEXP_URL,
};
enum rspamd_log_type {
RSPAMD_LOG_CONSOLE,
RSPAMD_LOG_SYSLOG,
RSPAMD_LOG_FILE,
};
struct rspamd_regexp {
enum rspamd_regexp_type type;
char *regexp_text;
GRegex *regexp;
char *header;
};
struct memcached_server {
struct upstream up;
struct in_addr addr;
uint16_t port;
short alive;
short int num;
};
struct perl_module {
char *path;
LIST_ENTRY (perl_module) next;
};
struct module_opt {
char *param;
char *value;
LIST_ENTRY (module_opt) next;
};
struct statfile {
char *alias;
char *pattern;
double weight;
size_t size;
};
struct config_file {
memory_pool_t *cfg_pool;
char *cfg_name;
char *pid_file;
char *temp_dir;
char *bind_host;
struct in_addr bind_addr;
uint16_t bind_port;
uint16_t bind_family;
char *control_host;
struct in_addr control_addr;
uint16_t control_port;
uint16_t control_family;
int controller_enabled;
char *control_password;
int no_fork;
unsigned int workers_number;
enum rspamd_log_type log_type;
int log_facility;
int log_level;
char *log_file;
int log_fd;
size_t max_statfile_size;
struct memcached_server memcached_servers[MAX_MEMCACHED_SERVERS];
size_t memcached_servers_num;
memc_proto_t memcached_protocol;
unsigned int memcached_error_time;
unsigned int memcached_dead_time;
unsigned int memcached_maxerrors;
unsigned int memcached_connect_timeout;
LIST_HEAD (modulesq, perl_module) perl_modules;
LIST_HEAD (headersq, filter) header_filters;
LIST_HEAD (mimesq, filter) mime_filters;
LIST_HEAD (messagesq, filter) message_filters;
LIST_HEAD (urlsq, filter) url_filters;
char *header_filters_str;
char *mime_filters_str;
char *message_filters_str;
char *url_filters_str;
GHashTable* modules_opts;
GHashTable* variables;
GHashTable* metrics;
GHashTable* factors;
GHashTable* c_modules;
GHashTable* composite_symbols;
GHashTable* statfiles;
};
int add_memcached_server (struct config_file *cf, char *str);
int parse_bind_line (struct config_file *cf, char *str, char is_control);
void init_defaults (struct config_file *cfg);
void free_config (struct config_file *cfg);
char* get_module_opt (struct config_file *cfg, char *module_name, char *opt_name);
size_t parse_limit (const char *limit);
unsigned int parse_seconds (const char *t);
char parse_flag (const char *str);
char* substitute_variable (struct config_file *cfg, char *str, u_char recursive);
void post_load_config (struct config_file *cfg);
struct rspamd_regexp* parse_regexp (memory_pool_t *pool, char *line);
struct expression* parse_expression (memory_pool_t *pool, char *line);
int yylex (void);
int yyparse (void);
void yyrestart (FILE *);
#endif /* ifdef CFG_FILE_H */
/*
* vi:ts=4
*/
|