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 <aure...@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 <sthiba...@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.thiba...@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 -- To UNSUBSCRIBE, email to debian-glibc-requ...@lists.debian.org with a subject of "unsubscribe". Trouble? Contact listmas...@lists.debian.org Archive: http://lists.debian.org/e1rfaia-0007z1...@vasks.debian.org