[51522] trunk/base/src

pguyot at kallisys.net pguyot at kallisys.net
Wed May 27 03:30:01 PDT 2009


Revision: 51522
          http://trac.macports.org/changeset/51522
Author:   pguyot at kallisys.net
Date:     2009-05-27 03:30:00 -0700 (Wed, 27 May 2009)
Log Message:
-----------
Escalation & dropping priviledges: properly get the current gid (fixes #19131)

Modified Paths:
--------------
    trunk/base/src/pextlib1.0/Pextlib.c
    trunk/base/src/pextlib1.0/uid.c
    trunk/base/src/pextlib1.0/uid.h
    trunk/base/src/port1.0/portutil.tcl

Modified: trunk/base/src/pextlib1.0/Pextlib.c
===================================================================
--- trunk/base/src/pextlib1.0/Pextlib.c	2009-05-27 08:48:05 UTC (rev 51521)
+++ trunk/base/src/pextlib1.0/Pextlib.c	2009-05-27 10:30:00 UTC (rev 51522)
@@ -1165,6 +1165,7 @@
 	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, "uname_to_gid", uname_to_gidCmd, NULL, NULL);
 	Tcl_CreateObjCommand(interp, "name_to_gid", name_to_gidCmd, NULL, NULL);
 	Tcl_CreateObjCommand(interp, "gid_to_name", gid_to_nameCmd, NULL, NULL);
 	

Modified: trunk/base/src/pextlib1.0/uid.c
===================================================================
--- trunk/base/src/pextlib1.0/uid.c	2009-05-27 08:48:05 UTC (rev 51521)
+++ trunk/base/src/pextlib1.0/uid.c	2009-05-27 10:30:00 UTC (rev 51522)
@@ -39,6 +39,8 @@
 
 #include "uid.h"
 
+#include "errno.h"
+
 /*
 	getuid
 	
@@ -274,7 +276,43 @@
 }
 
 /*
+	uname_to_gid
+	
+	synopsis: uname_to_gid name
+	this function takes a *user* name
+*/
+int uname_to_gidCmd(ClientData clientData UNUSED, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[])
+{
+	struct passwd *pwent;
+	char* name = NULL;
+	
+	/* Check the arg count */
+	if (objc != 2) {
+		Tcl_WrongNumArgs(interp, 1, objv, "name");
+		return TCL_ERROR;
+	}
+	
+	/* Get the  name */
+	name = Tcl_GetString(objv[1]);
+	if (name == NULL || !*name)
+		return TCL_ERROR;
+	
+	/* Map the name --> uid */
+	pwent = getpwnam(name);
+
+	if (pwent == NULL)
+		Tcl_SetObjResult(interp, Tcl_NewIntObj(-1));
+	else
+		Tcl_SetObjResult(interp, Tcl_NewIntObj(pwent->pw_gid)); 
+
+	return TCL_OK;
+}
+
+/*
     name_to_gid
+
+	synopsis: name_to_gid name
+    this function takes a *group* name
 */
 int name_to_gidCmd(ClientData clientData UNUSED, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[])
 {

Modified: trunk/base/src/pextlib1.0/uid.h
===================================================================
--- trunk/base/src/pextlib1.0/uid.h	2009-05-27 08:48:05 UTC (rev 51521)
+++ trunk/base/src/pextlib1.0/uid.h	2009-05-27 10:30:00 UTC (rev 51522)
@@ -45,6 +45,7 @@
 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 uname_to_gidCmd(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[]);
 

Modified: trunk/base/src/port1.0/portutil.tcl
===================================================================
--- trunk/base/src/port1.0/portutil.tcl	2009-05-27 08:48:05 UTC (rev 51521)
+++ trunk/base/src/port1.0/portutil.tcl	2009-05-27 10:30:00 UTC (rev 51522)
@@ -2427,7 +2427,7 @@
                 #seteuid [name_to_uid [file attributes $workpath -owner]]
                 #setegid [name_to_gid [file attributes $workpath -group]]
 
-                setegid [name_to_gid "$macportsuser"]
+                setegid [uname_to_gid "$macportsuser"]
                 seteuid [name_to_uid "$macportsuser"]
                 ui_debug "egid changed to: [getegid]"
                 ui_debug "euid changed to: [geteuid]"
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/macports-changes/attachments/20090527/69b8ef52/attachment.html>


More information about the macports-changes mailing list