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: