/usr/lib/nodejs/uid-number/uid-number.js is in node-uid-number 0.0.6-1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 | module.exports = uidNumber
// This module calls into get-uid-gid.js, which sets the
// uid and gid to the supplied argument, in order to find out their
// numeric value. This can't be done in the main node process,
// because otherwise node would be running as that user from this
// point on.
var child_process = require("child_process")
, path = require("path")
, uidSupport = process.getuid && process.setuid
, uidCache = {}
, gidCache = {}
function uidNumber (uid, gid, cb) {
if (!uidSupport) return cb()
if (typeof cb !== "function") cb = gid, gid = null
if (typeof cb !== "function") cb = uid, uid = null
if (gid == null) gid = process.getgid()
if (uid == null) uid = process.getuid()
if (!isNaN(gid)) gid = gidCache[gid] = +gid
if (!isNaN(uid)) uid = uidCache[uid] = +uid
if (uidCache.hasOwnProperty(uid)) uid = uidCache[uid]
if (gidCache.hasOwnProperty(gid)) gid = gidCache[gid]
if (typeof gid === "number" && typeof uid === "number") {
return process.nextTick(cb.bind(null, null, uid, gid))
}
var getter = require.resolve("./get-uid-gid.js")
child_process.execFile( process.execPath
, [getter, uid, gid]
, function (code, out, stderr) {
if (code) {
var er = new Error("could not get uid/gid\n" + stderr)
er.code = code
return cb(er)
}
try {
out = JSON.parse(out+"")
} catch (ex) {
return cb(ex)
}
if (out.error) {
var er = new Error(out.error)
er.errno = out.errno
return cb(er)
}
if (isNaN(out.uid) || isNaN(out.gid)) return cb(new Error(
"Could not get uid/gid: "+JSON.stringify(out)))
cb(null, uidCache[uid] = +out.uid, gidCache[gid] = +out.gid)
})
}
|