openwrt/package/busybox/patches/803-id_getgrouplist.patch

50 lines
1.5 KiB
Diff
Raw Normal View History

This patch disable supplementary groups handling in id with uClibc versions
prior to v0.9.30, which are lacking the 'getgrouplist' function.
Signed-off-by: Nicolas Thill <nico@openwrt.org>
--- a/coreutils/id.c
+++ b/coreutils/id.c
@@ -17,10 +17,12 @@
#include "libbb.h"
+#define HAVE_GETGROUPLIST 1
+
#if !ENABLE_USE_BB_PWD_GRP
#if defined(__UCLIBC_MAJOR__) && (__UCLIBC_MAJOR__ == 0)
#if (__UCLIBC_MINOR__ < 9) || (__UCLIBC_MINOR__ == 9 && __UCLIBC_SUBLEVEL__ < 30)
-#error "Sorry, you need at least uClibc version 0.9.30 for id applet to build"
+#undef HAVE_GETGROUPLIST
#endif
#endif
#endif
@@ -82,7 +84,11 @@ static int get_groups(const char *userna
/* If the user is a member of more than
* *n groups, then -1 is returned. Otherwise >= 0.
* (and no defined way of detecting errors?!) */
+#if HAVE_GETGROUPLIST
m = getgrouplist(username, rgid, groups, n);
+#else
+ *n = -1;
+#endif
/* I guess *n < 0 might indicate error. Anyway,
* malloc'ing -1 bytes won't be good, so: */
//if (*n < 0)
@@ -154,6 +160,7 @@ int id_main(int argc UNUSED_PARAM, char
if (egid != rgid)
status |= print_group(egid, " ");
}
+#if HAVE_GETGROUPLIST
/* We are supplying largish buffer, trying
* to not run get_groups() twice. That might be slow
* ("user database in remote SQL server" case) */
@@ -181,6 +188,7 @@ int id_main(int argc UNUSED_PARAM, char
}
if (ENABLE_FEATURE_CLEAN_UP)
free(groups);
+#endif
#if ENABLE_SELINUX
if (is_selinux_enabled()) {
if (getcon(&scontext) == 0)