[tor-commits] [stem/master] Output truncated when downloading man to a file handle

atagar at torproject.org atagar at torproject.org
Sun Dec 6 21:57:12 UTC 2015


commit 6d328e8d16c7b34c87d50d4259a6936451225e89
Author: Damian Johnson <atagar at torproject.org>
Date:   Sat Dec 5 12:54:56 2015 -0800

    Output truncated when downloading man to a file handle
    
    Oops, we were missing a flush call so when calling download_man_page() we were
    liable to truncate content.
---
 stem/cached_tor_manual |  193 ++++++++++++++++++++++++++++++++++++------------
 stem/manual.py         |    1 +
 2 files changed, 146 insertions(+), 48 deletions(-)

diff --git a/stem/cached_tor_manual b/stem/cached_tor_manual
index d9de20e..a549e3a 100644
--- a/stem/cached_tor_manual
+++ b/stem/cached_tor_manual
@@ -28,22 +28,36 @@ signals SIGINT => Tor clients behave as with SIGTERM; but Tor servers will do a
 signals SIGPIPE => Tor catches this signal and ignores it.
 signals SIGTERM => Tor will catch this, clean up and sync to disk if necessary, and exit.
 signals SIGXFSZ => If this signal exists on your platform, Tor catches and ignores it.
-files @LOCALSTATEDIR@/lib/tor/ => The tor process stores keys and other data here.
-files DataDirectory/cached-status/ => The most recently downloaded network status document for each authority. Each file holds one such document; the filenames are the hexadecimal identity key fingerprints of the directory authorities. Mostly obsolete.
-files DataDirectory/cached-microdescs and cached-microdescs.new => These files hold downloaded microdescriptors. Lines beginning with @-signs are annotations that contain more information about a given router. The ".new" file is an append-only journal; when it gets too large, all entries are merged into a new cached-microdescs file.
 files DataDirectory/lock => This file is used to prevent two Tor instances from using same data directory. If access to this file is locked, data directory is already in use by Tor.
