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	4 Feb 2011 22:38:22 -0000
@@ -742,12 +742,22 @@ 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',
-		$hostBucket ? $bucket : $bucket.'.s3.amazonaws.com', $uri, self::$__accessKey, $expires,
-		urlencode(self::__getHash("GET\n\n\n{$expires}\n/{$bucket}/{$uri}")));
+
+		// 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.
+   }
+   return sprintf(($https ? 'https' : 'http').'://%s/%s?AWSAccessKeyId=%s&Expires=%u&Signature=%s'.($overrides == '' ? '' : '&%s'),
+     $hostBucket ? $bucket : $bucket.'.s3.amazonaws.com', $uri, self::$__accessKey, $expires,
+     urlencode(self::__getHash("GET\n\n\n{$expires}\n/{$bucket}/{$uri}". ($overrides == '' ? '' : "?{$overrides}"))), $overrides);
	}


