skip-method-http-socks-client 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117
  1. #!/bin/sh
  2. set -e
  3. TESTDIR="$(readlink -f "$(dirname "$0")")"
  4. . "$TESTDIR/framework"
  5. setupenvironment
  6. # We don't do a real proxy here, we just look how the implementation
  7. # reacts to certain responses from a "proxy" provided by socat
  8. # Checks HTTP, but requesting https instead will check HTTPS (curl) which
  9. # uses different error messages through – also: https://github.com/curl/curl/issues/944
  10. # FIXME: Not run automatically as it uses a hardcoded port (5555)
  11. msgtest 'Check that everything is installed' 'socat'
  12. if dpkg-checkbuilddeps -d 'socat' /dev/null >/dev/null 2>&1; then
  13. msgpass
  14. else
  15. msgskip "$(command dpkg -l socat)"
  16. exit
  17. fi
  18. runclient() {
  19. # this doesn't need to be an actually reachable webserver for this test
  20. # in fact, its better if it isn't.
  21. rm -f index.html
  22. apthelper download-file http://localhost:2903/ index.html \
  23. -o Acquire::http::Proxy="socks5h://${1}localhost:5555" \
  24. -o Acquire::http::Timeout=2 -o Debug::Acquire::http=1 > client.output 2>&1 || true
  25. }
  26. runserver() {
  27. socat -x tcp-listen:5555,reuseaddr \
  28. system:"echo -n '$*' | xxd -r -p; echo 'HTTP/1.1 200 OK'; echo 'Content-Length: 5'; echo 'Connection: close'; echo; echo 'HTML'" \
  29. > server.output 2>&1 &
  30. }
  31. PROXY="socks5h://localhost:5555"
  32. msgmsg 'SOCKS does not run'
  33. runclient
  34. testsuccess grep 'Could not connect to localhost:5555' client.output
  35. msgmsg 'SOCKS greets back with wrong version'
  36. runserver '04 00'
  37. runclient
  38. testsuccess grep 'greets back with wrong version: 4' client.output
  39. msgmsg 'SOCKS tries GSSAPI auth we have not advertised'
  40. runserver '05 01'
  41. runclient
  42. testsuccess grep 'greets back having not found a common authorization method: 1' client.output
  43. msgmsg 'SOCKS tries user&pass auth we have not advertised'
  44. runserver '05 02'
  45. runclient
  46. testsuccess grep 'pass auth, but we had not offered it' client.output
  47. msgmsg 'SOCKS user:pass wrong version'
  48. runserver '05 02' '05 00'
  49. runclient 'user:pass@'
  50. testsuccess grep 'auth status response with wrong version: 5' client.output
  51. msgmsg 'SOCKS user:pass wrong auth'
  52. runserver '05 02' '01 01'
  53. runclient 'user:pass@'
  54. testsuccess grep 'reported authorization failure: username or password incorrect? (1)' client.output
  55. msgmsg 'SOCKS user:pass request not granted no hostname'
  56. runserver '05 02' '01 00' '05 01 00 03 00 1f 90'
  57. runclient 'user:pass@'
  58. testsuccess grep 'grant the connect to :8080 due to: general SOCKS server failure (1)' client.output
  59. msgmsg 'SOCKS user:pass request not granted with hostname'
  60. runserver '05 02' '01 00' '05 01 00 03 09 68 6f 73 74 6c 6f 63 61 6c 1f 90'
  61. runclient 'user:pass@'
  62. testsuccess grep 'grant the connect to hostlocal:8080 due to: general SOCKS server failure (1)' client.output
  63. msgmsg 'SOCKS user:pass request not granted ipv4'
  64. runserver '05 02' '01 00' '05 04 00 01 ac 10 fe 01 1f 90'
  65. runclient 'user:pass@'
  66. testsuccess grep 'grant the connect to 172.16.254.1:8080 due to: Host unreachable (4)' client.output
  67. msgmsg 'SOCKS user:pass request not granted ipv6'
  68. runserver '05 02' '01 00' '05 12 00 04 20 01 0d b8 ac 10 fe 00 00 00 00 00 00 00 00 00 1f 90'
  69. runclient 'user:pass@'
  70. testsuccess grep 'grant the connect to \[2001:0DB8:AC10:FE00:0000:0000:0000:0000\]:8080 due to: Unknown error (18)' client.output
  71. msgmsg 'SOCKS user:pass request granted ipv4'
  72. runserver '05 02' '01 00' '05 00 00 01 ac 10 fe 01 1f 90'
  73. runclient 'user:pass@'
  74. testequal "http: SOCKS proxy $PROXY connection established to 172.16.254.1:8080" head -n 1 client.output
  75. testfileequal index.html 'HTML'
  76. msgmsg 'SOCKS user:pass request granted ipv6'
  77. runserver '05 02' '01 00' '05 00 00 04 20 01 0d b8 ac 10 fe 00 00 00 00 00 00 00 00 00 1f 90'
  78. runclient 'user:pass@'
  79. testequal "http: SOCKS proxy $PROXY connection established to [2001:0DB8:AC10:FE00:0000:0000:0000:0000]:8080" head -n 1 client.output
  80. testfileequal index.html 'HTML'
  81. msgmsg 'SOCKS no auth no hostname'
  82. runserver '05 00 05 00 00 03 00 1f 90'
  83. runclient
  84. testequal "http: SOCKS proxy $PROXY connection established to :8080" head -n 1 client.output
  85. testfileequal index.html 'HTML'
  86. msgmsg 'SOCKS no auth with hostname'
  87. runserver '05 00 05 00 00 03 09 68 6f 73 74 6c 6f 63 61 6c 1f 90'
  88. runclient
  89. testequal "http: SOCKS proxy $PROXY connection established to hostlocal:8080" head -n 1 client.output
  90. testfileequal index.html 'HTML'
  91. msgmsg 'SOCKS user-only request granted ipv4'
  92. runserver '05 02' '01 00' '05 00 00 01 ac 10 fe 01 1f 90'
  93. runclient 'apt@'
  94. testequal "http: SOCKS proxy $PROXY connection established to 172.16.254.1:8080" head -n 1 client.output
  95. testfileequal index.html 'HTML'