From f4a2f36292efaefabd2a0a68bae8687034b98a50 Mon Sep 17 00:00:00 2001 From: Mathieu CARBONNEAUX Date: Thu, 16 Jul 2020 14:52:49 +0200 Subject: [PATCH 1/2] add windows travis-ci build --- .travis.yml | 60 +++++++++++++++++++++++++++++---- INSTALL | 27 --------------- INSTALL.md | 59 ++++++++++++++++++++++++++++++++ README => README.md | 35 +++++++++++++------ buildwin.sh | 18 ++++++++++ deploy.sh | 82 +++++++++++++++++++++++++++++++++++++++++++++ 6 files changed, 236 insertions(+), 45 deletions(-) delete mode 100644 INSTALL create mode 100644 INSTALL.md rename README => README.md (92%) create mode 100644 buildwin.sh create mode 100644 deploy.sh diff --git a/.travis.yml b/.travis.yml index 1348562..4c4883b 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,14 +1,60 @@ +os: + - linux + - windows + language: c -compiler: - - clang - - gcc + +before_install: +- |- + case $TRAVIS_OS_NAME in + windows) + [[ ! -f C:/tools/msys64/msys2_shell.cmd ]] && rm -rf C:/tools/msys64 + choco uninstall -y mingw + choco upgrade --no-progress -y msys2 + export msys2='cmd //C RefreshEnv.cmd ' + export msys2+='& set MSYS=winsymlinks:nativestrict ' + export msys2+='& C:\\tools\\msys64\\msys2_shell.cmd -defterm -no-start' + export mingw64="$msys2 -mingw64 -full-path -here -c "\"\$@"\" --" + export msys2+=" -msys2 -c "\"\$@"\" --" + $msys2 pacman --sync --noconfirm --needed mingw-w64-x86_64-toolchain gcc make openssl openssl-devel zip unzip xmlto asciidoc curl awk bash + ## Install more MSYS2 packages from https://packages.msys2.org/base here + taskkill //IM gpg-agent.exe //F # https://travis-ci.community/t/4967 + export PATH=/C/tools/msys64/mingw64/bin:$PATH + export MAKE=mingw32-make # so that Autotools can find it + ;; + esac + +before_cache: +- |- + case $TRAVIS_OS_NAME in + windows) + # https://unix.stackexchange.com/a/137322/107554 + $msys2 pacman --sync --clean --noconfirm + ;; + esac + +cache: + directories: + - $HOME/AppData/Local/Temp/chocolatey + - /C/tools/msys64 + addons: apt: packages: - asciidoc - xmlto -install: - - make clean + script: - - make - - make docs \ No newline at end of file +- |- + case $TRAVIS_OS_NAME in + windows) + cmd //C RefreshEnv.cmd + set MSYS=winsymlinks:nativestrict + C:\\tools\\msys64\\msys2_shell.cmd -defterm -no-start -msys2 -here -c ./buildwin.sh + ;; + linux) + make + make docs + ;; + esac + exit 0 diff --git a/INSTALL b/INSTALL deleted file mode 100644 index 792d52e..0000000 --- a/INSTALL +++ /dev/null @@ -1,27 +0,0 @@ -Short guide to installing proxytunnel - -On most modern unix systems, use the normal Makefile, possibly uncommenting -the section related to your system (darwin/cygwin/solaris/openbsd) - -If you want to enable setproctitle functionality, add a CFLAGS define --DSETPROCTITLE (uncomment sample in Makefile) - -Run make and optionally 'make install'. -If you manually want to install, copy proxytunnel to /usr/local/bin -and optionally the manual-page from the debian-subdirectory to your manpath - ---------------------------------------------------------------------------------- -Cygwin: - -Currently cygwin's openssl isn't in a compilable state, change md4.h and -md5.h in /usr/include -and replace 'size_t' with 'unsigned long' - -To link the final executable: -gcc -o proxytunnel *.o /lib/libcrypto.dll.a /lib/libssl.dll.a - -To run, copy the required dll's from the cygwin-bin dir to the windows -system dir, or the proxytunnel directory (cygcrypto-0.9.8.dll, -cygssl-0.9.8.dll, cygwin1.dll ) - -Setproctitle doesn't work on cygwin (afaik) diff --git a/INSTALL.md b/INSTALL.md new file mode 100644 index 0000000..9e2e7fa --- /dev/null +++ b/INSTALL.md @@ -0,0 +1,59 @@ +# Short guide to installing proxytunnel + +On most modern **unix systems**, use the normal Makefile, possibly uncommenting +the section related to your system (darwin/cygwin/solaris/openbsd) + +If you want to enable setproctitle functionality, add a CFLAGS define +-DSETPROCTITLE (uncomment sample in Makefile) + +to build simply run `make` and optionally `make install`. +If you manually want to install, copy proxytunnel to /usr/local/bin +and optionally the manual-page from the debian-subdirectory to your manpath + +# msys2 + +To install msys2 with [chocolatey](https://chocolatey.org/install): +``` +C:\> choco install -y msys2 +``` + +To switch to msys2 shell: +``` +C:\> C:\\tools\\msys64\\msys2_shell.cmd -defterm -no-start -msys2 +me@mymachine MSYS ~ +``` + +To install dependancy: +``` +me@mymachine MSYS ~ pacman --sync --noconfirm --needed mingw-w64-x86_64-toolchain gcc make openssl openssl-devel zip xmlto asciidoc +``` + +To build with msys2 : +``` +me@mymachine MSYS ~ make +``` + +To build docs with msys2 : +``` +me@mymachine MSYS ~ make docs +``` + +To use `proxytunnel.exe` from windows, copy msys and openssl dll to the same directory as proxytunnel.exe(use `ldd` cmd to see what dll are used by `proxytunnel.exe`) cmd: +``` +me@mymachine MSYS ~ cp /usr/bin/msys-2.0.dll /usr/bin/msys-crypto-1.1.dll /usr/bin/msys-ssl-1.1.dll /usr/bin/msys-z.dll . +``` + +# Cygwin : + +Currently cygwin's openssl isn't in a compilable state, change md4.h and +md5.h in /usr/include +and replace 'size_t' with 'unsigned long' + +To link the final executable: +gcc -o proxytunnel *.o /lib/libcrypto.dll.a /lib/libssl.dll.a + +To run, copy the required dll's from the cygwin-bin dir to the windows +system dir, or the proxytunnel directory (cygcrypto-0.9.8.dll, +cygssl-0.9.8.dll, cygwin1.dll ) + +Setproctitle doesn't work on cygwin (afaik) diff --git a/README b/README.md similarity index 92% rename from README rename to README.md index 67565f6..6f16e23 100644 --- a/README +++ b/README.md @@ -1,6 +1,7 @@ ------------ -proxytunnel ------------ + +[![Build Status](https://travis-ci.org/mcarbonneaux/proxytunnel.svg?branch=master)](https://travis-ci.org/mcarbonneaux/proxytunnel) + +# Proxytunnel Author: Jos Visser , Mark Janssen @@ -13,12 +14,14 @@ as an extension to SSH, to be able to SSH to my box at home. In this file, I will describe the use with SSH. If you want to use it with some other application, feel free, and let me know! +# Build docs is [her](INSTALL.md) -Usage: +# Usage (man page is [her](docs/proxytunnel.1.adoc)): Proxytunnel is very easy to use, when running proxytunnel with the help option it specifies it's command-line options. +``` $ ./proxytunnel --help proxytunnel 1.9.9 Copyright 2001-2018 Proxytunnel Project Usage: proxytunnel [OPTIONS]... @@ -58,23 +61,28 @@ Miscellaneous options: -q, --quiet Suppress messages -h, --help Print help and exit -V, --version Print version and exit +``` To use this program with OpenSSH to connect to a host somewhere, create a $HOME/.ssh/config file with the following content: +``` Host foobar ProtocolKeepAlives 30 ProxyCommand /path/to/proxytunnel -p proxy:8080 -P username -d mybox.athome.nl:443 +``` With: +``` - foobar The symbolic name of the host you want to connect to - proxy The host name of the proxy you want to connect through - 8080 The port number where the proxy software listens to - username Your proxy userid (password will be prompted) - mybox.athome.nl The hostname of the box you want to connect to (ultimately) - 443 The port number of the SSH daemon on mybox.athome.nl +``` If your proxy doesn't require the username and password for using it, you can skip these options. If you don't provide the password on the @@ -111,27 +119,32 @@ connect to a process that understands SSL itself. When all this is in place, execute an "ssh foobar" and you're in business! -Environment Variables -===================== +# Environment Variables Proxytunnel can make use of the following environment variables: + +``` PROXYUSER Username for the proxy-authentication PROXYPASS Password for the proxy-authentication -REMPROXYUSER Username for remote proxy-authentication -REMPROXYPASS Password for remote proxy-authentication +REMPROXYUSER Username for remote proxy-authentication +REMPROXYPASS Password for remote proxy-authentication HTTP_PROXY Primary proxy host and port information - Format: HTTP_PROXY=http://:/ + Format: HTTP_PROXY=http://:/ +``` -Authentication File -=================== +# Authentication File Proxytunnel can read authentication data from a file (-F/--passfile) + The format for this file is: +``` = = etc +``` One entry per line, 1 space before and after the equal sign. + The accepted fields are: * proxy_user * proxy_passwd diff --git a/buildwin.sh b/buildwin.sh new file mode 100644 index 0000000..52d8b59 --- /dev/null +++ b/buildwin.sh @@ -0,0 +1,18 @@ +# msys2 windows build script + +echo "Build docs..." +make -C docs + +echo "Build proxytunnel..." +make -f Makefile.ssl11 + +echo "Copy msys/openssl dll to build dir..." +cp /usr/bin/msys-2.0.dll /usr/bin/msys-crypto-1.1.dll /usr/bin/msys-ssl-1.1.dll /usr/bin/msys-z.dll . + +echo "Generate proxytunnel.zip with docs, exe and msys/openssl dll..." +zip proxytunnel.zip proxytunnel.exe *.dll docs/proxytunnel.1 docs/proxytunnel.1.html docs/proxytunnel-paper.html + +if [ ! -z "${TRAVIS_TAG}" ]; then +echo "Deploy proxytunnel.zip to github release tag:${TRAVIS_TAG}..." +/usr/bin/bash ./deploy.sh "proxytunnel.zip" +fi diff --git a/deploy.sh b/deploy.sh new file mode 100644 index 0000000..3ac9f4a --- /dev/null +++ b/deploy.sh @@ -0,0 +1,82 @@ +#!/usr/bin/bash +# Travis-CI Deploy script to github release. +# +# To use this script: +# - You must generate 'Personal access token' with repo scope of this repository. +# - You must add Variable GITHUB_UPLOAD_TOKEN in settings of your project in travis setting. +# - GITHUB_UPLOAD_TOKEN must contain the token. +# - You can create the token on 'machine user' in place of the 'owner user' of this repository for more security. +# +# https://developer.github.com/v3/guides/managing-deploy-keys/#machine-users +# https://developer.github.com/changes/2020-02-14-deprecating-password-auth/ +# https://docs.github.com/en/rest/overview/resources-in-the-rest-api#authentication +# https://docs.github.com/en/github/authenticating-to-github/creating-a-personal-access-token +# +# Syntax usage: +# ./deploy.sh + +echo "Start try upload asset to github release at $(date)..." + +if [ -z "${GITHUB_UPLOAD_TOKEN}" ]; then + echo "GITHUB_UPLOAD_TOKEN are null, you must create Github Personal Access Token to use this script..."; + exit 4; +fi + + +if [ -z "${TRAVIS_TAG}" ]; then + echo "TRAVIS_TAG is null!"; + exit 4; +fi + +if [ -z "${TRAVIS_REPO_SLUG}" ]; then + echo "TRAVIS_REPO_SLUG is null!"; + exit 4; +fi + +if [ ! -f $1 ]; then + echo "No file '$1' found..."; + exit 3; +fi + +echo "Git TAG:"$TRAVIS_TAG +echo "Github SLUG:"$TRAVIS_REPO_SLUG +echo "File to Upload:"$1 + +ASSETTAGID=$(curl --no-progress-meter -q -H "Authorization: token ${GITHUB_UPLOAD_TOKEN}" \ + -H "Accept: application/vnd.github.v3+json" \ + https://api.github.com/repos/${TRAVIS_REPO_SLUG}/releases/tags/${TRAVIS_TAG} | awk '/"assets": /{flag=1}/"id": /{sub(",$","",$2);id=$2;}/"name": /{sub("^\"","",$2); sub("\",$","",$2);name=$2; if (name=="'"$1"'") {print id;exit}}') +ASSETURL=$(curl --no-progress-meter -q -H "Authorization: token ${GITHUB_UPLOAD_TOKEN}" \ + -H "Accept: application/vnd.github.v3+json" \ + https://api.github.com/repos/${TRAVIS_REPO_SLUG}/releases/tags/${TRAVIS_TAG} | awk '/"assets_url": /{sub("^\"","",$2); sub("\",$","",$2); sub("^https://api[.]","https://uploads.",$2);print $2;exit}') + +if [ -z "${ASSETURL}" ]; then + curl --no-progress-meter -q -H "Authorization: token ${GITHUB_UPLOAD_TOKEN}" \ + -H "Accept: application/vnd.github.v3+json" \ + https://api.github.com/repos/${TRAVIS_REPO_SLUG}/releases/tags/${TRAVIS_TAG} + echo "Tag : ${TRAVIS_TAG} not found on project: ${TRAVIS_REPO_SLUG} at $(date)..." + exit 3 +fi + +if [ ! -z "$ASSETTAGID" ]; then + echo "Asset $1 are already uploaded on Tag: ${TRAVIS_TAG}!" + echo "I must Delete $1 before upload..." + curl -H "Authorization: token ${GITHUB_UPLOAD_TOKEN}" \ + -X DELETE \ + -H "Accept: application/vnd.github.v3+json" \ + https://api.github.com/repos/${TRAVIS_REPO_SLUG}/releases/assets/${ASSETTAGID} + if [ $? -eq 0 ]; then echo "Delete done!" + else echo "Delete failed at $(date)!"; exit 1; fi +fi + +echo "Uploading asset $1 to ${TRAVIS_REPO_SLUG} on tag: ${TRAVIS_TAG}..." +curl --no-progress-meter -q -H "Authorization: token ${GITHUB_UPLOAD_TOKEN}" \ + -X POST \ + --data-binary @$1 \ + -H "Content-Type: application/zip" \ + -H "Accept: application/vnd.github.v3+json" \ + $ASSETURL?name=$1 >response.json +if [ $? -eq 0 ]; then echo "Success upload of asset $1 to ${TRAVIS_REPO_SLUG} on tag: ${TRAVIS_TAG} at $(date)..."; +else cat response.json; echo "Failed upload of upload asset $1 to ${TRAVIS_REPO_SLUG} on tag: ${TRAVIS_TAG} at $(date)..."; exit 2; fi + +echo "End upload asset $1 to '${TRAVIS_REPO_SLUG}' on tag: '${TRAVIS_TAG}' at $(date)..." +exit 0; From e5ffdedc7913ea6b1a49e35762d7e5f2c9b913be Mon Sep 17 00:00:00 2001 From: Mathieu CARBONNEAUX Date: Thu, 16 Jul 2020 14:53:17 +0200 Subject: [PATCH 2/2] Fix object list --- Makefile.ssl10 | 1 + Makefile.ssl11 | 1 + 2 files changed, 2 insertions(+) diff --git a/Makefile.ssl10 b/Makefile.ssl10 index 6ce3c4a..9f931a2 100644 --- a/Makefile.ssl10 +++ b/Makefile.ssl10 @@ -60,6 +60,7 @@ OBJ = proxytunnel.o \ io.o \ http.o \ basicauth.o \ + globals.o \ readpassphrase.o \ messages.o \ cmdline.o \ diff --git a/Makefile.ssl11 b/Makefile.ssl11 index ad3d599..709b05f 100644 --- a/Makefile.ssl11 +++ b/Makefile.ssl11 @@ -60,6 +60,7 @@ OBJ = proxytunnel.o \ io.o \ http.o \ basicauth.o \ + globals.o \ readpassphrase.o \ messages.o \ cmdline.o \