Mercurial > gnulib
changeset 17410:ce63398f847f
getgroups: document portability issues
Because I actually managed to hit deadlock in libvirt's child
process due to glibc's mutex use in user database lookup, I
figured it is worth documenting the issue for others to be
aware of when writing a privileged multithreaded parent app
that spawns child processes owned by non-privileged ids.
* doc/glibc-functions/initgroups.texi (initgroups): Mention
multithread safety.
* doc/posix-functions/getpwuid.texi (getpwuid): Likewise.
* doc/posix-functions/getpwuid_r.texi (getpwuid_r): Likewise.
* doc/glibc-functions/getgrouplist.texi (getgrouplist): Mention
getugroups.
* doc/posix-functions/getgroups.texi (getgroups): Mention
multithread safety and mgetgroups.
Signed-off-by: Eric Blake <eblake@redhat.com>
author | Eric Blake <eblake@redhat.com> |
---|---|
date | Wed, 22 May 2013 14:21:36 -0600 |
parents | 7266df63bb4d |
children | 08883714ab3e |
files | ChangeLog doc/glibc-functions/getgrouplist.texi doc/glibc-functions/initgroups.texi doc/posix-functions/getgroups.texi doc/posix-functions/getpwuid.texi doc/posix-functions/getpwuid_r.texi |
diffstat | 6 files changed, 31 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- a/ChangeLog Wed May 22 00:53:50 2013 +0200 +++ b/ChangeLog Wed May 22 14:21:36 2013 -0600 @@ -1,3 +1,15 @@ +2013-05-22 Eric Blake <eblake@redhat.com> + + getgroups: document portability issues + * doc/glibc-functions/initgroups.texi (initgroups): Mention + multithread safety. + * doc/posix-functions/getpwuid.texi (getpwuid): Likewise. + * doc/posix-functions/getpwuid_r.texi (getpwuid_r): Likewise. + * doc/glibc-functions/getgrouplist.texi (getgrouplist): Mention + getugroups. + * doc/posix-functions/getgroups.texi (getgroups): Mention + multithread safety and mgetgroups. + 2013-05-22 Bernhard Voelker <mail@bernhard-voelker.de> test-lchown, test-chown: also skip test if chown fails with EPERM
--- a/doc/glibc-functions/getgrouplist.texi Wed May 22 00:53:50 2013 +0200 +++ b/doc/glibc-functions/getgrouplist.texi Wed May 22 14:21:36 2013 -0600 @@ -14,3 +14,5 @@ This function is missing on some platforms: Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, OSF/1 5.1, Solaris 11 2011-11, Cygwin 1.7.9, mingw, MSVC 9, BeOS. @end itemize + +The Gnulib module @code{getugroups} provides a similar API.
--- a/doc/glibc-functions/initgroups.texi Wed May 22 00:53:50 2013 +0200 +++ b/doc/glibc-functions/initgroups.texi Wed May 22 14:21:36 2013 -0600 @@ -11,6 +11,11 @@ Portability problems not fixed by Gnulib: @itemize @item +This function is unsafe to call between @code{fork} and @code{exec} if +the parent process is multi-threaded. Instead, use @code{getgroups} or +@code{getgrouplist} (or use the gnulib module @code{mgetgroups}) +before forking, and @code{setgroups} in the child. +@item This function is missing on some platforms: mingw, MSVC 9, Interix 3.5, BeOS. @end itemize
--- a/doc/posix-functions/getgroups.texi Wed May 22 00:53:50 2013 +0200 +++ b/doc/posix-functions/getgroups.texi Wed May 22 14:21:36 2013 -0600 @@ -26,9 +26,14 @@ Portability problems not fixed by Gnulib: @itemize @item +This function is unsafe to call between @code{fork} and @code{exec} if +the parent process is multi-threaded. +@item It is unspecified whether the effective group id will be included in the returned list, nor whether the list will be sorted in any particular order. For that matter, some platforms include the effective group id twice, if it is also a member of the current supplemental group ids. @end itemize + +The Gnulib module @code{mgetgroups} provides a similar API.
--- a/doc/posix-functions/getpwuid.texi Wed May 22 00:53:50 2013 +0200 +++ b/doc/posix-functions/getpwuid.texi Wed May 22 14:21:36 2013 -0600 @@ -13,6 +13,10 @@ Portability problems not fixed by Gnulib: @itemize @item +This function is unsafe to call between @code{fork} and @code{exec} if +the parent process is multi-threaded. Instead, use @code{getpwuid_r} +prior to forking. +@item This function is missing on some platforms: mingw, MSVC 9. @end itemize
--- a/doc/posix-functions/getpwuid_r.texi Wed May 22 00:53:50 2013 +0200 +++ b/doc/posix-functions/getpwuid_r.texi Wed May 22 14:21:36 2013 -0600 @@ -16,6 +16,9 @@ Portability problems not fixed by Gnulib: @itemize @item +This function is unsafe to call between @code{fork} and @code{exec} if +the parent process is multi-threaded. Use it prior to forking. +@item This function is missing on some platforms: OpenBSD 3.8, Minix 3.1.8, mingw, MSVC 9, BeOS. @end itemize