config.c 296 KB
Newer Older
1
/* Copyright (c) 2001 Matej Pfajfar.
Roger Dingledine's avatar
Roger Dingledine committed
2
 * Copyright (c) 2001-2004, Roger Dingledine.
3
 * Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
4
 * Copyright (c) 2007-2017, The Tor Project, Inc. */
5
/* See LICENSE for licensing information */
6

Nick Mathewson's avatar
Nick Mathewson committed
7
/**
8
 * \file config.c
9
10
11
12
13
14
15
16
17
18
19
20
 * \brief Code to interpret the user's configuration of Tor.
 *
 * This module handles torrc configuration file, including parsing it,
 * combining it with torrc.defaults and the command line, allowing
 * user changes to it (via editing and SIGHUP or via the control port),
 * writing it back to disk (because of SAVECONF from the control port),
 * and -- most importantly, acting on it.
 *
 * The module additionally has some tools for manipulating and
 * inspecting values that are calculated as a result of the
 * configured options.
 *
21
 * <h3>How to add new options</h3>
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
 *
 * To add new items to the torrc, there are a minimum of three places to edit:
 * <ul>
 *   <li>The or_options_t structure in or.h, where the options are stored.
 *   <li>The option_vars_ array below in this module, which configures
 *       the names of the torrc options, their types, their multiplicities,
 *       and their mappings to fields in or_options_t.
 *   <li>The manual in doc/tor.1.txt, to document what the new option
 *       is, and how it works.
 * </ul>
 *
 * Additionally, you might need to edit these places too:
 * <ul>
 *   <li>options_validate() below, in case you want to reject some possible
 *       values of the new configuration option.
 *   <li>options_transition_allowed() below, in case you need to
 *       forbid some or all changes in the option while Tor is
 *       running.
 *   <li>options_transition_affects_workers(), in case changes in the option
 *       might require Tor to relaunch or reconfigure its worker threads.
 *   <li>options_transition_affects_descriptor(), in case changes in the
 *       option might require a Tor relay to build and publish a new server
 *       descriptor.
 *   <li>options_act() and/or options_act_reversible(), in case there's some
 *       action that needs to be taken immediately based on the option's
 *       value.
 * </ul>
 *
 * <h3>Changing the value of an option</h3>
 *
 * Because of the SAVECONF command from the control port, it's a bad
 * idea to change the value of any user-configured option in the
 * or_options_t.  If you want to sometimes do this anyway, we recommend
 * that you create a secondary field in or_options_t; that you have the
 * user option linked only to the secondary field; that you use the
 * secondary field to initialize the one that Tor actually looks at; and that
 * you use the one Tor looks as the one that you modify.
Nick Mathewson's avatar
Nick Mathewson committed
59
60
 **/

61
#define CONFIG_PRIVATE
Roger Dingledine's avatar
Roger Dingledine committed
62
#include "or.h"
63
#include "bridges.h"
64
#include "compat.h"
65
#include "addressmap.h"
66
#include "channel.h"
Sebastian Hahn's avatar
Sebastian Hahn committed
67
#include "circuitbuild.h"
Sebastian Hahn's avatar
Sebastian Hahn committed
68
#include "circuitlist.h"
69
70
#include "circuitmux.h"
#include "circuitmux_ewma.h"
71
#include "circuitstats.h"
72
#include "compress.h"
Sebastian Hahn's avatar
Sebastian Hahn committed
73
#include "config.h"
Sebastian Hahn's avatar
Sebastian Hahn committed
74
#include "connection.h"
Sebastian Hahn's avatar
Sebastian Hahn committed
75
#include "connection_edge.h"
76
#include "connection_or.h"
77
#include "consdiffmgr.h"
Sebastian Hahn's avatar
Sebastian Hahn committed
78
#include "control.h"
79
#include "confparse.h"
Sebastian Hahn's avatar
Sebastian Hahn committed
80
#include "cpuworker.h"
Sebastian Hahn's avatar
Sebastian Hahn committed
81
#include "dirserv.h"
Sebastian Hahn's avatar
Sebastian Hahn committed
82
#include "dirvote.h"
Sebastian Hahn's avatar
Sebastian Hahn committed
83
#include "dns.h"
84
#include "dos.h"
85
#include "entrynodes.h"
86
#include "git_revision.h"
Sebastian Hahn's avatar
Sebastian Hahn committed
87
#include "geoip.h"
Sebastian Hahn's avatar
Sebastian Hahn committed
88
#include "hibernate.h"
Sebastian Hahn's avatar
Sebastian Hahn committed
89
#include "main.h"
Sebastian Hahn's avatar
Sebastian Hahn committed
90
#include "networkstatus.h"
91
#include "nodelist.h"
Sebastian Hahn's avatar
Sebastian Hahn committed
92
#include "policies.h"
Sebastian Hahn's avatar
Sebastian Hahn committed
93
#include "relay.h"
Sebastian Hahn's avatar
Sebastian Hahn committed
94
#include "rendclient.h"
Sebastian Hahn's avatar
Sebastian Hahn committed
95
#include "rendservice.h"
96
#include "hs_config.h"
Sebastian Hahn's avatar
Sebastian Hahn committed
97
#include "rephist.h"
Sebastian Hahn's avatar
Sebastian Hahn committed
98
#include "router.h"
99
#include "sandbox.h"
100
#include "util.h"
Sebastian Hahn's avatar
Sebastian Hahn committed
101
#include "routerlist.h"
102
#include "routerset.h"
103
#include "scheduler.h"
104
#include "statefile.h"
105
#include "transports.h"
106
#include "ext_orport.h"
107
#ifdef _WIN32
108
109
#include <shlobj.h>
#endif
Roger Dingledine's avatar
Roger Dingledine committed
110

111
112
#include "procmon.h"

113
114
115
116
117
118
#ifdef HAVE_SYSTEMD
#   if defined(__COVERITY__) && !defined(__INCLUDE_LEVEL__)
/* Systemd's use of gcc's __INCLUDE_LEVEL__ extension macro appears to confuse
 * Coverity. Here's a kludge to unconfuse it.
 */
#   define __INCLUDE_LEVEL__ 2
119
#endif /* defined(__COVERITY__) && !defined(__INCLUDE_LEVEL__) */
120
#include <systemd/sd-daemon.h>
121
#endif /* defined(HAVE_SYSTEMD) */
122

123
/* Prefix used to indicate a Unix socket in a FooPort configuration. */
124
static const char unix_socket_prefix[] = "unix:";
125
126
127
/* Prefix used to indicate a Unix socket with spaces in it, in a FooPort
 * configuration. */
static const char unix_q_socket_prefix[] = "unix:\"";
128

129
130
/** A list of abbreviations and aliases to map command-line options, obsolete
 * option names, or alternative option names, to their current values. */
131
static config_abbrev_t option_abbrevs_[] = {
132
133
134
135
  PLURAL(AuthDirBadDirCC),
  PLURAL(AuthDirBadExitCC),
  PLURAL(AuthDirInvalidCC),
  PLURAL(AuthDirRejectCC),
136
  PLURAL(EntryNode),
137
  PLURAL(ExcludeNode),
138
  PLURAL(Tor2webRendezvousPoint),
139
  PLURAL(FirewallPort),
140
  PLURAL(LongLivedPort),
141
142
  PLURAL(HiddenServiceNode),
  PLURAL(HiddenServiceExcludeNode),
143
  PLURAL(NumCPU),
144
  PLURAL(RendNode),
145
  PLURAL(RecommendedPackage),
146
  PLURAL(RendExcludeNode),
147
148
  PLURAL(StrictEntryNode),
  PLURAL(StrictExitNode),
149
  PLURAL(StrictNode),
150
  { "l", "Log", 1, 0},
151
  { "AllowUnverifiedNodes", "AllowInvalidNodes", 0, 0},
152
153
  { "AutomapHostSuffixes", "AutomapHostsSuffixes", 0, 0},
  { "AutomapHostOnResolve", "AutomapHostsOnResolve", 0, 0},
154
155
156
  { "BandwidthRateBytes", "BandwidthRate", 0, 0},
  { "BandwidthBurstBytes", "BandwidthBurst", 0, 0},
  { "DirFetchPostPeriod", "StatusFetchPeriod", 0, 0},
157
  { "DirServer", "DirAuthority", 0, 0}, /* XXXX later, make this warn? */
158
  { "MaxConn", "ConnLimit", 0, 1},
159
  { "MaxMemInCellQueues", "MaxMemInQueues", 0, 0},
160
161
162
  { "ORBindAddress", "ORListenAddress", 0, 0},
  { "DirBindAddress", "DirListenAddress", 0, 0},
  { "SocksBindAddress", "SocksListenAddress", 0, 0},
163
164
165
166
  { "UseHelperNodes", "UseEntryGuards", 0, 0},
  { "NumHelperNodes", "NumEntryGuards", 0, 0},
  { "UseEntryNodes", "UseEntryGuards", 0, 0},
  { "NumEntryNodes", "NumEntryGuards", 0, 0},
167
168
  { "ResolvConf", "ServerDNSResolvConfFile", 0, 1},
  { "SearchDomains", "ServerDNSSearchDomains", 0, 1},
169
  { "ServerDNSAllowBrokenResolvConf", "ServerDNSAllowBrokenConfig", 0, 0},
170
  { "PreferTunnelledDirConns", "PreferTunneledDirConns", 0, 0},
171
  { "BridgeAuthoritativeDirectory", "BridgeAuthoritativeDir", 0, 0},
172
  { "HashedControlPassword", "__HashedControlSessionPassword", 1, 0},
173
  { "VirtualAddrNetwork", "VirtualAddrNetworkIPv4", 0, 0},
174
  { "SocksSocketsGroupWritable", "UnixSocksGroupWritable", 0, 1},
175
176
177
  { "_HSLayer2Nodes", "HSLayer2Nodes", 0, 1 },
  { "_HSLayer3Nodes", "HSLayer3Nodes", 0, 1 },

178
179
  { NULL, NULL, 0, 0},
};
180

181
182
183
184
/** dummy instance of or_options_t, used for type-checking its
 * members with CONF_CHECK_VAR_TYPE. */
DUMMY_TYPECHECK_INSTANCE(or_options_t);

Nick Mathewson's avatar
Nick Mathewson committed
185
186
187
188
/** An entry for config_vars: "The option <b>name</b> has type
 * CONFIG_TYPE_<b>conftype</b>, and corresponds to
 * or_options_t.<b>member</b>"
 */
189
#define VAR(name,conftype,member,initvalue)                             \
Neel Chauhan's avatar
Neel Chauhan committed
190
  { name, CONFIG_TYPE_ ## conftype, offsetof(or_options_t, member),     \
191
      initvalue CONF_TEST_MEMBERS(or_options_t, conftype, member) }
