From 3339853c26cf5b0f85b3619dac666e38c1d9efcd Mon Sep 17 00:00:00 2001 From: Asher Date: Fri, 2 Jul 2021 19:19:23 -0500 Subject: [PATCH] Avoid root when prefix is writable Previously if the prefix was non-existent we would switch to root even if the user does have the permissions to create the directory. Fixes #3585 --- .github/workflows/installer.yml | 18 ++++++++++++++++++ install.sh | 5 ++++- 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/.github/workflows/installer.yml b/.github/workflows/installer.yml index 0a004b8b..959397f4 100644 --- a/.github/workflows/installer.yml +++ b/.github/workflows/installer.yml @@ -24,6 +24,24 @@ jobs: - name: Test code-server run: yarn test:standalone-release code-server + alpine: + name: Test installer on Alpine + runs-on: ubuntu-latest + container: "alpine:3.14" + steps: + - name: Checkout repo + uses: actions/checkout@v2 + + - name: Install curl + run: apk add curl + + - name: Add user + run: adduser coder --disabled-password + + # Standalone should work without root. + - name: Test standalone to a non-existent prefix + run: su coder -c "./install.sh --method standalone --prefix /tmp/does/not/yet/exist" + macos: name: Test installer on macOS runs-on: macos-latest diff --git a/install.sh b/install.sh index e51afc19..2b77c5d3 100755 --- a/install.sh +++ b/install.sh @@ -132,7 +132,6 @@ main() { unset \ DRY_RUN \ METHOD \ - STANDALONE_INSTALL_PREFIX \ OPTIONAL \ ALL_FLAGS \ RSH_ARGS \ @@ -381,6 +380,10 @@ install_standalone() { fetch "https://github.com/cdr/code-server/releases/download/v$VERSION/code-server-$VERSION-$OS-$ARCH.tar.gz" \ "$CACHE_DIR/code-server-$VERSION-$OS-$ARCH.tar.gz" + # -w only works if the directory exists so try creating it first. If this + # fails we can ignore the error as the -w check will then swap us to sudo. + sh_c mkdir -p "$STANDALONE_INSTALL_PREFIX" 2> /dev/null || true + sh_c="sh_c" if [ ! -w "$STANDALONE_INSTALL_PREFIX" ]; then sh_c="sudo_sh_c"