Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- [root@server scripts]# cat ftp_upload.php
- #!/bin/bash
- VERSION=1.2
- CURL=/usr/local/bin/curl
- if [ ! -e ${CURL} ]; then
- CURL=/usr/bin/curl
- fi
- DU=/usr/bin/du
- BC=/usr/bin/bc
- EXPR=/usr/bin/expr
- TOUCH=/bin/touch
- PORT=${ftp_port}
- FTPS=0
- MD5=${ftp_md5}
- if [ "${ftp_secure}" = "ftps" ]; then
- FTPS=1
- fi
- CURL_TLS_HELP=$(${CURL} --help tls)
- CURL_VERSION=$(${CURL} --version | head -n 1 | cut -d ' ' -f 2)
- int_version() {
- local major minor patch
- major=$(cut -d . -f 1 <<< "$1")
- minor=$(cut -d . -f 2 <<< "$1")
- patch=$(cut -d . -f 3 <<< "$1")
- printf "%03d%03d%03d" "${major}" "${minor}" "${patch}"
- }
- SSL_ARGS=""
- if grep -q 'ftp-ssl-reqd' <<< "${CURL_TLS_HELP}"; then
- SSL_ARGS="${SSL_ARGS} --ftp-ssl-reqd"
- elif grep -q 'ssl-reqd' <<< "${CURL_TLS_HELP}"; then
- SSL_ARGS="${SSL_ARGS} --ssl-reqd"
- fi
- # curl 7.77.0 fixed gnutls ignoring --tls-max if --tlsv1.x was not specified.
- # https://curl.se/bug/?i=6998
- #
- # curl 7.61.0 fixes for openssl to treat --tlsv1.x as minimum required version instead of exact version
- # https://curl.se/bug/?i=2691
- #
- # curl 7.54.0 introduced --max-tls option and changed --tlsv1.x behaviur to be min version
- # https://curl.se/bug/?i=1166
- if [ "$(int_version "${CURL_VERSION}")" -ge "$(int_version '7.54.0')" ]; then
- SSL_ARGS="${SSL_ARGS} --tlsv1.1"
- fi
- # curl 7.78.0 fixed FTP upload TLS 1.3 bug, we add `--tls-max 1.2` for older versions.
- # https://curl.se/bug/?i=7095
- if [ "$(int_version "${CURL_VERSION}")" -lt "$(int_version '7.78.0')" ] && grep -q 'tls-max' <<< "${CURL_TLS_HELP}"; then
- SSL_ARGS="${SSL_ARGS} --tls-max 1.2"
- # curls older than 7.61.0 needs --tlsv.x parameter for --tls-max to work correctly
- # https://curl.se/bug/?i=2571 - openssl: acknowledge --tls-max for default version too
- fi
- #######################################################
- # SETUP
- if [ ! -e $TOUCH ] && [ -e /usr/bin/touch ]; then
- TOUCH=/usr/bin/touch
- fi
- if [ ! -x ${EXPR} ] && [ -x /bin/expr ]; then
- EXPR=/bin/expr
- fi
- if [ ! -e "${ftp_local_file}" ]; then
- echo "Cannot find backup file ${ftp_local_file} to upload";
- /bin/ls -la ${ftp_local_path}
- /bin/df -h
- exit 11;
- fi
- get_md5() {
- MF=$1
- MD5SUM=/usr/bin/md5sum
- if [ ! -x ${MD5SUM} ]; then
- return
- fi
- if [ ! -e ${MF} ]; then
- return
- fi
- FMD5=`$MD5SUM $MF | cut -d\ -f1`
- echo "${FMD5}"
- }
- #######################################################
- CFG=${ftp_local_file}.cfg
- /bin/rm -f $CFG
- $TOUCH $CFG
- /bin/chmod 600 $CFG
- RET=0;
- #######################################################
- # FTP
- upload_file_ftp()
- {
- if [ ! -e ${CURL} ]; then
- echo "";
- echo "*** Backup not uploaded ***";
- echo "Please install curl";
- echo "";
- exit 10;
- fi
- /bin/echo "user = \"$ftp_username:$ftp_password_esc_double_quote\"" >> $CFG
- if [ ! -s ${CFG} ]; then
- echo "${CFG} is empty. curl is not going to be happy about it.";
- ls -la ${CFG}
- ls -la ${ftp_local_file}
- df -h
- fi
- #ensure ftp_path ends with /
- ENDS_WITH_SLASH=`echo "$ftp_path" | grep -c '/$'`
- if [ "${ENDS_WITH_SLASH}" -eq 0 ]; then
- ftp_path=${ftp_path}/
- fi
- ${CURL} --config ${CFG} --silent --show-error --ftp-create-dirs --upload-file $ftp_local_file ftp://$ftp_ip:${PORT}/$ftp_path$ftp_remote_file 2>&1
- RET=$?
- if [ "${RET}" -ne 0 ]; then
- echo "curl return code: $RET";
- fi
- }
- #######################################################
- # FTPS
- upload_file_ftps()
- {
- if [ ! -e ${CURL} ]; then
- echo "";
- echo "*** Backup not uploaded ***";
- echo "Please install curl";
- echo "";
- exit 10;
- fi
- /bin/echo "user = \"$ftp_username:$ftp_password_esc_double_quote\"" >> $CFG
- if [ ! -s ${CFG} ]; then
- echo "${CFG} is empty. curl is not going to be happy about it.";
- ls -la ${CFG}
- ls -la ${ftp_local_file}
- df -h
- fi
- #ensure ftp_path ends with /
- ENDS_WITH_SLASH=`echo "$ftp_path" | grep -c '/$'`
- if [ "${ENDS_WITH_SLASH}" -eq 0 ]; then
- ftp_path=${ftp_path}/
- fi
- ${CURL} --config ${CFG} ${SSL_ARGS} -k --silent --show-error --ftp-create-dirs --upload-file $ftp_local_file ftp://$ftp_ip:${PORT}/$ftp_path$ftp_remote_file 2>&1
- RET=$?
- if [ "${RET}" -ne 0 ]; then
- echo "curl return code: $RET";
- fi
- }
- #######################################################
- # Start
- if [ "${FTPS}" = "1" ]; then
- upload_file_ftps
- else
- upload_file_ftp
- fi
- if [ "${RET}" = "0" ] && [ "${MD5}" = "1" ]; then
- MD5_FILE=${ftp_local_file}.md5
- M=`get_md5 ${ftp_local_file}`
- if [ "${M}" != "" ]; then
- echo "${M}" > ${MD5_FILE}
- ftp_local_file=${MD5_FILE}
- ftp_remote_file=${ftp_remote_file}.md5
- if [ "${FTPS}" = "1" ]; then
- upload_file_ftps
- else
- upload_file
- fi
- fi
- fi
- /bin/rm -f $CFG
- exit $RET
- [root@server scripts]#
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement