diff options
author | isaacs <i@izs.me> | 2012-03-13 20:48:42 +0400 |
---|---|---|
committer | isaacs <i@izs.me> | 2012-03-27 11:17:51 +0400 |
commit | 7fb3d9aaf5e9617269245876a4172b4919873a16 (patch) | |
tree | 0c24ad6a200f8fb85b3f0c733c3995bdb5815912 /node_modules | |
parent | d4b80af373175a495288a8fd3e03cac406d1b3e2 (diff) |
Abstract out 'uid-number' to a separate dependency
Diffstat (limited to 'node_modules')
-rw-r--r-- | node_modules/uid-number/README.md | 17 | ||||
-rwxr-xr-x | node_modules/uid-number/get-uid-gid.js | 24 | ||||
-rw-r--r-- | node_modules/uid-number/package.json | 34 | ||||
-rw-r--r-- | node_modules/uid-number/uid-number.js | 54 |
4 files changed, 129 insertions, 0 deletions
diff --git a/node_modules/uid-number/README.md b/node_modules/uid-number/README.md new file mode 100644 index 000000000..81166753a --- /dev/null +++ b/node_modules/uid-number/README.md @@ -0,0 +1,17 @@ +Use this module to convert a username/groupname to a uid/gid number. + +Usage: + +``` +npm install uid-number +``` + +Then, in your node program: + +```javascript +var uidNumber = require("uid-number") +uidNumber("isaacs", function (er, uid, gid) { + // gid is null because we didn't ask for a group name + // uid === 24561 because that's my number. +}) +``` diff --git a/node_modules/uid-number/get-uid-gid.js b/node_modules/uid-number/get-uid-gid.js new file mode 100755 index 000000000..0b391748a --- /dev/null +++ b/node_modules/uid-number/get-uid-gid.js @@ -0,0 +1,24 @@ +if (module !== require.main) { + throw new Error("This file should not be loaded with require()") +} + +if (!process.getuid || !process.getgid) { + throw new Error("this file should not be called without uid/gid support") +} + +var argv = process.argv.slice(2) + , user = argv[0] || process.getuid() + , group = argv[1] || process.getgid() + +if (!isNaN(user)) user = +user +if (!isNaN(group)) group = +group + +console.error([user, group]) + +try { + process.setgid(group) + process.setuid(user) + console.log(JSON.stringify({uid:+process.getuid(), gid:+process.getgid()})) +} catch (ex) { + console.log(JSON.stringify({error:ex.message,errno:ex.errno})) +} diff --git a/node_modules/uid-number/package.json b/node_modules/uid-number/package.json new file mode 100644 index 000000000..3c0592cb6 --- /dev/null +++ b/node_modules/uid-number/package.json @@ -0,0 +1,34 @@ +{ + "author": { + "name": "Isaac Z. Schlueter", + "email": "i@izs.me", + "url": "http://blog.izs.me/" + }, + "name": "uid-number", + "description": "Convert a username/group name to a uid/gid number", + "version": "0.0.3", + "repository": { + "type": "git", + "url": "git://github.com/isaacs/uid-number.git" + }, + "main": "uid-number.js", + "dependencies": {}, + "devDependencies": {}, + "optionalDependencies": {}, + "engines": { + "node": "*" + }, + "_npmUser": { + "name": "isaacs", + "email": "i@izs.me" + }, + "_id": "uid-number@0.0.3", + "_engineSupported": true, + "_npmVersion": "1.1.12", + "_nodeVersion": "v0.7.7-pre", + "_defaultsLoaded": true, + "dist": { + "shasum": "be40aeab1db6ba45d2344d4ed6015109fc9d98d4" + }, + "_from": "uid-number@0.0.3" +} diff --git a/node_modules/uid-number/uid-number.js b/node_modules/uid-number/uid-number.js new file mode 100644 index 000000000..93f372bb9 --- /dev/null +++ b/node_modules/uid-number/uid-number.js @@ -0,0 +1,54 @@ +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 = uidCache[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, err) { + if (er) return cb(new Error("could not get uid/gid\n" + err)) + 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, uidCache[gid] = +out.gid) + }) +} |