Hello, [email protected], le ven. 09 oct. 2026 19:56:27 +0200, a ecrit: > Please see the attached patches.
Thanks! I just fixed a couple details. > I am not entirely sure how detailed/descriptive the commit messages should > be. Feel free to adjust as you see fit. That was nice. I added a comment about changing the ABI, though. Samuel > Sep 30, 2026, 15:07 by [email protected]: > > > > > > >> Do you want the MACH_MSG_TYPE_COPY_SEND and signature change as separate > >> patches? > >> > > > > Yes, please. > > > > > >> Do you want separate patches for seteuids and setgroups (the change and > >> reason is basically identical) > >> > > > > Better keep them together in one patch. > > > >> Is there something else I need to consider for patches to glibc? > >> > > > > Nothing really particular. Since it's completely specific to the Hurd > > port, we don't have constraints. > > > > Thanks, > > Samuel > > > > From 074bee3786445aa7207d800ba0d74fa79c34627f Mon Sep 17 00:00:00 2001 > From: Yelninei <[email protected]> > Date: Fri, 9 Oct 2026 17:48:26 +0000 > Subject: [PATCH 1/3] hurd: seteuids: Specify MACH_MSG_TYPE_COPY_SEND. > > This prevents a EMIG_BAD_ARGUMENTS error. > --- > hurd/seteuids.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/hurd/seteuids.c b/hurd/seteuids.c > index 0a1e533bb3..f446847189 100644 > --- a/hurd/seteuids.c > +++ b/hurd/seteuids.c > @@ -39,8 +39,8 @@ retry: > { > /* Get a new auth port using those IDs. */ > err = __USEPORT (AUTH, > - __auth_makeauth (port, NULL, 0, 0, > new, n, > + __auth_makeauth (port, NULL, MACH_MSG_TYPE_COPY_SEND, 0, > _hurd_id.aux.uids, _hurd_id.aux.nuids, > _hurd_id.gen.gids, _hurd_id.gen.ngids, > _hurd_id.aux.gids, _hurd_id.aux.ngids, > -- > 2.54.0 > > From 82e8427863c53b498bb213910edf4a126acb4fec Mon Sep 17 00:00:00 2001 > From: Yelninei <[email protected]> > Date: Fri, 9 Oct 2026 17:48:33 +0000 > Subject: [PATCH 2/3] hurd: seteuids: Change size argument to size_t. > > setuids is analogous to setgroups so make it match signatures. > --- > hurd/hurd.h | 2 +- > hurd/seteuids.c | 2 +- > 2 files changed, 2 insertions(+), 2 deletions(-) > > diff --git a/hurd/hurd.h b/hurd/hurd.h > index 05674a93bb..3f1865c57b 100644 > --- a/hurd/hurd.h > +++ b/hurd/hurd.h > @@ -177,7 +177,7 @@ extern int _hurd_change_directory_port_from_fd (struct > hurd_port *portcell, > > /* Get and set the effective UID set. */ > extern int geteuids (int __n, uid_t *__uidset); > -extern int seteuids (int __n, const uid_t *__uidset); > +extern int seteuids (size_t __n, const uid_t *__uidset); > > > /* Split FILE into a directory and a name within the directory. The > diff --git a/hurd/seteuids.c b/hurd/seteuids.c > index f446847189..ea60021d63 100644 > --- a/hurd/seteuids.c > +++ b/hurd/seteuids.c > @@ -20,7 +20,7 @@ > > /* Set the uid set for the current user to UIDS (N of them). */ > int > -seteuids (int n, const uid_t *uids) > +seteuids (size_t n, const uid_t *uids) > { > error_t err; > auth_t newauth; > -- > 2.54.0 > > From d29e26e5795a028882a18025f1cddd5623107dcd Mon Sep 17 00:00:00 2001 > From: Yelninei <[email protected]> > Date: Fri, 9 Oct 2026 17:48:38 +0000 > Subject: [PATCH 3/3] hurd: Preserve the euid/egid in seteuids/setgroups. > > By convention the first uid/gid is the euid/egid. Ensure that the > first uid/gid in the array passed to auth_makeauth is the egid/egid to > not unexpectedly overwrite it. > --- > hurd/seteuids.c | 17 +++++++++++++---- > sysdeps/mach/hurd/setgroups.c | 17 +++++++++++++---- > 2 files changed, 26 insertions(+), 8 deletions(-) > > diff --git a/hurd/seteuids.c b/hurd/seteuids.c > index ea60021d63..8c4f5f2c20 100644 > --- a/hurd/seteuids.c > +++ b/hurd/seteuids.c > @@ -15,6 +15,7 @@ > License along with the GNU C Library; if not, see > <https://www.gnu.org/licenses/>. */ > > +#include <unistd.h> > #include <hurd.h> > #include <hurd/id.h> > > @@ -24,12 +25,20 @@ seteuids (size_t n, const uid_t *uids) > { > error_t err; > auth_t newauth; > - int i; > - gid_t new[n]; > + size_t i, start; > + uid_t euid; > + uid_t new[n + 1]; > > + start = 0; > + euid = geteuid (); > + if (euid != (uid_t) -1 && (n == 0 || (n > 0 && euid != uids[0]))) > + { > + new[0] = euid; > + start = 1; > + } > /* Fault before taking locks. */ > for (i = 0; i < n; ++i) > - new[i] = uids[i]; > + new[i + start] = uids[i]; > > retry: > HURD_CRITICAL_BEGIN; > @@ -39,8 +48,8 @@ retry: > { > /* Get a new auth port using those IDs. */ > err = __USEPORT (AUTH, > - new, n, > __auth_makeauth (port, NULL, MACH_MSG_TYPE_COPY_SEND, 0, > + new, n + start, > _hurd_id.aux.uids, _hurd_id.aux.nuids, > _hurd_id.gen.gids, _hurd_id.gen.ngids, > _hurd_id.aux.gids, _hurd_id.aux.ngids, > diff --git a/sysdeps/mach/hurd/setgroups.c b/sysdeps/mach/hurd/setgroups.c > index 5d71d89011..ddfed7cac5 100644 > --- a/sysdeps/mach/hurd/setgroups.c > +++ b/sysdeps/mach/hurd/setgroups.c > @@ -17,6 +17,7 @@ > > #include <errno.h> > #include <sys/types.h> > +#include <unistd.h> > #include <grp.h> > #include <hurd.h> > #include <hurd/id.h> > @@ -27,12 +28,20 @@ setgroups (size_t n, const gid_t *groups) > { > error_t err; > auth_t newauth; > - size_t i; > - gid_t new[n]; > + size_t i, start; > + gid_t egid; > + gid_t new[n + 1]; > > + start = 0; > + egid = getegid (); > + if (egid != (gid_t) -1 && (n == 0 || (n > 0 && egid != groups[0]))) > + { > + new[0] = egid; > + start = 1; > + } > /* Fault before taking locks. */ > for (i = 0; i < n; ++i) > - new[i] = groups[i]; > + new[i + start] = groups[i]; > > retry: > HURD_CRITICAL_BEGIN; > @@ -45,7 +54,7 @@ retry: > __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, > - new, n, > + new, n + start, > _hurd_id.aux.gids, _hurd_id.aux.ngids, > &newauth)); > } > -- > 2.54.0 > -- Samuel AUTHOR FvwmM4 is the result of a random bit mutation on a hard disk, presumably a result of a cosmic-ray or some such thing. (extrait de la page de man de FvwmM4)
