diff --git a/getssl b/getssl index 1617a82..b2c4e53 100755 --- a/getssl +++ b/getssl @@ -318,6 +318,7 @@ DOMAIN_KEY_LENGTH=4096 DUAL_RSA_ECDSA="false" FTP_OPTIONS="" FTPS_OPTIONS="" +FTP_ARGS="" FULL_CHAIN_INCLUDE_ROOT="false" GETSSL_IGNORE_CP_PRESERVE="false" HTTP_TOKEN_CHECK_WAIT=0 @@ -1324,10 +1325,10 @@ find_ftp_command() { FTP_COMMAND="" if [[ -n "$(command -v ftp 2>/dev/null)" ]]; then debug "Has ftp" - FTP_COMMAND="ftp -n" + FTP_COMMAND="ftp $FTP_ARGS -n" elif [[ -n "$(command -v lftp 2>/dev/null)" ]]; then debug "Has lftp" - FTP_COMMAND="lftp" + FTP_COMMAND="lftp $FTP_ARGS" fi } diff --git a/test/34-ftp-passive.bats b/test/34-ftp-passive.bats index 4fb1f7b..cdc20d6 100644 --- a/test/34-ftp-passive.bats +++ b/test/34-ftp-passive.bats @@ -35,7 +35,7 @@ teardown() { } -@test "Use Passive FTP to create challenge file" { +@test "Use Passive FTP to create challenge file (FTP_OPTIONS)" { if [ -n "$STAGING" ]; then skip "Using staging server, skipping internal test" fi @@ -87,3 +87,60 @@ EOF4 fi check_output_for_errors } + + +@test "Use Passive FTP to create challenge file (FTP_ARGS)" { + if [ -n "$STAGING" ]; then + skip "Using staging server, skipping internal test" + fi + + if [[ ! -d /var/www/html/.well-known/acme-challenge ]]; then + mkdir -p /var/www/html/.well-known/acme-challenge + fi + + NEW_FTP="false" + if [[ "$(ftp -? 2>&1 | head -1 | cut -c-6)" == "usage:" ]]; then + NEW_FTP="true" + fi + + if [[ -n "$(command -v ftp 2>/dev/null)" ]]; then + FTP_COMMAND="ftp" + elif [[ -n "$(command -v lftp 2>/dev/null)" ]]; then + FTP_COMMAND="lftp" + else + echo "host doesn't have ftp or lftp installed" + exit 1 + fi + + + # Always change ownership and permissions in case previous tests created the directories as root + chgrp -R www-data /var/www/html/.well-known + chmod -R g+w /var/www/html/.well-known + + CONFIG_FILE="getssl-http01.cfg" + setup_environment + init_getssl + + if [[ "$FTP_COMMAND" == "ftp" ]]; then + cat <<- EOF > ${INSTALL_DIR}/.getssl/${GETSSL_CMD_HOST}/getssl_test_specific.cfg +ACL="ftp:ftpuser:ftpuser:${GETSSL_CMD_HOST}:/var/www/html/.well-known/acme-challenge" +FTP_ARGS="-p -v" +EOF + else + cat <<- EOF3 > ${INSTALL_DIR}/.getssl/${GETSSL_CMD_HOST}/getssl_test_specific.cfg +ACL="ftp:ftpuser:ftpuser:${GETSSL_CMD_HOST}:/var/www/html/.well-known/acme-challenge" +FTP_ARGS="-d -e 'set ftp:passive-mode true'" +EOF3 + fi + + create_certificate + assert_success + assert_line --partial "ftp:ftpuser:ftpuser:" + + if [[ "$NEW_FTP" == "true" ]]; then + assert_line --partial "Entering Extended Passive Mode" + else + assert_line --partial "Entering Passive Mode" + fi + check_output_for_errors +}