Add setgid,getgid
authorJames Duncan <james@joyent.com>
Tue, 23 Feb 2010 22:45:02 +0000 (14:45 -0800)
committerRyan Dahl <ry@tinyclouds.org>
Tue, 23 Feb 2010 22:45:02 +0000 (14:45 -0800)
doc/api.txt
src/node.cc

index 4ea7c5a..23a697a 100644 (file)
@@ -138,6 +138,9 @@ Returns the current working directory of the process.
 +process.getuid(), process.setuid(id)+::
 Gets/sets the user identity of the process. (See setuid(2).)
 
++process.getgid(), process.setgid(id)+::
+Gets/sets the group identity of the process. (See setgid(2).)
+
 +process.chdir(directory)+::
 Changes the current working directory of the process.
 
index 6df0d6e..ebf679a 100644 (file)
@@ -488,6 +488,29 @@ static Handle<Value> GetUid(const Arguments& args) {
   return scope.Close(Integer::New(uid));
 }
 
+static Handle<Value> GetGid(const Arguments& args) {
+  HandleScope scope;
+  int gid = getgid();
+  return scope.Close(Integer::New(gid));
+}
+
+
+static Handle<Value> SetGid(const Arguments& args) {
+  HandleScope scope;
+  
+  if (args.Length() < 1) {
+    return ThrowException(Exception::Error(
+         String::New("setgid requires 1 argument")));
+  }
+
+  Local<Integer> given_gid = args[0]->ToInteger();
+  int gid = given_gid->Int32Value();
+  int result;
+  if ((result == setgid(gid)) != 0) {
+    return ThrowException(Exception::Error(String::New(strerror(errno))));
+  }
+  return Undefined();
+}
 
 static Handle<Value> SetUid(const Arguments& args) {
   HandleScope scope;
@@ -1034,6 +1057,10 @@ static void Load(int argc, char *argv[]) {
   NODE_SET_METHOD(process, "cwd", Cwd);
   NODE_SET_METHOD(process, "getuid", GetUid);
   NODE_SET_METHOD(process, "setuid", SetUid);
+
+  NODE_SET_METHOD(process, "setgid", SetGid);
+  NODE_SET_METHOD(process, "getgid", GetGid);
+
   NODE_SET_METHOD(process, "umask", Umask);
   NODE_SET_METHOD(process, "dlopen", DLOpen);
   NODE_SET_METHOD(process, "kill", Kill);