bin/132692: [getent] [patch] no support for netgroup

Andrey Zonov andrey.zonov at gmail.com
Mon Mar 16 06:00:08 PDT 2009


>Number:         132692
>Category:       bin
>Synopsis:       [getent] [patch] no support for netgroup
>Confidential:   no
>Severity:       non-critical
>Priority:       medium
>Responsible:    freebsd-bugs
>State:          open
>Quarter:        
>Keywords:       
>Date-Required:
>Class:          change-request
>Submitter-Id:   current-users
>Arrival-Date:   Mon Mar 16 13:00:07 UTC 2009
>Closed-Date:
>Last-Modified:
>Originator:     Andrey Zonov
>Release:        7.1-RELEASE-p2
>Organization:
>Environment:
FreeBSD [hide] 7.1-RELEASE-p2 FreeBSD 7.1-RELEASE-p2 #0: Sun Jan 18 16:15:29 MSK 2009     root@[hide]:/place/usr/obj/place/usr/src/sys/GENERIC  amd64
>Description:
In FreeBSD getent not supported source "netgroup" :(
In NetBSD "getent netgroup" is enable and i make patch for FreeBSD.
>How-To-Repeat:

>Fix:


Patch attached with submission follows:

--- getent.c.orig	2009-03-16 14:47:44.000000000 +0300
+++ getent.c	2009-03-16 14:54:13.000000000 +0300
@@ -60,6 +60,7 @@
 #include <stdlib.h>
 #include <string.h>
 #include <unistd.h>
+#include <stdbool.h>
 
 static int	usage(void);
 static int	parsenum(const char *, unsigned long *);
@@ -72,6 +73,8 @@
 static int	rpc(int, char *[]);
 static int	services(int, char *[]);
 static int	shells(int, char *[]);
+static int	netgroup(int, char *[]);
+
 
 enum {
 	RV_OK		= 0,
@@ -93,6 +96,7 @@
 	{	"rpc",		rpc,		},
 	{	"services",	services,	},
 	{	"shells",	shells,		},
+	{	"netgroup",	netgroup,	},
 
 	{	NULL,		NULL,		},
 };
@@ -562,3 +566,44 @@
 	endusershell();
 	return rv;
 }
+
+/*
+ * netgroup
+ */
+static int
+netgroup(int argc, char *argv[])
+{
+	const char	*host, *user, *domain;
+	bool		first;
+	int		rv, i;
+
+	assert(argc > 1);
+	assert(argv != NULL);
+
+#define NETGROUPPRINT(s)	(((s) != NULL) ? (s) : "")
+
+	rv = RV_OK;
+	if (argc == 2) {
+		warnx("Enumeration not supported on netgroup");
+		rv = RV_NOENUM;
+	} else {
+		for (i = 2; i < argc; i++) {
+			setnetgrent(argv[i]);
+			first = true;
+			while (getnetgrent(&host, &user, &domain) != 0) {
+				if (first) {
+					first = false;
+					(void)fputs(argv[i], stdout);
+				}
+				(void)printf(" (%s,%s,%s)",
+				    NETGROUPPRINT(host),
+				    NETGROUPPRINT(user),
+				    NETGROUPPRINT(domain));
+			}
+			if (!first)
+				(void)putchar('\n');
+			endnetgrent();
+		}
+	}
+	return rv;
+}


>Release-Note:
>Audit-Trail:
>Unformatted:


More information about the freebsd-bugs mailing list