Как передать аргумент в Docker с пробелами? - PullRequest
0 голосов
/ 30 октября 2018

Это может быть характерно для парсинга аргументов, сделанного https://github.com/atmoz/sftp/blob/master/entrypoint#L36

Но я пытаюсь создать каталог с пробелами:

Некоторые примеры, которые я пробовал:


docker run -d  atmoz/sftp:alpine-3.7 user:password:::Inbound - Test Dir
...
[entrypoint] Parsing user data: "user:password:::Inbound"
Creating mailbox file: No such file or directory
[entrypoint] Creating directory: /home/user/Inbound
[entrypoint] Parsing user data: "-"
[entrypoint] ERROR: Invalid username "-", do not match required regex pattern: [A-Za-z0-9._][A-Za-z0-9._-]{0,31}

docker run -d atmoz/sftp:alpine-3.7 user:password:::"Inbound - Test Dir"
...
[entrypoint] Creating directory: /home/user/Inbound
[entrypoint] Creating directory: /home/user/-
[entrypoint] Creating directory: /home/user/Test
[entrypoint] Creating directory: /home/user/Dir

docker run -d atmoz/sftp:alpine-3.7 "user:password:::Inbound - Test Dir"
...
[entrypoint] Creating directory: /home/user/Inbound
[entrypoint] Creating directory: /home/user/-
[entrypoint] Creating directory: /home/user/Test
[entrypoint] Creating directory: /home/user/Dir

docker run -d atmoz/sftp:alpine-3.7 user:password:::Inbound\ -\ Test\ Dir
...
[entrypoint] Creating directory: /home/user/Inbound
[entrypoint] Creating directory: /home/user/-
[entrypoint] Creating directory: /home/user/Test
[entrypoint] Creating directory: /home/user/Dir

 docker run -d atmoz/sftp:alpine-3.7 user:password:::'Inbound - Test Dir'
...
[entrypoint] Creating directory: /home/user/Inbound
[entrypoint] Creating directory: /home/user/-
[entrypoint] Creating directory: /home/user/Test
[entrypoint] Creating directory: /home/user/Dir

Ответы [ 2 ]

0 голосов
/ 07 ноября 2018

Это было исправлено в последней версии, основанной на этой теме: https://github.com/atmoz/sftp/issues/143

0 голосов
/ 31 октября 2018

Мне кажется, что это ошибка в функции createUser из-за отсутствия двойных кавычек вокруг различных переменных, содержащих имя каталога. Нет способа обойти это, добавив в аргумент escape-символы, кавычки и т. Д .; вам действительно нужно исправить сценарий, который вызывает проблему.

Я не проверял это, но добавление двойных кавычек в соответствующие строки 98-111 может сделать это так:

# Make sure dirs exists
if [ -n "$dir" ]; then
    IFS=',' read -a dirArgs <<< "$dir"    # Quotes added here
    for dirPath in "${dirArgs[@]}"; do    # And here
        dirPath="/home/$user/$dirPath"
        if [ ! -d "$dirPath" ]; then
            log "Creating directory: $dirPath"
            mkdir -p "$dirPath"               # And here
            chown -R $uid:users "$dirPath"    # And here
        else
            log "Directory already exists: $dirPath"
        fi
    done
fi

Возможно, в сценарии есть и другие места, способствующие возникновению проблемы, но, по крайней мере, необходимо внести вышеуказанные изменения. Кроме того, в первой строке, к которой я добавил кавычки, они нужны только в некоторых версиях bash, но лучше иметь их на всякий случай.

p.s. строка 39, вероятно, также должна быть исправлена:

IFS=':' read -a args <<< "$1"

Текущая версия использует $@, что просто странно. Функция всегда получает только один аргумент, и некоторые версии bash будут неверно интерпретировать, что если она не заключена в кавычки, то у меня есть лучший способ сделать это.

shellcheck.net указывает на кучу других сомнительных вещей, но это единственное, что я вижу, должно иметь значение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...