Skip to content

Commit

Permalink
release-21.1: acceptance: run python, psql containers as current uid
Browse files Browse the repository at this point in the history
Manual cherry-pick from cockroachdb#81460.

`postgres`'s permission checking for certificates has gotten more
rigorous since [this commit](https://git.postgresql.org/gitweb/?p=postgresql.git;a=commitdiff;h=a59c79564bdc209a5bc7b02d706f0d7352eb82fa).
This has broken a couple `acceptance` tests which do not pin to any
specific `postgres` version (see cockroachdb#81313, cockroachdb#81437).

Here we attempt to solve the problem "once and for all" by ensuring that
these containers run with a UID that is equal to the one that created
the certificates.

Release note: None
  • Loading branch information
rickystewart committed May 24, 2022
1 parent dd62bad commit b065031
Show file tree
Hide file tree
Showing 8 changed files with 46 additions and 3 deletions.
1 change: 1 addition & 0 deletions pkg/acceptance/compose/gss/docker-compose-python.yml
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ services:
- ../../../../cockroach-linux-2.6.32-gnu-amd64:/cockroach/cockroach
python:
build: ./python
user: "${UID}:${GID}"
depends_on:
- cockroach
command: /start.sh
Expand Down
1 change: 1 addition & 0 deletions pkg/acceptance/compose/gss/docker-compose.yml
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ services:
- ../../../../cockroach-linux-2.6.32-gnu-amd64:/cockroach/cockroach
psql:
build: ./psql
user: "${UID}:${GID}"
depends_on:
- cockroach
environment:
Expand Down
9 changes: 8 additions & 1 deletion pkg/acceptance/compose/gss/psql/Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,15 @@ FROM postgres:11

RUN apt-get update && \
DEBIAN_FRONTEND=noninteractive apt-get install --yes --no-install-recommends \
ca-certificates \
curl \
krb5-user

COPY --from=builder /workspace/gss.test .

ENTRYPOINT ["/start.sh"]
RUN curl -fsSL "https://github.com/benesch/autouseradd/releases/download/1.3.0/autouseradd-1.3.0-amd64.tar.gz" -o autouseradd.tar.gz \
&& echo "442dae58b727a79f81368127fac141d7f95501ffa05f8c48943d27c4e807deb7 autouseradd.tar.gz" | sha256sum -c - \
&& tar xzf autouseradd.tar.gz --strip-components 1 \
&& rm autouseradd.tar.gz

ENTRYPOINT ["autouseradd", "--user", "roach", "--no-create-home", "/start.sh"]
2 changes: 1 addition & 1 deletion pkg/acceptance/compose/gss/psql/gss_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ func init() {
}

func TestGSS(t *testing.T) {
connector, err := pq.NewConnector("user=root sslmode=require")
connector, err := pq.NewConnector("user=root password=rootpw sslmode=require")
if err != nil {
t.Fatal(err)
}
Expand Down
7 changes: 7 additions & 0 deletions pkg/acceptance/compose/gss/psql/start.sh
Original file line number Diff line number Diff line change
Expand Up @@ -4,4 +4,11 @@ set -e

echo psql | kinit [email protected]

echo "Preparing SQL user ahead of test"
env \
PGSSLKEY=/certs/client.root.key \
PGSSLCERT=/certs/client.root.crt \
psql -U root -c "ALTER USER root WITH PASSWORD rootpw"

echo "Running test"
./gss.test
8 changes: 8 additions & 0 deletions pkg/acceptance/compose/gss/python/Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -5,11 +5,19 @@ RUN wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | apt-k
echo "deb http://apt.postgresql.org/pub/repos/apt/ bullseye-pgdg main" | tee /etc/apt/sources.list.d/pgdg.list && \
apt-get update && \
DEBIAN_FRONTEND=noninteractive apt-get install --yes --no-install-recommends \
curl \
krb5-user \
postgresql-client-11

RUN curl -fsSL "https://github.com/benesch/autouseradd/releases/download/1.3.0/autouseradd-1.3.0-amd64.tar.gz" -o autouseradd.tar.gz \
&& echo "442dae58b727a79f81368127fac141d7f95501ffa05f8c48943d27c4e807deb7 autouseradd.tar.gz" | sha256sum -c - \
&& tar xzf autouseradd.tar.gz --strip-components 1 \
&& rm autouseradd.tar.gz

RUN mkdir /code
WORKDIR /code
COPY requirements.txt /code/
RUN pip install -r requirements.txt
COPY . /code/

ENTRYPOINT ["autouseradd", "--user", "roach", "--no-create-home", "/start.sh"]
10 changes: 9 additions & 1 deletion pkg/acceptance/compose/gss/python/start.sh
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,18 @@

set -e

echo psql | kinit [email protected]

export PGSSLKEY=/certs/client.root.key
export PGSSLCERT=/certs/client.root.crt
export PGUSER=root

psql -c "SET CLUSTER SETTING server.host_based_authentication.configuration = 'host all all all gss include_realm=0'"
psql -c "CREATE USER tester"

echo psql | kinit [email protected]
unset PGSSLKEY
unset PGSSLCERT
export PGUSER=tester

# Exit with error unless we find the expected error message.
python manage.py inspectdb 2>&1 | grep 'use of GSS authentication requires an enterprise license'
11 changes: 11 additions & 0 deletions pkg/acceptance/compose_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ import (
"os"
"os/exec"
"path/filepath"
"strconv"
"testing"
)

Expand All @@ -32,6 +33,16 @@ func TestComposeFlyway(t *testing.T) {
}

func testCompose(t *testing.T, path string, exitCodeFrom string) {
uid := os.Getuid()
err := os.Setenv("UID", strconv.Itoa(uid))
if err != nil {
t.Fatalf(err.Error())
}
gid := os.Getgid()
err = os.Setenv("GID", strconv.Itoa(gid))
if err != nil {
t.Fatalf(err.Error())
}
cmd := exec.Command(
"docker-compose",
"--no-ansi",
Expand Down

0 comments on commit b065031

Please sign in to comment.