bug fixes (from code coverage tests)
[srvx.git] / srvx.conf.example
1 // services configuration file (example)
2 /* It allows two kinds of comments.  Whitespaces between tokens are
3  * ignored.  All strings (even if they're just numbers) MUST be
4  * enclosed in double quotes.  There must be a semicolon after every
5  * key/value pair.
6  */
7
8 // The "uplinks" section describes what servers we can possibly link
9 // to.  Each subsection describes one server.
10 "uplinks" {
11     "private-network" {
12         // IP address and port the server listens on
13         "address"        "10.0.0.3";
14         "port"           "6660";
15         // What password should we send when we connect?
16         "password"       "passwordtoconnect";
17         // What password should we require our peer to send?
18         // (If it is blank, we do not require a specific password.)
19         "their_password" "passwordtorequire";
20         "enabled"        "1";
21         // How many times should we try to connect before giving up?
22         "max_tries"      "3";
23         // What IP should we bind to?
24         // If you do not specify bind_address, the default is used.
25         // "bind_address"   "192.168.0.10"; // use this ip to link
26     };
27
28     /* unused-uplink is just an example to show you how you can
29      * define more than one uplink (and how you can disable one or
30      * more of them.) */
31     "unused-uplink" {
32         "address"        "10.0.0.4";
33         "port"           "6660";
34         "password"       "passwordtoconnect";
35         "their_password" "passwordtorequire";
36         // If "enabled" is 0, we will not try to use this uplink.
37         "enabled"        "0";
38         "max_tries"      "3";
39     };
40 };
41
42 // The "services" section configures the services that make up srvx.
43 "services" {
44     "nickserv" {
45         "nick" "NickServ";
46         // If you want to by have *@* as the default hostmask, set
47         // default_hostmask.  This is discouraged for security reasons.
48         // "default_hostmask" "1";
49         // do we warn users when someone new auths to their account?
50         "warn_clone_auth" "1";
51         // what is the default maxlogins value?
52         "default_maxlogins" "2";
53         // what is the absolute maxlogins value?
54         "hard_maxlogins" "10";
55         // This names a file that contains easily guessed passwords.
56         // It always contains "password", "<password>" and the user's
57         // account name.
58         "dict_file" "/usr/share/dict/words";
59         // Minimum number of various types of characters permitted in
60         // a password.
61         "password_min_length" "4";
62         "password_min_digits" "1";
63         "password_min_upper" "0";
64         "password_min_lower" "0";
65         // What should valid account and nicks look like?
66         // If valid_nick_regex is omitted, valid_account_regex is used
67         // for both nicks and accounts.
68         // These look funny because "[][-]" is the only way to write the
69         // character class containing the characters ']', '[' and '-'.
70         "valid_account_regex" "^[][_a-z^`'{}|-][][_a-z0-9^`'{}|-]*$";
71         "valid_nick_regex" "^[-_a-z][-_a-z0-9]*$";
72
73         // Should nick ownership be disabled?
74         "disable_nicks" "0";
75         // One account may only own this many nicks.
76         "nicks_per_account" "4";
77         // Send a warning when someone uses a registered nick?
78         "warn_nick_owned" "0";
79         // What to do when someone uses the NickServ "reclaim" command?
80         // This can be one of "none", "warn", "svsnick", or "kill", but
81         // stock ircu does not support svsnick -- you need Bahamut or a
82         // patch for ircu.  no, don't ask srvx developers for the patch.
83         "reclaim_action" "none";
84         // What (else) to do when someone uses a registered nick?
85         // This can be anything "reclaim_action" can be, but it makes
86         // more sense to use the "warn_nick_owned" instead of "warn".
87         "auto_reclaim_action" "none";
88         // How long to wait before doing the auto_reclaim_action?
89         // This is ignored if "auto_reclaim_action" is "none".
90         "auto_reclaim_delay" "0";
91
92         // access control for who can change account flags
93         "flag_levels" {
94             "g" "800";
95             "lc_h" "800"; // specifically lower case h
96             "uc_H" "800"; // .. and upper case H
97             "S" "999";
98             "b" "1";
99         };
100         // and for who can change epithets for staff
101         "set_epithet_level" "800";
102         // what opserv access level do you need to set somebody else's level?
103         "modoper_level" "850";
104
105         // how often should accounts be expired?
106         "account_expire_freq" "1d";
107         // how long until an account with access to any channel(s) expires?
108         "account_expire_delay" "35d";
109         // how long until an account with no access to any channels expires?
110         "nochan_account_expire_delay" "14d";
111         /* "require_qualified" has been removed. It is now
112          * integrated into the modcmd command authorization
113          * and dispatch mechanism.  "/msg OpServ help modcmd"
114          * for details.
115          */
116         // If somebody keeps guessing passwords incorrectly, do we gag them?
117         "autogag_enabled" "1";
118         "autogag_duration" "30m";
119         "auth_policer" {
120             "size" "5";
121             "drain-rate" "0.05";
122         };
123         // How to integrate with email cookies?
124         "email_enabled" "0"; // if set, /mail/enable MUST be set too
125         "email_required" "0"; // ignored unless email_enabled is non-zero
126         "cookie_timeout" "1d"; // how long before we expire cookies?
127         "accounts_per_email" "1"; // you may want to increase this; or not
128         "email_search_level" "600"; // minimum OpServ level to search based on email address
129         "email_visible_level" "800"; // minimum OpServ level to see somebody's email address
130
131         "set_title_level" "900"; // minimum OpServ level to set a title on an account
132         "set_fakehost_level" "1000"; // minimum OpServ level to set a freeform fakehost on an account
133         "titlehost_suffix" "example.net"; // suffix to use with automatically generated fakehosts
134     };
135
136     "opserv" {
137         "nick" "OpServ";
138         "privileged" "1";
139         // what channel should opserv send debug output to?
140         "debug_channel" "#opserv";
141         "debug_channel_modes" "+tinms";
142         // where to send general alerts (e.g. flood alerts)?
143         "alert_channel" "#ircops";
144         "alert_channel_modes" "+tns";
145         // who to tell about staff auths?
146         "staff_auth_channel" "#opserv";
147         "staff_auth_channel_modes" "+tinms";
148         // how many clones to allow from an untrusted host?
149         "untrusted_max" "4";
150         // how long of a g-line should be issued if the max hosts is exceeded?
151         "clone_gline_duration" "1h";
152         // how long to g-line for ?block (or, by default, for ?trace gline)?
153         "block_gline_duration" "1h";
154         // how long to keep an illegal channel locked down (seconds)?
155         "purge_lock_delay" "60";
156         // channel join flood policer params?
157         "join_policer" {
158             "size" "20";
159             "drain-rate" "1";
160         };
161         // automatically moderate join flooded channels?
162         "join_flood_moderate" "1";
163         // Don't moderate and warn channels unless there are more than
164         // join_flood_moderate_threshold users in the channel. the
165         // value 0 will disable the threshold.
166         "join_flood_moderate_threshold" "50";
167         // new user flood policer params
168         "new_user_policer" {
169             "size" "200";
170             "drain-rate" "3";
171         };
172         // character to make OpServ pay attention to you
173         "trigger" "?";
174     };
175
176     "chanserv" {
177         // You may disable a service by removing its "nick" config item.
178         // That means: SERVICES WILL ONLY WORK IF YOU DEFINE THEIR NICK.
179         // (This is changed relative srvx-1.0.x, which would use default
180         // unless you specified ".disabled".)
181         "nick" "ChanServ";
182         // how long should a person be unseen before resending infoline?
183         "info_delay" "120";
184         // maximum greeting length
185         "max_greetlen" "120";
186         // maximum users in a channel userlist
187         "max_chan_users" "512";
188         // maximum bans on a channel banlist
189         "max_chan_bans" "512";
190         // If DynLimit is on and there are N users in the channel, ChanServ will
191         // try to keep the limit at N+<adjust_threshold>.
192         "adjust_threshold" "15";
193         // .. but ChanServ will only increment or decrement the limit this often.
194         "adjust_delay" "30";
195         // How often to look for channels that have expired?
196         "chan_expire_freq" "3d";
197         // How long is a channel unvisited (by masters or above) before it can be expired?
198         "chan_expire_delay" "30d";
199         // character to make ChanServ pay attention to you
200         "trigger" "!";
201         // what !set options should we show when user calls "!set" with no arguments?
202         "set_shows" ("DefaultTopic", "TopicMask", "Greeting", "UserGreeting", "Modes", "PubCmd", "StrictOp", "AutoOp", "EnfModes", "EnfTopic", "Protect", "Toys", "Setters", "TopicRefresh", "CtcpUsers", "CtcpReaction",
203                 "Voice", "UserInfo", "DynLimit", "TopicSnarf", "NoDelete");
204
205         // A list of !8ball responses
206         "8ball" ("Not a chance.",
207                 "In your dreams.",
208                 "Absolutely!",
209                 "Could be, could be.");
210         // channel(s) that support helpers must be in to be helping
211         // if this is a list, any one by itself will do
212         "support_channel" ("#support", "#registration");
213         // maximum number of channels owned by one account before FORCE is required
214         "max_owned" "5";
215         // how long between automatic topic refreshes with TopicRefresh 0
216         "refresh_period" "3h";
217         // what should !access say for various staff?
218         "irc_operator_epithet" "a megalomaniacal power hungry tyrant";
219         "network_helper_epithet" "a wannabe tyrant";
220         "support_helper_epithet" "a wannabe tyrant";
221         // what should a newly registered channel get as its modes?
222         "default_modes" "+nt";
223         // minimum opserv access to set, clear or override nodelete setting?
224         "nodelete_level" "1";
225     };
226
227     "global" {
228         "nick" "Global";
229         // should users get community announcements by default or not?
230         "announcements_default" "on";
231     };
232 };
233
234 // The modules section gives configuration information to optional modules.
235 "modules" {
236     "helpserv" {
237         // The description/fullname field
238         "description" "Help Queue Manager";
239         // HelpServ bots log all of their requests to this file, with
240         // details on when they were opened, closed, their contents,
241         // helper, etc. The file is written in saxdb format for easy
242         // parsing by external programs. Please note that you cannot
243         // use ?set to change this value while srvx is running.
244         "reqlogfile" "helpservreq.log";
245         // How long should a helpserv be inactive (no requests assigned)
246         // before it can be unregistered by the expire command?
247         "expiration" "60d";
248     };
249     "sockcheck" {
250         "max_sockets" "64";  // allow 64 concurrent clients to be checked
251         "max_read" "1024"; // don't read more than 1024 bytes from any client
252         "gline_duration" "1h"; // issue G-lines lasting one hour
253         "max_cache_age" "60"; // only cache results for 60 seconds
254         // "address" "192.168.0.10"; // do proxy tests from this address
255     };
256     "snoop" {
257         // Where to send snoop messages?
258         "channel" "#wherever";
259         // Which bot?
260         "bot" "OpServ";
261         // Show new users and joins from net joins?  (off by default)
262         "show_bursts" "0";
263     };
264     "memoserv" {
265         "bot" "NickServ";
266         "message_expiry" "30d"; // age when messages are deleted; set
267                                 // to 0 to disable message expiration
268     };
269 };
270
271 "policers" {
272     "commands-luser" {
273         "size" "5";
274         "drain-rate" "0.5";
275     };
276 };
277
278 "rlimits" {
279     "data" "50M";
280     "stack" "6M";
281     "vmem" "100M";
282 };
283
284 "server" {
285     "hostname" "localhost.domain";
286     "description" "Network Services";
287     "network" "GenericNET";
288     "hidden_host" "users.Generic.NET"; // set this if you enabled ircd/Undernet's +x mode
289     /* hidden_host should match the F:HIDDEN_HOST: line in your ircu's ircd.conf;
290      * srvx does not set the host suffix for users, but must know it when making
291      * things like bans, where it should not show the user's real hostname. */
292     "numeric" "10"; // hint: If you get collisions on link, CHANGE THIS.
293     "max_users" "256"; // You can save a little memory by setting this to a lower value.
294     "force_n2k" "1"; // Use extended (5-digit) numnick for self, even if 3 are possible.
295     "ping_freq" "60";
296     "ping_timeout" "90";
297     "max_cycles" "30"; // max uplink cycles before giving up
298     // Admin information is traditionally: location, location, email
299     "admin" ("IRC Network", "Gotham City, GO", "Mr Commissioner <james.gordon@police.gov>");
300 };
301
302 // controlling how services (mostly NickServ) send mail
303 "mail" {
304     // These options are the defaults.
305     "enable" "0";
306     "mailer" "/usr/sbin/sendmail";
307     "from_address" "admin@poorly.configured.server";
308     // These are not :>
309     "extra_headers" ("X-Ereet-Services: srvx r reet");
310     "body_prefix_first" ("Welcome to our network.  This prefix is used whenever srvx thinks this may be the first time we send email to your address.");
311     "body_prefix" ("This goes before the mail text.", "Each string here is treated as a separate \"paragraph\" for line wrapping.");
312     "body_suffix_first" ("We care a lot about spam.  If you did not request this email, bitch and moan loudly at our opers, and tell our ISP to gank our connection.");
313     "body_suffix" ("PLEASE DO NOT BE ALARMED.  CALMLY BOARD THE AIRCRAFT, STRAP YOUR ARMS ACROSS YOUR BODY, AND JUMP THE HELL OUT OF THE PLANE.", "Yaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaatta!");
314 };
315
316 // New section in srvx-1.2 to control database locations, etc.
317 // If you leave this section out, each database will be in its own file,
318 // and they will be written out every half hour.
319 "dbs" {
320     // This just illustrates how you can jam every database into one huge ("mondo") file.
321     "ChanServ" { "mondo_section" "ChanServ"; };
322     "gline" { "mondo_section" "gline"; };
323     "Global" { "mondo_section" "Global"; };
324     "HelpServ" { "mondo_section" "HelpServ"; };
325     "modcmd" { "mondo_section" "modcmd"; };
326     "NickServ" { "mondo_section" "NickServ"; };
327     "OpServ" { "mondo_section" "OpServ"; };
328     "sendmail" { "mondo_section" "sendmail"; };
329
330     // These are the options if you want a database to be in its own file.
331     "mondo" {
332         // Where to put it?
333         "filename" "srvx.db";
334         // How often should it be saved?
335         // (You can disable automatic saves by setting this to 0.)
336         "frequency" "30m";
337     };
338 };
339
340 // New section in srvx-1.2 to control log destinations.
341 // If you leave this section out, each service (technically, each log
342 // facility) will be in its own file, just like before.
343 "logs" {
344     // Two kinds of items exist in this section.
345
346     // One is a facility configuration subsection.  These have the
347     // name of a log facility (one of "ChanServ", "Global",
348     // "HelpServ", "NickServ", "OpServ", "ProxyCheck", or "srvx") and
349     // the value is a subsection. The "srvx" log facility is a
350     // catch-all/fall-back facility.
351     "srvx" {
352         // The "max_age" option says how long to keep log audit entries.
353         "max_age" "10m";
354         // The "max_count" option says how many log audit entries to keep.
355         "max_count" "1024";
356         // Audit (command tracking) entries are discarded if they exceed
357         // either limit: for example, if entry 500 is 10 minutes old, it
358         // will be discarded next time any audit command is logged.
359     };
360
361     // The other kind of item is a target list.  The name of each is a
362     // description of facility-and-severity combinations, and the value
363     // is a string (or list of strings) that describe where matching
364     // events should be logged.  As a special case, the facility * will
365     // specify how to log events regardless of their true facility, and
366     // the severity * will match all severities for a facility.
367     // Log targets use a psuedo-URI syntax:  one of "file:filename",
368     // "std:[out|err|n]" where n is a valid file descriptor, or
369     // "irc:#channel" (nicknames or server masks can be used instead
370     // of channel names, but should be used with care).
371     // The severity is one of "replay", "debug", "command", "info",
372     // "override", "staff", "warning", "error", or "fatal".
373     // WARNING: If any severity except "replay" for a facility is left
374     // unspecified, it will use the default target (for example,
375     // "file:chanserv.log").  For "replay" severity, you must ALWAYS
376     // list a target to log it -- this is because it is very rarely
377     // useful.
378     "*.*" ("std:out", "file:everything.log"); // does NOT suppress any defaults
379     "*.override,staff" "irc:#big-brother"; // report all uses of staff commands
380     "ChanServ.*" "file:chanserv.log"; // duplicates the default behavior
381     "ProxyCheck.*" (); // stop it from logging anything
382 };