mirror of
https://gitlab.torproject.org/tpo/core/tor.git
synced 2024-11-10 21:23:58 +01:00
Merge branch 'maint-0.3.2' of https://git.torproject.org/tor into maint-0.3.2
This commit is contained in:
commit
9c83cd1993
341
.travis.yml
341
.travis.yml
@ -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
|
||||
|
@ -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
4
changes/27286
Normal 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.
|
4
changes/bug20424_029_minimal
Normal file
4
changes/bug20424_029_minimal
Normal 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
5
changes/bug25440
Normal 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
5
changes/bug26269
Normal 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
4
changes/bug26485
Normal 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
3
changes/bug26497
Normal 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.
|
3
changes/bug26497-backport
Normal file
3
changes/bug26497-backport
Normal 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
4
changes/bug26785
Normal 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
3
changes/bug26787
Normal 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
3
changes/bug26830
Normal 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
3
changes/bug26853
Normal 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
4
changes/bug26924
Normal 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
4
changes/bug26927
Normal 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
3
changes/bug26932
Normal 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
4
changes/bug27081
Normal 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
5
changes/bug27088
Normal 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
3
changes/bug27090
Normal 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
3
changes/bug27093
Normal 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
3
changes/bug27185
Normal 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
5
changes/bug27226
Normal 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
3
changes/bug27295
Normal 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
4
changes/bug27344
Normal 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
5
changes/bug27345
Normal 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
3
changes/bug27418
Normal 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
3
changes/bug27453
Normal 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
5
changes/bug27461
Normal 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
3
changes/bug27463
Normal 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
5
changes/bug27465
Normal 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
4
changes/geoip-2018-07-03
Normal 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
4
changes/geoip-2018-08-07
Normal 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
4
changes/geoip-2018-09-06
Normal 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
4
changes/task26771
Normal 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
3
changes/ticket24629
Normal 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
3
changes/ticket26560
Normal 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
4
changes/ticket26647
Normal 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.
|
3
changes/ticket26952-cargo
Normal file
3
changes/ticket26952-cargo
Normal file
@ -0,0 +1,3 @@
|
||||
o Minor features (continuous integration, rust):
|
||||
- Use cargo cache in our Travis CI configuration.
|
||||
Closes ticket 26952.
|
3
changes/ticket26952-ccache
Normal file
3
changes/ticket26952-ccache
Normal 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
3
changes/ticket27087
Normal file
@ -0,0 +1,3 @@
|
||||
o Minor features (continuous integration):
|
||||
- Run asciidoc during Travis CI.
|
||||
Implements ticket 27087.
|
6
changes/ticket27252
Normal file
6
changes/ticket27252
Normal 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
5
changes/ticket27252-032
Normal 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.
|
12
configure.ac
12
configure.ac
@ -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
|
||||
|
||||
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
|
||||
|
@ -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"
|
||||
|
@ -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.
|
||||
|
||||
|
@ -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");
|
||||
|
@ -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;
|
||||
|
@ -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),
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
|
59634
src/config/geoip
59634
src/config/geoip
File diff suppressed because it is too large
Load Diff
9942
src/config/geoip6
9942
src/config/geoip6
File diff suppressed because it is too large
Load Diff
@ -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 "
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
|
@ -4162,4 +4162,3 @@ connection_edge_free_all(void)
|
||||
smartlist_free(pending_entry_connections);
|
||||
pending_entry_connections = NULL;
|
||||
}
|
||||
|
||||
|
@ -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;
|
||||
|
@ -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) */
|
||||
|
||||
|
@ -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();
|
||||
}
|
||||
|
||||
|
@ -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) */
|
||||
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
|
@ -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 */
|
||||
}
|
||||
|
@ -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());
|
||||
|
@ -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,
|
||||
|
@ -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;
|
||||
|
@ -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:
|
||||
|
@ -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.
|
||||
|
@ -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"
|
||||
|
@ -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="$?"
|
||||
|
@ -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
|
||||
};
|
||||
|
||||
|
@ -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;
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
};
|
||||
|
||||
|
@ -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"
|
||||
|
||||
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user