Skip to content

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

@dmaltsiniotis

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
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions