Merge branch 'maint-0.3.2' of https://git.torproject.org/tor into maint-0.3.2

This commit is contained in:
David Goulet 2018-09-11 15:36:48 -04:00
commit 9c83cd1993
74 changed files with 26299 additions and 44176 deletions

View File

@ -1,10 +1,207 @@
language: c
## Comment out the compiler list for now to allow an explicit build
## matrix.
# compiler:
# - gcc
# - clang
cache:
ccache: true
## cargo: true
directories:
- $HOME/.cargo
## where we point CARGO_TARGET_DIR in all our cargo invocations
- $TRAVIS_BUILD_DIR/src/rust/target
compiler:
- gcc
- clang
os:
- linux
- osx
## The build matrix in the following stanza expands into builds for each
## OS and compiler.
env:
global:
## The Travis CI environment allows us two cores, so let's use both.
- MAKEFLAGS="-j 2"
## We turn on hardening by default
## Also known as --enable-fragile-hardening in 0.3.0.3-alpha and later
- HARDENING_OPTIONS="--enable-expensive-hardening"
## We turn off asciidoc by default, because it's slow
- ASCIIDOC_OPTIONS="--disable-asciidoc"
matrix:
## We want to use each build option at least once
##
## We don't list default variable values, because we set the defaults
## in global (or the default is unset)
-
## We turn off hardening for Rust builds, because they are incompatible,
## and it's going to take a while for them to be fixed. See:
## https:/trac.torproject.org/projects/tor/ticket/25386
## https:/trac.torproject.org/projects/tor/ticket/26398
- RUST_OPTIONS="--enable-rust" RUST_DEPENDENCIES=true HARDENING_OPTIONS=""
matrix:
## include creates builds with gcc, linux, sudo: false
include:
## We include a single coverage build with the best options for coverage
- env: COVERAGE_OPTIONS="--enable-coverage" HARDENING_OPTIONS=""
## We only want to check these build option combinations once
## (they shouldn't vary by compiler or OS)
## We run rust and coverage with hardening off, which seems like enough
# - env: HARDENING_OPTIONS=""
## We check asciidoc with distcheck, to make sure we remove doc products
- env: DISTCHECK="yes" ASCIIDOC_OPTIONS=""
## Check rust online without hardening (see above), and without distcheck
## Distcheck doesn't work with rust in 0.3.2
## TOR_RUST_DEPENDENCIES is spelt RUST_DEPENDENCIES in 0.3.2
- env: RUST_OPTIONS="--enable-rust --enable-cargo-online-mode" HARDENING_OPTIONS=""
## Uncomment to allow the build to report success (with non-required
## sub-builds continuing to run) if all required sub-builds have
## succeeded. This is somewhat buggy currently: it can cause
## duplicate notifications and prematurely report success if a
## single sub-build has succeeded. See
## https://github.com/travis-ci/travis-ci/issues/1696
# fast_finish: true
## Careful! We use global envs, which makes it hard to exclude or
## allow failures by env:
## https://docs.travis-ci.com/user/customizing-the-build#matching-jobs-with-allow_failures
exclude:
## Clang doesn't work in containerized builds, see below.
- compiler: clang
sudo: false
## Non-containerized gcc are slow and redundant.
- compiler: gcc
sudo: required
## gcc on OSX is less useful, because the default compiler is clang.
- compiler: gcc
os: osx
## gcc on Linux with no env is redundant, because all the custom builds use
## gcc on Linux
- compiler: gcc
os: linux
env:
## offline rust builds for gcc on Linux are redundant, because we do an
## online rust build for gcc on Linux
- compiler: gcc
os: linux
## TOR_RUST_DEPENDENCIES is spelt RUST_DEPENDENCIES in 0.3.2
env: RUST_OPTIONS="--enable-rust" RUST_DEPENDENCIES=true HARDENING_OPTIONS=""
## We don't need sudo. (The "apt:" stanza after this allows us to not need
## sudo; otherwise, we would need it for getting dependencies.)
##
## But we use "sudo: required" to force non-containerized builds, working
## around a Travis CI environment issue: clang LeakAnalyzer fails
## because it requires ptrace and the containerized environment no
## longer allows ptrace.
## https://github.com/travis-ci/travis-ci/issues/9033
##
## In the matrix above, we exclude redundant combinations.
sudo:
- false
- required
## (Linux only) Use the latest Linux image (Ubuntu Trusty)
dist: trusty
## (Linux only) Download our dependencies
addons:
apt:
packages:
## Required dependencies
- libevent-dev
- zlib1g-dev
## Optional dependencies
- libcap-dev
- liblzma-dev
- libscrypt-dev
- libseccomp-dev
## zstd doesn't exist in Ubuntu Trusty
#- libzstd
## Conditional dependencies
## Always installed, so we don't need sudo
- asciidoc
- docbook-xsl
- docbook-xml
- xmlto
## (OSX only) Use the default OSX image
## See https://docs.travis-ci.com/user/reference/osx#os-x-version
## Default is Xcode 9.4 on macOS 10.13 as of August 2018
#osx_image: xcode9.4
before_install:
## If we're on OSX, homebrew usually needs to be updated first
- if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then brew update; fi
## We might be upgrading some useless packages, but that's better than missing an upgrade
- if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then brew upgrade; fi
## Create empty rust directories for non-Rust builds, so caching succeeds
- if [[ "$RUST_OPTIONS" == "" ]]; then mkdir -p $HOME/.cargo $TRAVIS_BUILD_DIR/src/rust/target; fi
install:
## If we're on OSX use brew to install ccache (ccache is automatically installed on Linux)
- if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then brew install ccache; fi
- if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then export PATH="/usr/local/opt/ccache/libexec:$PATH"; fi
## If we're on OSX use brew to install required dependencies (for Linux, see the "apt:" section above)
- if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then brew install libevent; fi
- if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then brew install openssl; fi
- if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then brew install pkg-config; fi
## macOS comes with zlib by default, so the homebrew install is keg-only
# - if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then brew install zlib; fi
## If we're on OSX also install the optional dependencies
- if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then brew install libscrypt; fi
- if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then brew install xz; fi
- if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then brew install zstd; fi
## If we're on OSX, OpenSSL is keg-only, so tor 0.2.9 and later need to be configured --with-openssl-dir= to build
- if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then OPENSSL_OPTIONS=--with-openssl-dir=`brew --prefix openssl`; fi
## Install conditional features
## Install coveralls
- if [[ "$COVERAGE_OPTIONS" != "" ]]; then pip install --user cpp-coveralls; fi
## If we're on OSX, and using asciidoc, install asciidoc
- if [[ "$ASCIIDOC_OPTIONS" == "" ]] && [[ "$TRAVIS_OS_NAME" == "osx" ]]; then brew install asciidoc; fi
- if [[ "$ASCIIDOC_OPTIONS" == "" ]] && [[ "$TRAVIS_OS_NAME" == "osx" ]]; then brew install xmlto; fi
- if [[ "$ASCIIDOC_OPTIONS" == "" ]] && [[ "$TRAVIS_OS_NAME" == "osx" ]]; then export XML_CATALOG_FILES="/usr/local/etc/xml/catalog"; fi
## If we're using Rust, download rustup
- if [[ "$RUST_OPTIONS" != "" ]]; then curl -Ssf -o rustup.sh https://sh.rustup.rs; fi
## Install the stable channels of rustc and cargo and setup our toolchain environment
- if [[ "$RUST_OPTIONS" != "" ]]; then sh rustup.sh -y --default-toolchain stable; fi
- if [[ "$RUST_OPTIONS" != "" ]]; then source $HOME/.cargo/env; fi
## If we're testing rust builds in offline-mode, then set up our vendored dependencies
- if [[ "$RUST_DEPENDENCIES" == "true" ]]; then export RUST_DEPENDENCIES=$PWD/src/ext/rust/crates; fi
##
## Finally, list installed package versions
- if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then dpkg-query --show; fi
- if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then brew list --versions; fi
## Get some info about rustup, rustc and cargo
- if [[ "$RUST_OPTIONS" != "" ]]; then which rustup; fi
- if [[ "$RUST_OPTIONS" != "" ]]; then which rustc; fi
- if [[ "$RUST_OPTIONS" != "" ]]; then which cargo; fi
- if [[ "$RUST_OPTIONS" != "" ]]; then rustup --version; fi
- if [[ "$RUST_OPTIONS" != "" ]]; then rustc --version; fi
- if [[ "$RUST_OPTIONS" != "" ]]; then cargo --version; fi
script:
- ./autogen.sh
- CONFIGURE_FLAGS="$ASCIIDOC_OPTIONS $COVERAGE_OPTIONS $HARDENING_OPTIONS $OPENSSL_OPTIONS $RUST_OPTIONS --enable-fatal-warnings --disable-silent-rules"
- echo "Configure flags are $CONFIGURE_FLAGS"
- ./configure $CONFIGURE_FLAGS
## We run `make check` because that's what https://jenkins.torproject.org does.
- if [[ "$DISTCHECK" == "" ]]; then make check; fi
- if [[ "$DISTCHECK" != "" ]]; then make distcheck DISTCHECK_CONFIGURE_FLAGS="$CONFIGURE_FLAGS"; fi
after_failure:
## configure will leave a log file with more details of config failures.
## But the log is too long for travis' rendered view, so tail it.
- tail -1000 config.log || echo "tail failed"
## `make check` will leave a log file with more details of test failures.
- if [[ "$DISTCHECK" == "" ]]; then cat test-suite.log || echo "cat failed"; fi
## `make distcheck` puts it somewhere different.
- if [[ "$DISTCHECK" != "" ]]; then make show-distdir-testlog || echo "make failed"; fi
after_success:
## If this build was one that produced coverage, upload it.
- if [[ "$COVERAGE_OPTIONS" != "" ]]; then coveralls -b . --exclude src/test --exclude src/trunnel --gcov-options '\-p'; fi
notifications:
irc:
@ -18,137 +215,3 @@ notifications:
email:
on_success: never
on_failure: change
os:
- linux
## Uncomment the following line to also run the entire build matrix on OSX.
## This will make your CI builds take roughly ten times longer to finish.
# - osx
## Use the Ubuntu Trusty images.
dist: trusty
## We don't need sudo. (The "apt:" stanza after this allows us to not need sudo;
## otherwise, we would need it for getting dependencies.)
##
## We override this in the explicit build matrix to work around a
## Travis CI environment regression
## https://github.com/travis-ci/travis-ci/issues/9033
sudo: false
## (Linux only) Download our dependencies
addons:
apt:
packages:
## Required dependencies
- libevent-dev
- libseccomp2
- zlib1g-dev
## Optional dependencies
- liblzma-dev
- libscrypt-dev
## zstd doesn't exist in Ubuntu Trusty
#- libzstd
## The build matrix in the following two stanzas expands into four builds (per OS):
##
## * with GCC, with Rust
## * with GCC, without Rust
## * with Clang, with Rust
## * with Clang, without Rust
env:
global:
## The Travis CI environment allows us two cores, so let's use both.
- MAKEFLAGS="-j 2"
matrix:
## Leave at least one entry here or Travis seems to generate a
## matrix entry with empty matrix environment variables. Leaving
## more than one entry causes unwanted matrix entries with
## unspecified compilers.
- RUST_OPTIONS="--enable-rust --enable-cargo-online-mode"
# - RUST_OPTIONS=""
matrix:
## Uncomment to allow the build to report success (with non-required
## sub-builds continuing to run) if all required sub-builds have
## succeeded. This is somewhat buggy currently: it can cause
## duplicate notifications and prematurely report success if a
## single sub-build has succeeded. See
## https://github.com/travis-ci/travis-ci/issues/1696
# fast_finish: true
## Uncomment the appropriate lines below to allow the build to
## report success even if some less-critical sub-builds fail and it
## seems likely to take a while for someone to fix it. Currently
## Travis CI doesn't distinguish "all builds succeeded" from "some
## non-required sub-builds failed" except on the individual build's
## page, which makes it somewhat annoying to detect from the
## branches and build history pages. See
## https://github.com/travis-ci/travis-ci/issues/8716
allow_failures:
# - env: RUST_OPTIONS="--enable-rust" TOR_RUST_DEPENDENCIES=true
# - env: RUST_OPTIONS="--enable-rust --enable-cargo-online-mode
# - compiler: clang
## Create explicit matrix entries to work around a Travis CI
## environment issue. Missing keys inherit from the first list
## entry under that key outside the "include" clause.
include:
- compiler: gcc
- compiler: gcc
env: RUST_OPTIONS=""
- compiler: gcc
env: COVERAGE_OPTIONS="--enable-coverage"
- compiler: gcc
env: DISTCHECK="yes"
## The "sudo: required" forces non-containerized builds, working
## around a Travis CI environment issue: clang LeakAnalyzer fails
## because it requires ptrace and the containerized environment no
## longer allows ptrace.
- compiler: clang
sudo: required
- compiler: clang
sudo: required
env: RUST_OPTIONS=""
before_install:
## If we're on OSX, homebrew usually needs to updated first
- if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then brew update ; fi
## Download rustup
- if [[ "$RUST_OPTIONS" != "" ]]; then curl -Ssf -o rustup.sh https://sh.rustup.rs; fi
- if [[ "$COVERAGE_OPTIONS" != "" ]]; then pip install --user cpp-coveralls; fi
install:
## If we're on OSX use brew to install required dependencies (for Linux, see the "apt:" section above)
- if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then { brew outdated openssl || brew upgrade openssl; }; fi
- if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then { brew outdated libevent || brew upgrade libevent; }; fi
- if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then { brew outdated pkg-config || brew upgrade pkg-config; }; fi
## If we're on OSX also install the optional dependencies
- if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then { brew outdated xz || brew upgrade xz; }; fi
- if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then { brew outdated libscrypt || brew upgrade libscrypt; }; fi
- if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then { brew outdated zstd || brew upgrade zstd; }; fi
## Install the stable channels of rustc and cargo and setup our toolchain environment
- if [[ "$RUST_OPTIONS" != "" ]]; then sh rustup.sh -y --default-toolchain stable; fi
- if [[ "$RUST_OPTIONS" != "" ]]; then source $HOME/.cargo/env; fi
## Get some info about rustc and cargo
- if [[ "$RUST_OPTIONS" != "" ]]; then which rustc; fi
- if [[ "$RUST_OPTIONS" != "" ]]; then which cargo; fi
- if [[ "$RUST_OPTIONS" != "" ]]; then rustc --version; fi
- if [[ "$RUST_OPTIONS" != "" ]]; then cargo --version; fi
script:
- ./autogen.sh
- ./configure $RUST_OPTIONS $COVERAGE_OPTIONS --disable-asciidoc --enable-fatal-warnings --disable-silent-rules --enable-fragile-hardening
## We run `make check` because that's what https://jenkins.torproject.org does.
- if [[ "$DISTCHECK" == "" ]]; then make check; fi
- if [[ "$DISTCHECK" != "" ]]; then make distcheck DISTCHECK_CONFIGURE_FLAGS="$RUST_OPTIONS $COVERAGE_OPTIONS --disable-asciidoc --enable-fatal-warnings --disable-silent-rules --enable-fragile-hardening"; fi
after_failure:
## `make check` will leave a log file with more details of test failures.
- if [[ "$DISTCHECK" == "" ]]; then cat test-suite.log; fi
## `make distcheck` puts it somewhere different.
- if [[ "$DISTCHECK" != "" ]]; then make show-distdir-testlog; fi
after_success:
## If this build was one that produced coverage, upload it.
- if [[ "$COVERAGE_OPTIONS" != "" ]]; then coveralls -b . --exclude src/test --exclude src/trunnel --gcov-options '\-p'; fi

View File

@ -123,6 +123,7 @@ test-network: need-chutney-path $(TESTING_TOR_BINARY) src/tools/tor-gencert
# Try both the BSD and the Linux ping6 syntax, because they're incompatible
test-network-all: need-chutney-path test-driver $(TESTING_TOR_BINARY) src/tools/tor-gencert
mkdir -p $(TEST_NETWORK_ALL_LOG_DIR)
rm -f $(TEST_NETWORK_ALL_LOG_DIR)/*.log $(TEST_NETWORK_ALL_LOG_DIR)/*.trs
@flavors="$(TEST_CHUTNEY_FLAVORS)"; \
if ping6 -q -c 1 -o ::1 >/dev/null 2>&1 || ping6 -q -c 1 -W 1 ::1 >/dev/null 2>&1; then \
echo "ping6 ::1 succeeded, running IPv6 flavors: $(TEST_CHUTNEY_FLAVORS_IPV6)."; \
@ -146,7 +147,7 @@ test-network-all: need-chutney-path test-driver $(TESTING_TOR_BINARY) src/tools/
$(top_srcdir)/src/test/test-network.sh $(TEST_NETWORK_WARNING_FLAGS); \
done; \
echo "Log and result files are available in $(TEST_NETWORK_ALL_LOG_DIR)."; \
! grep -q FAIL test_network_log/*.trs
! grep -q FAIL $(TEST_NETWORK_ALL_LOG_DIR)/*.trs
need-stem-path:
@if test ! -d "$$STEM_SOURCE_DIR"; then \

4
changes/27286 Normal file
View File

@ -0,0 +1,4 @@
o Minor features (directory authorities):
- Authorities no longer vote to make the subprotocol version "LinkAuth=1"
a requirement: it is unsupportable with NSS, and hasn't been needed
since Tor 0.3.0.1-alpha. Closes ticket 27286.

View File

@ -0,0 +1,4 @@
o Minor bugfixes (compilation):
- When compiling with --enable-openbsd-malloc or --enable-tcmalloc, tell
the compiler not to include the system malloc implementation. Fixes bug
20424; bugfix on 0.2.0.20-rc.

5
changes/bug25440 Normal file
View File

@ -0,0 +1,5 @@
o Minor bugfixes (linux seccomp2 sandbox):
- Fix a bug in out sandboxing rules for the openat() syscall.
Previously, no openat() call would be permitted, which would break
filesystem operations on recent glibc versions. Fixes bug 25440;
bugfix on 0.2.9.15. Diagnosis and patch from Daniel Pinto.

5
changes/bug26269 Normal file
View File

@ -0,0 +1,5 @@
o Minor bugfixes (compilation):
- Fix a compilation warning on some versions of GCC when
building code that calls routerinfo_get_my_routerinfo() twice,
assuming that the second call will succeed if the first one did.
Fixes bug 26269; bugfix on 0.2.8.2-alpha.

4
changes/bug26485 Normal file
View File

@ -0,0 +1,4 @@
o Minor bugfixes (directory authority):
- When voting for recommended versions, make sure that all of the
versions are well-formed and parsable. Fixes bug 26485; bugfix on
0.1.1.6-alpha.

3
changes/bug26497 Normal file
View File

@ -0,0 +1,3 @@
o Minor bugfixes (rust):
- Stop setting $CARGO_HOME. cargo will use the user's $CARGO_HOME, or
$HOME/.cargo by default. Fixes bug 26497; bugfix on 0.3.1.5-alpha.

View File

@ -0,0 +1,3 @@
o Minor bugfixes (rust):
- Backport test_rust.sh from master.
Fixes bug 26497; bugfix on 0.3.1.5-alpha.

4
changes/bug26785 Normal file
View File

@ -0,0 +1,4 @@
o Minor bugfixes (compilation, portability):
- Don't try to use a pragma to temporarily disable
-Wunused-const-variable if the compiler doesn't support it.
Fixes bug 26785; bugfix on 0.3.2.11.

3
changes/bug26787 Normal file
View File

@ -0,0 +1,3 @@
o Minor bugfixes (testing):
- Disable core dumps in test_bt.sh, to avoid failures in "make
distcheck". Fixes bug 26787; bugfix on 0.2.5.2-alpha.

3
changes/bug26830 Normal file
View File

@ -0,0 +1,3 @@
o Minor bugfixes (continuous integration):
- Skip an unreliable key generation test on Windows, until the underlying
issue in bug 26076 is resolved. Fixes bug 26830; bugfix on 0.2.7.3-rc.

3
changes/bug26853 Normal file
View File

@ -0,0 +1,3 @@
o Minor bugfixes (continuous integration):
- Skip an unreliable key expiration test on Windows, until the underlying
issue in bug 26076 is resolved. Fixes bug 26853; bugfix on 0.3.2.1-alpha.

4
changes/bug26924 Normal file
View File

@ -0,0 +1,4 @@
o Minor bugfixes (single onion services, Tor2web):
- Log a protocol warning when single onion services or Tor2web clients
fail to authenticate direct connections to relays.
Fixes bug 26924; bugfix on 0.2.9.1-alpha.

4
changes/bug26927 Normal file
View File

@ -0,0 +1,4 @@
o Minor bugfixes (logging):
- Improve the log message when connection initiators fail to authenticate
direct connections to relays.
Fixes bug 26927; bugfix on 0.3.0.1-alpha.

3
changes/bug26932 Normal file
View File

@ -0,0 +1,3 @@
o Minor bugfixes (onion services):
- Fix bug that causes services to not ever rotate their descriptors if they
were getting SIGHUPed often. Fixes bug 26932; bugfix on 0.3.2.1-alpha.

4
changes/bug27081 Normal file
View File

@ -0,0 +1,4 @@
o Minor bugfixes (compilation, windows):
- Don't link or search for pthreads when building for Windows, even if we
are using build environment (like mingw) that provides a pthreads
library. Fixes bug 27081; bugfix on 0.1.0.1-rc.

5
changes/bug27088 Normal file
View File

@ -0,0 +1,5 @@
o Minor bugfixes (continuous integration):
- Pass the module flags to distcheck configure, and
log the flags before running configure. (Backported
to 0.2.9 and later as a precaution.)
Fixes bug 27088; bugfix on 0.3.4.1-alpha.

3
changes/bug27090 Normal file
View File

@ -0,0 +1,3 @@
o Minor bugfixes (continuous integration):
- Build with zstd on macOS.
Fixes bug 27090; bugfix on 0.3.1.5-alpha.

3
changes/bug27093 Normal file
View File

@ -0,0 +1,3 @@
o Minor bugfixes (rust):
- Consistently use ../../.. as a fallback for $abs_top_srcdir in
test_rust.sh. Fixes bug 27093; bugfix on 0.3.4.3-alpha.

3
changes/bug27185 Normal file
View File

@ -0,0 +1,3 @@
o Minor bugfixes (Windows, compilation):
- Silence a compilation warning on MSVC 2017 and clang-cl.
Fixes bug 27185; bugfix on 0.2.2.2-alpha.

5
changes/bug27226 Normal file
View File

@ -0,0 +1,5 @@
o Minor bugfixes (testing, openssl compatibility):
- Our "tortls/cert_matches_key" unit test no longer relies on OpenSSL
internals. Previously, it relied on unsupported OpenSSL behavior in
a way that caused it to crash with OpenSSL 1.0.2p. Fixes bug 27226;
bugfix on 0.2.5.1-alpha.

3
changes/bug27295 Normal file
View File

@ -0,0 +1,3 @@
o Minor bugfixes (testing, chutney):
- Before running make test-network-all, delete old logs and test result
files, to avoid spurious failures. Fixes bug 27295; bugfix on 0.2.7.3-rc.

4
changes/bug27344 Normal file
View File

@ -0,0 +1,4 @@
o Minor features (compatibility):
- Tell OpenSSL to maintain backward compatibility with previous
RSA1024/DH1024 users in Tor. With OpenSSL 1.1.1-pre6, these ciphers
are disabled by default. Closes ticket 27344.

5
changes/bug27345 Normal file
View File

@ -0,0 +1,5 @@
o Minor bugfixes (testing):
- When running make test-network-all, use the mixed+hs-v2 network.
(A previous fix to chutney removed v3 onion services from the
mixed+hs-v23 network, so seeing "mixed+hs-v23" in tests is
confusing.) Fixes bug 27345; bugfix on 0.3.2.1-alpha.

3
changes/bug27418 Normal file
View File

@ -0,0 +1,3 @@
o Minor bugfixes (continuous integration):
- When we use echo in Travis, don't pass a --flag as the first argument.
Fixes bug 27418; bugfix on 0.3.4.7-rc.

3
changes/bug27453 Normal file
View File

@ -0,0 +1,3 @@
o Minor bugfixes (continuous integration):
- When a Travis build fails, and showing a log fails, keep trying to
show the other logs. Fixes bug 27453; bugfix on 0.3.4.7-rc.

5
changes/bug27461 Normal file
View File

@ -0,0 +1,5 @@
o Minor bugfixes (compilation):
- Stop calling SetProcessDEPPolicy() on 64-bit Windows. It is not
supported, and always fails. Some compilers warn about the function
pointer cast on 64-bit Windows.
Fixes bug 27461; bugfix on 0.2.2.23-alpha.

3
changes/bug27463 Normal file
View File

@ -0,0 +1,3 @@
o Minor bugfixes (onion services):
- Silence a spurious compiler warning in rend_client_send_introduction().
Fixes bug 27463; bugfix on 0.1.1.2-alpha.

5
changes/bug27465 Normal file
View File

@ -0,0 +1,5 @@
o Minor bugfixes (compilation):
- Silence a spurious compiler warning on the GetAdaptersAddresses
function pointer cast. This issue is already fixed by 26481 in
0.3.5 and later, by removing the lookup and cast.
Fixes bug 27465; bugfix on 0.2.3.11-alpha.

4
changes/geoip-2018-07-03 Normal file
View File

@ -0,0 +1,4 @@
o Minor features (geoip):
- Update geoip and geoip6 to the July 3 2018 Maxmind GeoLite2
Country database. Closes ticket 26674.

4
changes/geoip-2018-08-07 Normal file
View File

@ -0,0 +1,4 @@
o Minor features (geoip):
- Update geoip and geoip6 to the August 7 2018 Maxmind GeoLite2
Country database. Closes ticket 27089.

4
changes/geoip-2018-09-06 Normal file
View File

@ -0,0 +1,4 @@
o Minor features (geoip):
- Update geoip and geoip6 to the September 6 2018 Maxmind GeoLite2
Country database. Closes ticket 27631.

4
changes/task26771 Normal file
View File

@ -0,0 +1,4 @@
o Directory authority changes:
- The "Bifroest" bridge authority has been retired; the new bridge
authority is "Serge", and it is operated by George from the
TorBSD project. Closes ticket 26771.

3
changes/ticket24629 Normal file
View File

@ -0,0 +1,3 @@
o Minor features (continuous integration):
- Enable macOS builds in our Travis CI configuration.
Closes ticket 24629.

3
changes/ticket26560 Normal file
View File

@ -0,0 +1,3 @@
o Minor features (continuous integration):
- Install libcap-dev and libseccomp2-dev so these optional
dependencies get tested on Travis CI. Closes ticket 26560.

4
changes/ticket26647 Normal file
View File

@ -0,0 +1,4 @@
o Minor features (controller):
- The control port now exposes the list of HTTPTunnelPorts and
ExtOrPorts via GETINFO net/listeners/httptunnel and net/listeners/extor
respectively. Closes ticket 26647.

View File

@ -0,0 +1,3 @@
o Minor features (continuous integration, rust):
- Use cargo cache in our Travis CI configuration.
Closes ticket 26952.

View File

@ -0,0 +1,3 @@
o Minor features (continuous integration):
- Use ccache in our Travis CI configuration.
Closes ticket 26952.

3
changes/ticket27087 Normal file
View File

@ -0,0 +1,3 @@
o Minor features (continuous integration):
- Run asciidoc during Travis CI.
Implements ticket 27087.

6
changes/ticket27252 Normal file
View File

@ -0,0 +1,6 @@
o Minor features (continuous integration):
- Skip gcc on OSX in Travis CI, it's rarely used.
Skip a duplicate hardening-off build in Travis on Tor 0.2.9.
Skip gcc on Linux with default settings, because all the non-default
builds use gcc on Linux.
Implements ticket 27252.

5
changes/ticket27252-032 Normal file
View File

@ -0,0 +1,5 @@
o Minor features (continuous integration):
- Only run one online rust build in Travis, to reduce network errors.
Skip offline rust builds on Travis for Linux gcc, because they're
redundant.
Implements ticket 27252.

View File

@ -4,7 +4,7 @@ dnl Copyright (c) 2007-2017, The Tor Project, Inc.
dnl See LICENSE for licensing information
AC_PREREQ([2.63])
AC_INIT([tor],[0.3.2.10-dev])
AC_INIT([tor],[0.3.2.12-dev])
AC_CONFIG_SRCDIR([src/or/main.c])
AC_CONFIG_MACRO_DIR([m4])
@ -487,8 +487,10 @@ if test "$LIBS" != "$saved_LIBS"; then
have_rt=yes
fi
AC_SEARCH_LIBS(pthread_create, [pthread])
AC_SEARCH_LIBS(pthread_detach, [pthread])
if test "$bwin32" = "false"; then
AC_SEARCH_LIBS(pthread_create, [pthread])
AC_SEARCH_LIBS(pthread_detach, [pthread])
fi
AM_CONDITIONAL(THREADS_WIN32, test "$bwin32" = "true")
AM_CONDITIONAL(THREADS_PTHREADS, test "$bwin32" = "false")
@ -799,6 +801,7 @@ AC_CHECK_FUNCS([ \
SSL_get_client_ciphers \
SSL_get_client_random \
SSL_CIPHER_find \
SSL_CTX_set_security_level \
TLS_method
])
@ -1668,6 +1671,10 @@ fi
if test "$using_custom_malloc" = "no"; then
AC_CHECK_FUNCS(mallinfo)
fi
if test "$using_custom_malloc" = "yes"; then
# Tell the C compiler not to use the system allocator functions.
TOR_CHECK_CFLAGS([-fno-builtin-malloc -fno-builtin-realloc -fno-builtin-calloc -fno-builtin-free])
fi
# By default, we're going to assume we don't have mlockall()
# bionic and other platforms have various broken mlockall subsystems.
@ -2143,6 +2150,9 @@ dnl -Wthread-safety-precise
if test "$tor_cv_cflags__Woverlength_strings" = "yes"; then
AC_DEFINE([HAVE_CFLAG_WOVERLENGTH_STRINGS], 1, [True if we have -Woverlength-strings])
fi
if test "$tor_cv_cflags__warn_unused_const_variable_2" = "yes"; then
AC_DEFINE([HAVE_CFLAG_WUNUSED_CONST_VARIABLE], 1, [True if we have -Wunused-const-variable])
fi
if test "x$enable_fatal_warnings" = "xyes"; then
# I'd like to use TOR_CHECK_CFLAGS here, but I can't, since the

View File

@ -8,7 +8,7 @@
!include "LogicLib.nsh"
!include "FileFunc.nsh"
!insertmacro GetParameters
!define VERSION "0.3.2.10-dev"
!define VERSION "0.3.2.12-dev"
!define INSTALLER "tor-${VERSION}-win32.exe"
!define WEBSITE "https://www.torproject.org/"
!define LICENSE "LICENSE"

View File

@ -119,9 +119,10 @@ the module calls. Modules which call fewer other modules are better targets.
Strive to change the C API as little as possible.
We are currently targetting Rust nightly, *for now*. We expect this to change
moving forward, as we understand more about which nightly features we need. It
is on our TODO list to try to cultivate good standing with various distro
We are currently targetting Rust stable. (See CodingStandardsRust.md for more
details.)
It is on our TODO list to try to cultivate good standing with various distro
maintainers of `rustc` and `cargo`, in order to ensure that whatever version we
solidify on is readily available.

View File

@ -1496,7 +1496,10 @@ get_interface_addresses_win32(int severity, sa_family_t family)
goto done;
}
if (!(fn = (GetAdaptersAddresses_fn_t)
/* Cast through a void function pointer, to silence a spurious compiler
* warning on 64-bit Windows. This cast is safe, because we are casting to
* the correct type for GetAdaptersAddresses(). */
if (!(fn = (GetAdaptersAddresses_fn_t)(void(*)(void))
GetProcAddress(lib, "GetAdaptersAddresses"))) {
log_fn(severity, LD_NET, "Unable to obtain pointer to "
"GetAdaptersAddresses");

View File

@ -19,10 +19,14 @@
#include "compress_zstd.h"
#ifdef HAVE_ZSTD
#ifdef HAVE_CFLAG_WUNUSED_CONST_VARIABLE
DISABLE_GCC_WARNING(unused-const-variable)
#endif
#include <zstd.h>
#ifdef HAVE_CFLAG_WUNUSED_CONST_VARIABLE
ENABLE_GCC_WARNING(unused-const-variable)
#endif
#endif
/** Total number of bytes allocated for Zstandard state. */
static atomic_counter_t total_zstd_allocation;

View File

@ -449,7 +449,7 @@ allow_file_open(scmp_filter_ctx ctx, int use_openat, const char *file)
{
if (use_openat) {
return seccomp_rule_add_2(ctx, SCMP_ACT_ALLOW, SCMP_SYS(openat),
SCMP_CMP_STR(0, SCMP_CMP_EQ, AT_FDCWD),
SCMP_CMP(0, SCMP_CMP_EQ, (unsigned int)AT_FDCWD),
SCMP_CMP_STR(1, SCMP_CMP_EQ, file));
} else {
return seccomp_rule_add_1(ctx, SCMP_ACT_ALLOW, SCMP_SYS(open),

View File

@ -896,18 +896,20 @@ tor_tls_cert_get_key(tor_x509_cert_t *cert)
MOCK_IMPL(int,
tor_tls_cert_matches_key,(const tor_tls_t *tls, const tor_x509_cert_t *cert))
{
X509 *peercert = SSL_get_peer_certificate(tls->ssl);
tor_x509_cert_t *peer = tor_tls_get_peer_cert((tor_tls_t *)tls);
if (!peer)
return 0;
X509 *peercert = peer->cert;
EVP_PKEY *link_key = NULL, *cert_key = NULL;
int result;
if (!peercert)
return 0;
link_key = X509_get_pubkey(peercert);
cert_key = X509_get_pubkey(cert->cert);
result = link_key && cert_key && EVP_PKEY_cmp(cert_key, link_key) == 1;
X509_free(peercert);
tor_x509_cert_free(peer);
if (link_key)
EVP_PKEY_free(link_key);
if (cert_key)
@ -1170,6 +1172,12 @@ tor_tls_context_new(crypto_pk_t *identity, unsigned int key_lifetime,
if (!(result->ctx = SSL_CTX_new(SSLv23_method())))
goto error;
#endif /* defined(HAVE_TLS_METHOD) */
#ifdef HAVE_SSL_CTX_SET_SECURITY_LEVEL
/* Level 1 re-enables RSA1024 and DH1024 for compatibility with old tors */
SSL_CTX_set_security_level(result->ctx, 1);
#endif
SSL_CTX_set_options(result->ctx, SSL_OP_NO_SSLv2);
SSL_CTX_set_options(result->ctx, SSL_OP_NO_SSLv3);
@ -2639,4 +2647,3 @@ evaluate_ecgroup_for_tls(const char *ecgroup)
return ret;
}

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -8,8 +8,8 @@
"dizum orport=443 "
"v3ident=E8A9C45EDE6D711294FADF8E7951F4DE6CA56B58 "
"194.109.206.212:80 7EA6 EAD6 FD83 083C 538F 4403 8BBF A077 587D D755",
"Bifroest orport=443 bridge "
"37.218.247.217:80 1D8F 3A91 C37C 5D1C 4C19 B1AD 1D0C FBE8 BF72 D8E1",
"Serge orport=9001 bridge "
"66.111.2.131:9030 BA44 A889 E64B 93FA A2B1 14E0 2C2A 279A 8555 C533",
"gabelmoo orport=443 "
"v3ident=ED03BB616EB2F60BEC80151114BB25CEF515B226 "
"ipv6=[2001:638:a000:4140::ffff:189]:443 "

View File

@ -3295,6 +3295,14 @@ options_validate(or_options_t *old_options, or_options_t *options,
!options->RecommendedServerVersions))
REJECT("Versioning authoritative dir servers must set "
"Recommended*Versions.");
char *t;
/* Call these functions to produce warnings only. */
t = format_recommended_version_list(options->RecommendedClientVersions, 1);
tor_free(t);
t = format_recommended_version_list(options->RecommendedServerVersions, 1);
tor_free(t);
if (options->UseEntryGuards) {
log_info(LD_CONFIG, "Authoritative directory servers can't set "
"UseEntryGuards. Disabling.");
@ -8278,4 +8286,3 @@ init_cookie_authentication(const char *fname, const char *header,
tor_free(cookie_file_str);
return retval;
}

View File

@ -4162,4 +4162,3 @@ connection_edge_free_all(void)
smartlist_free(pending_entry_connections);
pending_entry_connections = NULL;
}

View File

@ -49,6 +49,7 @@
#include "proto_cell.h"
#include "reasons.h"
#include "relay.h"
#include "rendcommon.h"
#include "rephist.h"
#include "router.h"
#include "routerkeys.h"
@ -1677,10 +1678,13 @@ connection_or_client_learned_peer_id(or_connection_t *conn,
conn->identity_digest);
const int is_authority_fingerprint = router_digest_is_trusted_dir(
conn->identity_digest);
const int non_anonymous_mode = rend_non_anonymous_mode_enabled(options);
int severity;
const char *extra_log = "";
if (server_mode(options)) {
/* Relays, Single Onion Services, and Tor2web make direct connections using
* untrusted authentication keys. */
if (server_mode(options) || non_anonymous_mode) {
severity = LOG_PROTOCOL_WARN;
} else {
if (using_hardcoded_fingerprints) {
@ -1704,8 +1708,8 @@ connection_or_client_learned_peer_id(or_connection_t *conn,
}
log_fn(severity, LD_HANDSHAKE,
"Tried connecting to router at %s:%d, but RSA identity key was not "
"as expected: wanted %s + %s but got %s + %s.%s",
"Tried connecting to router at %s:%d, but RSA + ed25519 identity "
"keys were not as expected: wanted %s + %s but got %s + %s.%s",
conn->base_.address, conn->base_.port,
expected_rsa, expected_ed, seen_rsa, seen_ed, extra_log);
@ -1722,8 +1726,8 @@ connection_or_client_learned_peer_id(or_connection_t *conn,
}
if (!expected_ed_key && ed_peer_id) {
log_info(LD_HANDSHAKE, "(we had no Ed25519 ID in mind when we made this "
"connection.");
log_info(LD_HANDSHAKE, "(We had no Ed25519 ID in mind when we made this "
"connection.)");
connection_or_set_identity_digest(conn,
(const char*)rsa_peer_id, ed_peer_id);
changed_identity = 1;

View File

@ -1848,6 +1848,8 @@ getinfo_helper_listeners(control_connection_t *control_conn,
if (!strcmp(question, "net/listeners/or"))
type = CONN_TYPE_OR_LISTENER;
else if (!strcmp(question, "net/listeners/extor"))
type = CONN_TYPE_EXT_OR_LISTENER;
else if (!strcmp(question, "net/listeners/dir"))
type = CONN_TYPE_DIR_LISTENER;
else if (!strcmp(question, "net/listeners/socks"))
@ -1856,6 +1858,8 @@ getinfo_helper_listeners(control_connection_t *control_conn,
type = CONN_TYPE_AP_TRANS_LISTENER;
else if (!strcmp(question, "net/listeners/natd"))
type = CONN_TYPE_AP_NATD_LISTENER;
else if (!strcmp(question, "net/listeners/httptunnel"))
type = CONN_TYPE_AP_HTTP_CONNECT_LISTENER;
else if (!strcmp(question, "net/listeners/dns"))
type = CONN_TYPE_AP_DNS_LISTENER;
else if (!strcmp(question, "net/listeners/control"))
@ -7318,4 +7322,3 @@ control_testing_set_global_event_mask(uint64_t mask)
global_event_mask = mask;
}
#endif /* defined(TOR_UNIT_TESTS) */

View File

@ -74,7 +74,6 @@
static int routers_with_measured_bw = 0;
static void directory_remove_invalid(void);
static char *format_versions_list(config_line_t *ln);
struct authdir_config_t;
static uint32_t
dirserv_get_status_impl(const char *fp, const char *nickname,
@ -1061,8 +1060,8 @@ list_server_status_v1(smartlist_t *routers, char **router_status_out,
* allocate and return a new string containing the version numbers, in order,
* separated by commas. Used to generate Recommended(Client|Server)?Versions
*/
static char *
format_versions_list(config_line_t *ln)
char *
format_recommended_version_list(const config_line_t *ln, int warn)
{
smartlist_t *versions;
char *result;
@ -1071,6 +1070,37 @@ format_versions_list(config_line_t *ln)
smartlist_split_string(versions, ln->value, ",",
SPLIT_SKIP_SPACE|SPLIT_IGNORE_BLANK, 0);
}
/* Handle the case where a dirauth operator has accidentally made some
* versions space-separated instead of comma-separated. */
smartlist_t *more_versions = smartlist_new();
SMARTLIST_FOREACH_BEGIN(versions, char *, v) {
if (strchr(v, ' ')) {
if (warn)
log_warn(LD_DIRSERV, "Unexpected space in versions list member %s. "
"(These are supposed to be comma-separated; I'll pretend you "
"used commas instead.)", escaped(v));
SMARTLIST_DEL_CURRENT(versions, v);
smartlist_split_string(more_versions, v, NULL,
SPLIT_SKIP_SPACE|SPLIT_IGNORE_BLANK, 0);
tor_free(v);
}
} SMARTLIST_FOREACH_END(v);
smartlist_add_all(versions, more_versions);
smartlist_free(more_versions);
/* Check to make sure everything looks like a version. */
if (warn) {
SMARTLIST_FOREACH_BEGIN(versions, const char *, v) {
tor_version_t ver;
if (tor_version_parse(v, &ver) < 0) {
log_warn(LD_DIRSERV, "Recommended version %s does not look valid. "
" (I'll include it anyway, since you told me to.)",
escaped(v));
}
} SMARTLIST_FOREACH_END(v);
}
sort_version_list(versions, 1);
result = smartlist_join_strings(versions,",",0,NULL);
SMARTLIST_FOREACH(versions,char *,s,tor_free(s));
@ -2891,8 +2921,10 @@ dirserv_generate_networkstatus_vote_obj(crypto_pk_t *private_key,
}
if (options->VersioningAuthoritativeDir) {
client_versions = format_versions_list(options->RecommendedClientVersions);
server_versions = format_versions_list(options->RecommendedServerVersions);
client_versions =
format_recommended_version_list(options->RecommendedClientVersions, 0);
server_versions =
format_recommended_version_list(options->RecommendedServerVersions, 0);
}
contact = get_options()->ContactInfo;
@ -3050,16 +3082,16 @@ dirserv_generate_networkstatus_vote_obj(crypto_pk_t *private_key,
/* These are hardwired, to avoid disaster. */
v3_out->recommended_relay_protocols =
tor_strdup("Cons=1-2 Desc=1-2 DirCache=1 HSDir=1 HSIntro=3 HSRend=1 "
"Link=4 LinkAuth=1 Microdesc=1-2 Relay=2");
"Link=4 Microdesc=1-2 Relay=2");
v3_out->recommended_client_protocols =
tor_strdup("Cons=1-2 Desc=1-2 DirCache=1 HSDir=1 HSIntro=3 HSRend=1 "
"Link=4 LinkAuth=1 Microdesc=1-2 Relay=2");
"Link=4 Microdesc=1-2 Relay=2");
v3_out->required_client_protocols =
tor_strdup("Cons=1-2 Desc=1-2 DirCache=1 HSDir=1 HSIntro=3 HSRend=1 "
"Link=4 LinkAuth=1 Microdesc=1-2 Relay=2");
"Link=4 Microdesc=1-2 Relay=2");
v3_out->required_relay_protocols =
tor_strdup("Cons=1 Desc=1 DirCache=1 HSDir=1 HSIntro=3 HSRend=1 "
"Link=3-4 LinkAuth=1 Microdesc=1 Relay=1-2");
"Link=3-4 Microdesc=1 Relay=1-2");
/* We are not allowed to vote to require anything we don't have. */
tor_assert(protover_all_supported(v3_out->required_relay_protocols, NULL));
@ -4035,4 +4067,3 @@ dirserv_free_all(void)
dirserv_clear_measured_bw_cache();
}

View File

@ -154,7 +154,7 @@ char *routerstatus_format_entry(
void dirserv_free_all(void);
void cached_dir_decref(cached_dir_t *d);
cached_dir_t *new_cached_dir(char *s, time_t published);
char *format_recommended_version_list(const config_line_t *line, int warn);
int validate_recommended_package_line(const char *line);
#ifdef DIRSERV_PRIVATE
@ -205,4 +205,3 @@ void dirserv_spool_sort(dir_connection_t *conn);
void dir_conn_clear_spool(dir_connection_t *conn);
#endif /* !defined(TOR_DIRSERV_H) */

View File

@ -705,6 +705,14 @@ compute_consensus_versions_list(smartlist_t *lst, int n_versioning)
int min = n_versioning / 2;
smartlist_t *good = smartlist_new();
char *result;
SMARTLIST_FOREACH_BEGIN(lst, const char *, v) {
if (strchr(v, ' ')) {
log_warn(LD_DIR, "At least one authority has voted for a version %s "
"that contains a space. This probably wasn't intentional, and "
"is likely to cause trouble. Please tell them to stop it.",
escaped(v));
}
} SMARTLIST_FOREACH_END(v);
sort_version_list(lst, 0);
get_frequent_members(good, lst, min);
result = smartlist_join_strings(good, ",", 0, NULL);
@ -4057,4 +4065,3 @@ vote_routerstatus_find_microdesc_hash(char *digest256_out,
}
return -1;
}

View File

@ -845,6 +845,7 @@ move_hs_state(hs_service_t *src_service, hs_service_t *dst_service)
replaycache_free(dst->replay_cache_rend_cookie);
}
dst->replay_cache_rend_cookie = src->replay_cache_rend_cookie;
dst->next_rotation_time = src->next_rotation_time;
src->replay_cache_rend_cookie = NULL; /* steal pointer reference */
}

View File

@ -3719,6 +3719,13 @@ tor_main(int argc, char *argv[])
#endif
/* On heap corruption, just give up; don't try to play along. */
HeapSetInformation(NULL, HeapEnableTerminationOnCorruption, NULL, 0);
/* SetProcessDEPPolicy is only supported on 32-bit Windows.
* (On 64-bit Windows it always fails, and some compilers don't like the
* PSETDEP cast.)
* 32-bit Windows defines _WIN32.
* 64-bit Windows defines _WIN32 and _WIN64. */
#ifndef _WIN64
/* Call SetProcessDEPPolicy to permanently enable DEP.
The function will not resolve on earlier versions of Windows,
and failure is not dangerous. */
@ -3732,6 +3739,7 @@ tor_main(int argc, char *argv[])
setdeppolicy(3);
}
}
#endif /* !defined(_WIN64) */
#endif /* defined(_WIN32) */
configure_backtrace_handler(get_version());

View File

@ -238,6 +238,15 @@ rend_client_send_introduction(origin_circuit_t *introcirc,
dh_offset = v3_shift+7+DIGEST_LEN+2+klen+REND_COOKIE_LEN;
} else {
/* Version 0. */
/* Some compilers are smart enough to work out that nickname can be more
* than 19 characters, when it's a hexdigest. They warn that strncpy()
* will truncate hexdigests without NUL-terminating them. But we only put
* hexdigests in HSDir and general circuit exits. */
if (BUG(strlen(rendcirc->build_state->chosen_exit->nickname)
> MAX_NICKNAME_LEN)) {
goto perm_err;
}
strncpy(tmp, rendcirc->build_state->chosen_exit->nickname,
(MAX_NICKNAME_LEN+1)); /* nul pads */
memcpy(tmp+MAX_NICKNAME_LEN+1, rendcirc->rend_data->rend_cookie,

View File

@ -1963,10 +1963,11 @@ router_compare_to_my_exit_policy(const tor_addr_t *addr, uint16_t port)
MOCK_IMPL(int,
router_my_exit_policy_is_reject_star,(void))
{
if (!router_get_my_routerinfo()) /* make sure routerinfo exists */
const routerinfo_t *me = router_get_my_routerinfo();
if (!me) /* make sure routerinfo exists */
return -1;
return router_get_my_routerinfo()->policy_is_reject_star;
return me->policy_is_reject_star;
}
/** Return true iff I'm a server and <b>digest</b> is equal to
@ -2535,10 +2536,11 @@ check_descriptor_bandwidth_changed(time_t now)
{
static time_t last_changed = 0;
uint64_t prev, cur;
if (!router_get_my_routerinfo())
const routerinfo_t *my_ri = router_get_my_routerinfo();
if (!my_ri) /* make sure routerinfo exists */
return;
prev = router_get_my_routerinfo()->bandwidthcapacity;
prev = my_ri->bandwidthcapacity;
cur = we_are_hibernating() ? 0 : rep_hist_bandwidth_assess();
if ((prev != cur && (!prev || !cur)) ||
cur > prev*2 ||
@ -2589,14 +2591,15 @@ check_descriptor_ipaddress_changed(time_t now)
const or_options_t *options = get_options();
const char *method = NULL;
char *hostname = NULL;
const routerinfo_t *my_ri = router_get_my_routerinfo();
(void) now;
if (router_get_my_routerinfo() == NULL)
if (my_ri == NULL) /* make sure routerinfo exists */
return;
/* XXXX ipv6 */
prev = router_get_my_routerinfo()->addr;
prev = my_ri->addr;
if (resolve_my_address(LOG_INFO, options, &cur, &method, &hostname) < 0) {
log_info(LD_CONFIG,"options->Address didn't resolve into an IP.");
return;

View File

@ -7,7 +7,6 @@ EXTRA_DIST +=\
src/rust/target/release/@TOR_RUST_UTIL_STATIC_NAME@: FORCE
( cd "$(abs_top_srcdir)/src/rust/tor_util" ; \
CARGO_TARGET_DIR="$(abs_top_builddir)/src/rust/target" \
CARGO_HOME="$(abs_top_builddir)/src/rust" \
$(CARGO) build --release --quiet $(CARGO_ONLINE) )
FORCE:

View File

@ -47,7 +47,7 @@ TEST_CHUTNEY_FLAVORS = basic-min bridges-min hs-v2-min hs-v3-min \
TEST_CHUTNEY_FLAVORS_IPV6 = bridges+ipv6-min ipv6-exit-min hs-v23-ipv6-md \
single-onion-ipv6-md
# only run if we can find a stable (or simply another) version of tor
TEST_CHUTNEY_FLAVORS_MIXED = mixed+hs-v23
TEST_CHUTNEY_FLAVORS_MIXED = mixed+hs-v2
### This is a lovely feature, but it requires automake >= 1.12, and Tor
### doesn't require that yet.

View File

@ -22,6 +22,8 @@
#include <dirent.h>
#endif /* defined(_WIN32) */
#include <math.h>
/* These macros pull in declarations for some functions and structures that
* are typically file-private. */
#define GEOIP_PRIVATE
@ -31,14 +33,6 @@
#define MAIN_PRIVATE
#define STATEFILE_PRIVATE
/*
* Linux doesn't provide lround in math.h by default, but mac os does...
* It's best just to leave math.h out of the picture entirely.
*/
//#include <math.h>
long int lround(double x);
double fabs(double x);
#include "or.h"
#include "backtrace.h"
#include "buffers.h"

View File

@ -3,6 +3,8 @@
exitcode=0
ulimit -c 0
export ASAN_OPTIONS="handle_segv=0:allow_user_segv_handler=1"
"${builddir:-.}/src/test/test-bt-cl" backtraces || exit $?
"${builddir:-.}/src/test/test-bt-cl" assert 2>&1 | "${PYTHON:-python}" "${abs_top_srcdir:-.}/src/test/bt_test.py" || exitcode="$?"

View File

@ -6193,6 +6193,57 @@ test_dir_platform_str(void *arg)
;
}
static void
test_dir_format_versions_list(void *arg)
{
(void)arg;
char *s = NULL;
config_line_t *lines = NULL;
setup_capture_of_logs(LOG_WARN);
s = format_recommended_version_list(lines, 1);
tt_str_op(s, OP_EQ, "");
tor_free(s);
config_line_append(&lines, "ignored", "0.3.4.1, 0.2.9.111-alpha, 4.4.4-rc");
s = format_recommended_version_list(lines, 1);
tt_str_op(s, OP_EQ, "0.2.9.111-alpha,0.3.4.1,4.4.4-rc");
tor_free(s);
config_line_append(&lines, "ignored", "0.1.2.3,0.2.9.10 ");
s = format_recommended_version_list(lines, 1);
tt_str_op(s, OP_EQ, "0.1.2.3,0.2.9.10,0.2.9.111-alpha,0.3.4.1,4.4.4-rc");
/* There should be no warnings so far. */
expect_no_log_entry();
/* Now try a line with a space in it. */
tor_free(s);
config_line_append(&lines, "ignored", "1.3.3.8 1.3.3.7");
s = format_recommended_version_list(lines, 1);
tt_str_op(s, OP_EQ, "0.1.2.3,0.2.9.10,0.2.9.111-alpha,0.3.4.1,"
"1.3.3.7,1.3.3.8,4.4.4-rc");
expect_single_log_msg_containing(
"Unexpected space in versions list member \"1.3.3.8 1.3.3.7\"." );
/* Start over, with a line containing a bogus version */
config_free_lines(lines);
lines = NULL;
tor_free(s);
mock_clean_saved_logs();
config_line_append(&lines, "ignored", "0.1.2.3, alpha-complex, 0.1.1.8-rc");
s = format_recommended_version_list(lines,1);
tt_str_op(s, OP_EQ, "0.1.1.8-rc,0.1.2.3,alpha-complex");
expect_single_log_msg_containing(
"Recommended version \"alpha-complex\" does not look valid.");
done:
tor_free(s);
config_free_lines(lines);
teardown_capture_of_logs();
}
#define DIR_LEGACY(name) \
{ #name, test_dir_ ## name , TT_FORK, NULL, NULL }
@ -6261,6 +6312,6 @@ struct testcase_t dir_tests[] = {
DIR(assumed_flags, 0),
DIR(networkstatus_compute_bw_weights_v10, 0),
DIR(platform_str, 0),
DIR(format_versions_list, TT_FORK),
END_OF_TESTCASES
};

View File

@ -1125,6 +1125,7 @@ test_entry_guard_update_from_consensus_status(void *arg)
for (i = 0; i < 5; ++i) {
entry_guard_t *g = smartlist_get(gs->sampled_entry_guards, i);
node_t *n = (node_t*) bfn_mock_node_get_by_id(g->identity);
tt_assert(n);
n->is_possible_guard = 0;
}
@ -1163,6 +1164,7 @@ test_entry_guard_update_from_consensus_status(void *arg)
{
entry_guard_t *g = smartlist_get(gs->sampled_entry_guards, 0);
node_t *n = (node_t*) bfn_mock_node_get_by_id(g->identity);
tt_assert(n);
n->is_possible_guard = 1;
}
{
@ -1170,6 +1172,7 @@ test_entry_guard_update_from_consensus_status(void *arg)
*/
entry_guard_t *g = smartlist_get(gs->sampled_entry_guards, 5);
node_t *n = (node_t*) bfn_mock_node_get_by_id(g->identity);
tt_assert(n);
smartlist_remove(big_fake_net_nodes, n);
tor_free(n->rs);
tor_free(n->md);
@ -1228,6 +1231,7 @@ test_entry_guard_update_from_consensus_repair(void *arg)
/* these will get a date. */
entry_guard_t *g = smartlist_get(gs->sampled_entry_guards, i);
node_t *n = (node_t*) bfn_mock_node_get_by_id(g->identity);
tt_assert(n);
n->is_possible_guard = 0;
g->currently_listed = 0;
}
@ -1293,6 +1297,7 @@ test_entry_guard_update_from_consensus_remove(void *arg)
{
entry_guard_t *g = smartlist_get(gs->sampled_entry_guards, 0);
node_t *n = (node_t*) bfn_mock_node_get_by_id(g->identity);
tt_assert(n);
n->is_possible_guard = 0;
g->currently_listed = 0;
g->unlisted_since_date = one_day_ago;
@ -1302,6 +1307,7 @@ test_entry_guard_update_from_consensus_remove(void *arg)
{
entry_guard_t *g = smartlist_get(gs->sampled_entry_guards, 1);
node_t *n = (node_t*) bfn_mock_node_get_by_id(g->identity);
tt_assert(n);
n->is_possible_guard = 0;
g->currently_listed = 0;
g->unlisted_since_date = one_year_ago;

View File

@ -13,6 +13,14 @@ if [ $# -eq 0 ] || [ ! -f ${1} ] || [ ! -x ${1} ]; then
fi
fi
UNAME_OS=`uname -s | cut -d_ -f1`
if test "$UNAME_OS" = 'CYGWIN' || \
test "$UNAME_OS" = 'MSYS' || \
test "$UNAME_OS" = 'MINGW'; then
echo "This test is unreliable on Windows. See trac #26076. Skipping." >&2
exit 77
fi
if [ $# -ge 1 ]; then
TOR_BINARY="${1}"
shift

View File

@ -13,6 +13,14 @@ if [ $# -eq 0 ] || [ ! -f ${1} ] || [ ! -x ${1} ]; then
fi
fi
UNAME_OS=`uname -s | cut -d_ -f1`
if test "$UNAME_OS" = 'CYGWIN' || \
test "$UNAME_OS" = 'MSYS' || \
test "$UNAME_OS" = 'MINGW'; then
echo "This test is unreliable on Windows. See trac #26076. Skipping." >&2
exit 77
fi
if [ $# -ge 1 ]; then
TOR_BINARY="${1}"
shift

View File

@ -1,13 +1,18 @@
#!/bin/sh
# Test all the Rust crates we're using
# Test all Rust crates
crates=tor_util
set -e
exitcode=0
export LSAN_OPTIONS=suppressions=${abs_top_srcdir:-../../..}/src/test/rust_supp.txt
for crate in $crates; do
cd "${abs_top_srcdir:-.}/src/rust/${crate}"
CARGO_TARGET_DIR="${abs_top_builddir}/src/rust/target" CARGO_HOME="${abs_top_builddir}/src/rust" "${CARGO:-cargo}" test ${CARGO_ONLINE-"--frozen"} || exitcode=1
for cargo_toml_dir in "${abs_top_srcdir:-../../..}"/src/rust/*; do
if [ -e "${cargo_toml_dir}/Cargo.toml" ]; then
cd "${cargo_toml_dir}" && \
CARGO_TARGET_DIR="${abs_top_builddir:-../../..}/src/rust/target" \
"${CARGO:-cargo}" test ${CARGO_ONLINE-"--frozen"} \
${EXTRA_CARGO_OPTIONS} \
--manifest-path "${cargo_toml_dir}/Cargo.toml" || exitcode=1
fi
done
exit $exitcode

View File

@ -547,13 +547,6 @@ test_tortls_x509_cert_get_id_digests(void *ignored)
}
#ifndef OPENSSL_OPAQUE
static int
fixed_pub_cmp(const EVP_PKEY *a, const EVP_PKEY *b)
{
(void) a; (void) b;
return 1;
}
static void
fake_x509_free(X509 *cert)
{
@ -570,70 +563,78 @@ fake_x509_free(X509 *cert)
tor_free(cert);
}
}
#endif
static tor_x509_cert_t *fixed_x509_cert = NULL;
static tor_x509_cert_t *
get_peer_cert_mock_return_fixed(tor_tls_t *tls)
{
(void)tls;
if (fixed_x509_cert)
return tor_x509_cert_dup(fixed_x509_cert);
else
return NULL;
}
static void
test_tortls_cert_matches_key(void *ignored)
{
(void)ignored;
int res;
tor_tls_t *tls;
tor_x509_cert_t *cert;
X509 *one = NULL, *two = NULL;
EVP_PKEY_ASN1_METHOD *meth = EVP_PKEY_asn1_new(999, 0, NULL, NULL);
EVP_PKEY_asn1_set_public(meth, NULL, NULL, fixed_pub_cmp, NULL, NULL, NULL);
tls = tor_malloc_zero(sizeof(tor_tls_t));
cert = tor_malloc_zero(sizeof(tor_x509_cert_t));
one = tor_malloc_zero(sizeof(X509));
one->references = 1;
two = tor_malloc_zero(sizeof(X509));
two->references = 1;
X509 *cert1 = NULL, *cert2 = NULL, *cert3 = NULL, *cert4 = NULL;
tor_x509_cert_t *c1 = NULL, *c2 = NULL, *c3 = NULL, *c4 = NULL;
crypto_pk_t *k1 = NULL, *k2 = NULL, *k3 = NULL;
res = tor_tls_cert_matches_key(tls, cert);
tt_int_op(res, OP_EQ, 0);
k1 = pk_generate(1);
k2 = pk_generate(2);
k3 = pk_generate(3);
tls->ssl = tor_malloc_zero(sizeof(SSL));
tls->ssl->session = tor_malloc_zero(sizeof(SSL_SESSION));
tls->ssl->session->peer = one;
res = tor_tls_cert_matches_key(tls, cert);
tt_int_op(res, OP_EQ, 0);
cert1 = tor_tls_create_certificate(k1, k2, "A", "B", 1000);
cert2 = tor_tls_create_certificate(k1, k3, "C", "D", 1000);
cert3 = tor_tls_create_certificate(k2, k3, "C", "D", 1000);
cert4 = tor_tls_create_certificate(k3, k2, "E", "F", 1000);
cert->cert = two;
res = tor_tls_cert_matches_key(tls, cert);
tt_int_op(res, OP_EQ, 0);
tt_assert(cert1 && cert2 && cert3 && cert4);
one->cert_info = tor_malloc_zero(sizeof(X509_CINF));
one->cert_info->key = tor_malloc_zero(sizeof(X509_PUBKEY));
one->cert_info->key->pkey = tor_malloc_zero(sizeof(EVP_PKEY));
one->cert_info->key->pkey->references = 1;
one->cert_info->key->pkey->ameth = meth;
one->cert_info->key->pkey->type = 1;
c1 = tor_x509_cert_new(cert1); cert1 = NULL;
c2 = tor_x509_cert_new(cert2); cert2 = NULL;
c3 = tor_x509_cert_new(cert3); cert3 = NULL;
c4 = tor_x509_cert_new(cert4); cert4 = NULL;
two->cert_info = tor_malloc_zero(sizeof(X509_CINF));
two->cert_info->key = tor_malloc_zero(sizeof(X509_PUBKEY));
two->cert_info->key->pkey = tor_malloc_zero(sizeof(EVP_PKEY));
two->cert_info->key->pkey->references = 1;
two->cert_info->key->pkey->ameth = meth;
two->cert_info->key->pkey->type = 2;
tt_assert(c1 && c2 && c3 && c4);
res = tor_tls_cert_matches_key(tls, cert);
tt_int_op(res, OP_EQ, 0);
MOCK(tor_tls_get_peer_cert, get_peer_cert_mock_return_fixed);
one->cert_info->key->pkey->type = 1;
two->cert_info->key->pkey->type = 1;
res = tor_tls_cert_matches_key(tls, cert);
tt_int_op(res, OP_EQ, 1);
fixed_x509_cert = NULL;
/* If the peer has no certificate, it shouldn't match anything. */
tt_assert(! tor_tls_cert_matches_key(NULL, c1));
tt_assert(! tor_tls_cert_matches_key(NULL, c2));
tt_assert(! tor_tls_cert_matches_key(NULL, c3));
tt_assert(! tor_tls_cert_matches_key(NULL, c4));
fixed_x509_cert = c1;
/* If the peer has a certificate, it should match every cert with the same
* subject key. */
tt_assert(tor_tls_cert_matches_key(NULL, c1));
tt_assert(tor_tls_cert_matches_key(NULL, c2));
tt_assert(! tor_tls_cert_matches_key(NULL, c3));
tt_assert(! tor_tls_cert_matches_key(NULL, c4));
done:
EVP_PKEY_asn1_free(meth);
tor_free(tls->ssl->session);
tor_free(tls->ssl);
tor_free(tls);
tor_free(cert);
fake_x509_free(one);
fake_x509_free(two);
tor_x509_cert_free(c1);
tor_x509_cert_free(c2);
tor_x509_cert_free(c3);
tor_x509_cert_free(c4);
if (cert1) X509_free(cert1);
if (cert2) X509_free(cert2);
if (cert3) X509_free(cert3);
if (cert4) X509_free(cert4);
crypto_pk_free(k1);
crypto_pk_free(k2);
crypto_pk_free(k3);
UNMOCK(tor_tls_get_peer_cert);
}
#ifndef OPENSSL_OPAQUE
static void
test_tortls_cert_get_key(void *ignored)
{
@ -2780,7 +2781,7 @@ struct testcase_t tortls_tests[] = {
LOCAL_TEST_CASE(always_accept_verify_cb, 0),
INTRUSIVE_TEST_CASE(x509_cert_free, 0),
LOCAL_TEST_CASE(x509_cert_get_id_digests, 0),
INTRUSIVE_TEST_CASE(cert_matches_key, 0),
LOCAL_TEST_CASE(cert_matches_key, 0),
INTRUSIVE_TEST_CASE(cert_get_key, 0),
LOCAL_TEST_CASE(get_my_client_auth_key, TT_FORK),
LOCAL_TEST_CASE(get_my_certs, TT_FORK),
@ -2824,4 +2825,3 @@ struct testcase_t tortls_tests[] = {
LOCAL_TEST_CASE(context_init_one, 0),
END_OF_TESTCASES
};

View File

@ -218,7 +218,7 @@
#define USING_TWOS_COMPLEMENT
/* Version number of package */
#define VERSION "0.3.2.10-dev"
#define VERSION "0.3.2.12-dev"