diff --git a/src/docker-entrypoint.sh b/src/docker-entrypoint.sh index ee38fed..991ceb7 100755 --- a/src/docker-entrypoint.sh +++ b/src/docker-entrypoint.sh @@ -1,10 +1,11 @@ #!/bin/sh FTP_DATA=/home/$FTP_USER FTP_GROUP=$( getent group "$GID" | awk -F ':' '{print $1}' ) +VSFTPD_CONF=/etc/vsftpd.conf if test -z "$FTP_GROUP"; then - FTP_GROUP=$FTP_USER - addgroup -g "$GID" -S "$FTP_GROUP" + FTP_GROUP=$FTP_USER + addgroup -g "$GID" -S "$FTP_GROUP" fi adduser -D -G "$FTP_GROUP" -h "$FTP_DATA" -s "/bin/false" -u "$UID" "$FTP_USER" @@ -13,6 +14,28 @@ mkdir -p $FTP_DATA chown -R "$FTP_USER:$FTP_GROUP" "$FTP_DATA" echo "$FTP_USER:$FTP_PASS" | /usr/sbin/chpasswd +env | grep -q '^VSFTPD_' && echo "Updating ${VSFTPD_CONF} from environment" +env \ +| grep '^VSFTPD_' \ +| sed -e 's/^VSFTPD_//' \ +| while read envvar; do + varname="$( echo "$envvar" | cut -d= -f 1 )" + value="$( echo "$envvar" | cut -d= -f 2- )" + + if grep -q -e "^${varname}[[:space:]]*=" "$VSFTPD_CONF"; then + old_value="$(grep -e "^${varname}[[:space:]]*=" "$VSFTPD_CONF" | sed -re 's/^[^=]+=//' | head -1 )" + if [ "$old_value" = "$value" ]; then + echo "Unchanged $envvar, not updating" + else + echo "Updating $envvar" + sed -ri "s/^${varname}[[:space:]]*=.*/${varname}=${value}/" "$VSFTPD_CONF" + fi + else + echo "Adding $envvar" + echo "${varname}=${value}" >>"$VSFTPD_CONF" + fi +done + sed -i -r "s/0.0.0.0/$PUBLIC_IP/g" /etc/vsftpd.conf touch /var/log/vsftpd.log