Skip to content

Setting a password on smp-server with an '@' character breaks the Docker entrypoint script #1781

Description

@dmaltsiniotis

Issue

I went down a bit of rabbit hole before realizing my Docker setup was not the issue here, but rather it was the PASS environment variable I had set that was causing smp-server to exit with code 1 and go into a container reboot loop.

Steps to reproduce:

  1. Set up the the latest Docker container using simplexchat/smp-server:latest
  2. Configure the PASS environment variable such that it contains an '@' character. PASS=passw@ord works just as well.
  3. Deploy the container and observe a totally silent failure (exit code 1) with no container logs. If the container strategy is set to reboot always, it will go into a reboot loop.

Recommend solutions:

  1. Update documentation to indicate that certain special characters are not allowed.
  2. Escape the input string properly when passing the argument to smp-server init.

I tried naively to apply the second recommendation and fix the command line parameter invocation, but after reading the first sentence of the set built-in documentation, I admit I didn't really pursue it further.

Debugging further

Starting an instance of the image and overriding the entrypoint to a shell gives us the opportunity to add some debug logs to the entrypoint script and invoke it manually for testing:

docker run --interactive --tty --entrypoint /bin/bash simplexchat/smp-server:latest

cd /usr/local/bin
export ADDR=simplex.exampledomain.local
export PASS=passw@rd
./entrypoint

In the entrypoint script, changing this line:

  smp-server init --yes \
                  --store-log \
                  --daily-stats \
                  --source-code \
                  "$@" > /dev/null 2>&1

To this:

  smp-server init --yes \
                  --store-log \
                  --daily-stats \
                  --source-code \
                  "$@"

reveals the underlying error. Now the entrypoint script fails with the following invocation error and usage example:

option --password: endOfInput

Usage: smp-server init [--disable-store-log | (-l|--store-log)]
                       [-d|--database DB_CONN] [--schema DB_SCHEMA]
                       [--pool-size POOL_SIZE] [-s|--daily-stats]
                       [-a|--sign-algorithm ALG] [--ip IP] [-n|--fqdn FQDN]
                       [--no-password | --password PASSWORD]
                       [--control-port | --control-port PORT]
                       [--socks-proxy | --socks-proxy PROXY]
                       [--own-domains DOMAINS]
                       [--source-code | --source-code URI]
                       [--operator OPERATOR_NAME]
                       [--operator-country OPERATOR_COUNTRY]
                       [--hosting HOSTING_NAME]
                       [--hosting-country HOSTING_COUNTRY]
                       [--hosting-type HOSTING_TYPE]
                       [--server-country SERVER_COUNTRY]
                       [--operator-website WEBSITE] [--web-path PATH]
                       [--disable-web] [-y|--yes]
  Initialize server - creates /etc/opt/simplex and /var/opt/simplex directories
  and configuration files

Thank you,

-DM

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions