? overrides.patch
Index: s3.inc
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/amazon_s3/s3.inc,v
retrieving revision 1.1
diff -u -p -r1.1 s3.inc
--- s3.inc	18 Jun 2009 00:38:27 -0000	1.1
+++ s3.inc	3 Feb 2011 18:13:55 -0000
@@ -742,12 +742,23 @@ class S3 {
 	* @param boolean $https Use HTTPS ($hostBucket should be false for SSL verification)
 	* @return string
 	*/
-	public static function getAuthenticatedURL($bucket, $uri, $lifetime, $hostBucket = false, $https = false) {
+	public static function getAuthenticatedURL($bucket, $uri, $lifetime, $hostBucket = false, $https = false, $headers = array()) {
 		$expires = time() + $lifetime;
 		$uri = str_replace('%2F', '/', rawurlencode($uri)); // URI should be encoded (thanks Sean O'Dea)
-		return sprintf(($https ? 'https' : 'http').'://%s/%s?AWSAccessKeyId=%s&Expires=%u&Signature=%s',
+		
+		// Allow for headers to be overridden.
+		// @see http://docs.amazonwebservices.com/AmazonS3/latest/API/RESTObjectGET.html
+		$overrides = '';
+		if (!empty($headers)) {
+			foreach($headers as $header => $value) {
+				$overrides .= $header .'='. $value .'&';
+			}
+			$overrides = substr($overrides, 0, -1); // Chop off the last ampersand - signature breaks otherwise.
+		}
+		
+		return sprintf(($https ? 'https' : 'http').'://%s/%s?AWSAccessKeyId=%s&Expires=%u&Signature=%s&%s',
 		$hostBucket ? $bucket : $bucket.'.s3.amazonaws.com', $uri, self::$__accessKey, $expires,
-		urlencode(self::__getHash("GET\n\n\n{$expires}\n/{$bucket}/{$uri}")));
+		urlencode(self::__getHash("GET\n\n\n{$expires}\n/{$bucket}/{$uri}?{$overrides}")), $overrides);
 	}
 
 
