Skip to content
Snippets Groups Projects
Select Git revision
  • 2c25e0b4680c0c5c1d03e37be9d8089c6be0a92c
  • master default protected
  • renovate/configure
  • gitlab_ci
4 results

docker_push

Blame
  • testjafar.bash 3.75 KiB
    #!/bin/bash
    
    #
    # This script uses cURL to verify that Jafar is able to produce a
    # bunch of censorship conditions. It should be noted that this script
    # only works on Linux and will never work on other systems.
    #
    
    set -e
    
    function execute() {
      echo "+ $@" 1>&2
      "$@"
    }
    
    function expectexitcode() {
      local expect
      local exitcode
      expect=$1
      shift
      set +e
      "$@"
      exitcode=$?
      set -e
      echo "expected exitcode $expect, found $exitcode" 1>&2
      if [ $exitcode != $expect ]; then
        exit 1
      fi
    }
    
    function runtest() {
      echo "=== BEGIN $1 ==="
      "$1"
      echo "=== END $1 ==="
    }
    
    function http_got_nothing() {
      expectexitcode 52 execute ./jafar -iptables-hijack-http-to 127.0.0.1:7117  \
        -main-command 'curl -sm5 --connect-to ::example.com: http://ooni.io'
    }
    
    function http_recv_error() {
      expectexitcode 56 execute ./jafar -iptables-reset-keyword ooni          \
        -main-command 'curl -sm5 --connect-to ::example.com: http://ooni.io'
    }
    
    function http_operation_timedout() {
      expectexitcode 28 execute ./jafar -iptables-drop-keyword ooni           \
        -main-command 'curl -sm5 --connect-to ::example.com: http://ooni.io'
    }
    
    function http_couldnt_connect() {
      local ip
      ip=$(host -tA example.com|cut -f4 -d' ')
      expectexitcode 7 execute ./jafar -iptables-reset-ip $ip                 \
        -main-command 'curl -sm5 --connect-to ::example.com: http://ooni.io'
    }
    
    function http_blockpage() {
      outfile=$(mktemp)
      chown nobody $outfile  # curl runs as user nobody
      expectexitcode 0 execute ./jafar -http-proxy-block ooni  \
        -iptables-hijack-http-to 127.0.0.1:80                  \
        -main-command "curl -so $outfile --connect-to ::example.com: http://ooni.io"
      if ! grep -q '451 Unavailable For Legal Reasons' $outfile; then
        echo "fatal: the blockpage does not contain the expected pattern" 1>&2
        exit 1
      fi
    }
    
    function dns_injection() {
      output=$(expectexitcode 0 execute ./jafar                              \
        -iptables-hijack-dns-to 127.0.0.1:53                                 \
        -dns-proxy-hijack ooni                                               \
        -main-command 'dig +time=2 +short @example.com ooni.io')
      if [ "$output" != "127.0.0.1" ]; then
        echo "fatal: the resulting IP is not the expected one" 1>&2
        exit 1
      fi
    }
    
    function dns_timeout() {
      expectexitcode 9 execute ./jafar             \
        -iptables-hijack-dns-to 127.0.0.1:53       \
        -dns-proxy-ignore ooni                     \
        -main-command 'dig +time=2 +short @example.com ooni.io'
    }
    
    function dns_nxdomain() {
      output=$(expectexitcode 0 execute ./jafar                              \
        -iptables-hijack-dns-to 127.0.0.1:53                                 \
        -dns-proxy-block ooni                                                \
        -main-command 'dig +time=2 +short @example.com ooni.io')
      if [ "$output" != "" ]; then
        echo "fatal: expected no output here" 1>&2
        exit 1
      fi
    }
    
    function sni_man_in_the_middle() {
      expectexitcode 60 execute ./jafar -iptables-hijack-https-to 127.0.0.1:4114  \
        -main-command 'curl -sm5 --connect-to ::example.com: https://ooni.io'
    }
    
    function sni_got_nothing() {
      expectexitcode 52 execute ./jafar -iptables-hijack-https-to 127.0.0.1:4114  \
        -main-command 'curl -sm5 --cacert badproxy.pem --connect-to ::example.com: https://ooni.io'
    }
    
    function sni_connect_error() {
      expectexitcode 35 execute ./jafar -iptables-reset-keyword ooni           \
        -main-command 'curl -sm5 --connect-to ::example.com: https://ooni.io'
    }
    
    function main() {
      runtest http_got_nothing
      runtest http_recv_error
      runtest http_operation_timedout
      runtest http_couldnt_connect
      runtest http_blockpage
      runtest dns_injection
      runtest dns_timeout
      runtest dns_nxdomain
      runtest sni_man_in_the_middle
      runtest sni_got_nothing
      runtest sni_connect_error
    }
    
    main "$@"