-files DataDirectory/bw_accounting => Used to track bandwidth accounting values (when the current period starts and ends; how much has been read and written so far this period). This file is obsolete, and the data is now stored in the 'state' file as well. Only used when bandwidth accounting is enabled.
-files DataDirectory/fingerprint => Only used by servers. Holds the fingerprint of the server's identity key.
-files DataDirectory/cached-certs => This file holds downloaded directory key certificates that are used to verify authenticity of documents generated by Tor directory authorities.
-files DataDirectory/keys/* => Only used by servers. Holds identity keys and onion keys.
-files DataDirectory/state => A set of persistent key-value mappings. These are documented in the file. These include: o   The current entry guards and their status. o   The current bandwidth accounting values (unused so far; see below). o   When the file was last written o   What version of Tor generated the state file o   A short history of bandwidth usage, as produced in the server descriptors.
-files DataDirectory/cached-consensus and/or cached-microdesc-consensus => The most recent consensus network status document we've downloaded.
+files DataDirectory/stats/dirreq-stats => Only used by directory caches and authorities. This file is used to collect directory request statistics.
 files DataDirectory/hashed-fingerprint => Only used by bridges. Holds the hashed fingerprint of the bridge's identity key. (That is, the hash of the hash of the identity key.)
 files @CONFDIR@/torrc => The configuration file, which contains "option value" pairs.
 files DataDirectory/cached-descriptors and cached-descriptors.new => These files hold downloaded router statuses. Some routers may appear more than once; if so, the most recently published descriptor is used. Lines beginning with @-signs are annotations that contain more information about a given router. The ".new" file is an append-only journal; when it gets too large, all entries are merged into a new cached-descriptors file.
+files DataDirectory/cached-microdescs and cached-microdescs.new => These files hold downloaded microdescriptors. Lines beginning with @-signs are annotations that contain more information about a given router. The ".new" file is an append-only journal; when it gets too large, all entries are merged into a new cached-microdescs file.
+files DataDirectory/cached-certs => This file holds downloaded directory key certificates that are used to verify authenticity of documents generated by Tor directory authorities.
+files DataDirectory/unverified-microdesc-consensus => This file contains a microdescriptor-flavored network consensus document that has been downloaded, but which we didn't have the right certificates to check yet.
+files DataDirectory/keys/* => Only used by servers. Holds identity keys and onion keys.
+files DataDirectory/stats/buffer-stats => Only used by servers. This file is used to collect buffer usage history.
+files DataDirectory/fingerprint => Only used by servers. Holds the fingerprint of the server's identity key.
+files DataDirectory/unverified-consensus => This file contains a network consensus document that has been downloaded, but which we didn't have the right certificates to check yet.
+files HiddenServiceDirectory/client_keys => Authorization data for a hidden service that is only accessible by authorized clients.
+files DataDirectory/unparseable-desc => Onion server descriptors that Tor was unable to parse are dumped to this file. Only used for debugging.
+files DataDirectory/stats/conn-stats => Only used by servers. This file is used to collect approximate connection history (number of active connections over time).
+files @LOCALSTATEDIR@/lib/tor/ => The tor process stores keys and other data here.
 files DataDirectory/cached-routers and cached-routers.new => Obsolete versions of cached-descriptors and cached-descriptors.new. When Tor can't find the newer files, it looks here instead.
+files DataDirectory/stats/entry-stats => Only used by servers. This file is used to collect incoming connection statistics by Tor entry nodes.
+files DataDirectory/stats/exit-stats => Only used by servers. This file is used to collect outgoing connection statistics by Tor exit routers.
+files DataDirectory/cached-consensus and/or cached-microdesc-consensus => The most recent consensus network status document we've downloaded.
+files DataDirectory/stats/bridge-stats => Only used by servers. This file is used to collect incoming connection statistics by Tor bridges.
+files DataDirectory/router-stability => Only used by authoritative directory servers. Tracks measurements for router mean-time-between-failures so that authorities have a good idea of how to set their Stable flags.
 files $HOME/.torrc => Fallback location for torrc, if @CONFDIR@/torrc is not found.
-files DataDirectory/v3-status-votes => Only for authoritative directory servers. This file contains status
+files DataDirectory/networkstatus-bridges => Only used by authoritative bridge directories. Contains information about bridges that have self-reported themselves to the bridge authority.
+files HiddenServiceDirectory/private_key => The private key for this hidden service.
+files DataDirectory/cached-status/ => The most recently downloaded network status document for each authority. Each file holds one such document; the filenames are the hexadecimal identity key fingerprints of the directory authorities. Mostly obsolete.
+files DataDirectory/state => A set of persistent key-value mappings. These are documented in the file. These include: o   The current entry guards and their status. o   The current bandwidth accounting values (unused so far; see below). o   When the file was last written o   What version of Tor generated the state file o   A short history of bandwidth usage, as produced in the server descriptors.
+files DataDirectory/bw_accounting => Used to track bandwidth accounting values (when the current period starts and ends; how much has been read and written so far this period). This file is obsolete, and the data is now stored in the 'state' file as well. Only used when bandwidth accounting is enabled.
+files DataDirectory/v3-status-votes => Only for authoritative directory servers. This file contains status votes from all the authoritative directory servers and is used to generate the network consensus document.
+files HiddenServiceDirectory/hostname => The <base32-encoded-fingerprint>.onion domain name for this hidden service. If the hidden service is restricted to authorized clients only, this file also contains authorization data for all clients.
 files DataDirectory/control_auth_cookie => Used for cookie authentication with the controller. Location can be overridden by the CookieAuthFile config option. Regenerated on startup. See control-spec.txt in torspec for details. Only used when cookie authentication is enabled.
 config_options.AllowInvalidNodes.category Client
 config_options.AllowInvalidNodes.name AllowInvalidNodes
@@ -196,11 +210,13 @@ config_options.MapAddress.description
 |
 | 1. When evaluating MapAddress expressions Tor stops when it hits the most recently added expression that matches the requested address. So if you have the following in your torrc, www.torproject.org will map to 1.1.1.1:
 |
-|        MapAddress www.torproject.org 2.2.2.2        MapAddress www.torproject.org 1.1.1.1
+|        MapAddress www.torproject.org 2.2.2.2
+|        MapAddress www.torproject.org 1.1.1.1
 |
 | 2. Tor evaluates the MapAddress configuration until it finds no matches. So if you have the following in your torrc, www.torproject.org will map to 2.2.2.2:
 |
-|        MapAddress 1.1.1.1 2.2.2.2        MapAddress www.torproject.org 1.1.1.1
+|        MapAddress 1.1.1.1 2.2.2.2
+|        MapAddress www.torproject.org 1.1.1.1
 |
 | 3. The following MapAddress expression is invalid (and will be ignored) because you cannot map from a specific address to a wildcard address:
 |
@@ -243,47 +259,67 @@ config_options.SocksPort.description
 |
 |The isolation flags arguments give Tor rules for which streams received on this SocksPort are allowed to share circuits with one another. Recognized isolation flags are:
 |
-|IsolateClientAddr    Don't share circuits with streams from a different client address. (On by default and strongly recommended; you can disable it with NoIsolateClientAddr.)
+|IsolateClientAddr
+|    Don't share circuits with streams from a different client address. (On by default and strongly recommended; you can disable it with NoIsolateClientAddr.)
 |
-|IsolateSOCKSAuth    Don't share circuits with streams for which different SOCKS authentication was provided. (On by default; you can disable it with NoIsolateSOCKSAuth.)
+|IsolateSOCKSAuth
+|    Don't share circuits with streams for which different SOCKS authentication was provided. (On by default; you can disable it with NoIsolateSOCKSAuth.)
 |
-|IsolateClientProtocol    Don't share circuits with streams using a different protocol. (SOCKS 4, SOCKS 5, TransPort connections, NATDPort connections, and DNSPort requests are all considered to be different protocols.)
+|IsolateClientProtocol
+|    Don't share circuits with streams using a different protocol. (SOCKS 4, SOCKS 5, TransPort connections, NATDPort connections, and DNSPort requests are all considered to be different protocols.)
 |
-|IsolateDestPort    Don't share circuits with streams targeting a different destination port.
+|IsolateDestPort
+|    Don't share circuits with streams targeting a different destination port.
 |
-|IsolateDestAddr    Don't share circuits with streams targeting a different destination address.
+|IsolateDestAddr
+|    Don't share circuits with streams targeting a different destination address.
 |
-|KeepAliveIsolateSOCKSAuth    If IsolateSOCKSAuth is enabled, keep alive circuits that have streams with SOCKS authentication set indefinitely.
+|KeepAliveIsolateSOCKSAuth
+|    If IsolateSOCKSAuth is enabled, keep alive circuits that have streams with SOCKS authentication set indefinitely.
 |
-|SessionGroup=INT    If no other isolation rules would prevent it, allow streams on this port to share circuits with streams from every other port with the same session group. (By default, streams received on different SocksPorts, TransPorts, etc are always isolated from one another. This option overrides that behavior.)
+|SessionGroup=INT
+|    If no other isolation rules would prevent it, allow streams on this port to share circuits with streams from every other port with the same session group. (By default, streams received on different SocksPorts, TransPorts, etc are always isolated from one another. This option overrides that behavior.)
 |
 |Other recognized flags for a SocksPort are:
 |
-|NoIPv4Traffic    Tell exits to not connect to IPv4 addresses in response to SOCKS requests on this connection.
+|NoIPv4Traffic
+|    Tell exits to not connect to IPv4 addresses in response to SOCKS requests on this connection.
 |
-|IPv6Traffic    Tell exits to allow IPv6 addresses in response to SOCKS requests on this connection, so long as SOCKS5 is in use. (SOCKS4 can't handle IPv6.)
+|IPv6Traffic
+|    Tell exits to allow IPv6 addresses in response to SOCKS requests on this connection, so long as SOCKS5 is in use. (SOCKS4 can't handle IPv6.)
 |
-|PreferIPv6    Tells exits that, if a host has both an IPv4 and an IPv6 address, we would prefer to connect to it via IPv6. (IPv4 is the default.)
+|PreferIPv6
+|    Tells exits that, if a host has both an IPv4 and an IPv6 address, we would prefer to connect to it via IPv6. (IPv4 is the default.)
 |
-|CacheIPv4DNS    Tells the client to remember IPv4 DNS answers we receive from exit nodes via this connection. (On by default.)
+|CacheIPv4DNS
+|    Tells the client to remember IPv4 DNS answers we receive from exit nodes via this connection. (On by default.)
 |
-|CacheIPv6DNS    Tells the client to remember IPv6 DNS answers we receive from exit nodes via this connection.
+|CacheIPv6DNS
+|    Tells the client to remember IPv6 DNS answers we receive from exit nodes via this connection.
 |
-|GroupWritable    Unix domain sockets only: makes the socket get created as group-writable.
+|GroupWritable
+|    Unix domain sockets only: makes the socket get created as group-writable.
 |
-|WorldWritable    Unix domain sockets only: makes the socket get created as world-writable.
+|WorldWritable
+|    Unix domain sockets only: makes the socket get created as world-writable.
 |
-|CacheDNS    Tells the client to remember all DNS answers we receive from exit nodes via this connection.
+|CacheDNS
+|    Tells the client to remember all DNS answers we receive from exit nodes via this connection.
 |
-|UseIPv4Cache    Tells the client to use any cached IPv4 DNS answers we have when making requests via this connection. (NOTE: This option, along UseIPv6Cache and UseDNSCache, can harm your anonymity, and probably won't help performance as much as you might expect. Use with care!)
+|UseIPv4Cache
+|    Tells the client to use any cached IPv4 DNS answers we have when making requests via this connection. (NOTE: This option, along UseIPv6Cache and UseDNSCache, can harm your anonymity, and probably won't help performance as much as you might expect. Use with care!)
 |
-|UseIPv6Cache    Tells the client to use any cached IPv6 DNS answers we have when making requests via this connection.
+|UseIPv6Cache
+|    Tells the client to use any cached IPv6 DNS answers we have when making requests via this connection.
 |
-|UseDNSCache    Tells the client to use any cached DNS answers we have when making requests via this connection.
+|UseDNSCache
+|    Tells the client to use any cached DNS answers we have when making requests via this connection.
 |
-|PreferIPv6Automap    When serving a hostname lookup request on this port that should get automapped (according to AutomapHostsOnResolve), if we could return either an IPv4 or an IPv6 answer, prefer an IPv6 answer. (On by default.)
+|PreferIPv6Automap
+|    When serving a hostname lookup request on this port that should get automapped (according to AutomapHostsOnResolve), if we could return either an IPv4 or an IPv6 answer, prefer an IPv6 answer. (On by default.)
 |
-|PreferSOCKSNoAuth    Ordinarily, when an application offers both "username/password authentication" and "no authentication" to Tor via SOCKS5, Tor selects username/password authentication so that IsolateSOCKSAuth can work. This can confuse some applications, if they offer a username/password combination then get confused when asked for one. You can disable this behavior, so that Tor will select "No authentication" when IsolateSOCKSAuth is disabled, or when this option is set.
+|PreferSOCKSNoAuth
+|    Ordinarily, when an application offers both "username/password authentication" and "no authentication" to Tor via SOCKS5, Tor selects username/password authentication so that IsolateSOCKSAuth can work. This can confuse some applications, if they offer a username/password combination then get confused when asked for one. You can disable this behavior, so that Tor will select "No authentication" when IsolateSOCKSAuth is disabled, or when this option is set.
 config_options.SocksListenAddress.category Client
 config_options.SocksListenAddress.name SocksListenAddress
 config_options.SocksListenAddress.usage IP[:PORT]
@@ -626,7 +662,8 @@ config_options.DirListenAddress.summary Address the directory service is bound t
 config_options.DirListenAddress.description 
 |Bind the directory service to this address. If you specify a port, bind to this port rather than the one specified in DirPort. (Default: 0.0.0.0) This directive can be specified multiple times to bind to multiple addresses/ports.
 |
-|    This option is deprecated; you can get the same behavior with DirPort now    that it supports NoAdvertise and explicit addresses.
+|    This option is deprecated; you can get the same behavior with DirPort now
+|    that it supports NoAdvertise and explicit addresses.
 config_options.DirPolicy.category Directory
 config_options.DirPolicy.name DirPolicy
 config_options.DirPolicy.usage policy,policy,...
@@ -750,9 +787,11 @@ config_options.ControlPort.description
 |
 |Recognized flags are...
 |
-|GroupWritable    Unix domain sockets only: makes the socket get created as group-writable.
+|GroupWritable
+|    Unix domain sockets only: makes the socket get created as group-writable.
 |
-|WorldWritable    Unix domain sockets only: makes the socket get created as world-writable.
+|WorldWritable
+|    Unix domain sockets only: makes the socket get created as world-writable.
 config_options.ControlListenAddress.category General
 config_options.ControlListenAddress.name ControlListenAddress
 config_options.ControlListenAddress.usage IP[:PORT]
@@ -1076,7 +1115,7 @@ config_options.ExitPolicy.name ExitPolicy
 config_options.ExitPolicy.usage policy,policy,...
 config_options.ExitPolicy.summary Traffic destinations that can exit from this relay
 config_options.ExitPolicy.description 
-|Set an exit policy for this server. Each policy is of the form "accept[6]|reject[6]ADDR[/MASK][:PORT]". If /MASK is omitted then this policy just applies to the host given. Instead of giving a host or network you can also use "*" to denote the universe (0.0.0.0/0 and ::/128), or *4 to denote all IPv4 addresses, and *6 to denote all IPv6 addresses.  PORT can be a single port number, an interval of ports "FROM_PORT-TO_PORT", or "*". If PORT is omitted, that means "*".
+|Set an exit policy for this server. Each policy is of the form "accept[6]|reject[6] ADDR[/MASK][:PORT]". If /MASK is omitted then this policy just applies to the host given. Instead of giving a host or network you can also use "*" to denote the universe (0.0.0.0/0 and ::/128), or *4 to denote all IPv4 addresses, and *6 to denote all IPv6 addresses.  PORT can be a single port number, an interval of ports "FROM_PORT-TO_PORT", or "*". If PORT is omitted, that means "*".
 |
 |For example, "accept 18.7.22.69:*,reject 18.0.0.0/8:*,accept *:*" would reject any IPv4 traffic destined for MIT except for web.mit.edu, and accept any other IPv4 or IPv6 traffic.
 |
@@ -1092,11 +1131,20 @@ config_options.ExitPolicy.description
 |
 |Policies are considered first to last, and the first match wins. If you want to allow the same ports on IPv4 and IPv6, write your rules using accept/reject *. If you want to allow different ports on IPv4 and IPv6, write your IPv6 rules using accept6/reject6 *6, and your IPv4 rules using accept/reject *4. If you want to _replace_ the default exit policy, end your exit policy with either a reject *:* or an accept *:*. Otherwise, you're _augmenting_ (prepending to) the default exit policy. The default exit policy is:
 |
-|
-|
-|    reject *:25    reject *:119    reject *:135-139    reject *:445    reject *:563    reject *:1214    reject *:4661-4666    reject *:6346-6429    reject *:6699    reject *:6881-6999    accept *:*
-|
-|    Since the default exit policy uses accept/reject *, it applies to both    IPv4 and IPv6 addresses.
+|    reject *:25
+|    reject *:119
+|    reject *:135-139
+|    reject *:445
+|    reject *:563
+|    reject *:1214
+|    reject *:4661-4666
+|    reject *:6346-6429
+|    reject *:6699
+|    reject *:6881-6999
+|    accept *:*
+|
+|    Since the default exit policy uses accept/reject *, it applies to both
+|    IPv4 and IPv6 addresses.
 config_options.ExitPolicyRejectPrivate.category Relay
 config_options.ExitPolicyRejectPrivate.name ExitPolicyRejectPrivate
 config_options.ExitPolicyRejectPrivate.usage 0|1
@@ -1137,9 +1185,26 @@ config_options.ORPort.summary Port used to accept relay traffic
 config_options.ORPort.description 
 |Advertise this port to listen for connections from Tor clients and servers. This option is required to be a Tor server. Set it to "auto" to have Tor pick a port for you. Set it to 0 to not run an ORPort at all. This option can occur more than once. (Default: 0)
 |
-|    Tor recognizes these flags on each ORPort:    **NoAdvertise**::        By default, we bind to a port and tell our users about it. If        NoAdvertise is specified, we don't advertise, but listen anyway.  This        can be useful if the port everybody will be connecting to (for        example, one that's opened on our firewall) is somewhere else.    **NoListen**::        By default, we bind to a port and tell our users about it. If        NoListen is specified, we don't bind, but advertise anyway.  This        can be useful if something else  (for example, a firewall's port        forwarding configuration) is causing connections to reach us.    **IPv4Only**::        If the address is absent, or resolves to both an IPv4 and an IPv6        address, only listen to the IPv4 address.    **IPv6Only**::        If the address is absent, or resolves to both an IPv4 and an IPv6        address, only listen to the IPv6 address.
-|
-|    For obvious reasons, NoAdvertise and NoListen are mutually exclusive, and    IPv4Only and IPv6Only are mutually exclusive.
+|    Tor recognizes these flags on each ORPort:
+|    **NoAdvertise**::
+|        By default, we bind to a port and tell our users about it. If
+|        NoAdvertise is specified, we don't advertise, but listen anyway.  This
+|        can be useful if the port everybody will be connecting to (for
+|        example, one that's opened on our firewall) is somewhere else.
+|    **NoListen**::
+|        By default, we bind to a port and tell our users about it. If
+|        NoListen is specified, we don't bind, but advertise anyway.  This
+|        can be useful if something else  (for example, a firewall's port
+|        forwarding configuration) is causing connections to reach us.
+|    **IPv4Only**::
+|        If the address is absent, or resolves to both an IPv4 and an IPv6
+|        address, only listen to the IPv4 address.
+|    **IPv6Only**::
+|        If the address is absent, or resolves to both an IPv4 and an IPv6
+|        address, only listen to the IPv6 address.
+|
+|    For obvious reasons, NoAdvertise and NoListen are mutually exclusive, and
+|    IPv4Only and IPv6Only are mutually exclusive.
 config_options.ORListenAddress.category Relay
 config_options.ORListenAddress.name ORListenAddress
 config_options.ORListenAddress.usage IP[:PORT]
@@ -1147,7 +1212,8 @@ config_options.ORListenAddress.summary Address for relay connections
 config_options.ORListenAddress.description 
 |Bind to this IP address to listen for connections from Tor clients and servers. If you specify a port, bind to this port rather than the one specified in ORPort. (Default: 0.0.0.0) This directive can be specified multiple times to bind to multiple addresses/ports.
 |
-|    This option is deprecated; you can get the same behavior with ORPort now    that it supports NoAdvertise and explicit addresses.
+|    This option is deprecated; you can get the same behavior with ORPort now
+|    that it supports NoAdvertise and explicit addresses.
 config_options.PortForwarding.category Relay
 config_options.PortForwarding.name PortForwarding
 config_options.PortForwarding.usage 0|1
@@ -1373,9 +1439,40 @@ config_options.TestingTorNetwork.summary Overrides other options to be a testing
 config_options.TestingTorNetwork.description 
 |If set to 1, Tor adjusts default values of the configuration options below, so that it is easier to set up a testing Tor network. May only be set if non-default set of DirAuthorities is set. Cannot be unset while Tor is running. (Default: 0)
 |
-|
-|
-|    ServerDNSAllowBrokenConfig 1    DirAllowPrivateAddresses 1    EnforceDistinctSubnets 0    AssumeReachable 1    AuthDirMaxServersPerAddr 0    AuthDirMaxServersPerAuthAddr 0    ClientDNSRejectInternalAddresses 0    ClientRejectInternalAddresses 0    CountPrivateBandwidth 1    ExitPolicyRejectPrivate 0    ExtendAllowPrivateAddresses 1    V3AuthVotingInterval 5 minutes    V3AuthVoteDelay 20 seconds    V3AuthDistDelay 20 seconds    MinUptimeHidServDirectoryV2 0 seconds    TestingV3AuthInitialVotingInterval 5 minutes    TestingV3AuthInitialVoteDelay 20 seconds    TestingV3AuthInitialDistDelay 20 seconds    TestingAuthDirTimeToLearnReachability 0 minutes    TestingEstimatedDescriptorPropagationTime 0 minutes    TestingServerDownloadSchedule 0, 0, 0, 5, 10, 15, 20, 30, 60    TestingClientDownloadSchedule 0, 0, 5, 10, 15, 20, 30, 60    TestingServerConsensusDownloadSchedule 0, 0, 5, 10, 15, 20, 30, 60    TestingClientConsensusDownloadSchedule 0, 0, 5, 10, 15, 20, 30, 60    TestingBridge
 DownloadSchedule 60, 30, 30, 60    TestingClientMaxIntervalWithoutRequest 5 seconds    TestingDirConnectionMaxStall 30 seconds    TestingConsensusMaxDownloadTries 80    TestingDescriptorMaxDownloadTries 80    TestingMicrodescMaxDownloadTries 80    TestingCertMaxDownloadTries 80    TestingEnableConnBwEvent 1    TestingEnableCellStatsEvent 1    TestingEnableTbEmptyEvent 1
+|    ServerDNSAllowBrokenConfig 1
+|    DirAllowPrivateAddresses 1
+|    EnforceDistinctSubnets 0
+|    AssumeReachable 1
+|    AuthDirMaxServersPerAddr 0
+|    AuthDirMaxServersPerAuthAddr 0
+|    ClientDNSRejectInternalAddresses 0
+|    ClientRejectInternalAddresses 0
+|    CountPrivateBandwidth 1
+|    ExitPolicyRejectPrivate 0
+|    ExtendAllowPrivateAddresses 1
+|    V3AuthVotingInterval 5 minutes
+|    V3AuthVoteDelay 20 seconds
+|    V3AuthDistDelay 20 seconds
+|    MinUptimeHidServDirectoryV2 0 seconds
+|    TestingV3AuthInitialVotingInterval 5 minutes
+|    TestingV3AuthInitialVoteDelay 20 seconds
+|    TestingV3AuthInitialDistDelay 20 seconds
+|    TestingAuthDirTimeToLearnReachability 0 minutes
+|    TestingEstimatedDescriptorPropagationTime 0 minutes
+|    TestingServerDownloadSchedule 0, 0, 0, 5, 10, 15, 20, 30, 60
+|    TestingClientDownloadSchedule 0, 0, 5, 10, 15, 20, 30, 60
+|    TestingServerConsensusDownloadSchedule 0, 0, 5, 10, 15, 20, 30, 60
+|    TestingClientConsensusDownloadSchedule 0, 0, 5, 10, 15, 20, 30, 60
+|    TestingBridgeDownloadSchedule 60, 30, 30, 60
+|    TestingClientMaxIntervalWithoutRequest 5 seconds
+|    TestingDirConnectionMaxStall 30 seconds
+|    TestingConsensusMaxDownloadTries 80
+|    TestingDescriptorMaxDownloadTries 80
+|    TestingMicrodescMaxDownloadTries 80
+|    TestingCertMaxDownloadTries 80
+|    TestingEnableConnBwEvent 1
+|    TestingEnableCellStatsEvent 1
+|    TestingEnableTbEmptyEvent 1
 config_options.TestingV3AuthInitialVotingInterval.category Testing
 config_options.TestingV3AuthInitialVotingInterval.name TestingV3AuthInitialVotingInterval
 config_options.TestingV3AuthInitialVotingInterval.usage N minutes|hours
diff --git a/stem/manual.py b/stem/manual.py
index ee800c4..5e34020 100644
--- a/stem/manual.py
+++ b/stem/manual.py
@@ -198,6 +198,7 @@ def download_man_page(path = None, file_handle = None, url = GITWEB_MANUAL_URL,
     if file_handle:
       with open(manual_path, 'rb') as manual_file:
         shutil.copyfileobj(manual_file, file_handle)
+        file_handle.flush()
   finally:
     shutil.rmtree(dirpath)
 





More information about the tor-commits mailing list