Server IP : 185.86.78.101 / Your IP : 216.73.216.124 Web Server : Apache System : Linux 675867-vds-valikoshka1996.gmhost.pp.ua 5.4.0-150-generic #167-Ubuntu SMP Mon May 15 17:35:05 UTC 2023 x86_64 User : www ( 1000) PHP Version : 7.4.33 Disable Function : passthru,exec,system,putenv,chroot,chgrp,chown,shell_exec,popen,proc_open,pcntl_exec,ini_alter,ini_restore,dl,openlog,syslog,readlink,symlink,popepassthru,pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,imap_open,apache_setenv MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : OFF | Sudo : ON | Pkexec : OFF Directory : /www/wwwroot/mifepriston.org/node_modules/infer-owner/ |
Upload File : |
const cache = new Map() const fs = require('fs') const { dirname, resolve } = require('path') const lstat = path => new Promise((res, rej) => fs.lstat(path, (er, st) => er ? rej(er) : res(st))) const inferOwner = path => { path = resolve(path) if (cache.has(path)) return Promise.resolve(cache.get(path)) const statThen = st => { const { uid, gid } = st cache.set(path, { uid, gid }) return { uid, gid } } const parent = dirname(path) const parentTrap = parent === path ? null : er => { return inferOwner(parent).then((owner) => { cache.set(path, owner) return owner }) } return lstat(path).then(statThen, parentTrap) } const inferOwnerSync = path => { path = resolve(path) if (cache.has(path)) return cache.get(path) const parent = dirname(path) // avoid obscuring call site by re-throwing // "catch" the error by returning from a finally, // only if we're not at the root, and the parent call works. let threw = true try { const st = fs.lstatSync(path) threw = false const { uid, gid } = st cache.set(path, { uid, gid }) return { uid, gid } } finally { if (threw && parent !== path) { const owner = inferOwnerSync(parent) cache.set(path, owner) return owner // eslint-disable-line no-unsafe-finally } } } const inflight = new Map() module.exports = path => { path = resolve(path) if (inflight.has(path)) return Promise.resolve(inflight.get(path)) const p = inferOwner(path).then(owner => { inflight.delete(path) return owner }) inflight.set(path, p) return p } module.exports.sync = inferOwnerSync module.exports.clearCache = () => { cache.clear() inflight.clear() }