192
193
194
/** As VAR, but the option name and member name are the same. */
#define V(member,conftype,initvalue)                                    \
  VAR(#member, conftype, member, initvalue)
Nick Mathewson's avatar
Nick Mathewson committed
195
/** An entry for config_vars: "The option <b>name</b> is obsolete." */
196
197
198
#ifdef TOR_UNIT_TESTS
#define OBSOLETE(name) { name, CONFIG_TYPE_OBSOLETE, 0, NULL, {.INT=NULL} }
#else
199
#define OBSOLETE(name) { name, CONFIG_TYPE_OBSOLETE, 0, NULL }
200
#endif
201

202
203
204
205
206
207
208
209
210
211
212
/**
 * Macro to declare *Port options.  Each one comes in three entries.
 * For example, most users should use "SocksPort" to configure the
 * socks port, but TorBrowser wants to use __SocksPort so that it
 * isn't stored by SAVECONF.  The SocksPortLines virtual option is
 * used to query both options from the controller.
 */
#define VPORT(member)                                           \
  VAR(#member "Lines", LINELIST_V, member ## _lines, NULL),     \
  VAR(#member, LINELIST_S, member ## _lines, NULL),             \
  VAR("__" #member, LINELIST_S, member ## _lines, NULL)
213

Nick Mathewson's avatar
Nick Mathewson committed
214
215
216
217
/** Array of configuration options.  Until we disallow nonstandard
 * abbreviations, order is significant, since the first matching option will
 * be chosen first.
 */
218
static config_var_t option_vars_[] = {
219
  V(AccountingMax,               MEMUNIT,  "0 bytes"),
220
  VAR("AccountingRule",          STRING,   AccountingRule_option,  "max"),
221
222
  V(AccountingStart,             STRING,   NULL),
  V(Address,                     STRING,   NULL),
Nick Mathewson's avatar
Nick Mathewson committed
223
  OBSOLETE("AllowDotExit"),
224
  OBSOLETE("AllowInvalidNodes"),
225
  V(AllowNonRFC953Hostnames,     BOOL,     "0"),
226
  OBSOLETE("AllowSingleHopCircuits"),
227
  OBSOLETE("AllowSingleHopExits"),
228
229
  V(AlternateBridgeAuthority,    LINELIST, NULL),
  V(AlternateDirAuthority,       LINELIST, NULL),
230
  OBSOLETE("AlternateHSAuthority"),
231
  V(AssumeReachable,             BOOL,     "0"),
232
233
  OBSOLETE("AuthDirBadDir"),
  OBSOLETE("AuthDirBadDirCCs"),
234
  V(AuthDirBadExit,              LINELIST, NULL),
235
  V(AuthDirBadExitCCs,           CSV,      ""),
236
  V(AuthDirInvalid,              LINELIST, NULL),
237
  V(AuthDirInvalidCCs,           CSV,      ""),
238
  V(AuthDirFastGuarantee,        MEMUNIT,  "100 KB"),
239
  V(AuthDirGuardBWGuarantee,     MEMUNIT,  "2 MB"),
240
  V(AuthDirPinKeys,              BOOL,     "1"),
241
  V(AuthDirReject,               LINELIST, NULL),
242
  V(AuthDirRejectCCs,            CSV,      ""),
243
  OBSOLETE("AuthDirRejectUnlisted"),
244
  OBSOLETE("AuthDirListBadDirs"),
245
  V(AuthDirListBadExits,         BOOL,     "0"),
246
  V(AuthDirMaxServersPerAddr,    UINT,     "2"),
247
  OBSOLETE("AuthDirMaxServersPerAuthAddr"),
248
  V(AuthDirHasIPv6Connectivity,  BOOL,     "0"),
249
250
251
252
  VAR("AuthoritativeDirectory",  BOOL, AuthoritativeDir,    "0"),
  V(AutomapHostsOnResolve,       BOOL,     "0"),
  V(AutomapHostsSuffixes,        CSV,      ".onion,.exit"),
  V(AvoidDiskWrites,             BOOL,     "0"),
253
254
  V(BandwidthBurst,              MEMUNIT,  "1 GB"),
  V(BandwidthRate,               MEMUNIT,  "1 GB"),
255
256
  V(BridgeAuthoritativeDir,      BOOL,     "0"),
  VAR("Bridge",                  LINELIST, Bridges,    NULL),
257
  V(BridgePassword,              STRING,   NULL),
258
  V(BridgeRecordUsageByCountry,  BOOL,     "1"),
259
  V(BridgeRelay,                 BOOL,     "0"),
260
  V(BridgeDistribution,          STRING,   NULL),
261
262
  VAR("CacheDirectory",          FILENAME, CacheDirectory_option, NULL),
  V(CacheDirectoryGroupReadable, BOOL,     "0"),
263
  V(CellStatistics,              BOOL,     "0"),
264
  V(PaddingStatistics,           BOOL,     "1"),
265
  V(LearnCircuitBuildTimeout,    BOOL,     "1"),
266
  V(CircuitBuildTimeout,         INTERVAL, "0"),
267
268
  OBSOLETE("CircuitIdleTimeout"),
  V(CircuitsAvailableTimeout,    INTERVAL, "0"),
269
  V(CircuitStreamTimeout,        INTERVAL, "0"),
270
  V(CircuitPriorityHalflife,     DOUBLE,  "-1.0"), /*negative:'Use default'*/
271
  V(ClientDNSRejectInternalAddresses, BOOL,"1"),
272
  V(ClientOnly,                  BOOL,     "0"),
273
274
  V(ClientPreferIPv6ORPort,      AUTOBOOL, "auto"),
  V(ClientPreferIPv6DirPort,     AUTOBOOL, "auto"),
275
  V(ClientRejectInternalAddresses, BOOL,   "1"),
276
  V(ClientTransportPlugin,       LINELIST, NULL),
277
  V(ClientUseIPv6,               BOOL,     "0"),
278
  V(ClientUseIPv4,               BOOL,     "1"),
279
  V(ConsensusParams,             STRING,   NULL),
280
  V(ConnLimit,                   UINT,     "1000"),
281
  V(ConnDirectionStatistics,     BOOL,     "0"),
282
283
284
  V(ConstrainedSockets,          BOOL,     "0"),
  V(ConstrainedSockSize,         MEMUNIT,  "8192"),
  V(ContactInfo,                 STRING,   NULL),
285
  OBSOLETE("ControlListenAddress"),
286
  VPORT(ControlPort),
287
  V(ControlPortFileGroupReadable,BOOL,     "0"),
288
  V(ControlPortWriteToFile,      FILENAME, NULL),
289
  V(ControlSocket,               LINELIST, NULL),
290
  V(ControlSocketsGroupWritable, BOOL,     "0"),
291
  V(UnixSocksGroupWritable,    BOOL,     "0"),
292
293
294
  V(CookieAuthentication,        BOOL,     "0"),
  V(CookieAuthFileGroupReadable, BOOL,     "0"),
  V(CookieAuthFile,              STRING,   NULL),
295
  V(CountPrivateBandwidth,       BOOL,     "0"),
296
  VAR("DataDirectory",           FILENAME, DataDirectory_option, NULL),
297
  V(DataDirectoryGroupReadable,  BOOL,     "0"),
298
  V(DisableOOSCheck,             BOOL,     "1"),
299
  V(DisableNetwork,              BOOL,     "0"),
300
  V(DirAllowPrivateAddresses,    BOOL,     "0"),
301
  V(TestingAuthDirTimeToLearnReachability, INTERVAL, "30 minutes"),
302
  OBSOLETE("DirListenAddress"),
303
  V(DirPolicy,                   LINELIST, NULL),
304
  VPORT(DirPort),
305
  V(DirPortFrontPage,            FILENAME, NULL),
306
  VAR("DirReqStatistics",        BOOL,     DirReqStatistics_option, "1"),
307
  VAR("DirAuthority",            LINELIST, DirAuthorities, NULL),
308
  V(DirCache,                    BOOL,     "1"),
309
310
311
312
313
  /* A DirAuthorityFallbackRate of 0.1 means that 0.5% of clients try an
   * authority when all fallbacks are up, and 2% try an authority when 25% of
   * fallbacks are down. (We rebuild the list when 25% of fallbacks are down).
   *
   * We want to reduce load on authorities, but keep these two figures within
Nick Mathewson's avatar
Nick Mathewson committed
314
315
   * an order of magnitude, so there isn't too much load shifting to
   * authorities when fallbacks go down. */
316
  V(DirAuthorityFallbackRate,    DOUBLE,   "0.1"),
317
  V(DisableAllSwap,              BOOL,     "0"),
318
  V(DisableDebuggerAttachment,   BOOL,     "1"),
319
  OBSOLETE("DisableIOCP"),
320
  OBSOLETE("DisableV2DirectoryInfo_"),
321
  OBSOLETE("DynamicDHGroups"),
322
  VPORT(DNSPort),
323
  OBSOLETE("DNSListenAddress"),
324
325
326
  /* DoS circuit creation options. */
  V(DoSCircuitCreationEnabled,   AUTOBOOL, "auto"),
  V(DoSCircuitCreationMinConnections,      UINT, "0"),
327
  V(DoSCircuitCreationRate,      UINT,     "0"),
328
329
330
331
332
333
334
335
336
  V(DoSCircuitCreationBurst,     UINT,     "0"),
  V(DoSCircuitCreationDefenseType,         INT,  "0"),
  V(DoSCircuitCreationDefenseTimePeriod,   INTERVAL, "0"),
  /* DoS connection options. */
  V(DoSConnectionEnabled,        AUTOBOOL, "auto"),
  V(DoSConnectionMaxConcurrentCount,       UINT, "0"),
  V(DoSConnectionDefenseType,    INT,      "0"),
  /* DoS single hop client options. */
  V(DoSRefuseSingleHopClientRendezvous,    AUTOBOOL, "auto"),
337
  V(DownloadExtraInfo,           BOOL,     "0"),
338
  V(TestingEnableConnBwEvent,    BOOL,     "0"),
339
  V(TestingEnableCellStatsEvent, BOOL,     "0"),
340
  OBSOLETE("TestingEnableTbEmptyEvent"),
341
  V(EnforceDistinctSubnets,      BOOL,     "1"),
342
  V(EntryNodes,                  ROUTERSET,   NULL),
343
  V(EntryStatistics,             BOOL,     "0"),
344
  V(TestingEstimatedDescriptorPropagationTime, INTERVAL, "10 minutes"),
345
346
  V(ExcludeNodes,                ROUTERSET, NULL),
  V(ExcludeExitNodes,            ROUTERSET, NULL),
347
  OBSOLETE("ExcludeSingleHopRelays"),
348
  V(ExitNodes,                   ROUTERSET, NULL),
349
350
  V(ExitPolicy,                  LINELIST, NULL),
  V(ExitPolicyRejectPrivate,     BOOL,     "1"),
351
  V(ExitPolicyRejectLocalInterfaces, BOOL, "0"),
352
  V(ExitPortStatistics,          BOOL,     "0"),
353
  V(ExtendAllowPrivateAddresses, BOOL,     "0"),
354
  V(ExitRelay,                   AUTOBOOL, "auto"),
355
  VPORT(ExtORPort),
356
  V(ExtORPortCookieAuthFile,     STRING,   NULL),
357
  V(ExtORPortCookieAuthFileGroupReadable, BOOL, "0"),
358
  V(ExtraInfoStatistics,         BOOL,     "1"),
359
  V(ExtendByEd25519ID,           AUTOBOOL, "auto"),
360
  V(FallbackDir,                 LINELIST, NULL),
361

362
  V(UseDefaultFallbackDirs,      BOOL,     "1"),
363

364
  OBSOLETE("FallbackNetworkstatusFile"),
365
366
  V(FascistFirewall,             BOOL,     "0"),
  V(FirewallPorts,               CSV,      ""),
367
  OBSOLETE("FastFirstHopPK"),
368
  V(FetchDirInfoEarly,           BOOL,     "0"),
369
  V(FetchDirInfoExtraEarly,      BOOL,     "0"),
370
371
372
  V(FetchServerDescriptors,      BOOL,     "1"),
  V(FetchHidServDescriptors,     BOOL,     "1"),
  V(FetchUselessDescriptors,     BOOL,     "0"),
373
  OBSOLETE("FetchV2Networkstatus"),
374
  V(GeoIPExcludeUnknown,         AUTOBOOL, "auto"),
375
#ifdef _WIN32
376
  V(GeoIPFile,                   FILENAME, "<default>"),
nils's avatar
nils committed
377
  V(GeoIPv6File,                 FILENAME, "<default>"),
378
#else
379
380
  V(GeoIPFile,                   FILENAME,
    SHARE_DATADIR PATH_SEPARATOR "tor" PATH_SEPARATOR "geoip"),
nils's avatar
nils committed
381
382
  V(GeoIPv6File,                 FILENAME,
    SHARE_DATADIR PATH_SEPARATOR "tor" PATH_SEPARATOR "geoip6"),
383
#endif /* defined(_WIN32) */
384
  OBSOLETE("Group"),
385
  V(GuardLifetime,               INTERVAL, "0 minutes"),
386
  V(HardwareAccel,               BOOL,     "0"),
387
  V(HeartbeatPeriod,             INTERVAL, "6 hours"),
Alexander Færøy's avatar
Alexander Færøy committed
388
  V(MainloopStats,               BOOL,     "0"),
389
390
  V(AccelName,                   STRING,   NULL),
  V(AccelDir,                    FILENAME, NULL),
391
  V(HashedControlPassword,       LINELIST, NULL),
392
  OBSOLETE("HidServDirectoryV2"),
Nick Mathewson's avatar
Nick Mathewson committed
393
  VAR("HiddenServiceDir",    LINELIST_S, RendConfigLines,    NULL),
394
  VAR("HiddenServiceDirGroupReadable",  LINELIST_S, RendConfigLines, NULL),
Nick Mathewson's avatar
Nick Mathewson committed
395
396
  VAR("HiddenServiceOptions",LINELIST_V, RendConfigLines,    NULL),
  VAR("HiddenServicePort",   LINELIST_S, RendConfigLines,    NULL),
397
  VAR("HiddenServiceVersion",LINELIST_S, RendConfigLines,    NULL),
398
  VAR("HiddenServiceAuthorizeClient",LINELIST_S,RendConfigLines, NULL),
399
  VAR("HiddenServiceAllowUnknownPorts",LINELIST_S, RendConfigLines, NULL),
400
401
  VAR("HiddenServiceMaxStreams",LINELIST_S, RendConfigLines, NULL),
  VAR("HiddenServiceMaxStreamsCloseCircuit",LINELIST_S, RendConfigLines, NULL),
402
  VAR("HiddenServiceNumIntroductionPoints", LINELIST_S, RendConfigLines, NULL),
Nick Mathewson's avatar
Nick Mathewson committed
403
  VAR("HiddenServiceStatistics", BOOL, HiddenServiceStatistics_option, "1"),
404
  V(HidServAuth,                 LINELIST, NULL),
405
  OBSOLETE("CloseHSClientCircuitsImmediatelyOnTimeout"),
406
  OBSOLETE("CloseHSServiceRendCircuitsImmediatelyOnTimeout"),
407
408
  V(HiddenServiceSingleHopMode,  BOOL,     "0"),
  V(HiddenServiceNonAnonymousMode,BOOL,    "0"),
409
410
411
412
  V(HTTPProxy,                   STRING,   NULL),
  V(HTTPProxyAuthenticator,      STRING,   NULL),
  V(HTTPSProxy,                  STRING,   NULL),
  V(HTTPSProxyAuthenticator,     STRING,   NULL),
413
  VPORT(HTTPTunnelPort),
414
  V(IPv6Exit,                    BOOL,     "0"),
415
  VAR("ServerTransportPlugin",   LINELIST, ServerTransportPlugin,  NULL),
416
  V(ServerTransportListenAddr,   LINELIST, NULL),
417
  V(ServerTransportOptions,      LINELIST, NULL),
418
  V(SigningKeyLifetime,          INTERVAL, "30 days"),
419
420
421
422
  V(Socks4Proxy,                 STRING,   NULL),
  V(Socks5Proxy,                 STRING,   NULL),
  V(Socks5ProxyUsername,         STRING,   NULL),
  V(Socks5ProxyPassword,         STRING,   NULL),
423
424
  VAR("KeyDirectory",            FILENAME, KeyDirectory_option, NULL),
  V(KeyDirectoryGroupReadable,   BOOL,     "0"),
425
426
  VAR("HSLayer2Nodes",           ROUTERSET,  HSLayer2Nodes,  NULL),
  VAR("HSLayer3Nodes",           ROUTERSET,  HSLayer3Nodes,  NULL),
427
  V(KeepalivePeriod,             INTERVAL, "5 minutes"),
428
  V(KeepBindCapabilities,            AUTOBOOL, "auto"),
429
  VAR("Log",                     LINELIST, Logs,             NULL),
430
  V(LogMessageDomains,           BOOL,     "0"),
431
  V(LogTimeGranularity,          MSEC_INTERVAL, "1 second"),
Arlo Breault's avatar
Arlo Breault committed
432
  V(TruncateLogFile,             BOOL,     "0"),
Peter Palfrader's avatar
Peter Palfrader committed
433
  V(SyslogIdentityTag,           STRING,   NULL),
434
  V(AndroidIdentityTag,          STRING,   NULL),
435
  V(LongLivedPorts,              CSV,
Nick Mathewson's avatar
Nick Mathewson committed
436
        "21,22,706,1863,5050,5190,5222,5223,6523,6667,6697,8300"),
437
438
439
  VAR("MapAddress",              LINELIST, AddressMap,           NULL),
  V(MaxAdvertisedBandwidth,      MEMUNIT,  "1 GB"),
  V(MaxCircuitDirtiness,         INTERVAL, "10 minutes"),
440
  V(MaxClientCircuitsPending,    UINT,     "32"),
441
  V(MaxConsensusAgeForDiffs,     INTERVAL, "0 seconds"),
442
  VAR("MaxMemInQueues",          MEMUNIT,   MaxMemInQueues_raw, "0"),
443
444
  OBSOLETE("MaxOnionsPending"),
  V(MaxOnionQueueDelay,          MSEC_INTERVAL, "1750 msec"),
445
  V(MaxUnparseableDescSizeToLog, MEMUNIT, "10 MB"),
446
  V(MinMeasuredBWsForAuthToIgnoreAdvertised, INT, "500"),
447
  VAR("MyFamily",                LINELIST, MyFamily_lines,       NULL),
448
  V(NewCircuitPeriod,            INTERVAL, "30 seconds"),
449
  OBSOLETE("NamingAuthoritativeDirectory"),
450
  OBSOLETE("NATDListenAddress"),
451
  VPORT(NATDPort),
452
  V(Nickname,                    STRING,   NULL),
453
  OBSOLETE("PredictedPortsRelevanceTime"),
454
  OBSOLETE("WarnUnsafeSocks"),
455
  VAR("NodeFamily",              LINELIST, NodeFamilies,         NULL),
456
  V(NoExec,                      BOOL,     "0"),
457
  V(NumCPUs,                     UINT,     "0"),
458
  V(NumDirectoryGuards,          UINT,     "0"),
459
  V(NumEntryGuards,              UINT,     "0"),
Nick Mathewson's avatar
Nick Mathewson committed
460
  V(OfflineMasterKey,            BOOL,     "0"),
461
  OBSOLETE("ORListenAddress"),
462
  VPORT(ORPort),
463
  V(OutboundBindAddress,         LINELIST,   NULL),
464
465
  V(OutboundBindAddressOR,       LINELIST,   NULL),
  V(OutboundBindAddressExit,     LINELIST,   NULL),
466

467
  OBSOLETE("PathBiasDisableRate"),
468
469
  V(PathBiasCircThreshold,       INT,      "-1"),
  V(PathBiasNoticeRate,          DOUBLE,   "-1"),
470
  V(PathBiasWarnRate,            DOUBLE,   "-1"),
471
  V(PathBiasExtremeRate,         DOUBLE,   "-1"),
472
  V(PathBiasScaleThreshold,      INT,      "-1"),
473
474
  OBSOLETE("PathBiasScaleFactor"),
  OBSOLETE("PathBiasMultFactor"),
475
  V(PathBiasDropGuards,          AUTOBOOL, "0"),
476
477
478
479
480
481
  OBSOLETE("PathBiasUseCloseCounts"),

  V(PathBiasUseThreshold,       INT,      "-1"),
  V(PathBiasNoticeUseRate,          DOUBLE,   "-1"),
  V(PathBiasExtremeUseRate,         DOUBLE,   "-1"),
  V(PathBiasScaleUseThreshold,      INT,      "-1"),
482

483
  V(PathsNeededToBuildCircuits,  DOUBLE,   "-1"),
484
485
  V(PerConnBWBurst,              MEMUNIT,  "0"),
  V(PerConnBWRate,               MEMUNIT,  "0"),
486
  V(PidFile,                     STRING,   NULL),
487
  V(TestingTorNetwork,           BOOL,     "0"),
488
  V(TestingMinExitFlagThreshold, MEMUNIT,  "0"),
489
  V(TestingMinFastFlagThreshold, MEMUNIT,  "0"),
490

491
  V(TestingLinkCertLifetime,          INTERVAL, "2 days"),
492
493
494
495
496
  V(TestingAuthKeyLifetime,          INTERVAL, "2 days"),
  V(TestingLinkKeySlop,              INTERVAL, "3 hours"),
  V(TestingAuthKeySlop,              INTERVAL, "3 hours"),
  V(TestingSigningKeySlop,           INTERVAL, "1 day"),

497
  V(OptimisticData,              AUTOBOOL, "auto"),
498
499
  OBSOLETE("PortForwarding"),
  OBSOLETE("PortForwardingHelper"),
500
  OBSOLETE("PreferTunneledDirConns"),
501
  V(ProtocolWarnings,            BOOL,     "0"),
502
  V(PublishServerDescriptor,     CSV,      "1"),
503
504
505
506
507
508
509
  V(PublishHidServDescriptors,   BOOL,     "1"),
  V(ReachableAddresses,          LINELIST, NULL),
  V(ReachableDirAddresses,       LINELIST, NULL),
  V(ReachableORAddresses,        LINELIST, NULL),
  V(RecommendedVersions,         LINELIST, NULL),
  V(RecommendedClientVersions,   LINELIST, NULL),
  V(RecommendedServerVersions,   LINELIST, NULL),
510
  V(RecommendedPackages,         LINELIST, NULL),
511
512
  V(ReducedConnectionPadding,    BOOL,     "0"),
  V(ConnectionPadding,           AUTOBOOL, "auto"),
513
  V(RefuseUnknownExits,          AUTOBOOL, "auto"),
514
  V(RejectPlaintextPorts,        CSV,      ""),
515
516
517
518
519
  V(RelayBandwidthBurst,         MEMUNIT,  "0"),
  V(RelayBandwidthRate,          MEMUNIT,  "0"),
  V(RendPostPeriod,              INTERVAL, "1 hour"),
  V(RephistTrackTime,            INTERVAL, "24 hours"),
  V(RunAsDaemon,                 BOOL,     "0"),
520
  V(ReducedExitPolicy,           BOOL,     "0"),
521
  OBSOLETE("RunTesting"), // currently unused
522
  V(Sandbox,                     BOOL,     "0"),
523
  V(SafeLogging,                 STRING,   "1"),
524
  V(SafeSocks,                   BOOL,     "0"),
525
  V(ServerDNSAllowBrokenConfig,  BOOL,     "1"),
526
527
  V(ServerDNSAllowNonRFC953Hostnames, BOOL,"0"),
  V(ServerDNSDetectHijacking,    BOOL,     "1"),
528
  V(ServerDNSRandomizeCase,      BOOL,     "1"),
529
530
531
  V(ServerDNSResolvConfFile,     STRING,   NULL),
  V(ServerDNSSearchDomains,      BOOL,     "0"),
  V(ServerDNSTestAddresses,      CSV,
532
      "www.google.com,www.mit.edu,www.yahoo.com,www.slashdot.org"),
533
534
535
536
537
  OBSOLETE("SchedulerLowWaterMark__"),
  OBSOLETE("SchedulerHighWaterMark__"),
  OBSOLETE("SchedulerMaxFlushCells__"),
  V(KISTSchedRunInterval,        MSEC_INTERVAL, "0 msec"),
  V(KISTSockBufSizeFactor,       DOUBLE,   "1.0"),
538
  V(Schedulers,                  CSV,      "KIST,KISTLite,Vanilla"),
539
  V(ShutdownWaitLength,          INTERVAL, "30 seconds"),
540
  OBSOLETE("SocksListenAddress"),
541
  V(SocksPolicy,                 LINELIST, NULL),
542
  VPORT(SocksPort),
543
  V(SocksTimeout,                INTERVAL, "2 minutes"),
544
  V(SSLKeyLifetime,              INTERVAL, "0"),
545
546
  OBSOLETE("StrictEntryNodes"),
  OBSOLETE("StrictExitNodes"),
547
  V(StrictNodes,                 BOOL,     "0"),
548
  OBSOLETE("Support022HiddenServices"),
549
  V(TestSocks,                   BOOL,     "0"),
550
  V(TokenBucketRefillInterval,   MSEC_INTERVAL, "100 msec"),
551
  V(Tor2webMode,                 BOOL,     "0"),
552
  V(Tor2webRendezvousPoints,      ROUTERSET, NULL),
553
  OBSOLETE("TLSECGroup"),
554
555
  V(TrackHostExits,              CSV,      NULL),
  V(TrackHostExitsExpire,        INTERVAL, "30 minutes"),
556
  OBSOLETE("TransListenAddress"),
557
  VPORT(TransPort),
558
  V(TransProxyType,              STRING,   "default"),
559
  OBSOLETE("TunnelDirConns"),
560
  V(UpdateBridgesFromAuthority,  BOOL,     "0"),
561
  V(UseBridges,                  BOOL,     "0"),
562
  VAR("UseEntryGuards",          BOOL,     UseEntryGuards_option, "1"),
Nick Mathewson's avatar
Nick Mathewson committed
563
  OBSOLETE("UseEntryGuardsAsDirGuards"),
564
  V(UseGuardFraction,            AUTOBOOL, "auto"),
565
  V(UseMicrodescriptors,         AUTOBOOL, "auto"),
566
  OBSOLETE("UseNTorHandshake"),
567
  V(User,                        STRING,   NULL),
568
  OBSOLETE("UserspaceIOCPBuffers"),
569
  V(AuthDirSharedRandomness,     BOOL,     "1"),
570
  V(AuthDirTestEd25519LinkKeys,  BOOL,     "1"),
571
  OBSOLETE("V1AuthoritativeDirectory"),
572
  OBSOLETE("V2AuthoritativeDirectory"),
573
  VAR("V3AuthoritativeDirectory",BOOL, V3AuthoritativeDir,   "0"),
574
575
576
  V(TestingV3AuthInitialVotingInterval, INTERVAL, "30 minutes"),
  V(TestingV3AuthInitialVoteDelay, INTERVAL, "5 minutes"),
  V(TestingV3AuthInitialDistDelay, INTERVAL, "5 minutes"),
577
  V(TestingV3AuthVotingStartOffset, INTERVAL, "0"),
578
579
580
581
  V(V3AuthVotingInterval,        INTERVAL, "1 hour"),
  V(V3AuthVoteDelay,             INTERVAL, "5 minutes"),
  V(V3AuthDistDelay,             INTERVAL, "5 minutes"),
  V(V3AuthNIntervalsValid,       UINT,     "3"),
582
  V(V3AuthUseLegacyKey,          BOOL,     "0"),
583
  V(V3BandwidthsFile,            FILENAME, NULL),
584
  V(GuardfractionFile,           FILENAME, NULL),
585
  VAR("VersioningAuthoritativeDirectory",BOOL,VersioningAuthoritativeDir, "0"),
586
  OBSOLETE("VoteOnHidServDirectoriesV2"),
587
588
  V(VirtualAddrNetworkIPv4,      STRING,   "127.192.0.0/10"),
  V(VirtualAddrNetworkIPv6,      STRING,   "[FE80::]/10"),
589
  V(WarnPlaintextPorts,          CSV,      "23,109,110,143"),
590
591
  OBSOLETE("UseFilteringSSLBufferevents"),
  OBSOLETE("__UseFilteringSSLBufferevents"),
592
  VAR("__ReloadTorrcOnSIGHUP",   BOOL,  ReloadTorrcOnSIGHUP,      "1"),
593
594
  VAR("__AllDirActionsPrivate",  BOOL,  AllDirActionsPrivate,     "0"),
  VAR("__DisablePredictedCircuits",BOOL,DisablePredictedCircuits, "0"),
595
  VAR("__DisableSignalHandlers", BOOL,  DisableSignalHandlers,    "0"),
596
  VAR("__LeaveStreamsUnattached",BOOL,  LeaveStreamsUnattached,   "0"),
597
598
  VAR("__HashedControlSessionPassword", LINELIST, HashedControlSessionPassword,
      NULL),
599
  VAR("__OwningControllerProcess",STRING,OwningControllerProcess, NULL),
600
  VAR("__OwningControllerFD",INT,OwningControllerFD, "-1"),
601
  V(MinUptimeHidServDirectoryV2, INTERVAL, "96 hours"),
602
  V(TestingServerDownloadInitialDelay, CSV_INTERVAL, "0, 0, 0, 60, 60, 120, "
603
                                 "300, 900, 2147483647"),
604
  V(TestingClientDownloadInitialDelay, CSV_INTERVAL, "0, 0, 60, 300, 600, "
605
                                 "2147483647"),
606
  V(TestingServerConsensusDownloadInitialDelay, CSV_INTERVAL, "0, 0, 60, "
607
608
                                 "300, 600, 1800, 1800, 1800, 1800, "
                                 "1800, 3600, 7200"),
609
  V(TestingClientConsensusDownloadInitialDelay, CSV_INTERVAL, "0, 0, 60, "
610
611
                                 "300, 600, 1800, 3600, 3600, 3600, "
                                 "10800, 21600, 43200"),
612
  /* With the ClientBootstrapConsensus*Download* below:
613
   * Clients with only authorities will try:
614
615
   *  - at least 3 authorities over 10 seconds, then exponentially backoff,
   *    with the next attempt 3-21 seconds later,
616
   * Clients with authorities and fallbacks will try:
617
618
   *  - at least 2 authorities and 4 fallbacks over 21 seconds, then
   *    exponentially backoff, with the next attempts 4-33 seconds later,
619
   * Clients will also retry when an application request arrives.
620
   * After a number of failed requests, clients retry every 3 days + 1 hour.
621
622
623
624
625
626
   *
   * Clients used to try 2 authorities over 10 seconds, then wait for
   * 60 minutes or an application request.
   *
   * When clients have authorities and fallbacks available, they use these
   * schedules: (we stagger the times to avoid thundering herds) */
627
  V(ClientBootstrapConsensusAuthorityDownloadInitialDelay, CSV_INTERVAL,
628
    "6, 11, 3600, 10800, 25200, 54000, 111600, 262800" /* 3 days + 1 hour */),
629
  V(ClientBootstrapConsensusFallbackDownloadInitialDelay, CSV_INTERVAL,
630
631
    "0, 1, 4, 11, 3600, 10800, 25200, 54000, 111600, 262800"),
  /* When clients only have authorities available, they use this schedule: */
632
  V(ClientBootstrapConsensusAuthorityOnlyDownloadInitialDelay, CSV_INTERVAL,
633
634
635
636
637
    "0, 3, 7, 3600, 10800, 25200, 54000, 111600, 262800"),
  /* We don't want to overwhelm slow networks (or mirrors whose replies are
   * blocked), but we also don't want to fail if only some mirrors are
   * blackholed. Clients will try 3 directories simultaneously.
   * (Relays never use simultaneous connections.) */
638
  V(ClientBootstrapConsensusMaxInProgressTries, UINT, "3"),
639
640
  /* When a client has any running bridges, check each bridge occasionally,
    * whether or not that bridge is actually up. */
641
  V(TestingBridgeDownloadInitialDelay, CSV_INTERVAL,
642
643
644
645
646
    "10800, 25200, 54000, 111600, 262800"),
  /* When a client is just starting, or has no running bridges, check each
   * bridge a few times quickly, and then try again later. These schedules
   * are much longer than the other schedules, because we try each and every
   * configured bridge with this schedule. */
647
  V(TestingBridgeBootstrapDownloadInitialDelay, CSV_INTERVAL,
648
    "0, 30, 90, 600, 3600, 10800, 25200, 54000, 111600, 262800"),
649
650
  V(TestingClientMaxIntervalWithoutRequest, INTERVAL, "10 minutes"),
  V(TestingDirConnectionMaxStall, INTERVAL, "5 minutes"),
651
652
653
654
655
656
  OBSOLETE("TestingConsensusMaxDownloadTries"),
  OBSOLETE("ClientBootstrapConsensusMaxDownloadTries"),
  OBSOLETE("ClientBootstrapConsensusAuthorityOnlyMaxDownloadTries"),
  OBSOLETE("TestingDescriptorMaxDownloadTries"),
  OBSOLETE("TestingMicrodescMaxDownloadTries"),
  OBSOLETE("TestingCertMaxDownloadTries"),
657
  V(TestingDirAuthVoteExit, ROUTERSET, NULL),
658
  V(TestingDirAuthVoteExitIsStrict,  BOOL,     "0"),
659
  V(TestingDirAuthVoteGuard, ROUTERSET, NULL),
660
  V(TestingDirAuthVoteGuardIsStrict,  BOOL,     "0"),
661
  V(TestingDirAuthVoteHSDir, ROUTERSET, NULL),
662
  V(TestingDirAuthVoteHSDirIsStrict,  BOOL,     "0"),
663
  VAR("___UsingTestNetworkDefaults", BOOL, UsingTestNetworkDefaults_, "0"),
664

665
  END_OF_CONFIG_VARS
666
};
667

668
669
/** Override default values with these if the user sets the TestingTorNetwork
 * option. */
670
static const config_var_t testing_tor_network_defaults[] = {
671
672
673
674
  V(DirAllowPrivateAddresses,    BOOL,     "1"),
  V(EnforceDistinctSubnets,      BOOL,     "0"),
  V(AssumeReachable,             BOOL,     "1"),
  V(AuthDirMaxServersPerAddr,    UINT,     "0"),
675
  V(ClientBootstrapConsensusAuthorityDownloadInitialDelay, CSV_INTERVAL,
676
    "0, 2, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 8, 16, 32, 60"),
677
  V(ClientBootstrapConsensusFallbackDownloadInitialDelay, CSV_INTERVAL,
678
    "0, 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 8, 16, 32, 60"),
679
  V(ClientBootstrapConsensusAuthorityOnlyDownloadInitialDelay, CSV_INTERVAL,
680
    "0, 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 8, 16, 32, 60"),
681
  V(ClientDNSRejectInternalAddresses, BOOL,"0"),
682
  V(ClientRejectInternalAddresses, BOOL,   "0"),
683
  V(CountPrivateBandwidth,       BOOL,     "1"),
684
  V(ExitPolicyRejectPrivate,     BOOL,     "0"),
685
  V(ExtendAllowPrivateAddresses, BOOL,     "1"),
686
687
688
  V(V3AuthVotingInterval,        INTERVAL, "5 minutes"),
  V(V3AuthVoteDelay,             INTERVAL, "20 seconds"),
  V(V3AuthDistDelay,             INTERVAL, "20 seconds"),
689
  V(TestingV3AuthInitialVotingInterval, INTERVAL, "150 seconds"),
690
691
692
693
  V(TestingV3AuthInitialVoteDelay, INTERVAL, "20 seconds"),
  V(TestingV3AuthInitialDistDelay, INTERVAL, "20 seconds"),
  V(TestingAuthDirTimeToLearnReachability, INTERVAL, "0 minutes"),
  V(TestingEstimatedDescriptorPropagationTime, INTERVAL, "0 minutes"),
694
  V(MinUptimeHidServDirectoryV2, INTERVAL, "0 minutes"),
695
  V(TestingServerDownloadInitialDelay, CSV_INTERVAL, "0, 0, 0, 5, 10, 15, "
696
                                 "20, 30, 60"),
697
  V(TestingClientDownloadInitialDelay, CSV_INTERVAL, "0, 0, 5, 10, 15, 20, "
698
                                 "30, 60"),
699
  V(TestingServerConsensusDownloadInitialDelay, CSV_INTERVAL, "0, 0, 5, 10, "
700
                                 "15, 20, 30, 60"),
701
  V(TestingClientConsensusDownloadInitialDelay, CSV_INTERVAL, "0, 0, 5, 10, "
702
                                 "15, 20, 30, 60"),
703
704
  V(TestingBridgeDownloadInitialDelay, CSV_INTERVAL, "10, 30, 60"),
  V(TestingBridgeBootstrapDownloadInitialDelay, CSV_INTERVAL, "0, 0, 5, 10, "
705
                                 "15, 20, 30, 60"),
706
707
  V(TestingClientMaxIntervalWithoutRequest, INTERVAL, "5 seconds"),
  V(TestingDirConnectionMaxStall, INTERVAL, "30 seconds"),
708
  V(TestingEnableConnBwEvent,    BOOL,     "1"),
709
  V(TestingEnableCellStatsEvent, BOOL,     "1"),
710
  VAR("___UsingTestNetworkDefaults", BOOL, UsingTestNetworkDefaults_, "1"),
711
  V(RendPostPeriod,              INTERVAL, "2 minutes"),
712

713
  END_OF_CONFIG_VARS
714
};