From: Tim Hockin <thockin@sun.com>

Attached is a simple patch to expose NGROUPS_MAX via sysctl.  Nothing
fancy, just a read-only variable.  glibc can use this to sysconf() the
value properly, so apps will stop relying on NGROUPS_MAX as a real
constant.



---

 include/linux/sysctl.h |    1 +
 kernel/sysctl.c        |   11 +++++++++++
 2 files changed, 12 insertions(+)

diff -puN include/linux/sysctl.h~NGROUPS_MAX-sysctl include/linux/sysctl.h
--- 25/include/linux/sysctl.h~NGROUPS_MAX-sysctl	2004-02-19 23:26:29.000000000 -0800
+++ 25-akpm/include/linux/sysctl.h	2004-02-19 23:27:18.000000000 -0800
@@ -130,6 +130,7 @@ enum
 	KERN_PRINTK_RATELIMIT=60, /* int: tune printk ratelimiting */
 	KERN_PRINTK_RATELIMIT_BURST=61,	/* int: tune printk ratelimiting */
 	KERN_PTY=62,		/* dir: pty driver */
+	KERN_NGROUPS_MAX=62,	/* int: NGROUPS_MAX */
 };
 
 
diff -puN kernel/sysctl.c~NGROUPS_MAX-sysctl kernel/sysctl.c
--- 25/kernel/sysctl.c~NGROUPS_MAX-sysctl	2004-02-19 23:26:29.000000000 -0800
+++ 25-akpm/kernel/sysctl.c	2004-02-19 23:26:29.000000000 -0800
@@ -38,6 +38,7 @@
 #include <linux/security.h>
 #include <linux/initrd.h>
 #include <linux/times.h>
+#include <linux/limits.h>
 #include <asm/uaccess.h>
 
 #ifdef CONFIG_ROOT_NFS
@@ -68,6 +69,8 @@ extern int printk_ratelimit_burst;
 static int maxolduid = 65535;
 static int minolduid;
 
+static int ngroups_max = NGROUPS_MAX;
+
 #ifdef CONFIG_KMOD
 extern char modprobe_path[];
 #endif
@@ -604,6 +607,14 @@ static ctl_table kern_table[] = {
 		.mode		= 0644,
 		.proc_handler	= &proc_dointvec,
 	},
+	{
+		.ctl_name	= KERN_NGROUPS_MAX,
+		.procname	= "ngroups_max",
+		.data		= &ngroups_max,
+		.maxlen		= sizeof (int),
+		.mode		= 0444,
+		.proc_handler	= &proc_dointvec,
+	},
 	{ .ctl_name = 0 }
 };
 

_