X-Git-Url: https://git.heureux-cyclage.org/?a=blobdiff_plain;f=includes%2Ffilebackend%2FSwiftFileBackend.php;h=d6bbfbe3be36f1ea1fdbe597fa8625237ea2a31e;hb=529c02dc47fd490a59fa811d5633c99eb16f0c22;hp=91df61b82bfe4fcac58e18be70730c850b4e4183;hpb=ef92af800a83de51465dd5995897a34f21e19583;p=lhc%2Fweb%2Fwiklou.git diff --git a/includes/filebackend/SwiftFileBackend.php b/includes/filebackend/SwiftFileBackend.php index 91df61b82b..d6bbfbe3be 100644 --- a/includes/filebackend/SwiftFileBackend.php +++ b/includes/filebackend/SwiftFileBackend.php @@ -638,7 +638,7 @@ class SwiftFileBackend extends FileBackendStore { list( $rcode, $rdesc, $rhdrs, $rbody, $rerr ) = $this->http->run( array( 'method' => 'HEAD', 'url' => $this->storageUrl( $auth, $srcCont, $srcRel ), - 'headers' => $this->authTokenHeaders( $auth ) + 'headers' => $this->authTokenHeaders( $auth ) + $this->headersFromParams( $params ) ) ); if ( $rcode === 200 || $rcode === 204 ) { // Update the object if it is missing some headers @@ -708,7 +708,7 @@ class SwiftFileBackend extends FileBackendStore { $auth = $this->getAuthentication(); if ( !$auth ) { $objHdrs['x-object-meta-sha1base36'] = false; - return false; // failed + return $objHdrs; // failed } $status = Status::newGood(); @@ -726,7 +726,7 @@ class SwiftFileBackend extends FileBackendStore { 'headers' => $this->authTokenHeaders( $auth ) + $objHdrs ) ); if ( $rcode >= 200 && $rcode <= 299 ) { - return true; // success + return $objHdrs; // success } } } @@ -734,7 +734,7 @@ class SwiftFileBackend extends FileBackendStore { trigger_error( "Unable to set SHA-1 metadata for $path", E_USER_WARNING ); $objHdrs['x-object-meta-sha1base36'] = false; - return false; // failed + return $objHdrs; // failed } protected function doGetFileContentsMulti( array $params ) { @@ -1101,7 +1101,7 @@ class SwiftFileBackend extends FileBackendStore { fclose( $op['stream'] ); // close open handle if ( $rcode >= 200 && $rcode <= 299 // double check that the disk is not full/broken - && $tmpFile->getSize() == $rhdrs['content-length'] + && $tmpFiles[$path]->getSize() == $rhdrs['content-length'] ) { // good } elseif ( $rcode === 404 ) { @@ -1136,8 +1136,10 @@ class SwiftFileBackend extends FileBackendStore { if ( $this->swiftTempUrlKey != '' ) { $url = $this->storageUrl( $auth, $srcCont, $srcRel ); + // Swift wants the signature based on the unencoded object name + $contPath = parse_url( $this->storageUrl( $auth, $srcCont ), PHP_URL_PATH ); $signature = hash_hmac( 'sha1', - "GET\n{$expires}\n" . parse_url( $url, PHP_URL_PATH ), + "GET\n{$expires}\n{$contPath}/{$srcRel}", $this->swiftTempUrlKey ); return "{$url}?temp_url_sig={$signature}&temp_url_expires={$expires}"; @@ -1183,7 +1185,7 @@ class SwiftFileBackend extends FileBackendStore { protected function headersFromParams( array $params ) { $hdrs = array(); if ( !empty( $params['latest'] ) ) { - $hdrs[] = 'X-Newest: true'; + $hdrs['x-newest'] = 'true'; } return $hdrs; @@ -1568,11 +1570,11 @@ class SwiftFileBackend extends FileBackendStore { * Log an unexpected exception for this backend. * This also sets the Status object to have a fatal error. * - * @param Status $code null + * @param Status|null $status * @param string $func * @param array $params * @param string $err Error string - * @param integer $status HTTP status + * @param integer $code HTTP status * @param string $desc HTTP status description */ public function onError( $status, $func, array $params, $err = '', $code = 0, $desc = '' ) {