[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

r4989 - in glibc-package/trunk/debian: . patches patches/hurd-i386



Author: sthibault
Date: 2011-10-16 23:38:53 +0000 (Sun, 16 Oct 2011)
New Revision: 4989

Added:
   glibc-package/trunk/debian/patches/hurd-i386/submitted-setresid.diff
Modified:
   glibc-package/trunk/debian/changelog
   glibc-package/trunk/debian/patches/series
Log:
patches/hurd-i386/submitted-setresid.diff: New patch to fix -1 passed to
setres[ug]id.


Modified: glibc-package/trunk/debian/changelog
===================================================================
--- glibc-package/trunk/debian/changelog	2011-10-12 02:52:16 UTC (rev 4988)
+++ glibc-package/trunk/debian/changelog	2011-10-16 23:38:53 UTC (rev 4989)
@@ -1,11 +1,16 @@
 eglibc (2.13-22) UNRELEASED; urgency=low
 
+  [ Aurelien Jarno ]
   * patches/i386/local-cpuid-level2.diff: fix a typo.  Closes: #609389.
   * Don't ship /usr/share/doc/locales/README.  Closes: #643885, #643887.
   * Ignore tst-cancelx17.out error on amd64.  Closes: #643567.
 
- -- Aurelien Jarno <aurel32@debian.org>  Sun, 02 Oct 2011 00:35:40 +0200
+  [ Samuel Thibault ]
+  * patches/hurd-i386/submitted-setresid.diff: New patch to fix -1 passed to
+    setres[ug]id.
 
+ -- Samuel Thibault <sthibault@debian.org>  Mon, 17 Oct 2011 01:23:52 +0200
+
 eglibc (2.13-21) unstable; urgency=low
 
   [ Samuel Thibault ]

Added: glibc-package/trunk/debian/patches/hurd-i386/submitted-setresid.diff
===================================================================
--- glibc-package/trunk/debian/patches/hurd-i386/submitted-setresid.diff	                        (rev 0)
+++ glibc-package/trunk/debian/patches/hurd-i386/submitted-setresid.diff	2011-10-16 23:38:53 UTC (rev 4989)
@@ -0,0 +1,225 @@
+2011-10-17  Samuel Thibault  <samuel.thibault@ens-lyon.org>
+
+* sysdeps/mach/hurd/setresgid.c (__setresgid): Handle the -1 case, which
+shall preserve existing values.
+* sysdeps/mach/hurd/setresuid.c (__setresuid): Likewise.
+
+---
+ setresgid.c |   73 ++++++++++++++++++++++++++++++++++++++++++++++++------------
+ setresuid.c |   73 ++++++++++++++++++++++++++++++++++++++++++++++++------------
+ 2 files changed, 118 insertions(+), 28 deletions(-)
+
+diff --git a/sysdeps/mach/hurd/setresgid.c b/sysdeps/mach/hurd/setresgid.c
+index 8fcf26e..2a0dd90 100644
+--- a/sysdeps/mach/hurd/setresgid.c
++++ b/sysdeps/mach/hurd/setresgid.c
+@@ -1,5 +1,5 @@
+ /* setresgid -- set real group ID, effective group ID, and saved-set group ID
+-   Copyright (C) 2002, 2005, 2006 Free Software Foundation, Inc.
++   Copyright (C) 2002, 2005, 2006, 2011 Free Software Foundation, Inc.
+    This file is part of the GNU C Library.
+ 
+    The GNU C Library is free software; you can redistribute it and/or
+@@ -29,7 +29,6 @@ __setresgid (gid_t rgid, gid_t egid, gid_t sgid)
+ {
+   auth_t newauth;
+   error_t err;
+-  gid_t agids[2] = { rgid, sgid };
+ 
+   HURD_CRITICAL_BEGIN;
+   __mutex_lock (&_hurd_id.lock);
+@@ -40,29 +39,75 @@ __setresgid (gid_t rgid, gid_t egid, gid_t sgid)
+       /* Make a new auth handle which has EGID as the first element in the
+          list of effective gids.  */
+ 
+-      if (_hurd_id.gen.ngids > 0)
++      uid_t *newgen, *newaux;
++      uid_t auxs[2] = { rgid, sgid };
++      size_t ngen, naux;
++
++      newgen = _hurd_id.gen.gids;
++      ngen = _hurd_id.gen.ngids;
++      if (egid != -1)
++	{
++	  if (_hurd_id.gen.ngids == 0)
++	    {
++	      /* No effective gids now.  The new set will be just UID.  */
++	      newgen = &egid;
++	      ngen = 1;
++	    }
++	  else
++	    {
++	      _hurd_id.gen.gids[0] = egid;
++	      _hurd_id.valid = 0;
++	    }
++	}
++
++      newaux = _hurd_id.aux.gids;
++      naux = _hurd_id.aux.ngids;
++      if (rgid != -1)
+ 	{
+-	  _hurd_id.gen.gids[0] = egid;
+-	  _hurd_id.valid = 0;
++	  if (_hurd_id.aux.ngids == 0)
++	    {
++	      newaux = &rgid;
++	      naux = 1;
++	    }
++	  else
++	    {
++	      _hurd_id.aux.gids[0] = rgid;
++	      _hurd_id.valid = 0;
++	    }
+ 	}
+-      if (_hurd_id.aux.ngids > 1)
++
++      if (sgid != -1)
+ 	{
+-	  _hurd_id.aux.gids[0] = rgid;
+-	  _hurd_id.aux.gids[1] = sgid;
+-	  _hurd_id.valid = 0;
++	  if (rgid == -1)
++	    {
++	      if (_hurd_id.aux.ngids >= 1)
++		auxs[0] = _hurd_id.aux.gids[0];
++	      else if (_hurd_id.gen.ngids >= 1)
++		auxs[0] = _hurd_id.gen.gids[0];
++	      else
++		/* Not even an effective gid, fallback to the only UID we have. */
++		auxs[0] = sgid;
++	    }
++	  if (_hurd_id.aux.ngids <= 1)
++	    {
++	      /* No saved gids now.  The new set will be just UID.  */
++	      newaux = auxs;
++	      naux = 2;
++	    }
++	  else
++	    {
++	      _hurd_id.aux.gids[1] = sgid;
++	      _hurd_id.valid = 0;
++	    }
+ 	}
+ 
+       err = __USEPORT (AUTH, __auth_makeauth
+ 		       (port, NULL, MACH_MSG_TYPE_COPY_SEND, 0,
+ 			_hurd_id.gen.uids, _hurd_id.gen.nuids,
+ 			_hurd_id.aux.uids, _hurd_id.aux.nuids,
+-			_hurd_id.gen.ngids ? _hurd_id.gen.gids : &egid,
+-			_hurd_id.gen.ngids ?: 1,
+-			_hurd_id.aux.ngids > 1 ? _hurd_id.aux.gids : agids,
+-			_hurd_id.aux.ngids > 1 ? _hurd_id.aux.ngids : 2,
++			newgen, ngen, newaux, naux,
+ 			&newauth));
+     }
+-
+   __mutex_unlock (&_hurd_id.lock);
+   HURD_CRITICAL_END;
+ 
+diff --git a/sysdeps/mach/hurd/setresuid.c b/sysdeps/mach/hurd/setresuid.c
+index ccf8d08..e254437 100644
+--- a/sysdeps/mach/hurd/setresuid.c
++++ b/sysdeps/mach/hurd/setresuid.c
+@@ -1,5 +1,5 @@
+ /* setresuid -- set real user ID, effective user ID, and saved-set user ID
+-   Copyright (C) 2002, 2005, 2006 Free Software Foundation, Inc.
++   Copyright (C) 2002, 2005, 2006, 2011 Free Software Foundation, Inc.
+    This file is part of the GNU C Library.
+ 
+    The GNU C Library is free software; you can redistribute it and/or
+@@ -29,7 +29,6 @@ __setresuid (uid_t ruid, uid_t euid, uid_t suid)
+ {
+   auth_t newauth;
+   error_t err;
+-  uid_t auids[2] = { ruid, suid };
+ 
+   HURD_CRITICAL_BEGIN;
+   __mutex_lock (&_hurd_id.lock);
+@@ -40,29 +39,75 @@ __setresuid (uid_t ruid, uid_t euid, uid_t suid)
+       /* Make a new auth handle which has EUID as the first element in the
+          list of effective uids.  */
+ 
+-      if (_hurd_id.gen.nuids > 0)
++      uid_t *newgen, *newaux;
++      uid_t auxs[2] = { ruid, suid };
++      size_t ngen, naux;
++
++      newgen = _hurd_id.gen.uids;
++      ngen = _hurd_id.gen.nuids;
++      if (euid != -1)
++	{
++	  if (_hurd_id.gen.nuids == 0)
++	    {
++	      /* No effective uids now.  The new set will be just UID.  */
++	      newgen = &euid;
++	      ngen = 1;
++	    }
++	  else
++	    {
++	      _hurd_id.gen.uids[0] = euid;
++	      _hurd_id.valid = 0;
++	    }
++	}
++
++      newaux = _hurd_id.aux.uids;
++      naux = _hurd_id.aux.nuids;
++      if (ruid != -1)
+ 	{
+-	  _hurd_id.gen.uids[0] = euid;
+-	  _hurd_id.valid = 0;
++	  if (_hurd_id.aux.nuids == 0)
++	    {
++	      newaux = &ruid;
++	      naux = 1;
++	    }
++	  else
++	    {
++	      _hurd_id.aux.uids[0] = ruid;
++	      _hurd_id.valid = 0;
++	    }
+ 	}
+-      if (_hurd_id.aux.nuids > 1)
++
++      if (suid != -1)
+ 	{
+-	  _hurd_id.aux.uids[0] = ruid;
+-	  _hurd_id.aux.uids[1] = suid;
+-	  _hurd_id.valid = 0;
++	  if (ruid == -1)
++	    {
++	      if (_hurd_id.aux.nuids >= 1)
++		auxs[0] = _hurd_id.aux.uids[0];
++	      else if (_hurd_id.gen.nuids >= 1)
++		auxs[0] = _hurd_id.gen.uids[0];
++	      else
++		/* Not even an effective uid, fallback to the only UID we have. */
++		auxs[0] = suid;
++	    }
++	  if (_hurd_id.aux.nuids <= 1)
++	    {
++	      /* No saved uids now.  The new set will be just UID.  */
++	      newaux = auxs;
++	      naux = 2;
++	    }
++	  else
++	    {
++	      _hurd_id.aux.uids[1] = suid;
++	      _hurd_id.valid = 0;
++	    }
+ 	}
+ 
+       err = __USEPORT (AUTH, __auth_makeauth
+ 		       (port, NULL, MACH_MSG_TYPE_COPY_SEND, 0,
+-			_hurd_id.gen.nuids ? _hurd_id.gen.uids : &euid,
+-			_hurd_id.gen.nuids ?: 1,
+-			_hurd_id.aux.nuids > 1 ? _hurd_id.aux.uids : auids,
+-			_hurd_id.aux.nuids > 1 ? _hurd_id.aux.nuids : 2,
++			newgen, ngen, newaux, naux,
+ 			_hurd_id.gen.gids, _hurd_id.gen.ngids,
+ 			_hurd_id.aux.gids, _hurd_id.aux.ngids,
+ 			&newauth));
+     }
+-
+   __mutex_unlock (&_hurd_id.lock);
+   HURD_CRITICAL_END;
+ 

Modified: glibc-package/trunk/debian/patches/series
===================================================================
--- glibc-package/trunk/debian/patches/series	2011-10-12 02:52:16 UTC (rev 4988)
+++ glibc-package/trunk/debian/patches/series	2011-10-16 23:38:53 UTC (rev 4989)
@@ -154,6 +154,7 @@
 hurd-i386/submitted-ttyname_ERANGE.diff
 hurd-i386/cvs-DEV_BSIZE.diff
 hurd-i386/cvs-fork_ports.diff
+hurd-i386/submitted-setresid.diff
 
 ia64/local-dlfptr.diff
 ia64/submitted-sysconf.diff


Reply to: