]> gerrit.simantics Code Review - simantics/district.git/blobdiff - org.simantics.maps.server/node/node-v4.8.0-win-x64/node_modules/npm/node_modules/uid-number/uid-number.js
Adding integrated tile server
[simantics/district.git] / org.simantics.maps.server / node / node-v4.8.0-win-x64 / node_modules / npm / node_modules / uid-number / uid-number.js
diff --git a/org.simantics.maps.server/node/node-v4.8.0-win-x64/node_modules/npm/node_modules/uid-number/uid-number.js b/org.simantics.maps.server/node/node-v4.8.0-win-x64/node_modules/npm/node_modules/uid-number/uid-number.js
new file mode 100644 (file)
index 0000000..bd62184
--- /dev/null
@@ -0,0 +1,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)
+  })
+}