diff --git a/npm-shrinkwrap.json b/npm-shrinkwrap.json index b9de79933..fddfb4591 100644 --- a/npm-shrinkwrap.json +++ b/npm-shrinkwrap.json @@ -4495,9 +4495,9 @@ "optional": true }, "safetydance": { - "version": "0.6.0", - "from": "safetydance@0.6.0", - "resolved": "https://registry.npmjs.org/safetydance/-/safetydance-0.6.0.tgz" + "version": "0.7.1", + "from": "safetydance@0.7.1", + "resolved": "https://registry.npmjs.org/safetydance/-/safetydance-0.7.1.tgz" }, "sass-graph": { "version": "2.2.4", diff --git a/package.json b/package.json index fc6fc3cc9..37635dbad 100644 --- a/package.json +++ b/package.json @@ -59,7 +59,7 @@ "progress-stream": "^2.0.0", "proxy-middleware": "^0.13.0", "s3-block-read-stream": "^0.2.0", - "safetydance": "^0.6.0", + "safetydance": "^0.7.1", "semver": "^4.3.6", "showdown": "^1.6.0", "split": "^1.0.0", diff --git a/src/storage/filesystem.js b/src/storage/filesystem.js index e59fc6fe5..cfc556bac 100644 --- a/src/storage/filesystem.js +++ b/src/storage/filesystem.js @@ -16,7 +16,6 @@ exports = module.exports = { var assert = require('assert'), BackupsError = require('../backups.js').BackupsError, - config = require('../config.js'), debug = require('debug')('box:storage/filesystem'), fs = require('fs'), mkdirp = require('mkdirp'), @@ -32,9 +31,6 @@ function upload(apiConfig, backupFilePath, sourceStream, callback) { assert.strictEqual(typeof sourceStream, 'object'); assert.strictEqual(typeof callback, 'function'); - // in test, upload() may or may not be called via sudo script - const BACKUP_USER = config.TEST ? (process.env.SUDO_USER || process.env.USER) : 'yellowtent'; - mkdirp(path.dirname(backupFilePath), function (error) { if (error) return callback(new BackupsError(BackupsError.EXTERNAL_ERROR, error.message)); @@ -48,13 +44,15 @@ function upload(apiConfig, backupFilePath, sourceStream, callback) { }); fileStream.on('finish', function () { - shell.exec('upload', '/bin/chown', [ '-R', `${BACKUP_USER}:${BACKUP_USER}`, path.dirname(backupFilePath) ], { }, function (error) { - if (error) return callback(new BackupsError(BackupsError.INTERNAL_ERROR, error)); + // in test, upload() may or may not be called via sudo script + const BACKUP_UID = parseInt(process.env.SUDO_UID, 10) || process.getuid(); - debug('upload %s: done.', backupFilePath); + if (!safe.fs.chownSync(backupFilePath, BACKUP_UID, BACKUP_UID)) return callback(new BackupsError(BackupsError.EXTERNAL_ERROR, 'Unable to chown:' + safe.error.message)); + if (!safe.fs.chownSync(path.dirname(backupFilePath), BACKUP_UID, BACKUP_UID)) return callback(new BackupsError(BackupsError.EXTERNAL_ERROR, 'Unable to chown:' + safe.error.message)); - callback(null); - }); + debug('upload %s: done.', backupFilePath); + + callback(null); }); sourceStream.pipe(fileStream);