diff options
author | Côme Chilliet <91878298+come-nc@users.noreply.github.com> | 2023-02-07 11:16:08 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-02-07 11:16:08 +0100 |
commit | 17ed023be26a6b6aa8f08f27d2faf4a32c2c5b24 (patch) | |
tree | d3a8184db89860fda4e389da153d64d333fa62bb | |
parent | 36347cb2cba27b216d8802ac352de54d0dd9a18f (diff) | |
parent | 3b577aa5b2bdacca287ad0de0ab0e628d3154105 (diff) | |
download | nextcloud-server-17ed023be26a6b6aa8f08f27d2faf4a32c2c5b24.tar.gz nextcloud-server-17ed023be26a6b6aa8f08f27d2faf4a32c2c5b24.zip |
Merge pull request #36314 from nextcloud/sso-kerberos-fix
Update kerberos sso test setup to use new user_saml config system
-rw-r--r-- | .github/workflows/smb-kerberos.yml | 26 | ||||
-rwxr-xr-x | apps/files_external/tests/client-cmd.sh | 6 | ||||
-rwxr-xr-x | apps/files_external/tests/setup-krb.sh | 33 | ||||
-rwxr-xr-x | apps/files_external/tests/start-apache.sh | 11 | ||||
-rwxr-xr-x | apps/files_external/tests/start-dc.sh | 29 |
5 files changed, 60 insertions, 45 deletions
diff --git a/.github/workflows/smb-kerberos.yml b/.github/workflows/smb-kerberos.yml index f47a06fbed7..896d96e592c 100644 --- a/.github/workflows/smb-kerberos.yml +++ b/.github/workflows/smb-kerberos.yml @@ -6,15 +6,17 @@ on: - stable* paths: - 'apps/files_external/**' + - '.github/workflows/smb-kerberos.yml' pull_request: paths: - 'apps/files_external/**' + - '.github/workflows/smb-kerberos.yml' jobs: smb-kerberos-tests: runs-on: ubuntu-latest - name: kerberos + name: smb-kerberos-sso steps: - name: Checkout server @@ -28,9 +30,12 @@ jobs: docker pull icewind1991/samba-krb-test-client - name: Setup AD-DC run: | + cp apps/files_external/tests/*.sh . mkdir data sudo chown -R 33 data apps config - apps/files_external/tests/setup-krb.sh + DC_IP=$(./start-dc.sh) + ./start-apache.sh $DC_IP $PWD + echo "DC_IP=$DC_IP" >> $GITHUB_ENV - name: Set up Nextcloud run: | docker exec --user 33 apache ./occ maintenance:install --verbose --database=sqlite --database-name=nextcloud --database-host=127.0.0.1 --database-user=root --database-pass=rootpassword --admin-user admin --admin-pass password @@ -39,7 +44,8 @@ jobs: # setup user_saml docker exec --user 33 apache ./occ app:enable user_saml --force docker exec --user 33 apache ./occ config:app:set user_saml type --value 'environment-variable' - docker exec --user 33 apache ./occ config:app:set user_saml general-uid_mapping --value REMOTE_USER + docker exec --user 33 apache ./occ saml:config:create + docker exec --user 33 apache ./occ saml:config:set 1 --general-uid_mapping=REMOTE_USER # setup external storage docker exec --user 33 apache ./occ app:enable files_external --force @@ -49,16 +55,12 @@ jobs: docker exec --user 33 apache ./occ files_external:list - name: Test SSO run: | - mkdir cookies - chmod 0777 cookies + mkdir /tmp/shared/cookies + chmod 0777 /tmp/shared/cookies - DC_IP=$(docker inspect dc --format '{{.NetworkSettings.IPAddress}}') echo "SAML login" - docker run --rm --name client -v $PWD/cookies:/cookies -v /tmp/shared:/shared --dns $DC_IP --hostname client.domain.test icewind1991/samba-krb-test-client \ - curl -c /cookies/jar --negotiate -u testuser@DOMAIN.TEST: --delegation always http://httpd.domain.test/index.php/apps/user_saml/saml/login + ./client-cmd.sh ${{ env.DC_IP }} curl -c /shared/cookies/jar -s --negotiate -u testuser@DOMAIN.TEST: --delegation always http://httpd.domain.test/index.php/apps/user_saml/saml/login echo "Check we are logged in" - CONTENT=$(docker run --rm --name client -v $PWD/cookies:/cookies -v /tmp/shared:/shared --dns $DC_IP --hostname client.domain.test icewind1991/samba-krb-test-client \ - curl -b /cookies/jar -s --negotiate -u testuser@DOMAIN.TEST: --delegation always http://httpd.domain.test/remote.php/webdav/smb/test.txt) - echo $CONTENT - CONTENT=$(echo $CONTENT | tr -d '[:space:]') + CONTENT=$(./client-cmd.sh ${{ env.DC_IP }} curl -b /shared/cookies/jar -s --negotiate -u testuser@DOMAIN.TEST: --delegation always http://httpd.domain.test/remote.php/webdav/smb/test.txt) + CONTENT=$(echo $CONTENT | head -n 1 | tr -d '[:space:]') [[ $CONTENT == "testfile" ]] diff --git a/apps/files_external/tests/client-cmd.sh b/apps/files_external/tests/client-cmd.sh new file mode 100755 index 00000000000..c97045bea4c --- /dev/null +++ b/apps/files_external/tests/client-cmd.sh @@ -0,0 +1,6 @@ +#!/usr/bin/env bash + +DC_IP=$1 +shift + +docker run --rm --name client -v /tmp/shared:/shared --dns $DC_IP --hostname client.domain.test icewind1991/samba-krb-test-client $@ diff --git a/apps/files_external/tests/setup-krb.sh b/apps/files_external/tests/setup-krb.sh deleted file mode 100755 index 968ba80529e..00000000000 --- a/apps/files_external/tests/setup-krb.sh +++ /dev/null @@ -1,33 +0,0 @@ -#!/bin/bash - -function getContainerHealth { - docker inspect --format "{{.State.Health.Status}}" $1 -} - -function waitContainer { - while STATUS=$(getContainerHealth $1); [ $STATUS != "healthy" ]; do - if [ $STATUS == "unhealthy" ]; then - echo "Failed!" - exit -1 - fi - printf . - lf=$'\n' - sleep 1 - done - printf "$lf" -} - -mkdir /tmp/shared - -# start the dc -docker run -dit --name dc -v /tmp/shared:/shared --hostname krb.domain.test --cap-add SYS_ADMIN icewind1991/samba-krb-test-dc -DC_IP=$(docker inspect dc --format '{{.NetworkSettings.IPAddress}}') - -waitContainer dc - -# start apache -docker run -d --name apache -v $PWD:/var/www/html -v /tmp/shared:/shared --dns $DC_IP --hostname httpd.domain.test icewind1991/samba-krb-test-apache -APACHE_IP=$(docker inspect apache --format '{{.NetworkSettings.IPAddress}}') - -# add the dns record for apache -docker exec dc samba-tool dns add krb.domain.test domain.test httpd A $APACHE_IP -U administrator --password=passwOrd1 diff --git a/apps/files_external/tests/start-apache.sh b/apps/files_external/tests/start-apache.sh new file mode 100755 index 00000000000..2c3e178e2ef --- /dev/null +++ b/apps/files_external/tests/start-apache.sh @@ -0,0 +1,11 @@ +#!/usr/bin/env bash + +docker rm -f apache 2>/dev/null > /dev/null + +docker run -d --name apache -v $2:/var/www/html -v /tmp/shared:/shared --dns $1 --hostname httpd.domain.test icewind1991/samba-krb-test-apache 1>&2 +APACHE_IP=$(docker inspect apache --format '{{.NetworkSettings.IPAddress}}') + +# add the dns record for apache +docker exec dc samba-tool dns add krb.domain.test domain.test httpd A $APACHE_IP -U administrator --password=passwOrd1 1>&2 + +echo $APACHE_IP diff --git a/apps/files_external/tests/start-dc.sh b/apps/files_external/tests/start-dc.sh new file mode 100755 index 00000000000..45fbbfbf0b5 --- /dev/null +++ b/apps/files_external/tests/start-dc.sh @@ -0,0 +1,29 @@ +#!/usr/bin/env bash + +function getContainerHealth { + docker inspect --format "{{.State.Health.Status}}" $1 +} + +function waitContainer { + while STATUS=$(getContainerHealth $1); [ $STATUS != "healthy" ]; do + if [ $STATUS == "unhealthy" ]; then + echo "Failed!" 1>&2 + exit -1 + fi + printf . 1>&2 + lf=$'\n' + sleep 1 + done + printf "$lf" 1>&2 +} + +docker rm -f dc 2>/dev/null > /dev/null + +mkdir -p /tmp/shared + +# start the dc +docker run -dit --name dc -v /tmp/shared:/shared --hostname krb.domain.test --cap-add SYS_ADMIN icewind1991/samba-krb-test-dc 1>&2 + +waitContainer dc + +docker inspect dc --format '{{.NetworkSettings.IPAddress}}' |