Server IP : 66.29.132.122 / Your IP : 3.145.55.14 Web Server : LiteSpeed System : Linux business142.web-hosting.com 4.18.0-553.lve.el8.x86_64 #1 SMP Mon May 27 15:27:34 UTC 2024 x86_64 User : admazpex ( 531) PHP Version : 7.2.34 Disable Function : NONE MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : ON | Sudo : OFF | Pkexec : OFF Directory : /proc/self/root/proc/self/root/proc/thread-self/root/opt/alt/alt-nodejs8/root/lib/node_modules/npm/lib/utils/ |
Upload File : |
// XXX use infer-owner or gentle-fs.mkdir here const npm = require('../npm.js') const path = require('path') const chownr = require('chownr') const writeFileAtomic = require('write-file-atomic') const mkdirp = require('mkdirp') const fs = require('graceful-fs') let cache = null let cacheUid = null let cacheGid = null let needChown = typeof process.getuid === 'function' const getCacheOwner = () => { let st try { st = fs.lstatSync(cache) } catch (er) { if (er.code !== 'ENOENT') { throw er } st = fs.lstatSync(path.dirname(cache)) } cacheUid = st.uid cacheGid = st.gid needChown = st.uid !== process.getuid() || st.gid !== process.getgid() } const writeOrAppend = (method, file, data) => { if (!cache) { cache = npm.config.get('cache') } // redundant if already absolute, but prevents non-absolute files // from being written as if they're part of the cache. file = path.resolve(cache, file) if (cacheUid === null && needChown) { getCacheOwner() } const dir = path.dirname(file) const firstMade = mkdirp.sync(dir) if (!needChown) { return method(file, data) } let methodThrew = true try { method(file, data) methodThrew = false } finally { // always try to leave it in the right ownership state, even on failure // let the method error fail it instead of the chownr error, though if (!methodThrew) { chownr.sync(firstMade || file, cacheUid, cacheGid) } else { try { chownr.sync(firstMade || file, cacheUid, cacheGid) } catch (_) {} } } } exports.append = (file, data) => writeOrAppend(fs.appendFileSync, file, data) exports.write = (file, data) => writeOrAppend(writeFileAtomic.sync, file, data)