# Licensed under the terms of the GNU GPL v2
# Copyright 2007 Victor Lowther <victor.lowther@gmail.com>
-
+HMAC=$(dirname $0)/s3-hmac
# print a message and bail
die() {
(( res == 0 )) || die "aborting."
}
+check_hmac() {
+ if test ! -f $HMAC || test ! -x $HMAC; then
+ die "hmac script not found or not executable."
+ fi
+}
+
check_deps() {
- check_dep openssl date hmac cat grep curl
+ check_dep openssl date cat grep curl
+ check_hmac
check_s3
}
printf "%s\n%s\n%s\n%s\n%s%s%s" \
"${verb}" "${md5}" "${mime}" "${date}" \
"${headers}" "${bucket}" "${resource}" | \
- hmac sha1 "${S3_SECRET_ACCESS_KEY}" | openssl base64 -e -a
+ $HMAC sha1 "${S3_SECRET_ACCESS_KEY}" | openssl base64 -e -a
}
# cheesy, but it is the best way to have multiple headers.
# $2 = remote bucket.
# $3 = remote name
# $4 = local name.
+ # $5 = bandwidth limit.
local bucket remote date sig md5 arg inout headers
# header handling is kinda fugly, but it works.
bucket="${2:+/${2}}/" # slashify the bucket
remote="$(urlenc "${3}")" # if you don't, strange things may happen.
stdopts="--connect-timeout 10 --fail --silent"
[[ $CURL_S3_DEBUG == true ]] && stdopts="${stdopts} --show-error --fail"
+ test -n "${5}" && stdopts="${stdopts} --limit-rate ${5}"
case "${1}" in
GET) arg="-o" inout="${4:--}" # stdout if no $4
;;
# $1 = remote bucket to put it into
# $2 = remote name to put
# $3 = file to put. This must be present if $2 is.
- s3_curl PUT "${1}" "${2}" "${3:-${2}}"
+ $ $4 = bandwidth limit.
+ s3_curl PUT "${1}" "${2}" "${3:-${2}}" "${4}"
return $?
}
# $2 = remote file to get
# $3 = local file to get into. Will be overwritten if it exists.
# If this contains a path, that path must exist before calling this.
- s3_curl GET "${1}" "${2}" "${3:-${2}}"
+ $ $4 = bandwidth limit.
+ s3_curl GET "${1}" "${2}" "${3:-${2}}" "${4}"
return $?
}