From c4fd217a7ed19c9782d0d15ea3cbcbc1c3ec15fa Mon Sep 17 00:00:00 2001 From: Adrian Dvergsdal Date: Sun, 25 Jun 2017 14:05:22 +0200 Subject: [PATCH] Backward compatibility with legacy config path --- README.md | 4 ++-- entrypoint | 12 ++++++++++-- tests/run | 38 +++++++++++++++++++++++++++++++++----- 3 files changed, 45 insertions(+), 9 deletions(-) diff --git a/README.md b/README.md index 45d3723..132d366 100644 --- a/README.md +++ b/README.md @@ -12,7 +12,7 @@ This is an automated build linked with the [debian](https://hub.docker.com/_/deb # Usage -- Required: define users as command arguments, STDIN or mounted in `/etc/sftp-users.conf` +- Required: define users as command arguments, STDIN or mounted in `/etc/sftp/users.conf` (syntax: `user:pass[:e][:uid[:gid[:dir1[,dir2]...]]]...`). - Set UID/GID manually for your users if you want them to make changes to your mounted volumes with permissions matching your host filesystem. @@ -74,7 +74,7 @@ OpenSSH client, run: `sftp -P 2222 foo@` ``` docker run \ - -v /host/users.conf:/etc/sftp/sftp-users.conf:ro \ + -v /host/users.conf:/etc/sftp/users.conf:ro \ -v mySftpVolume:/home \ -v /host/ssh_host_rsa_key:/etc/ssh/ssh_host_rsa_key \ -v /host/ssh_host_rsa_key.pub:/etc/ssh/ssh_host_rsa_key.pub \ diff --git a/entrypoint b/entrypoint index b8b40a6..1216bed 100755 --- a/entrypoint +++ b/entrypoint @@ -2,8 +2,9 @@ set -e export DEBIAN_FRONTEND=noninteractive -userConfPath="/etc/sftp/sftp-users.conf" -userConfFinalPath="/var/run/sftp/sftp-users.conf" +userConfPath="/etc/sftp/users.conf" +userConfPathLegacy="/etc/sftp-users.conf" +userConfFinalPath="/var/run/sftp/users.conf" function printHelp() { echo "Add users as command arguments, STDIN or mounted in $userConfPath" @@ -96,8 +97,15 @@ if [ "$1" == "--readme" ]; then exit 0 fi +# Backward compatibility with legacy config path +if [ ! -f "$userConfPath" -a -f "$userConfPathLegacy" ]; then + mkdir -p "$(dirname $userConfPath)" + ln -s "$userConfPathLegacy" "$userConfPath" +fi + # Create users only on first run if [ ! -f "$userConfFinalPath" ]; then + mkdir -p "$(dirname $userConfFinalPath)" # Append mounted config to final config if [ -f "$userConfPath" ]; then diff --git a/tests/run b/tests/run index cc2897a..6dc1171 100755 --- a/tests/run +++ b/tests/run @@ -45,7 +45,7 @@ function beforeTest() { echo "test::$(id -u):$(id -g):dir1,dir2" >> "$tmpDir/users" $sudo docker run \ - -v "$tmpDir/users:/etc/sftp-users.conf:ro" \ + -v "$tmpDir/users:/etc/sftp/users.conf:ro" \ -v "$scriptDir/id_rsa.pub":/home/test/.ssh/keys/id_rsa.pub:ro \ -v "$tmpDir":/home/test/share \ --name "$sftpContainerName" \ @@ -96,19 +96,19 @@ function runSftpCommands() { function waitForServer() { containerName="$1" - echo -n "Waiting for $containerName to open port 22 " + echo -n "Waiting for $containerName to open port 22 ..." for i in {1..30}; do sleep 1 ip="$(getSftpIp $containerName)" echo -n "." - if nc -z $ip 22; then - echo " OK" + if [ -n "$ip" ] && nc -z $ip 22; then + echo " OPEN" return 0; fi done - echo " FAIL" + echo " TIMEOUT" return 1 } @@ -189,6 +189,34 @@ function testMinimalContainerStart() { fi } +function testLegacyConfigPath() { + $skipAllTests && skip && return 0 + + tmpContainerName="$sftpContainerName""_legacy" + + echo "test::$(id -u):$(id -g)" >> "$tmpDir/legacy_users" + $sudo docker run \ + -v "$tmpDir/legacy_users:/etc/sftp-users.conf:ro" \ + --name "$tmpContainerName" \ + --expose 22 \ + -d "$sftpImageName" \ + > "$redirect" + + waitForServer $tmpContainerName + + ps="$($sudo docker ps -q -f name="$tmpContainerName")" + assertNotEqual "$ps" "" + + if [ "$output" != "quiet" ]; then + $sudo docker logs "$tmpContainerName" + fi + + if [ "$cleanup" == "cleanup" ]; then + $sudo docker rm -fv "$tmpContainerName" > "$redirect" + fi +} + + # Bind-mount folder using script in /etc/sftp.d/ function testCustomContainerStart() { $skipAllTests && skip && return 0