CHANGES: snmpd: FEATURES: 1019429: Set supplementary groups via initgroups(3)
git-svn-id: file:///home/hardaker/lib/sf-bkups/net-snmp-convert-svnrepo/trunk@16437 06827809-a52a-0410-b366-d66718629ded
diff --git a/agent/snmpd.c b/agent/snmpd.c
index 2ab395d..bc115f5 100644
--- a/agent/snmpd.c
+++ b/agent/snmpd.c
@@ -429,6 +429,9 @@
int fd;
FILE *PID;
#endif
+#if HAVE_GETPWNAM && HAVE_PWD_H
+ struct passwd *info;
+#endif
#ifndef WIN32
/*
@@ -735,7 +738,6 @@
uid = strtoul(optarg, &ecp, 10);
if (*ecp) {
#if HAVE_GETPWNAM && HAVE_PWD_H
- struct passwd *info;
info = getpwnam(optarg);
if (info) {
uid = info->pw_uid;
@@ -980,6 +982,19 @@
exit(1);
}
}
+#if HAVE_GETPWNAM && HAVE_PWD_H && HAVE_INITGROUPS
+ info = getpwuid(uid);
+ if (info) {
+ DEBUGMSGTL(("snmpd/main", "Supplementary groups for %s.\n", info->pw_name));
+ if (initgroups(info->pw_name, (gid != 0 ? gid : info->pw_gid)) == -1) {
+ snmp_log_perror("initgroups failed");
+ if (!netsnmp_ds_get_boolean(NETSNMP_DS_APPLICATION_ID,
+ NETSNMP_DS_AGENT_NO_ROOT_ACCESS)) {
+ exit(1);
+ }
+ }
+ }
+#endif
}
#endif
#endif