From 9ac7b007188314de1ae843893ff80987d3ec9de3 Mon Sep 17 00:00:00 2001 From: Jose Diaz-Gonzalez Date: Fri, 17 Jul 2020 14:37:59 -0400 Subject: [PATCH] fix: force set all plugin permissions on plugin:install/update Closes #4027 --- plugins/plugin/install | 13 ++++++ plugins/plugin/internal-functions | 6 +++ plugins/plugin/update | 13 ++++++ tests/unit/plugin.bats | 66 +++++++++++++++++++++++++++++++ 4 files changed, 98 insertions(+) create mode 100755 plugins/plugin/install create mode 100755 plugins/plugin/update diff --git a/plugins/plugin/install b/plugins/plugin/install new file mode 100755 index 000000000..cb3c81022 --- /dev/null +++ b/plugins/plugin/install @@ -0,0 +1,13 @@ +#!/usr/bin/env bash +set -eo pipefail +[[ $DOKKU_TRACE ]] && set -x +source "$PLUGIN_AVAILABLE_PATH/plugin/internal-functions" + +trigger-plugin-install() { + declare desc="plugin install plugin trigger" + declare trigger="install" + + fn-plugin-set-permissions +} + +trigger-plugin-install "$@" diff --git a/plugins/plugin/internal-functions b/plugins/plugin/internal-functions index c0be708a6..67098e819 100755 --- a/plugins/plugin/internal-functions +++ b/plugins/plugin/internal-functions @@ -21,6 +21,12 @@ cmd-plugin-installed() { plugn list | awk '{print $1}' | grep -q "^${PLUGIN_NAME}$" } +fn-plugin-set-permissions() { + declare desc="ensures correct permissions for all available plugins" + chown -R "${DOKKU_SYSTEM_USER}:${DOKKU_SYSTEM_GROUP}" "$PLUGIN_CORE_AVAILABLE_PATH" "$PLUGIN_AVAILABLE_PATH" + chown -R "${DOKKU_SYSTEM_USER}:${DOKKU_SYSTEM_GROUP}" "$PLUGIN_CORE_ENABLED_PATH" "$PLUGIN_ENABLED_PATH" +} + plugin_prime_bash_completion() { declare desc="primes the bash-completion cache" diff --git a/plugins/plugin/update b/plugins/plugin/update new file mode 100755 index 000000000..0455eaa14 --- /dev/null +++ b/plugins/plugin/update @@ -0,0 +1,13 @@ +#!/usr/bin/env bash +set -eo pipefail +[[ $DOKKU_TRACE ]] && set -x +source "$PLUGIN_AVAILABLE_PATH/plugin/internal-functions" + +trigger-plugin-update() { + declare desc="plugin update plugin trigger" + declare trigger="update" + + fn-plugin-set-permissions +} + +trigger-plugin-update "$@" diff --git a/tests/unit/plugin.bats b/tests/unit/plugin.bats index 2cbe1b4b8..25f226dfb 100644 --- a/tests/unit/plugin.bats +++ b/tests/unit/plugin.bats @@ -180,3 +180,69 @@ teardown() { echo "status: $status" assert_failure } + +@test "(plugin) plugin:install permissions set properly" { + run /bin/bash -c "ls -lah /var/lib/dokku/core-plugins/available/git/commands" + echo "output: $output" + echo "status: $status" + assert_success + assert_output_contains "root" "0" + assert_output_contains "dokku" "3" + + run /bin/bash -c "chown -R root:root /var/lib/dokku/core-plugins/available/git" + echo "output: $output" + echo "status: $status" + assert_success + + run /bin/bash -c "ls -lah /var/lib/dokku/core-plugins/available/git/commands" + echo "output: $output" + echo "status: $status" + assert_success + assert_output_contains "root" "2" + assert_output_contains "dokku" "1" + + run /bin/bash -c "dokku plugin:install" + echo "output: $output" + echo "status: $status" + assert_success + + run /bin/bash -c "ls -lah /var/lib/dokku/core-plugins/available/git/commands" + echo "output: $output" + echo "status: $status" + assert_success + assert_output_contains "root" "0" + assert_output_contains "dokku" "3" +} + +@test "(plugin) plugin:update permissions set properly" { + run /bin/bash -c "ls -lah /var/lib/dokku/core-plugins/available/git/commands" + echo "output: $output" + echo "status: $status" + assert_success + assert_output_contains "root" "0" + assert_output_contains "dokku" "3" + + run /bin/bash -c "chown -R root:root /var/lib/dokku/core-plugins/available/git" + echo "output: $output" + echo "status: $status" + assert_success + + run /bin/bash -c "ls -lah /var/lib/dokku/core-plugins/available/git/commands" + echo "output: $output" + echo "status: $status" + assert_success + assert_output_contains "root" "2" + assert_output_contains "dokku" "1" + + run /bin/bash -c "dokku plugin:update" + echo "output: $output" + echo "status: $status" + assert_success + + run /bin/bash -c "ls -lah /var/lib/dokku/core-plugins/available/git/commands" + echo "output: $output" + echo "status: $status" + assert_success + assert_output_contains "root" "0" + assert_output_contains "dokku" "3" +}