[25436] branches/dp2mp-move/base/src/pextlib1.0

source_changes at macosforge.org source_changes at macosforge.org
Mon May 21 22:26:49 PDT 2007


Revision: 25436
          http://trac.macosforge.org/projects/macports/changeset/25436
Author:   jmpp at macports.org
Date:     2007-05-21 22:26:48 -0700 (Mon, 21 May 2007)

Log Message:
-----------
Merging eridius' r25140: Add setgid/getgid and related functions.

Modified Paths:
--------------
    branches/dp2mp-move/base/src/pextlib1.0/Pextlib.c
    branches/dp2mp-move/base/src/pextlib1.0/uid.c
    branches/dp2mp-move/base/src/pextlib1.0/uid.h

Modified: branches/dp2mp-move/base/src/pextlib1.0/Pextlib.c
===================================================================
--- branches/dp2mp-move/base/src/pextlib1.0/Pextlib.c	2007-05-22 05:25:16 UTC (rev 25435)
+++ branches/dp2mp-move/base/src/pextlib1.0/Pextlib.c	2007-05-22 05:26:48 UTC (rev 25436)
@@ -1155,10 +1155,16 @@
 	
 	Tcl_CreateObjCommand(interp, "getuid", getuidCmd, NULL, NULL);
 	Tcl_CreateObjCommand(interp, "geteuid", geteuidCmd, NULL, NULL);
+	Tcl_CreateObjCommand(interp, "getgid", getuidCmd, NULL, NULL);
+	Tcl_CreateObjCommand(interp, "getegid", geteuidCmd, NULL, NULL);
 	Tcl_CreateObjCommand(interp, "setuid", setuidCmd, NULL, NULL);
 	Tcl_CreateObjCommand(interp, "seteuid", seteuidCmd, NULL, NULL);
+	Tcl_CreateObjCommand(interp, "setgid", setgidCmd, NULL, NULL);
+	Tcl_CreateObjCommand(interp, "setegid", setegidCmd, NULL, NULL);
 	Tcl_CreateObjCommand(interp, "name_to_uid", name_to_uidCmd, NULL, NULL);
 	Tcl_CreateObjCommand(interp, "uid_to_name", uid_to_nameCmd, NULL, NULL);
+	Tcl_CreateObjCommand(interp, "name_to_gid", name_to_gidCmd, NULL, NULL);
+	Tcl_CreateObjCommand(interp, "gid_to_name", gid_to_nameCmd, NULL, NULL);
 
 	if (Tcl_PkgProvide(interp, "Pextlib", "1.0") != TCL_OK)
 		return TCL_ERROR;

Modified: branches/dp2mp-move/base/src/pextlib1.0/uid.c
===================================================================
--- branches/dp2mp-move/base/src/pextlib1.0/uid.c	2007-05-22 05:25:16 UTC (rev 25435)
+++ branches/dp2mp-move/base/src/pextlib1.0/uid.c	2007-05-22 05:26:48 UTC (rev 25436)
@@ -9,6 +9,7 @@
  */
  
 #include "uid.h"
+#include "grp.h"
 
 #if HAVE_CONFIG_H
 #include <config.h>
@@ -40,7 +41,6 @@
 
 #include <tcl.h>
 
-
 /*
 	getuid
 	
@@ -48,20 +48,16 @@
 */
 int getuidCmd(ClientData clientData UNUSED, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[])
 {
-	Tcl_Obj *tcl_result;
-	
 	/* Check the arg count */
 	if (objc != 1) {
         Tcl_WrongNumArgs(interp, 1, objv, NULL);
 		return TCL_ERROR;
 	}
 	
-	tcl_result = Tcl_NewLongObj(getuid());	
-	Tcl_SetObjResult(interp, tcl_result);
+	Tcl_SetObjResult(interp, Tcl_NewLongObj(getuid()));
 	return TCL_OK;
 }
 
-
 /*
 	geteuid
 	
@@ -69,21 +65,45 @@
 */
 int geteuidCmd(ClientData clientData UNUSED, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[])
 {
-	Tcl_Obj *tcl_result;
-	
 	/* Check the arg count */
 	if (objc != 1) {
         Tcl_WrongNumArgs(interp, 1, objv, NULL);
 		return TCL_ERROR;
 	}
 	
-	tcl_result = Tcl_NewLongObj(geteuid());	
-	Tcl_SetObjResult(interp, tcl_result);
+	Tcl_SetObjResult(interp, Tcl_NewLongObj(geteuid()));
 	return TCL_OK;
 }
 
