]>
Commit | Line | Data |
---|---|---|
212380e3 | 1 | /* |
a6f63a82 | 2 | * solanum: Advanced, scalable Internet Relay Chat. |
212380e3 AC |
3 | * s_conf.h: A header for the configuration functions. |
4 | * | |
5 | * Copyright (C) 1990 Jarkko Oikarinen and University of Oulu, Co Center | |
6 | * Copyright (C) 1996-2002 Hybrid Development Team | |
7 | * Copyright (C) 2002-2004 ircd-ratbox development team | |
8 | * | |
9 | * This program is free software; you can redistribute it and/or modify | |
10 | * it under the terms of the GNU General Public License as published by | |
11 | * the Free Software Foundation; either version 2 of the License, or | |
12 | * (at your option) any later version. | |
13 | * | |
14 | * This program is distributed in the hope that it will be useful, | |
15 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
16 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
17 | * GNU General Public License for more details. | |
18 | * | |
19 | * You should have received a copy of the GNU General Public License | |
20 | * along with this program; if not, write to the Free Software | |
21 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 | |
22 | * USA | |
212380e3 AC |
23 | */ |
24 | ||
25 | #ifndef INCLUDED_s_conf_h | |
26 | #define INCLUDED_s_conf_h | |
27 | #include "setup.h" | |
28 | ||
29 | #ifdef HAVE_LIBCRYPTO | |
30 | #include <openssl/rsa.h> | |
31 | #endif | |
32 | ||
33 | #include "ircd_defs.h" | |
34 | #include "class.h" | |
35 | #include "client.h" | |
212380e3 AC |
36 | |
37 | struct Client; | |
38 | struct DNSReply; | |
39 | struct hostent; | |
40 | ||
41 | /* used by new parser */ | |
42 | /* yacc/lex love globals!!! */ | |
43 | ||
44 | struct ip_value | |
45 | { | |
e7046ee5 | 46 | struct rb_sockaddr_storage ip; |
212380e3 AC |
47 | int ip_mask; |
48 | int type; | |
49 | }; | |
50 | ||
51 | extern FILE *conf_fbfile_in; | |
52 | extern char conf_line_in[256]; | |
53 | ||
54ac8b60 VY |
54 | struct ConfItem |
55 | { | |
54ac8b60 VY |
56 | unsigned int status; /* If CONF_ILLEGAL, delete when no clients */ |
57 | unsigned int flags; | |
58 | int clients; /* Number of *LOCAL* clients using this */ | |
27f616dd JT |
59 | union |
60 | { | |
61 | char *name; /* IRC name, nick, server name, or original u@h */ | |
62 | const char *oper; | |
63 | } info; | |
54ac8b60 VY |
64 | char *host; /* host part of user@host */ |
65 | char *passwd; /* doubles as kline reason *ugh* */ | |
66 | char *spasswd; /* Password to send. */ | |
67 | char *user; /* user part of user@host */ | |
68 | int port; | |
69 | time_t hold; /* Hold action until this time (calendar time) */ | |
b52c2949 | 70 | time_t created; /* Creation time (for klines etc) */ |
9197bc35 | 71 | time_t lifetime; /* Propagated lines: remember until this time */ |
54ac8b60 VY |
72 | char *className; /* Name of class */ |
73 | struct Class *c_class; /* Class of connection */ | |
74 | rb_patricia_node_t *pnode; /* Our patricia node */ | |
212380e3 AC |
75 | }; |
76 | ||
66f7fe67 EM |
77 | #define CONF_ILLEGAL 0x80000000 |
78 | #define CONF_CLIENT 0x0002 | |
79 | #define CONF_KILL 0x0040 | |
212380e3 AC |
80 | #define CONF_XLINE 0x0080 |
81 | #define CONF_RESV_CHANNEL 0x0100 | |
82 | #define CONF_RESV_NICK 0x0200 | |
83 | #define CONF_RESV (CONF_RESV_CHANNEL | CONF_RESV_NICK) | |
84 | ||
66f7fe67 EM |
85 | #define CONF_DLINE 0x020000 |
86 | #define CONF_EXEMPTDLINE 0x100000 | |
1cf798be | 87 | #define CONF_SECURE 0x200000 |
212380e3 AC |
88 | |
89 | #define IsIllegal(x) ((x)->status & CONF_ILLEGAL) | |
90 | ||
91 | /* aConfItem->flags */ | |
92 | ||
93 | /* Generic flags... */ | |
66f7fe67 | 94 | #define CONF_FLAGS_TEMPORARY 0x00800000 |
b1594414 | 95 | #define CONF_FLAGS_NEED_SSL 0x00000002 |
66f7fe67 | 96 | #define CONF_FLAGS_MYOPER 0x00080000 /* need to rewrite info.oper on burst */ |
ce3801b1 | 97 | /* auth{} flags... */ |
66f7fe67 EM |
98 | #define CONF_FLAGS_NO_TILDE 0x00000004 |
99 | #define CONF_FLAGS_NEED_IDENTD 0x00000008 | |
100 | #define CONF_FLAGS_EXEMPTKLINE 0x00000040 | |
101 | #define CONF_FLAGS_NOLIMIT 0x00000080 | |
102 | #define CONF_FLAGS_SPOOF_IP 0x00000200 | |
212380e3 | 103 | #define CONF_FLAGS_SPOOF_NOTICE 0x00000400 |
66f7fe67 | 104 | #define CONF_FLAGS_REDIR 0x00000800 |
212380e3 | 105 | #define CONF_FLAGS_EXEMPTRESV 0x00002000 /* exempt from resvs */ |
66f7fe67 | 106 | #define CONF_FLAGS_EXEMPTFLOOD 0x00004000 |
212380e3 AC |
107 | #define CONF_FLAGS_EXEMPTSPAMBOT 0x00008000 |
108 | #define CONF_FLAGS_EXEMPTSHIDE 0x00010000 | |
109 | #define CONF_FLAGS_EXEMPTJUPE 0x00020000 /* exempt from resv generating warnings */ | |
110 | #define CONF_FLAGS_NEED_SASL 0x00040000 | |
a4721f5e | 111 | #define CONF_FLAGS_EXTEND_CHANS 0x00080000 |
66f7fe67 | 112 | #define CONF_FLAGS_ENCRYPTED 0x00200000 |
212380e3 | 113 | #define CONF_FLAGS_EXEMPTDNSBL 0x04000000 |
fbe8d087 | 114 | #define CONF_FLAGS_EXEMPTPROXY 0x08000000 |
c6ad9b0c | 115 | #define CONF_FLAGS_ALLOW_SCTP 0x10000000 |
67e05d5b | 116 | #define CONF_FLAGS_KLINE_SPOOF 0x20000000 |
212380e3 AC |
117 | |
118 | ||
119 | /* Macros for struct ConfItem */ | |
27f616dd JT |
120 | #define IsConfBan(x) ((x)->status & (CONF_KILL|CONF_XLINE|CONF_DLINE|\ |
121 | CONF_RESV_CHANNEL|CONF_RESV_NICK)) | |
122 | ||
212380e3 AC |
123 | #define IsNoTilde(x) ((x)->flags & CONF_FLAGS_NO_TILDE) |
124 | #define IsNeedIdentd(x) ((x)->flags & CONF_FLAGS_NEED_IDENTD) | |
212380e3 AC |
125 | #define IsConfExemptKline(x) ((x)->flags & CONF_FLAGS_EXEMPTKLINE) |
126 | #define IsConfExemptLimits(x) ((x)->flags & CONF_FLAGS_NOLIMIT) | |
212380e3 AC |
127 | #define IsConfExemptFlood(x) ((x)->flags & CONF_FLAGS_EXEMPTFLOOD) |
128 | #define IsConfExemptSpambot(x) ((x)->flags & CONF_FLAGS_EXEMPTSPAMBOT) | |
129 | #define IsConfExemptShide(x) ((x)->flags & CONF_FLAGS_EXEMPTSHIDE) | |
130 | #define IsConfExemptJupe(x) ((x)->flags & CONF_FLAGS_EXEMPTJUPE) | |
131 | #define IsConfExemptResv(x) ((x)->flags & CONF_FLAGS_EXEMPTRESV) | |
212380e3 AC |
132 | #define IsConfDoSpoofIp(x) ((x)->flags & CONF_FLAGS_SPOOF_IP) |
133 | #define IsConfSpoofNotice(x) ((x)->flags & CONF_FLAGS_SPOOF_NOTICE) | |
134 | #define IsConfEncrypted(x) ((x)->flags & CONF_FLAGS_ENCRYPTED) | |
212380e3 AC |
135 | #define IsNeedSasl(x) ((x)->flags & CONF_FLAGS_NEED_SASL) |
136 | #define IsConfExemptDNSBL(x) ((x)->flags & CONF_FLAGS_EXEMPTDNSBL) | |
fbe8d087 | 137 | #define IsConfExemptProxy(x) ((x)->flags & CONF_FLAGS_EXEMPTPROXY) |
a4721f5e | 138 | #define IsConfExtendChans(x) ((x)->flags & CONF_FLAGS_EXTEND_CHANS) |
b1594414 | 139 | #define IsConfSSLNeeded(x) ((x)->flags & CONF_FLAGS_NEED_SSL) |
c6ad9b0c | 140 | #define IsConfAllowSCTP(x) ((x)->flags & CONF_FLAGS_ALLOW_SCTP) |
67e05d5b | 141 | #define IsConfKlineSpoof(x) ((x)->flags & CONF_FLAGS_KLINE_SPOOF) |
212380e3 | 142 | |
63ab1dd6 EK |
143 | enum stats_l_oper_only { |
144 | STATS_L_OPER_ONLY_NO, | |
145 | STATS_L_OPER_ONLY_SELF, | |
146 | STATS_L_OPER_ONLY_YES, | |
147 | }; | |
148 | ||
212380e3 AC |
149 | /* flag definitions for opers now in client.h */ |
150 | ||
151 | struct config_file_entry | |
152 | { | |
153 | const char *dpath; /* DPATH if set from command line */ | |
154 | const char *configfile; | |
212380e3 | 155 | |
212380e3 AC |
156 | char *default_operstring; |
157 | char *default_adminstring; | |
158 | char *servicestring; | |
159 | char *kline_reason; | |
160 | ||
161 | char *identifyservice; | |
162 | char *identifycommand; | |
55abcbb2 | 163 | |
7d33cce8 MT |
164 | char *sasl_service; |
165 | ||
212380e3 AC |
166 | char *fname_userlog; |
167 | char *fname_fuserlog; | |
168 | char *fname_operlog; | |
169 | char *fname_foperlog; | |
170 | char *fname_serverlog; | |
171 | char *fname_killlog; | |
212380e3 AC |
172 | char *fname_klinelog; |
173 | char *fname_operspylog; | |
174 | char *fname_ioerrorlog; | |
175 | ||
176 | unsigned char compression_level; | |
177 | int disable_fake_channels; | |
212380e3 AC |
178 | int dots_in_ident; |
179 | int failed_oper_notice; | |
180 | int anti_nick_flood; | |
181 | int anti_spam_exit_message_time; | |
182 | int max_accept; | |
183 | int max_monitor; | |
184 | int max_nick_time; | |
185 | int max_nick_changes; | |
186 | int ts_max_delta; | |
187 | int ts_warn_delta; | |
188 | int dline_with_reason; | |
189 | int kline_with_reason; | |
9914c013 | 190 | int hide_tkdline_duration; |
212380e3 AC |
191 | int warn_no_nline; |
192 | int nick_delay; | |
193 | int non_redundant_klines; | |
194 | int stats_e_disabled; | |
195 | int stats_c_oper_only; | |
196 | int stats_y_oper_only; | |
212380e3 AC |
197 | int stats_o_oper_only; |
198 | int stats_k_oper_only; | |
63ab1dd6 | 199 | enum stats_l_oper_only stats_l_oper_only; |
212380e3 AC |
200 | int stats_i_oper_only; |
201 | int stats_P_oper_only; | |
202 | int map_oper_only; | |
203 | int operspy_admin_only; | |
204 | int pace_wait; | |
205 | int pace_wait_simple; | |
206 | int short_motd; | |
207 | int no_oper_flood; | |
212380e3 AC |
208 | int hide_server; |
209 | int hide_spoof_ips; | |
210 | int hide_error_messages; | |
211 | int client_exit; | |
212 | int oper_only_umodes; | |
213 | int oper_umodes; | |
214 | int oper_snomask; | |
215 | int max_targets; | |
216 | int caller_id_wait; | |
217 | int min_nonwildcard; | |
218 | int min_nonwildcard_simple; | |
219 | int default_floodcount; | |
944b0584 | 220 | int default_ident_timeout; |
212380e3 AC |
221 | int ping_cookie; |
222 | int tkline_expire_notices; | |
223 | int use_whois_actually; | |
224 | int disable_auth; | |
b3a00991 | 225 | int post_registration_delay; |
212380e3 AC |
226 | int connect_timeout; |
227 | int burst_away; | |
228 | int reject_ban_time; | |
229 | int reject_after_count; | |
230 | int reject_duration; | |
43946961 JT |
231 | int throttle_count; |
232 | int throttle_duration; | |
212380e3 AC |
233 | int target_change; |
234 | int collision_fnc; | |
330692a1 | 235 | int resv_fnc; |
212380e3 AC |
236 | int default_umodes; |
237 | int global_snotices; | |
238 | int operspy_dont_care_user_info; | |
1702b694 | 239 | int use_propagated_bans; |
e88a1f1b | 240 | int max_ratelimit_tokens; |
d42e6915 | 241 | int away_interval; |
fff4f763 | 242 | int tls_ciphers_oper_only; |
40ecb85a | 243 | int oper_secure_only; |
e6e54763 | 244 | |
6ac21a70 EK |
245 | char **hidden_caps; |
246 | ||
e6e54763 SB |
247 | int client_flood_max_lines; |
248 | int client_flood_burst_rate; | |
249 | int client_flood_burst_max; | |
250 | int client_flood_message_time; | |
251 | int client_flood_message_num; | |
252 | ||
b583faf9 | 253 | unsigned int nicklen; |
13d8f0ed | 254 | int certfp_method; |
71c95533 AC |
255 | |
256 | int hide_opers_in_whois; | |
1123eefc | 257 | int hide_opers; |
b674a619 EK |
258 | |
259 | char *drain_reason; | |
212380e3 AC |
260 | }; |
261 | ||
262 | struct config_channel_entry | |
263 | { | |
264 | int use_except; | |
265 | int use_invex; | |
2da6f6eb | 266 | int use_forward; |
212380e3 | 267 | int use_knock; |
212380e3 AC |
268 | int knock_delay; |
269 | int knock_delay_channel; | |
270 | int max_bans; | |
271 | int max_bans_large; | |
272 | int max_chans_per_user; | |
a4721f5e | 273 | int max_chans_per_user_large; |
212380e3 AC |
274 | int no_create_on_split; |
275 | int no_join_on_split; | |
276 | int default_split_server_count; | |
277 | int default_split_user_count; | |
278 | int burst_topicwho; | |
212380e3 | 279 | int kick_on_split_riding; |
6865c0b0 | 280 | int only_ascii_channels; |
c2c25552 | 281 | int resv_forcepart; |
717238d2 | 282 | int channel_target_change; |
341f971e | 283 | int disable_local_channels; |
63eb8567 | 284 | unsigned int autochanmodes; |
d513218a | 285 | int displayed_usercount; |
14482679 | 286 | int strip_topic_colors; |
04e5ed6c | 287 | int opmod_send_statusmsg; |
dfeba655 | 288 | int ip_bans_through_vhost; |
212380e3 AC |
289 | }; |
290 | ||
291 | struct config_server_hide | |
292 | { | |
293 | int flatten_links; | |
294 | int links_delay; | |
212380e3 AC |
295 | int hidden; |
296 | int disable_hidden; | |
297 | }; | |
298 | ||
299 | struct server_info | |
300 | { | |
301 | char *name; | |
d764f7ce | 302 | char sid[4]; |
212380e3 AC |
303 | char *description; |
304 | char *network_name; | |
d4214e94 | 305 | struct rb_sockaddr_storage bind4; |
d4214e94 | 306 | struct rb_sockaddr_storage bind6; |
de293496 | 307 | int default_max_clients; |
8bd5767b JT |
308 | char *ssl_private_key; |
309 | char *ssl_ca_cert; | |
310 | char *ssl_cert; | |
311 | char *ssl_dh_params; | |
c1725bda | 312 | char *ssl_cipher_list; |
c6d72037 | 313 | int ssld_count; |
c53ca1e0 | 314 | int wsockd_count; |
212380e3 AC |
315 | }; |
316 | ||
317 | struct admin_info | |
318 | { | |
319 | char *name; | |
320 | char *description; | |
321 | char *email; | |
322 | }; | |
323 | ||
324 | struct alias_entry | |
325 | { | |
326 | char *name; | |
327 | char *target; | |
328 | int flags; /* reserved for later use */ | |
212380e3 AC |
329 | }; |
330 | ||
331 | /* All variables are GLOBAL */ | |
212380e3 AC |
332 | extern struct config_file_entry ConfigFileEntry; /* defined in ircd.c */ |
333 | extern struct config_channel_entry ConfigChannel; /* defined in channel.c */ | |
334 | extern struct config_server_hide ConfigServerHide; /* defined in s_conf.c */ | |
335 | extern struct server_info ServerInfo; /* defined in ircd.c */ | |
336 | extern struct admin_info AdminInfo; /* defined in ircd.c */ | |
337 | /* End GLOBAL section */ | |
338 | ||
2e819b6b | 339 | extern rb_dlink_list service_list; |
212380e3 | 340 | |
ce376a21 | 341 | extern rb_dictionary *prop_bans_dict; |
9197bc35 | 342 | |
212380e3 AC |
343 | typedef enum temp_list |
344 | { | |
345 | TEMP_MIN, | |
346 | TEMP_HOUR, | |
347 | TEMP_DAY, | |
348 | TEMP_WEEK, | |
349 | LAST_TEMP_TYPE | |
350 | } temp_list; | |
351 | ||
2e819b6b JT |
352 | extern rb_dlink_list temp_klines[LAST_TEMP_TYPE]; |
353 | extern rb_dlink_list temp_dlines[LAST_TEMP_TYPE]; | |
212380e3 AC |
354 | |
355 | extern void init_s_conf(void); | |
356 | ||
357 | extern struct ConfItem *make_conf(void); | |
358 | extern void free_conf(struct ConfItem *); | |
359 | ||
ce376a21 EK |
360 | extern struct ConfItem *find_prop_ban(unsigned int status, const char *user, const char *host); |
361 | extern void add_prop_ban(struct ConfItem *); | |
362 | extern void remove_prop_ban(struct ConfItem *); | |
363 | extern bool lookup_prop_ban(struct ConfItem *); | |
364 | extern void deactivate_conf(struct ConfItem *, time_t); | |
3cbbfb25 | 365 | extern void replace_old_ban(struct ConfItem *); |
9197bc35 | 366 | |
ea111ea5 | 367 | extern void read_conf_files(bool cold); |
212380e3 AC |
368 | |
369 | extern int attach_conf(struct Client *, struct ConfItem *); | |
370 | extern int check_client(struct Client *client_p, struct Client *source_p, const char *); | |
371 | ||
a9536f75 | 372 | extern void deref_conf(struct ConfItem *); |
212380e3 AC |
373 | extern int detach_conf(struct Client *); |
374 | ||
212380e3 AC |
375 | extern struct ConfItem *find_tkline(const char *, const char *, struct sockaddr *); |
376 | extern char *show_iline_prefix(struct Client *, struct ConfItem *, char *); | |
377 | extern void get_printable_conf(struct ConfItem *, | |
29c92cf9 | 378 | char **, char **, const char **, char **, int *, char **); |
a12ad044 | 379 | extern char *get_user_ban_reason(struct ConfItem *aconf); |
54ac8b60 VY |
380 | extern void get_printable_kline(struct Client *, struct ConfItem *, |
381 | char **, char **, char **, char **); | |
212380e3 AC |
382 | |
383 | extern void yyerror(const char *); | |
384 | extern int conf_yy_fatal_error(const char *); | |
385 | extern int conf_fgets(char *, int, FILE *); | |
386 | ||
5c2b9eaf | 387 | extern int valid_wild_card(const char *, const char *); |
212380e3 AC |
388 | extern void add_temp_kline(struct ConfItem *); |
389 | extern void add_temp_dline(struct ConfItem *); | |
390 | extern void report_temp_klines(struct Client *); | |
5b96d9a6 | 391 | extern void show_temp_klines(struct Client *, rb_dlink_list *); |
212380e3 | 392 | |
ab31d2b0 EM |
393 | extern bool rehash(bool); |
394 | extern void rehash_bans(void); | |
212380e3 AC |
395 | |
396 | extern int conf_add_server(struct ConfItem *, int); | |
397 | extern void conf_add_class_to_conf(struct ConfItem *); | |
398 | extern void conf_add_me(struct ConfItem *); | |
399 | extern void conf_add_class(struct ConfItem *, int); | |
400 | extern void conf_add_d_conf(struct ConfItem *); | |
401 | extern void flush_expired_ips(void *); | |
402 | ||
e5e814b3 | 403 | extern const char *get_oper_name(struct Client *client_p); |
212380e3 AC |
404 | |
405 | extern int yylex(void); | |
406 | ||
407 | extern unsigned long cidr_to_bitmask[]; | |
408 | ||
82236a2a | 409 | extern char conffilebuf[BUFSIZE + 1]; |
212380e3 AC |
410 | extern int lineno; |
411 | ||
412 | #define NOT_AUTHORISED (-1) | |
85368a13 | 413 | #define I_SOCKET_ERROR (-2) |
212380e3 AC |
414 | #define I_LINE_FULL (-3) |
415 | #define BANNED_CLIENT (-4) | |
416 | #define TOO_MANY_LOCAL (-6) | |
417 | #define TOO_MANY_GLOBAL (-7) | |
418 | #define TOO_MANY_IDENT (-8) | |
419 | ||
420 | #endif /* INCLUDED_s_conf_h */ |