commit 2f3efa9e55e75e5fc8b1171887bf7276a96cf17f Author: Damian Johnson atagar@torproject.org Date: Sun Aug 16 17:22:12 2020 -0700
Remove all trac links
Trac is read-only and will be discontinued at some point. I moved our open tickets to GitHub but we'll lose closed tickets when it's gone. Definitely a loss, but not too bad - our commit history archives their most useful information. --- docs/_templates/layout.html | 2 +- docs/change_log.rst | 239 +++++++++++----------- docs/faq.rst | 9 +- docs/roles.py | 18 -- docs/tutorials/examples/outdated_relays.rst | 4 +- run_tests.py | 2 +- stem/__init__.py | 2 - stem/connection.py | 12 +- stem/control.py | 17 +- stem/descriptor/__init__.py | 8 +- stem/descriptor/extrainfo_descriptor.py | 2 +- stem/descriptor/microdescriptor.py | 2 +- stem/descriptor/networkstatus.py | 4 +- stem/manual.py | 4 +- stem/response/getconf.py | 2 +- stem/util/proc.py | 4 +- stem/util/system.py | 3 +- test/integ/connection/authentication.py | 4 +- test/integ/control/controller.py | 4 +- test/integ/descriptor/remote.py | 4 +- test/integ/process.py | 2 +- test/integ/socket/control_message.py | 2 +- test/task.py | 1 - test/unit/descriptor/bandwidth_file.py | 2 +- test/unit/descriptor/networkstatus/document_v3.py | 4 +- test/unit/descriptor/server_descriptor.py | 4 +- test/unit/util/connection.py | 4 +- 27 files changed, 158 insertions(+), 207 deletions(-)
diff --git a/docs/_templates/layout.html b/docs/_templates/layout.html index b6d24c3b..2f79c785 100644 --- a/docs/_templates/layout.html +++ b/docs/_templates/layout.html @@ -47,7 +47,7 @@ <li><a href="{{ pathto('api') }}#utilities">Utilities</a></li> </ul> </li> - <li><a href="https://trac.torproject.org/projects/tor/wiki/doc/stem">Development</a> + <li>Development <ul> <li><a href="{{ pathto('faq') }}">FAQ</a></li> <li><a href="{{ pathto('change_log') }}">Change Log</a></li> diff --git a/docs/change_log.rst b/docs/change_log.rst index ca7aeba7..580714c7 100644 --- a/docs/change_log.rst +++ b/docs/change_log.rst @@ -78,9 +78,9 @@ Version 1.8 (December 29th, 2019)
* Added :func:`~stem.control.Controller.get_start_time` method to the :class:`~stem.control.Controller` * Added :func:`~stem.control.Controller.get_uptime` method to the :class:`~stem.control.Controller` - * Controller events could fail to be delivered in a timely fashion (:trac:`27173`) - * Adjusted :func:`~stem.control.Controller.get_microdescriptors` fallback to also use '.new' cache files (:trac:`28508`) - * ExitPolicies could raise TypeError when read concurrently (:trac:`29899`) + * Controller events could fail to be delivered in a timely fashion + * Adjusted :func:`~stem.control.Controller.get_microdescriptors` fallback to also use '.new' cache files + * ExitPolicies could raise TypeError when read concurrently * Moved the *arrived_at* attribute from :class:`~stem.response.event.Event` to :class:`~stem.response.__init__.ControlMessage` * **STALE_DESC** :data:`~stem.Flag` (:spec:`d14164d`) * **DORMANT** and **ACTIVE** :data:`~stem.Signal` (:spec:`4421149`) @@ -89,38 +89,38 @@ Version 1.8 (December 29th, 2019)
* **Descriptors**
- * Added the `stem.descriptor.collector <api/descriptor/collector.html>`_ module (:trac:`17979`) - * Added `v3 hidden service descriptor support <api/descriptor/hidden_service.html>`_ (:trac:`31369`) - * `Bandwidth file support <api/descriptor/bandwidth_file.html>`_ (:trac:`29056`) + * Added the `stem.descriptor.collector <api/descriptor/collector.html>`_ module + * Added `v3 hidden service descriptor support <api/descriptor/hidden_service.html>`_ + * `Bandwidth file support <api/descriptor/bandwidth_file.html>`_ * `stem.descriptor.remote <api/descriptor/remote.html>`_ methods now raise :class:`stem.DownloadFailed` - * Check Ed25519 validity though the cryptography module rather than PyNaCl (:trac:`22022`) - * Download compressed descriptors by default (:trac:`29186`) + * Check Ed25519 validity though the cryptography module rather than PyNaCl + * Download compressed descriptors by default * Added :class:`~stem.descriptor.Compression` class * Added :func:`stem.descriptor.remote.get_microdescriptors` - * Added :func:`stem.descriptor.remote.get_bandwidth_file` (:trac:`26902`) - * Added :class:`~stem.descriptor.networkstatus.DetachedSignature` parsing (:trac:`28495`) - * Added :func:`~stem.descriptor.__init__.Descriptor.from_str` method (:trac:`28450`) - * Added :func:`~stem.descriptor.__init__.Descriptor.type_annotation` method (:trac:`28397`) - * Added :func:`~stem.descriptor.networkstatus.NetworkStatusDocument.digest` method (:trac:`28398`) - * Added the **hash_type** and **encoding** arguments to `ServerDescriptor <api/descriptor/server_descriptor.html#stem.descriptor.server_descriptor.ServerDescriptor.digest>`_ and `ExtraInfo's <api/descriptor/extrainfo_descriptor.html#stem.descriptor.extrainfo_descriptor.ExtraInfoDescriptor.digest>`_ digest methods (:trac:`28398`) + * Added :func:`stem.descriptor.remote.get_bandwidth_file` + * Added :class:`~stem.descriptor.networkstatus.DetachedSignature` parsing + * Added :func:`~stem.descriptor.__init__.Descriptor.from_str` method + * Added :func:`~stem.descriptor.__init__.Descriptor.type_annotation` method + * Added :func:`~stem.descriptor.networkstatus.NetworkStatusDocument.digest` method + * Added the **hash_type** and **encoding** arguments to `ServerDescriptor <api/descriptor/server_descriptor.html#stem.descriptor.server_descriptor.ServerDescriptor.digest>`_ and `ExtraInfo's <api/descriptor/extrainfo_descriptor.html#stem.descriptor.extrainfo_descriptor.ExtraInfoDescriptor.digest>`_ digest methods * Added the network status vote's new bandwidth_file_digest attribute (:spec:`1b686ef`) - * Added :func:`~stem.descriptor.networkstatus.NetworkStatusDocumentV3.is_valid` and :func:`~stem.descriptor.networkstatus.NetworkStatusDocumentV3.is_fresh` methods (:trac:`28448`) + * Added :func:`~stem.descriptor.networkstatus.NetworkStatusDocumentV3.is_valid` and :func:`~stem.descriptor.networkstatus.NetworkStatusDocumentV3.is_fresh` methods * Replaced :func:`~stem.descriptor.router_status_entry.RouterStatusEntryMicroV3` hex encoded **digest** attribute with a base64 encoded **microdescriptor_digest** - * Replaced the **digest** attribute of :class:`~stem.descriptor.microdescriptor.Microdescriptor` with a method by the same name (:trac:`28398`) + * Replaced the **digest** attribute of :class:`~stem.descriptor.microdescriptor.Microdescriptor` with a method by the same name * Default the **version_flavor** attribute of :class:`~stem.descriptor.networkstatus.NetworkStatusDocumentV3` to 'ns' (:spec:`d97f8d9`) - * DescriptorDownloader crashed if **use_mirrors** is set (:trac:`28393`) + * DescriptorDownloader crashed if **use_mirrors** is set * Renamed stem.descriptor.hidden_service_descriptor to stem.descriptor.hidden_service * Don't download from Serge, a bridge authority that frequently timeout - * Updated dizum authority's address (:trac:`31406`) + * Updated dizum authority's address
* **Client**
- * Sockets with ORPorts errored if responses exceeded a hardcoded buffer size (:trac:`28961`) + * Sockets with ORPorts errored if responses exceeded a hardcoded buffer size
* **Utilities**
* :func:`~stem.util.tor_tools.is_valid_hidden_service_address` now provides *true* if a v3 hidden servie address - * Fixed 'invalid escape sequence' python 3.6 warnings (:trac:`27270`) + * Fixed 'invalid escape sequence' python 3.6 warnings
* **Website**
@@ -128,7 +128,7 @@ Version 1.8 (December 29th, 2019) * Added NetBSD to our `download page <download.html>`_ * Describe `advanced listener usage <tutorials/tortoise_and_the_hare.html#advanced-listeners>`_ * Exemplify `manual SAFECOOKIE authentication <faq.html#i-m-using-safe-cookie-authentication>`_ - * `Update PyPI links https://packaging.python.org/guides/migrating-to-pypi-org/`_ (:trac:`30137`) + * `Update PyPI links https://packaging.python.org/guides/migrating-to-pypi-org/`_
* **Interpreter**
@@ -147,16 +147,16 @@ and the `stem.directory module <api/directory.html>`_.
* **Controller**
- * Listener exceptions and malformed events no longer break further event processing (:trac:`27053`) - * Documented v3 hidden service support (:trac:`25124`, :spec:`6bd0a69`) + * Listener exceptions and malformed events no longer break further event processing + * Documented v3 hidden service support (:spec:`6bd0a69`) * Added the stem.control.MALFORMED_EVENTS event listener constant * Added support for limiting the maximum number of streams for :func:`~stem.control.Controller.create_ephemeral_hidden_service` (:spec:`2fcb1c2`) - * Added a timeout argument to :class:`~stem.control.Controller` methods that could await a response (:trac:`26056`) + * Added a timeout argument to :class:`~stem.control.Controller` methods that could await a response * Added a close_output argument to :class:`~stem.process.launch_tor` * :func:`stem.connection.connect` crashed if its port argument was a string - * More reliable ExitPolicy resolution (:trac:`25739`) - * Fixed cache invalidation when another contorller calls SETCONF (:trac:`25821`) - * :func:`~stem.control.COntroller.create_hidden_service` failed when creating services with v2 options (:trac:`27446`) + * More reliable ExitPolicy resolution + * Fixed cache invalidation when another contorller calls SETCONF + * :func:`~stem.control.COntroller.create_hidden_service` failed when creating services with v2 options * :func:`~stem.control.Controller.get_info` commonly raised :class:`stem.ProtocolError` when it should provide a :class:`stem.OperationFailed` * :func:`~stem.control.Controller.get_microdescriptors` now reads microdescriptors from the control port rather than disk when available (:spec:`b5396d5`) * Added the delivered_read, delivered_written, overhead_read, and overhead_written attributes to :class:`~stem.response.events.CircuitBandwidthEvent` (:spec:`fbb38ec`) @@ -176,28 +176,28 @@ and the `stem.directory module <api/directory.html>`_. * Added the *orport_v6* attribute to the :class:`~stem.directory.Authority` class * Added server descriptor's new is_hidden_service_dir attribute * Added the network status vote's new bandwidth_file_headers attribute (:spec:`84591df`) - * Added the microdescriptor router status entry's new or_addresses attribute (:trac:`26405`, :spec:`fdc8f3e`) + * Added the microdescriptor router status entry's new or_addresses attribute (:spec:`fdc8f3e`) * Don't retry downloading descriptors when we've timed out * Don't download from tor26, an authority that frequently timeout - * Replaced Bifroest bridge authority with Serge (:trac:`26771`) + * Replaced Bifroest bridge authority with Serge * `stem.descriptor.remote <api/descriptor/remote.html>`_ now consistently defaults **fall_back_to_authority** to false * Deprecated `stem.descriptor.export <api/descriptor/export.html>`_. If you use it please `let us know https://www.atagar.com/contact/`_. * Added :func:`~stem.descriptor.remote.their_server_descriptor` * Added the reply_headers attribute to :class:`~stem.descriptor.remote.Query` * Supplying a User-Agent when downloading descriptors - * Reduced maximum descriptors fetched by the remote module to match tor's new limit (:trac:`24743`) - * Consensus **shared_randomness_*_reveal_count** attributes undocumented, and unavailable if retrieved before their corresponding shared_randomness_*_value attribute (:trac:`25046`) + * Reduced maximum descriptors fetched by the remote module to match tor's new limit + * Consensus **shared_randomness_*_reveal_count** attributes undocumented, and unavailable if retrieved before their corresponding shared_randomness_*_value attribute * Allow 'proto' line to have blank values (:spec:`a8455f4`)
* **Utilities**
- * Fixed PyPy compatibility (:trac:`26207`) - * Python 3.6+ syntax error if test_tools.py imported (:trac:`26739`) + * Fixed PyPy compatibility + * Python 3.6+ syntax error if test_tools.py imported * Connection information from proc limited to 10,000 results * Include attribute types in most equality checks and hashes * Cache hash values of immutable classes * More performant string concatenation `via bytearrays https://docs.python.org/3/faq/programming.html#what-is-the-most-efficient-way-to-concatenate-many-strings-together`_ - * Functions using lru_cache could fail with a KeyError on Python 3.5 (:trac:`26412`) + * Functions using lru_cache could fail with a KeyError on Python 3.5
* **Website**
@@ -207,7 +207,7 @@ and the `stem.directory module <api/directory.html>`_. * Added a `relay connection summary example <tutorials/examples/relay_connections.html>`_
* **Version 1.7.1** (December 26th, 2018) - :func:`~stem.process.launch_tor` - compatibility with an upcoming log format change (:trac:`28731`) + compatibility with an upcoming log format change
.. _version_1.6:
@@ -219,48 +219,48 @@ Year long accumulation of fixes and improvements in support of the `Nyx 2.0 rele * **Controller**
* :func:`~stem.process.launch_tor` raised a ValueError if invoked when outside the main thread - * Failure to authenticate could raise an improper response or hang (:trac:`22679`) - * Renamed :class:`~stem.response.events.ConnectionBandwidthEvent` type attribute to conn_type to avoid conflict with parent class (:trac:`21774`) + * Failure to authenticate could raise an improper response or hang + * Renamed :class:`~stem.response.events.ConnectionBandwidthEvent` type attribute to conn_type to avoid conflict with parent class * Added 'force' argument to :func:`~stem.control.Controller.save_conf` (:spec:`5c82d5e`) * Added the QUERY_NO_HSDIR :data:`~stem.HSDescReason` and recognizing unknown HSDir results (:spec:`1412d79`) * Added the GUARD_WAIT :data:`~stem.CircStatus` (:spec:`6446210`) * Unable to use cookie auth when path includes wide characters (chinese, japanese, etc) - * Tor change caused :func:`~stem.control.Controller.list_ephemeral_hidden_services` to provide empty strings if unset (:trac:`21329`) + * Tor change caused :func:`~stem.control.Controller.list_ephemeral_hidden_services` to provide empty strings if unset * Better error message when :func:`~stem.control.Controller.set_conf` fails due to an option being immutable - * :func:`~stem.control.Controller.get_ports` didn't provide ports for many representations of localhost (:trac:`24085`) + * :func:`~stem.control.Controller.get_ports` didn't provide ports for many representations of localhost * :func:`~stem.control.Controller.is_geoip_unavailable` now determines if database is available right away * Added the time attribute to :class:`~stem.response.events.StreamBwEvent` and :class:`~stem.response.events.CircuitBandwidthEvent` (:spec:`00b9daf`) * Added the consensus_content attribute to :class:`~stem.response.events.NewConsensusEvent` and deprecated its 'desc' - * Deprecated :func:`~stem.control.Controller.is_geoip_unavailable`, this is now available via getinfo instead (:trac:`23237`, :spec:`dc973f8`) - * Deprecated :class:`~stem.respose.events.AuthDirNewDescEvent` (:trac:`22377`, :spec:`6e887ba`) + * Deprecated :func:`~stem.control.Controller.is_geoip_unavailable`, this is now available via getinfo instead (:spec:`dc973f8`) + * Deprecated :class:`~stem.respose.events.AuthDirNewDescEvent` (:spec:`6e887ba`) * Caching manual information as sqlite rather than stem.util.conf, making :func:`stem.manual.Manual.from_cache` about ~8x faster * Added :func:`~stem.manual.database` to get a cursor for the manual cache * Failed to parse torrcs without a port on ipv6 exit policy entries * Resilient to 'Tor' prefix in 'GETINFO version' result (:spec:`c5ff1b1`) - * Added a **all_extra** parameter to :class:`stem.version.Version` and support for multiple parenthetical entries (:trac:`22110`, :spec:`b50917d`) - * Setting 'UseMicrodescriptors 1' in your torrc caused :func:`~stem.control.Controller.get_network_statuses` to error (:trac:`24110`) + * Added a **all_extra** parameter to :class:`stem.version.Version` and support for multiple parenthetical entries (:spec:`b50917d`) + * Setting 'UseMicrodescriptors 1' in your torrc caused :func:`~stem.control.Controller.get_network_statuses` to error * Closing controller connection faster when under heavy event load * Better messaging when unable to connect to tor on FreeBSD * More succinct trace level logging
* **Descriptors**
- * Supporting `descriptor creation <tutorials/mirror_mirror_on_the_wall.html#can-i-create-descriptors>`_ (:trac:`10227`) - * Support and validation for `ed25519 certificates <api/descriptor/certificate.html>`_ (`spec https://gitweb.torproject.org/torspec.git/tree/cert-spec.txt`_, :trac:`21558`) - * Added :func:`~stem.descriptor.networkstatus.NetworkStatusDocumentV3.validate_signatures` to check our key certificate signatures (:trac:`11045`) - * Moved from the deprecated `pycrypto https://www.dlitz.net/software/pycrypto/`_ module to `cryptography https://pypi.org/project/cryptography/`_ for validating signatures (:trac:`21086`) + * Supporting `descriptor creation <tutorials/mirror_mirror_on_the_wall.html#can-i-create-descriptors>`_ + * Support and validation for `ed25519 certificates <api/descriptor/certificate.html>`_ (`spec https://gitweb.torproject.org/torspec.git/tree/cert-spec.txt`_) + * Added :func:`~stem.descriptor.networkstatus.NetworkStatusDocumentV3.validate_signatures` to check our key certificate signatures + * Moved from the deprecated `pycrypto https://www.dlitz.net/software/pycrypto/`_ module to `cryptography https://pypi.org/project/cryptography/`_ for validating signatures * Sped descriptor reading by ~25% by deferring defaulting when validating * Added server descriptor's new extra_info_sha256_digest attribute (:spec:`0f03581`) * Added server descriptor's new protocol attribute (:spec:`eb4fb3c`) - * Added server descriptor's new bridge_distribution attribute (:trac:`21177`) + * Added server descriptor's new bridge_distribution attribute * Added extrainfo descriptor's new padding_counts attributes (:spec:`0803997`) - * Shared randomness properties weren't being read in votes (:trac:`21102`) - * Added bastet as a new authority (:trac:`23912`) - * Updated longclaw authority's address (:trac:`23592`) + * Shared randomness properties weren't being read in votes + * Added bastet as a new authority + * Updated longclaw authority's address
* **Utilities**
- * Support connection resolution on OpenBSD using fstat (:trac:`13807`) + * Support connection resolution on OpenBSD using fstat * Added :func:`~stem.util.system.size_of` * Added :func:`~stem.util.log.is_tracing` * Added timeout argument to :func:`~stem.util.system.call` @@ -274,13 +274,13 @@ Year long accumulation of fixes and improvements in support of the `Nyx 2.0 rele
* **Interpreter**
- * Added a `'--run [command or path]' argument <tutorials/down_the_rabbit_hole.html#running-individual-commands>`_ to invoke specific commands (:trac:`21541`) - * Allowing interpreter to continue after tor shuts down (:trac:`22374`) + * Added a `'--run [command or path]' argument <tutorials/down_the_rabbit_hole.html#running-individual-commands>`_ to invoke specific commands + * Allowing interpreter to continue after tor shuts down * Interpreter buffered an unbounded number of events, leaking memory over time
* **Website**
- * Source code served by '[source]' links perpetually stale (:trac:`19521`) + * Source code served by '[source]' links perpetually stale
.. _version_1.5:
@@ -295,21 +295,21 @@ and much more. * **Controller**
* Dramatic, 300x performance improvement for reading from the control port with python 3 - * Added `stem.manual <api/manual.html>`_, which provides information available about Tor from `its manual https://www.torproject.org/docs/tor-manual.html.en`_ (:trac:`8251`) - * :func:`~stem.connection.connect` and :func:`~stem.control.Controller.from_port` now connect to both port 9051 (relay's default) and 9151 (Tor Browser's default) (:trac:`16075`) - * :class:`~stem.exit_policy.ExitPolicy` support for *accept6/reject6* and **4/6* wildcards (:trac:`16053`) + * Added `stem.manual <api/manual.html>`_, which provides information available about Tor from `its manual https://www.torproject.org/docs/tor-manual.html.en`_ + * :func:`~stem.connection.connect` and :func:`~stem.control.Controller.from_port` now connect to both port 9051 (relay's default) and 9151 (Tor Browser's default) + * :class:`~stem.exit_policy.ExitPolicy` support for *accept6/reject6* and **4/6* wildcards * Added `support for NETWORK_LIVENESS events <api/response.html#stem.response.events.NetworkLivenessEvent>`_ (:spec:`44aac63`) * Added support for basic authentication to :func:`~stem.control.Controller.create_ephemeral_hidden_service` (:spec:`c2865d9`) * Added support for non-anonymous services to :func:`~stem.control.Controller.create_ephemeral_hidden_service` (:spec:`b8fe774`) - * Added :func:`~stem.control.event_description` for getting human-friendly descriptions of tor events (:trac:`19061`) + * Added :func:`~stem.control.event_description` for getting human-friendly descriptions of tor events * Added :func:`~stem.control.Controller.reconnect` to the :class:`~stem.control.Controller` * Added :func:`~stem.control.Controller.is_set` to the :class:`~stem.control.Controller` * Added :func:`~stem.control.Controller.is_user_traffic_allowed` to the :class:`~stem.control.Controller` * Added the replica attribute to :class:`~stem.response.events.HSDescEvent` (:spec:`4989e73`) * Added the NoEdConsensus :data:`~stem.Flag` (:spec:`dc99160`) * Recognize listeners with IPv6 addresses in :func:`~stem.control.Controller.get_listeners` - * :func:`~stem.process.launch_tor` could leave a lingering process during an unexpected exception (:trac:`17946`) - * IPv6 addresses could trigger errors in :func:`~stem.control.Controller.get_listeners`, :class:`~stem.response.events.ORConnEvent`, and quite a few other things (:trac:`16174`) + * :func:`~stem.process.launch_tor` could leave a lingering process during an unexpected exception + * IPv6 addresses could trigger errors in :func:`~stem.control.Controller.get_listeners`, :class:`~stem.response.events.ORConnEvent`, and quite a few other things * Don't obscure stacktraces, most notably :class:`~stem.control.Controller` getter methods with default values * Classes with custom equality checks didn't provide a corresponding inequality method
@@ -321,25 +321,25 @@ and much more. * Support downloading microdescriptor consensus with :func:~stem.descriptor.remote.DescriptorDownloader.get_consensus` (:spec`e788b8f`) * Added consensus and vote's new shared randomness attributes (:spec:`9949f64`) * Added server descriptor's new allow_tunneled_dir_requests attribute (:spec:`8bc30d6`) - * Server descriptor validation fails with 'extra-info-digest line had an invalid value' from additions in proposal 228 (:trac:`16227`) + * Server descriptor validation fails with 'extra-info-digest line had an invalid value' from additions in proposal 228 * :class:`~stem.descriptor.server_descriptor.BridgeDescriptor` now has 'ntor_onion_key' like its unsanitized counterparts * Replaced the :class:`~stem.descriptor.microdescriptor.Microdescriptor` identifier and identifier_type attributes with an identifiers hash since it can now appear multiple times (:spec:`09ff9e2`) - * Unable to read descriptors from data directories on Windows due to their CRLF newlines (:trac:`17051`) - * TypeError under python3 when using 'use_mirrors = True' (:trac:`17083`) - * Deprecated hidden service descriptor's *introduction_points_auth* field, which was never implemented in tor (:trac:`15190`, :spec:`9c218f9`) - * Deprecated :func:`~stem.descriptor.remote.DescriptorDownloader.get_microdescriptors` as it was never implemented in tor (:trac:`9271`) - * :func:`~stem.control.Controller.get_hidden_service_descriptor` errored when provided a *servers* argument (:trac:`18401`) + * Unable to read descriptors from data directories on Windows due to their CRLF newlines + * TypeError under python3 when using 'use_mirrors = True' + * Deprecated hidden service descriptor's *introduction_points_auth* field, which was never implemented in tor (:spec:`9c218f9`) + * Deprecated :func:`~stem.descriptor.remote.DescriptorDownloader.get_microdescriptors` as it was never implemented in tor + * :func:`~stem.control.Controller.get_hidden_service_descriptor` errored when provided a *servers* argument * Fixed parsing of server descriptor's *allow-single-hop-exits* and *caches-extra-info* lines * Bracketed IPv6 addresses were mistreated as being invalid content * Better validation for non-ascii descriptor content - * Updated dannenberg's v3ident (:trac:`17906`) - * Removed urras as a directory authority (:trac:`19271`) + * Updated dannenberg's v3ident + * Removed urras as a directory authority
* **Utilities**
- * IPv6 support in :func:`~stem.util.connection.get_connections` when resolving with proc, netstat, lsof, or ss (:trac:`18079`) - * The 'ss' connection resolver didn't work on Gentoo (:trac:`18079`) - * Recognize IPv4-mapped IPv6 addresses in our utils (:trac:`18079`) + * IPv6 support in :func:`~stem.util.connection.get_connections` when resolving with proc, netstat, lsof, or ss + * The 'ss' connection resolver didn't work on Gentoo + * Recognize IPv4-mapped IPv6 addresses in our utils * Allow :func:`stem.util.conf.Config.set` to remove values when provided with a **None** value * Support prefix and suffix issue strings in :func:`~stem.util.test_tools.pyflakes_issues` * Additional information when :func:`~stem.util.system.call` fails through a :class:`~stem.util.system.CallError` @@ -358,14 +358,14 @@ and much more. * **Website**
* `Comparison of our descriptor parsing libraries <tutorials/mirror_mirror_on_the_wall.html#are-there-any-other-parsing-libraries>`_ - * Example for `custom path selection for circuits <tutorials/to_russia_with_love.html#custom-path-selection>`_ (:trac:`8728`) + * Example for `custom path selection for circuits <tutorials/to_russia_with_love.html#custom-path-selection>`_ * Example for `persisting ephemeral hidden service keys <tutorials/over_the_river.html#ephemeral-hidden-services>`_
* **Version 1.5.3** (December 5th, 2016) - including tests and site in the release tarball
* **Version 1.5.4** (January 4th, 2017) - drop validation of the order of - fields in the tor consensus (:trac:`21059`) + fields in the tor consensus
.. _version_1.4:
@@ -382,45 +382,44 @@ unvalidated content is lazy-loaded, `greatly improving our performance https://lists.torproject.org/pipermail/tor-dev/2015-January/008211.html`_.
And last, Stem also now runs directly under both python2 and python3 without a -2to3 conversion (:trac:`14075`)! +2to3 conversion!
* **Controller**
* Added :class:`~stem.control.Controller` methods for a new style of hidden services that don't touch disk: :func:`~stem.control.Controller.list_ephemeral_hidden_services`, :func:`~stem.control.Controller.create_ephemeral_hidden_service`, and :func:`~stem.control.Controller.remove_ephemeral_hidden_service` (:spec:`f5ff369`) - * Added :func:`~stem.control.Controller.get_hidden_service_descriptor` and `support for HS_DESC_CONTENT events <api/response.html#stem.response.events.HSDescContentEvent>`_ (:trac:`14847`, :spec:`aaf2434`) - * :func:`~stem.process.launch_tor_with_config` avoids writing a temporary torrc to disk if able (:trac:`13865`) - * :class:`~stem.response.events.CircuitEvent` support for the new SOCKS_USERNAME and SOCKS_PASSWORD arguments (:trac:`14555`, :spec:`2975974`) - * The 'strict' argument of :func:`~stem.exit_policy.ExitPolicy.can_exit_to` didn't behave as documented (:trac:`14314`) + * Added :func:`~stem.control.Controller.get_hidden_service_descriptor` and `support for HS_DESC_CONTENT events <api/response.html#stem.response.events.HSDescContentEvent>`_ (:spec:`aaf2434`) + * :func:`~stem.process.launch_tor_with_config` avoids writing a temporary torrc to disk if able + * :class:`~stem.response.events.CircuitEvent` support for the new SOCKS_USERNAME and SOCKS_PASSWORD arguments (:spec:`2975974`) + * The 'strict' argument of :func:`~stem.exit_policy.ExitPolicy.can_exit_to` didn't behave as documented * Threads spawned for status change listeners were never joined on, potentially causing noise during interpreter shutdown - * Added support for specifying the authentication type and client names in :func:`~stem.control.Controller.create_hidden_service` (:trac:`14320`) + * Added support for specifying the authentication type and client names in :func:`~stem.control.Controller.create_hidden_service`
* **Descriptors**
- * Lazy-loading descriptors, improving performance by 25-70% depending on what type it is (:trac:`14011`) - * Added `support for hidden service descriptors <api/descriptor/hidden_service.html>`_ (:trac:`15004`) + * Lazy-loading descriptors, improving performance by 25-70% depending on what type it is + * Added `support for hidden service descriptors <api/descriptor/hidden_service.html>`_ * When reading sanitised bridge descriptors (server or extrainfo), :func:`~stem.descriptor.__init__.parse_file` treated the whole file as a single descriptor * The :class:`~stem.descriptor.networkstatus.DirectoryAuthority` 'fingerprint' attribute was actually its 'v3ident' * Added consensus' new package attribute (:spec:`ab64534`) * Added extra info' new hs_stats_end, hs_rend_cells, hs_rend_cells_attr, hs_dir_onions_seen, and hs_dir_onions_seen_attr attributes (:spec:`ddb630d`) - * Updating Faravahar's address (:trac:`14487`) + * Updating Faravahar's address
* **Utilities**
- * Windows support for connection resolution (:trac:`14844`) - * :func:`stem.util.connection.port_usage` always returned None (:trac:`14046`) + * Windows support for connection resolution + * :func:`stem.util.connection.port_usage` always returned None * :func:`~stem.util.test_tools.stylistic_issues` and :func:`~stem.util.test_tools.pyflakes_issues` now provide namedtuples that also includes the line * Added :func:`stem.util.system.tail` - * Proc connection resolution could fail on especially busy systems (:trac:`14048`) + * Proc connection resolution could fail on especially busy systems
* **Website**
- * Added support and `instructions for tox <faq.html#how-do-i-test-compatibility-with-multiple-python-versions>`_ (:trac:`14091`) - * Added OSX to our `download page <download.html>`_ (:trac:`8588`) - * Updated our twitter example to work with the service's 1.1 API (:trac:`9003`) + * Added support and `instructions for tox <faq.html#how-do-i-test-compatibility-with-multiple-python-versions>`_ + * Added OSX to our `download page <download.html>`_ + * Updated our twitter example to work with the service's 1.1 API
* **Version 1.4.1** (May 18th, 2015) - fixed issue where descriptors couldn't - be unpickled (:trac:`16054`) and a parsing issue for router status entry - bandwidth lines (:trac:`16048`) + be unpickled and a parsing issue for router status entry bandwidth lines
.. _version_1.3:
@@ -435,26 +434,26 @@ brings see `Nathan Willis' LWN article http://lwn.net/Articles/632914/`_.
* **Controller**
- * Added :class:`~stem.control.Controller` methods to more easily work with hidden service configurations: :func:`~stem.control.Controller.get_hidden_service_conf`, :func:`~stem.control.Controller.set_hidden_service_conf`, :func:`~stem.control.Controller.create_hidden_service`, and :func:`~stem.control.Controller.remove_hidden_service` (:trac:`12533`) + * Added :class:`~stem.control.Controller` methods to more easily work with hidden service configurations: :func:`~stem.control.Controller.get_hidden_service_conf`, :func:`~stem.control.Controller.set_hidden_service_conf`, :func:`~stem.control.Controller.create_hidden_service`, and :func:`~stem.control.Controller.remove_hidden_service` * Added :func:`~stem.control.Controller.get_accounting_stats` to the :class:`~stem.control.Controller` * Added :func:`~stem.control.Controller.get_effective_rate` to the :class:`~stem.control.Controller` * Added :func:`~stem.control.BaseController.connection_time` to the :class:`~stem.control.BaseController` * Changed :func:`~stem.control.Controller.get_microdescriptor`, :func:`~stem.control.Controller.get_server_descriptor`, and :func:`~stem.control.Controller.get_network_status` to get our own descriptor if no fingerprint or nickname is provided. - * Added :class:`~stem.exit_policy.ExitPolicy` methods for more easily handling 'private' policies (the `default prefix https://www.torproject.org/docs/tor-manual.html.en#ExitPolicyRejectPrivate`_) and the defaultly appended suffix. This includes :func:`~stem.exit_policy.ExitPolicy.has_private`, :func:`~stem.exit_policy.ExitPolicy.strip_private`, :func:`~stem.exit_policy.ExitPolicy.has_default`, and :func:`~stem.exit_policy.ExitPolicy.strip_default` :class:`~stem.exit_policy.ExitPolicy` methods in addition to :func:`~stem.exit_policy.ExitPolicyRule.is_private` and :func:`~stem.exit_policy.ExitPolicyRule.is_default` for the :class:`~stem.exit_policy.ExitPolicyRule`. (:trac:`10107`) + * Added :class:`~stem.exit_policy.ExitPolicy` methods for more easily handling 'private' policies (the `default prefix https://www.torproject.org/docs/tor-manual.html.en#ExitPolicyRejectPrivate`_) and the defaultly appended suffix. This includes :func:`~stem.exit_policy.ExitPolicy.has_private`, :func:`~stem.exit_policy.ExitPolicy.strip_private`, :func:`~stem.exit_policy.ExitPolicy.has_default`, and :func:`~stem.exit_policy.ExitPolicy.strip_default` :class:`~stem.exit_policy.ExitPolicy` methods in addition to :func:`~stem.exit_policy.ExitPolicyRule.is_private` and :func:`~stem.exit_policy.ExitPolicyRule.is_default` for the :class:`~stem.exit_policy.ExitPolicyRule`. * Added the reason attribute to :class:`~stem.response.events.HSDescEvent` (:spec:`7908c8d`) - * :func:`~stem.process.launch_tor_with_config` could cause a "Too many open files" OSError if called too many times (:trac:`13141`) + * :func:`~stem.process.launch_tor_with_config` could cause a "Too many open files" OSError if called too many times * The :func:`~stem.control.Controller.get_exit_policy` method errored if tor couldn't determine our external address * The Controller's methods for retrieving descriptors could raise unexpected ValueErrors if tor didn't have any descriptors available - * Throwing a new :class:`~stem.DescriptorUnavailable` exception type when the :class:`~stem.control.Controller` can't provide the descriptor for a relay (:trac:`13879`) + * Throwing a new :class:`~stem.DescriptorUnavailable` exception type when the :class:`~stem.control.Controller` can't provide the descriptor for a relay
* **Descriptors**
- * Improved speed for parsing consensus documents by around 40% (:trac:`12859` and :trac:`13821`) + * Improved speed for parsing consensus documents by around 40% * Don't fail if consensus method 1 is not present, as it is no longer required (:spec:`fc8a6f0`) - * Include '*.new' files when reading from a Tor data directory (:trac:`13756`) + * Include '*.new' files when reading from a Tor data directory * Updated the authorities we list, `replacing turtles with longclaw https://lists.torproject.org/pipermail/tor-talk/2014-November/035650.html`_ and `updating gabelmoo's address https://lists.torproject.org/pipermail/tor-talk/2014-September/034898.html`_ * Noting if authorities are also a bandwidth authority or not - * Microdescriptor validation issues could result in an AttributeError (:trac:`13904`) + * Microdescriptor validation issues could result in an AttributeError
* **Utilities**
@@ -471,9 +470,9 @@ brings see `Nathan Willis' LWN article http://lwn.net/Articles/632914/`_. * **Website**
* Tutorial for `hidden services <tutorials/over_the_river.html>`_ - * Example for `writing descriptors to disk and reading them back <tutorials/mirror_mirror_on_the_wall.html#saving-and-loading-descriptors>`_ (:trac:`13774`) - * Added Gentoo to our `download page <download.html>`_ and handful of testing revisions for that platform (:trac:`13904`) - * Tests for our tutorial examples (:trac:`11335`) + * Example for `writing descriptors to disk and reading them back <tutorials/mirror_mirror_on_the_wall.html#saving-and-loading-descriptors>`_ + * Added Gentoo to our `download page <download.html>`_ and handful of testing revisions for that platform + * Tests for our tutorial examples * Revised `GitWeb https://gitweb.torproject.org/`_ urls to work after its upgrade
.. _version_1.2: @@ -490,22 +489,22 @@ among numerous other improvements and fixes. * New, better :func:`~stem.connection.connect` function that deprecates :func:`~stem.connection.connect_port` and :func:`~stem.connection.connect_socket_file` * Added :func:`~stem.control.Controller.is_newnym_available` and :func:`~stem.control.Controller.get_newnym_wait` methods to the :class:`~stem.control.Controller` * Added :func:`~stem.control.Controller.get_ports` and :func:`~stem.control.Controller.get_listeners` methods to the :class:`~stem.control.Controller` - * Added :func:`~stem.control.Controller.drop_guards` (:trac:`10032`, :spec:`7c6c7fc`) + * Added :func:`~stem.control.Controller.drop_guards` (:spec:`7c6c7fc`) * Added the id attribute to :class:`~stem.response.events.ORConnEvent` (:spec:`6f2919a`) * Added `support for CONN_BW events <api/response.html#stem.response.events.ConnectionBandwidthEvent>`_ (:spec:`6f2919a`) * Added `support for CIRC_BW events <api/response.html#stem.response.events.CircuitBandwidthEvent>`_ (:spec:`6f2919a`) * Added `support for CELL_STATS events <api/response.html#stem.response.events.CellStatsEvent>`_ (:spec:`6f2919a`) * Added `support for TB_EMPTY events <api/response.html#stem.response.events.TokenBucketEmptyEvent>`_ (:spec:`6f2919a`) - * Added `support for HS_DESC events <api/response.html#stem.response.events.HSDescEvent>`_ (:trac:`10807`, :spec:`a67ac4d`) - * Changed :func:`~stem.control.Controller.get_network_status` and :func:`~stem.control.Controller.get_network_statuses` to provide :class:`~stem.descriptor.router_status_entry.RouterStatusEntryMicroV3` if Tor is using microdescriptors (:trac:`7646`) + * Added `support for HS_DESC events <api/response.html#stem.response.events.HSDescEvent>`_ (:spec:`a67ac4d`) + * Changed :func:`~stem.control.Controller.get_network_status` and :func:`~stem.control.Controller.get_network_statuses` to provide :class:`~stem.descriptor.router_status_entry.RouterStatusEntryMicroV3` if Tor is using microdescriptors * The :func:`~stem.connection.connect_port` and :func:`~stem.connection.connect_socket_file` didn't properly mark the Controller it returned as being authenticated, causing event listening among other things to fail * The :func:`~stem.control.Controller.add_event_listener` method couldn't accept event types that Stem didn't already recognize * The :class:`~stem.exit_policy.ExitPolicy` class couldn't be pickled - * Tor instances spawned with :func:`~stem.process.launch_tor` and :func:`~stem.process.launch_tor_with_config` could hang due to unread stdout content, we now close stdout and stderr once tor finishes bootstrapping (:trac:`9862`) + * Tor instances spawned with :func:`~stem.process.launch_tor` and :func:`~stem.process.launch_tor_with_config` could hang due to unread stdout content, we now close stdout and stderr once tor finishes bootstrapping
* **Descriptors**
- * Added tarfile support to :func:`~stem.descriptor.__init__.parse_file` (:trac:`10977`) + * Added tarfile support to :func:`~stem.descriptor.__init__.parse_file` * Added microdescriptor's new identifier and identifier_type attributes (:spec:`22cda72`)
* **Utilities** @@ -525,10 +524,10 @@ among numerous other improvements and fixes. * Made FAQ and other sections quite a bit more succinct.
* **Version 1.2.2** (June 7th, 2014) - fixed an issue where the stem.util.conf - module would fail under Python 2.6 with an AttributeError (:trac:`12223`) + module would fail under Python 2.6 with an AttributeError
* **Version 1.2.1** (June 3rd, 2014) - fixed an issue where descriptor - parsersing would fail under Python 3.x with a TypeError (:trac:`12185`) + parsersing would fail under Python 3.x with a TypeError
.. _version_1.1:
@@ -542,27 +541,27 @@ and a myriad of smaller improvements and fixes.
* **Controller**
- * :func:`~stem.control.Controller.get_network_status` and :func:`~stem.control.Controller.get_network_statuses` now provide v3 rather than v2 directory information (:trac:`7953`, :spec:`d2b7ebb`) - * :class:`~stem.response.events.AddrMapEvent` support for the new CACHED argument (:trac:`8596`, :spec:`25b0d43`) - * :func:`~stem.control.Controller.attach_stream` could encounter an undocumented 555 response (:trac:`8701`, :spec:`7286576`) - * :class:`~stem.descriptor.server_descriptor.RelayDescriptor` digest validation was broken when dealing with non-unicode content with Python 3 (:trac:`8755`) - * The :class:`~stem.control.Controller` use of cached content wasn't thread safe (:trac:`8607`) + * :func:`~stem.control.Controller.get_network_status` and :func:`~stem.control.Controller.get_network_statuses` now provide v3 rather than v2 directory information (:spec:`d2b7ebb`) + * :class:`~stem.response.events.AddrMapEvent` support for the new CACHED argument (:spec:`25b0d43`) + * :func:`~stem.control.Controller.attach_stream` could encounter an undocumented 555 response (:spec:`7286576`) + * :class:`~stem.descriptor.server_descriptor.RelayDescriptor` digest validation was broken when dealing with non-unicode content with Python 3 + * The :class:`~stem.control.Controller` use of cached content wasn't thread safe * Added :func:`~stem.control.Controller.get_user` method to the :class:`~stem.control.Controller` * Added :func:`~stem.control.Controller.get_pid` method to the :class:`~stem.control.Controller` - * :class:`~stem.response.events.StreamEvent` didn't recognize IPv6 addresses (:trac:`9181`) - * :func:`~stem.control.Controller.get_conf` mistakenly cached hidden service related options (:trac:`9792`) + * :class:`~stem.response.events.StreamEvent` didn't recognize IPv6 addresses + * :func:`~stem.control.Controller.get_conf` mistakenly cached hidden service related options * Added `support for TRANSPORT_LAUNCHED events <api/response.html#stem.response.events.TransportLaunchedEvent>`_ (:spec:`48f6dd0`)
* **Descriptors**
* Added the `stem.descriptor.remote <api/descriptor/remote.html>`_ module. - * Added support for `TorDNSEL exit lists <api/descriptor/tordnsel.html>`_ (:trac:`8255`) - * The :class:`~stem.descriptor.reader.DescriptorReader` mishandled relative paths (:trac:`8815`) + * Added support for `TorDNSEL exit lists <api/descriptor/tordnsel.html>`_ + * The :class:`~stem.descriptor.reader.DescriptorReader` mishandled relative paths
* **Utilities**
- * Connection resolution via the :func:`~stem.util.connection.get_connections` function (:trac:`7910`) - * :func:`~stem.util.system.set_process_name` inserted spaces between characters (:trac:`8631`) + * Connection resolution via the :func:`~stem.util.connection.get_connections` function + * :func:`~stem.util.system.set_process_name` inserted spaces between characters * :func:`~stem.util.system.pid_by_name` can now pull for all processes with a given name * :func:`~stem.util.system.call` ignored the subprocess' exit status * Added :func:`stem.util.system.name_by_pid` @@ -590,7 +589,7 @@ and a myriad of smaller improvements and fixes. https://www.atagar.com/transfer/stem_frontpage/after.png`_).
* **Version 1.1.1** (November 9th, 2013) - fixed an issue where imports of stem.util.system - would fail with an ImportError for pwd under Windows (:trac:`10072`) + would fail with an ImportError for pwd under Windows
.. _version_1.0:
diff --git a/docs/faq.rst b/docs/faq.rst index 50c9786a..bed7833c 100644 --- a/docs/faq.rst +++ b/docs/faq.rst @@ -550,14 +550,7 @@ know if you get stuck or would like to discuss anything! #. When you have something that you would like to contribute back do the following...
* If you don't already have a publicly accessible Stem repository then set one up. `GitHub https://github.com/`_ in particular is great for this. - * File a `trac ticket https://trac.torproject.org/projects/tor/newticket`_, the only fields you'll need are... - - * Summary: short description of your change - * Description: longer description and a link to your repository with either the git commits or branch that has your change - * Type: 'defect' if this is a bug fix and 'enhancement' otherwise - * Priority: rough guess at the priority of your change - * Component: Core Tor / Stem - + * `File a ticket https://github.com/torproject/stem/issues/`_ or pull request. * I'll review the change and give suggestions. When we're both happy with it I'll push your change to the official repository.
.. _how_do_i_run_the_tests: diff --git a/docs/roles.py b/docs/roles.py index c7f883e8..e587b03c 100644 --- a/docs/roles.py +++ b/docs/roles.py @@ -1,12 +1,9 @@ import re
-from docutils.utils import unescape from docutils.nodes import reference -from docutils.parsers.rst.roles import set_classes
STEM_TICKET_URL = 'https://github.com/torproject/stem/issues/%7Bticket%7D' TOR_TICKET_URL = 'https://gitlab.torproject.org/tpo/core/tor/-/issues/%7Bticket%7D' -TRAC_URL = 'https://trac.torproject.org/%7Bticket%7D' SPEC_URL = 'https://gitweb.torproject.org/torspec.git/commit/?id=%7Bcommit%7D'
@@ -39,20 +36,6 @@ def role_ticket(name, rawtext, argument, lineno, inliner, options = {}, content )
-def role_trac(name, rawtext, argument, lineno, inliner, options = {}, content = []): - """ - Aliases :trac:`1234` to 'https://trac.torproject.org/1234'. - """ - - if not argument.isdigit() or int(argument) <= 0: - return error('Invalid ticket number: %s' % argument, rawtext, lineno, inliner) - - return ( - [reference(rawtext, 'ticket %s' % argument, refuri = TRAC_URL.format(ticket = argument), **options)], - [], - ) - - def role_spec(name, rawtext, argument, lineno, inliner, options = {}, content = []): """ Aliases :spec:`25b0d43` to 'https://gitweb.torproject.org/torspec.git/commit/?id=25b0d43'. @@ -82,5 +65,4 @@ def setup(app): """
app.add_role('ticket', role_ticket) - app.add_role('trac', role_trac) app.add_role('spec', role_spec) diff --git a/docs/tutorials/examples/outdated_relays.rst b/docs/tutorials/examples/outdated_relays.rst index 72b14b2d..e7b37318 100644 --- a/docs/tutorials/examples/outdated_relays.rst +++ b/docs/tutorials/examples/outdated_relays.rst @@ -5,8 +5,8 @@ List Outdated Relays :target: ../double_double_toil_and_trouble.html
Time marches on. Tor makes new releases, and at some point needs to drop -support for old ones. Below is the script we used on :trac:`9476` to reach out -to relay operators that needed to upgrade. +support for old ones. Below is the script we used on :ticket:`tor-9476` to +reach out to relay operators that needed to upgrade.
.. literalinclude:: /_static/example/outdated_relays.py :language: python diff --git a/run_tests.py b/run_tests.py index 5218008f..e1390b76 100755 --- a/run_tests.py +++ b/run_tests.py @@ -58,7 +58,7 @@ NEW_CAPABILITIES_FOUND = """\ Your version of Tor has capabilities stem currently isn't taking advantage of. If you're running the latest version of stem then please file a ticket on:
- https://trac.torproject.org/projects/tor/wiki/doc/stem/bugs + https://github.com/torproject/stem/issues/
New capabilities are: """ diff --git a/stem/__init__.py b/stem/__init__.py index 5e45aab0..6a67b4e3 100644 --- a/stem/__init__.py +++ b/stem/__init__.py @@ -410,8 +410,6 @@ Library for working with the tor process.
Purpose for a tor connection. Tor may provide types not in this enum.
- The meaning behind these values is a bit unclear, pending :trac:`10086`. - .. versionadded:: 1.2.0
=============== =========== diff --git a/stem/connection.py b/stem/connection.py index 5c8f8dbe..0dbbcfbf 100644 --- a/stem/connection.py +++ b/stem/connection.py @@ -505,7 +505,7 @@ async def authenticate(controller: Union[stem.control.BaseController, stem.socke
All of the authentication methods tor will accept are new and unrecognized. Please upgrade stem and, if that doesn't work, file a - ticket on 'trac.torproject.org' and I'd be happy to add support. + ticket.
* :class:`stem.connection.MissingPassword`
@@ -572,7 +572,7 @@ async def authenticate(controller: Union[stem.control.BaseController, stem.socke **\*** In practice it is highly unusual for this to occur, being more of a theoretical possibility rather than something you should expect. It's fine to treat these as errors. If you have a use case where this commonly - happens, please file a ticket on 'trac.torproject.org'. + happens, please file a ticket.
In the future new :class:`~stem.connection.AuthenticationFailure` subclasses may be added to allow for better error handling. @@ -743,7 +743,7 @@ async def authenticate_password(controller: Union[stem.control.BaseController, s :func:`~stem.connection.authenticate`, we may mistakenly raise a PasswordAuthRejected rather than IncorrectPassword. This is because we rely on tor's error messaging which is liable to change in future versions - (:trac:`4817`). + (:ticket:`tor-4817`).
This can authenticate to either a :class:`~stem.control.BaseController` or :class:`~stem.socket.ControlSocket`. @@ -766,7 +766,7 @@ async def authenticate_password(controller: Union[stem.control.BaseController, s
# Escapes quotes. Tor can include those in the password hash, in which case # it expects escaped quotes from the controller. For more information see... - # https://trac.torproject.org/projects/tor/ticket/4600 + # https://gitlab.torproject.org/tpo/core/tor/-/issues/4600
password = password.replace('"', '\"')
@@ -820,7 +820,7 @@ async def authenticate_cookie(controller: Union[stem.control.BaseController, ste :class:`~stem.connection.CookieAuthRejected` rather than :class:`~stem.connection.IncorrectCookieValue`. This is because we rely on tor's error messaging which is liable to change in future versions - (:trac:`4817`). + (:ticket:`tor-4817`).
This can authenticate to either a :class:`~stem.control.BaseController` or :class:`~stem.socket.ControlSocket`. @@ -1147,8 +1147,6 @@ def _read_cookie(cookie_path: str, is_safecookie: bool) -> bytes: # Without this a malicious socket could, for instance, claim that # '~/.bash_history' or '~/.ssh/id_rsa' was its authentication cookie to trick # us into reading it for them with our current permissions. - # - # https://trac.torproject.org/projects/tor/ticket/4303
auth_cookie_size = os.path.getsize(cookie_path)
diff --git a/stem/control.py b/stem/control.py index dfd764ba..7578f2b5 100644 --- a/stem/control.py +++ b/stem/control.py @@ -1340,7 +1340,7 @@ class Controller(BaseController): .. versionchanged:: 1.7.0 Policies retrieved through 'GETINFO exit-policy/full' rather than parsing the user's torrc entries. This should be more reliable for - some edge cases. (:trac:`25739`) + some edge cases.
:param default: response if the query fails
@@ -1951,7 +1951,7 @@ class Controller(BaseController): # TODO: We should iterate over the descriptors as they're read from the # socket rather than reading the whole thing into memory. # - # https://trac.torproject.org/8248 + # https://github.com/torproject/stem/issues/30
desc_content = await self.get_info('desc/all-recent', get_bytes = True)
@@ -2041,7 +2041,7 @@ class Controller(BaseController): # TODO: We should iterate over the descriptors as they're read from the # socket rather than reading the whole thing into memory. # - # https://trac.torproject.org/8248 + # https://github.com/torproject/stem/issues/30
desc_content = await self.get_info('ns/all', get_bytes = True)
@@ -2069,7 +2069,7 @@ class Controller(BaseController): If **await_result** is **True** then this blocks until we either receive the descriptor or the request fails. If **False** this returns right away.
- **This method only supports v2 hidden services, not v3.** (:trac:`25417`) + **This method only supports v2 hidden services, not v3.** (:ticket:`tor-25417`)
.. versionadded:: 1.4.0
@@ -2387,8 +2387,8 @@ class Controller(BaseController):
# Tor provides some config options even if they haven't been set... # - # https://trac.torproject.org/projects/tor/ticket/2362 - # https://trac.torproject.org/projects/tor/ticket/17909 + # https://gitlab.torproject.org/tpo/core/tor/-/issues/2362 + # https://gitlab.torproject.org/tpo/core/tor/-/issues/17909
default_lines = ( 'Log notice stdout', @@ -2744,7 +2744,7 @@ class Controller(BaseController): # creating a service with one of those we should explicitly create a v2 # service instead. # - # https://trac.torproject.org/projects/tor/ticket/27446 + # https://gitlab.torproject.org/tpo/core/tor/-/issues/27446
for path in conf: if 'HiddenServiceAuthorizeClient' in conf[path] or 'RendPostPeriod' in conf[path]: @@ -2853,8 +2853,7 @@ class Controller(BaseController): .. versionadded:: 1.4.0
.. versionchanged:: 1.6.0 - Tor change caused this to start providing empty strings if unset - (:trac:`21329`). + Tor change caused this to start providing empty strings if unset.
:param default: response if the query fails :param our_services: include services created with this controller diff --git a/stem/descriptor/__init__.py b/stem/descriptor/__init__.py index 5ffefcbc..df947cf7 100644 --- a/stem/descriptor/__init__.py +++ b/stem/descriptor/__init__.py @@ -397,8 +397,7 @@ def parse_file(descriptor_file: Union[str, BinaryIO, tarfile.TarFile, IO[bytes]] # The tor descriptor specifications do not provide a reliable method for # identifying a descriptor file's type and version so we need to guess # based on its filename. Metrics descriptors, however, can be identified - # by an annotation on their first line... - # https://trac.torproject.org/5651 + # by an annotation on their first line.
initial_position = descriptor_file.tell() # type: ignore first_line = stem.util.str_tools._to_unicode(descriptor_file.readline().strip()) # type: ignore @@ -503,9 +502,6 @@ def _parse_metrics_file(descriptor_type: str, major_version: int, minor_version: for desc in stem.descriptor.microdescriptor._parse_file(descriptor_file, validate = validate, **kwargs): yield desc elif descriptor_type == stem.descriptor.extrainfo_descriptor.BridgeExtraInfoDescriptor.TYPE_ANNOTATION_NAME and major_version == 1: - # version 1.1 introduced a 'transport' field... - # https://trac.torproject.org/6257 - for desc in stem.descriptor.extrainfo_descriptor._parse_file(descriptor_file, is_bridge = True, validate = validate, **kwargs): yield desc elif descriptor_type == stem.descriptor.networkstatus.NetworkStatusDocumentV2.TYPE_ANNOTATION_NAME and major_version == 1: @@ -1493,7 +1489,7 @@ def _descriptor_components_with_extra(raw_contents: bytes, validate: bool, extra
# Some lines have an 'opt ' for backward compatibility. They should be # ignored. This prefix is being removed in... - # https://trac.torproject.org/projects/tor/ticket/5124 + # https://gitlab.torproject.org/tpo/core/tor/-/issues/5124
if line.startswith('opt '): line = line[4:] diff --git a/stem/descriptor/extrainfo_descriptor.py b/stem/descriptor/extrainfo_descriptor.py index 3b84c185..86458cdf 100644 --- a/stem/descriptor/extrainfo_descriptor.py +++ b/stem/descriptor/extrainfo_descriptor.py @@ -959,7 +959,7 @@ class RelayExtraInfoDescriptor(ExtraInfoDescriptor): # Due to a tor bug sha256 digests are calculated from the # whole descriptor rather than ommiting the signature... # - # https://trac.torproject.org/projects/tor/ticket/28415 + # https://gitlab.torproject.org/tpo/core/tor/-/issues/28415
return stem.descriptor._encode_digest(hashlib.sha256(self.get_bytes()), encoding) else: diff --git a/stem/descriptor/microdescriptor.py b/stem/descriptor/microdescriptor.py index 4967d53e..0b015ebb 100644 --- a/stem/descriptor/microdescriptor.py +++ b/stem/descriptor/microdescriptor.py @@ -196,7 +196,7 @@ class Microdescriptor(Descriptor): :var stem.exit_policy.MicroExitPolicy exit_policy_v6: **\*** exit policy for IPv6 :var hash identifiers: mapping of key types (like rsa1024 or ed25519) to their base64 encoded identity, this is only used for collision prevention - (:trac:`11743`) + (:ticket:`tor-11743`) :var dict protocols: mapping of protocols to their supported versions
**\*** attribute is required when we're parsed with validation diff --git a/stem/descriptor/networkstatus.py b/stem/descriptor/networkstatus.py index d7e541fa..f216e427 100644 --- a/stem/descriptor/networkstatus.py +++ b/stem/descriptor/networkstatus.py @@ -486,7 +486,7 @@ def _parse_dir_source_line(descriptor: 'stem.descriptor.Descriptor', entries: EN raise ValueError("The 'dir-source' line of a v2 network status document must have three values: dir-source %s" % value)
if not dir_source_comp[0]: - # https://trac.torproject.org/7055 + # https://gitlab.torproject.org/tpo/core/tor/-/issues/7055 raise ValueError("Authority's hostname can't be blank: dir-source %s" % value) elif not stem.util.connection.is_valid_ipv4_address(dir_source_comp[1]): raise ValueError("Authority's address isn't a valid IPv4 address: %s" % dir_source_comp[1]) @@ -1483,7 +1483,7 @@ def _parse_dirauth_source_line(descriptor: 'stem.descriptor.Descriptor', entries elif not stem.util.tor_tools.is_valid_fingerprint(dir_source_comp[1]): raise ValueError("Authority's v3ident is invalid: %s" % dir_source_comp[1]) elif not dir_source_comp[2]: - # https://trac.torproject.org/7055 + # https://gitlab.torproject.org/tpo/core/tor/-/issues/7055 raise ValueError("Authority's hostname can't be blank: dir-source %s" % value) elif not stem.util.connection.is_valid_ipv4_address(dir_source_comp[3]): raise ValueError("Authority's address isn't a valid IPv4 address: %s" % dir_source_comp[3]) diff --git a/stem/manual.py b/stem/manual.py index 0376d112..26249abc 100644 --- a/stem/manual.py +++ b/stem/manual.py @@ -335,9 +335,7 @@ class Manual(object):
This does not include every bit of information from the tor manual. For instance, I've excluded the 'THE CONFIGURATION FILE FORMAT' section. If - there's a part you'd find useful then `file an issue - https://trac.torproject.org/projects/tor/wiki/doc/stem/bugs`_ and we can - add it. + there's a part you'd find useful then file an issue and we can add it.
:var str name: brief description of the tor command :var str synopsis: brief tor command usage diff --git a/stem/response/getconf.py b/stem/response/getconf.py index 6c65c4ec..0463dbbe 100644 --- a/stem/response/getconf.py +++ b/stem/response/getconf.py @@ -53,7 +53,7 @@ class GetConfResponse(stem.response.ControlMessage): # Tor's CommaList and RouterList have a bug where they map to an empty # string when undefined rather than None... # - # https://trac.torproject.org/projects/tor/ticket/18263 + # https://gitlab.torproject.org/tpo/core/tor/-/issues/18263
if value == '': value = None diff --git a/stem/util/proc.py b/stem/util/proc.py index 1c23fc0d..802937b5 100644 --- a/stem/util/proc.py +++ b/stem/util/proc.py @@ -477,9 +477,7 @@ def _unpack_addr(addr: bytes) -> str: # IPv6 address
if IS_LITTLE_ENDIAN: - # Group into eight characters, then invert in pairs... - # - # https://trac.torproject.org/projects/tor/ticket/18079#comment:24 + # group into eight characters, then invert in pairs
inverted = []
diff --git a/stem/util/system.py b/stem/util/system.py index 49589c5c..b0130fb1 100644 --- a/stem/util/system.py +++ b/stem/util/system.py @@ -946,8 +946,7 @@ def cwd(pid: int) -> Optional[str]: return results[0].split(' ', 1)[1].strip()
# Use lsof as the final fallback. This is available on both Linux and is the - # only lookup method here that works for BSD... - # https://trac.torproject.org/projects/tor/ticket/4236 + # only lookup method here that works for BSD. # # flags: # a - presents the intersection of the following arguments diff --git a/test/integ/connection/authentication.py b/test/integ/connection/authentication.py index 6851e29d..a000202a 100644 --- a/test/integ/connection/authentication.py +++ b/test/integ/connection/authentication.py @@ -277,9 +277,7 @@ class TestAuthenticate(unittest.TestCase): async def test_wrong_password_with_controller(self): """ We ran into a race condition where providing the wrong password to the - Controller caused inconsistent responses. Checking for that... - - https://trac.torproject.org/projects/tor/ticket/22679 + Controller caused inconsistent responses. """
runner = test.runner.get_runner() diff --git a/test/integ/control/controller.py b/test/integ/control/controller.py index 9c077966..6cd2f4e1 100644 --- a/test/integ/control/controller.py +++ b/test/integ/control/controller.py @@ -855,7 +855,7 @@ class TestController(unittest.TestCase): async def test_set_conf_for_usebridges(self): """ Ensure we can set UseBridges=1 and also set a Bridge. This is a tor - regression check (:trac:`31945`). + regression check. """
async with await test.runner.get_runner().get_tor_controller() as controller: @@ -1571,7 +1571,7 @@ class TestController(unittest.TestCase): async def test_transition_to_relay(self): """ Transitions Tor to turn into a relay, then back to a client. This helps to - catch transition issues such as the one cited in :trac:`14901`. + catch transition issues such as the one cited in :ticket:`tor-14901`. """
async with await test.runner.get_runner().get_tor_controller() as controller: diff --git a/test/integ/descriptor/remote.py b/test/integ/descriptor/remote.py index a20f0855..e1464da5 100644 --- a/test/integ/descriptor/remote.py +++ b/test/integ/descriptor/remote.py @@ -73,7 +73,7 @@ class TestDescriptorDownloader(unittest.TestCase):
for auth in consensus.directory_authorities: if auth.nickname == 'dannenberg-legacy': - continue # skip due to https://trac.torproject.org/projects/tor/ticket/17906 + continue # skip due to https://gitlab.torproject.org/tpo/core/tor/-/issues/17906
stem_auth = stem.directory.Authority.from_cache().get(auth.nickname)
@@ -82,7 +82,7 @@ class TestDescriptorDownloader(unittest.TestCase):
for attr in ('v3ident', 'or_port', 'dir_port'): if auth.nickname == 'moria1' and attr == 'address': - continue # skip due to https://trac.torproject.org/projects/tor/ticket/14955 + continue # skip due to https://gitlab.torproject.org/tpo/core/tor/-/issues/14955
if getattr(auth, attr) != getattr(stem_auth, attr): self.fail('%s has %s %s, but we expected %s' % (auth.nickname, attr, getattr(auth, attr), getattr(stem_auth, attr))) diff --git a/test/integ/process.py b/test/integ/process.py index fd47c493..d5c7f2f0 100644 --- a/test/integ/process.py +++ b/test/integ/process.py @@ -571,7 +571,7 @@ class TestProcess(unittest.TestCase): # tor polls for the process every fifteen seconds so this may take a # while... # - # https://trac.torproject.org/projects/tor/ticket/21281 + # https://gitlab.torproject.org/tpo/core/tor/-/issues/21281
start_time = time.time()
diff --git a/test/integ/socket/control_message.py b/test/integ/socket/control_message.py index 8511877b..99d64f16 100644 --- a/test/integ/socket/control_message.py +++ b/test/integ/socket/control_message.py @@ -121,7 +121,7 @@ class TestControlMessage(unittest.TestCase):
# We can't be certain of the order, and there may be extra config-text # entries as per... - # https://trac.torproject.org/projects/tor/ticket/2362 + # https://gitlab.torproject.org/tpo/core/tor/-/issues/2362 # # so we'll just check that the response is a superset of our config
diff --git a/test/task.py b/test/task.py index b2957e65..b21141c7 100644 --- a/test/task.py +++ b/test/task.py @@ -118,7 +118,6 @@ def _check_platform_version(): extra = platform.release() elif platform.system() == 'Linux' and hasattr(platform, 'linux_distribution'): # TODO: platform.linux_distribution() was removed in python 3.8 - # https://trac.torproject.org/projects/tor/ticket/30847
extra = ' '.join(platform.linux_distribution()[:2]) else: diff --git a/test/unit/descriptor/bandwidth_file.py b/test/unit/descriptor/bandwidth_file.py index 5e56f9d2..00539251 100644 --- a/test/unit/descriptor/bandwidth_file.py +++ b/test/unit/descriptor/bandwidth_file.py @@ -293,7 +293,7 @@ class TestBandwidthFile(unittest.TestCase): def test_version_position(self): """ Our 'version' header must be in the second position if validated, but - otherwise doesn't matter. (:trac:`29539`) + otherwise doesn't matter. """
desc = BandwidthFile.from_str(WRONG_VERSION_POSITION) diff --git a/test/unit/descriptor/networkstatus/document_v3.py b/test/unit/descriptor/networkstatus/document_v3.py index 3e3b6953..61198079 100644 --- a/test/unit/descriptor/networkstatus/document_v3.py +++ b/test/unit/descriptor/networkstatus/document_v3.py @@ -970,9 +970,7 @@ DnN5aFtYKiTc19qIC7Nmo+afPdDEf0MlJvEOP5EWl3w= self.assertEqual([], document.get_unrecognized_lines())
# Prior to conensus method 9 votes can still have a signature in their - # footer... - # - # https://trac.torproject.org/7932 + # footer.
document = NetworkStatusDocumentV3.create( { diff --git a/test/unit/descriptor/server_descriptor.py b/test/unit/descriptor/server_descriptor.py index 867f98ba..80822554 100644 --- a/test/unit/descriptor/server_descriptor.py +++ b/test/unit/descriptor/server_descriptor.py @@ -261,9 +261,7 @@ Qlx9HNCqCY877ztFRC624ja2ql6A2hBcuoYMbkHjcQ4= self.assertEqual([], desc.get_unrecognized_lines())
# Make sure that we can get a string representation for this descriptor - # (having non-unicode content risks a UnicodeEncodeError)... - # - # https://trac.torproject.org/8265 + # (having non-unicode content risks a UnicodeEncodeError).
self.assertTrue(isinstance(str(desc), str))
diff --git a/test/unit/util/connection.py b/test/unit/util/connection.py index 6f8d8ab8..848ce989 100644 --- a/test/unit/util/connection.py +++ b/test/unit/util/connection.py @@ -320,9 +320,7 @@ class TestConnection(unittest.TestCase): """ Checks the get_connections function with the ss resolver results on IPv6 conections. This also checks with the output from a hardened Gentoo system - which has subtle differences... - - https://trac.torproject.org/projects/tor/ticket/18079 + which has subtle differences. """
expected = [
tor-commits@lists.torproject.org