+/*
+    getgid
+*/
+int getgidCmd(ClientData clientData UNUSED, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[])
+{
+    if (objc != 1) {
+        Tcl_WrongNumArgs(interp, 1, objv, NULL);
+        return TCL_ERROR;
+    }
+    
+    Tcl_SetObjResult(interp, Tcl_NewLongObj(getgid()));
+    return TCL_OK;
+}
 
 /*
+    getegid
+*/
+int getegidCmd(ClientData clientData UNUSED, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[])
+{
+    if (objc != 1) {
+        Tcl_WrongNumArgs(interp, 1, objv, NULL);
+        return TCL_ERROR;
+    }
+    
+    Tcl_SetObjResult(interp, Tcl_NewLongObj(getegid()));
+    return TCL_OK;
+}
+
+/*
 	setuid
 	
 	synopsis: setuid uid
@@ -113,8 +133,6 @@
 	return TCL_OK;
 }
 
-
-
 /*
 	seteuid
 	
@@ -145,7 +163,57 @@
 	return TCL_OK;
 }
 
+/*
+    setgid
+*/
+int setgidCmd(ClientData clientData UNUSED, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[])
+{
+    long gid;
+    
+    if (objc != 2) {
+        Tcl_WrongNumArgs(interp, 1, objv, "gid");
+        return TCL_ERROR;
+    }
+    
+    if (TCL_OK != Tcl_GetLongFromObj(interp, objv[1], &gid)) {
+        return TCL_ERROR;
+    }
+    
+    if (0 != setgid(gid)) {
+        Tcl_Obj *result = Tcl_NewStringObj("could not set gid to ", -1);
+        Tcl_AppendObjToObj(result, objv[1]);
+        Tcl_SetObjResult(interp, result);
+        return TCL_ERROR;
+    }
+    
+    return TCL_OK;
+}
 
+/*
+    setegid
+*/
+int setegidCmd(ClientData clientData UNUSED, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[])
+{
+    long gid;
+    
+    if (objc != 2) {
+        Tcl_WrongNumArgs(interp, 1, objv, "gid");
+        return TCL_ERROR;
+    }
+    
+    if (TCL_OK != Tcl_GetLongFromObj(interp, objv[1], &gid)) {
+        return TCL_ERROR;
+    }
+    
+    if (0 != setegid(gid)) {
+        Tcl_Obj *result = Tcl_NewStringObj("could not set effective gid to ", -1);
+        Tcl_AppendObjToObj(result, objv[1]);
+        Tcl_SetObjResult(interp, result);
+        return TCL_ERROR;
+    }
+    
+    return TCL_OK;
+}
 
 /*
 	name_to_uid
@@ -179,8 +247,6 @@
 	return TCL_OK;
 }
 
-
-
 /*
 	uid_to_name
 	
@@ -209,5 +275,52 @@
 	return TCL_OK;
 }
 
+/*
+    name_to_gid
+*/
+int name_to_gidCmd(ClientData clientData UNUSED, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[])
+{
+    struct group *grent;
+    char *name;
+    
+    if (objc != 2) {
+        Tcl_WrongNumArgs(interp, 1, objv, "name");
+        return TCL_ERROR;
+    }
+    
+    name = Tcl_GetString(objv[1]);
+    if (name == NULL || !*name)
+        return TCL_ERROR;
+    
+    grent = getgrnam(name);
+    
+    if (grent == NULL)
+        Tcl_SetObjResult(interp, Tcl_NewIntObj(-1));
+    else
+        Tcl_SetObjResult(interp, Tcl_NewIntObj(grent->gr_gid)); 
+    
+    return TCL_OK;
+}
 
-
+/*
+    gid_to_name
+*/
+int gid_to_nameCmd(ClientData clientData UNUSED, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[])
+{
+    long gid;
+    struct group *grent;
+    
+    if (objc != 2) {
+        Tcl_WrongNumArgs(interp, 1, objv, "gid");
+        return TCL_ERROR;
+    }
+    
+    if (TCL_OK != Tcl_GetLongFromObj(interp, objv[1], &gid))
+        return TCL_ERROR;
+    
+    grent = getgrgid(gid);
+    if (grent != NULL)
+        Tcl_SetResult(interp, grent->gr_name, TCL_STATIC);
+    
+    return TCL_OK;
+}

Modified: branches/dp2mp-move/base/src/pextlib1.0/uid.h
===================================================================
--- branches/dp2mp-move/base/src/pextlib1.0/uid.h	2007-05-22 05:25:16 UTC (rev 25435)
+++ branches/dp2mp-move/base/src/pextlib1.0/uid.h	2007-05-22 05:26:48 UTC (rev 25436)
@@ -37,10 +37,16 @@
 
 int getuidCmd(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]);
 int geteuidCmd(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]);
+int getgidCmd(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]);
+int getegidCmd(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]);
 int setuidCmd(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]);
 int seteuidCmd(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]);
+int setgidCmd(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]);
+int setegidCmd(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]);
 int name_to_uidCmd(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]);
 int uid_to_nameCmd(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]);
+int name_to_gidCmd(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]);
+int gid_to_nameCmd(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]);
 
 
 #endif

-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.macosforge.org/pipermail/macports-changes/attachments/20070521/b544926e/attachment.html


More information about the macports-changes mailing list