diff options
author | Kat Marchán <kzm@sykosomatic.org> | 2017-04-29 01:11:18 +0300 |
---|---|---|
committer | Rebecca Turner <me@re-becca.org> | 2017-05-26 02:13:33 +0300 |
commit | c8b66854adef8d91c4ad2b058db6f1ca48031b58 (patch) | |
tree | 5e34a1bc728c551d5fa1cbf6bd50d53a04c634f3 /node_modules/cacache/lib/util/fix-owner.js | |
parent | cbaf1c914036bc8ac1f9ea965ccba4fd690c8c45 (diff) |
pacote@2.7.4
Diffstat (limited to 'node_modules/cacache/lib/util/fix-owner.js')
-rw-r--r-- | node_modules/cacache/lib/util/fix-owner.js | 44 |
1 files changed, 44 insertions, 0 deletions
diff --git a/node_modules/cacache/lib/util/fix-owner.js b/node_modules/cacache/lib/util/fix-owner.js new file mode 100644 index 000000000..7000bff04 --- /dev/null +++ b/node_modules/cacache/lib/util/fix-owner.js @@ -0,0 +1,44 @@ +'use strict' + +const BB = require('bluebird') + +const chownr = BB.promisify(require('chownr')) +const mkdirp = BB.promisify(require('mkdirp')) +const inflight = require('promise-inflight') + +module.exports.chownr = fixOwner +function fixOwner (filepath, uid, gid) { + if (!process.getuid) { + // This platform doesn't need ownership fixing + return BB.resolve() + } + if (typeof uid !== 'number' && typeof gid !== 'number') { + // There's no permissions override. Nothing to do here. + return BB.resolve() + } + if ((typeof uid === 'number' && process.getuid() === uid) && + (typeof gid === 'number' && process.getgid() === gid)) { + // No need to override if it's already what we used. + return BB.resolve() + } + return inflight( + 'fixOwner: fixing ownership on ' + filepath, + () => chownr( + filepath, + typeof uid === 'number' ? uid : process.getuid(), + typeof gid === 'number' ? gid : process.getgid() + ).catch({code: 'ENOENT'}, () => null) + ) +} + +module.exports.mkdirfix = mkdirfix +function mkdirfix (p, uid, gid, cb) { + return mkdirp(p).then(made => { + if (made) { + return fixOwner(made, uid, gid).then(() => made) + } + }).catch({code: 'EEXIST'}, () => { + // There's a race in mkdirp! + return fixOwner(p, uid, gid).then(() => null) + }) +} |