groupmems patch

George Kraft <[email protected]> Tue, 18 Jul 2006 07:33:47 -0700 (PDT)
Newsgroups gmane.linux.pld.shadow.general
Message-ID <[email protected]>
--0-503822006-1153233227=:33590
Content-Type: multipart/alternative; boundary="0-278417196-1153233227=:33590"

--0-278417196-1153233227=:33590
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit

Here is a patch to add getopt_long and PAMify groupmems.  Please review and let me know what else you need or fix.

Thanks,

George (gk4)


--0-278417196-1153233227=:33590
Content-Type: text/html; charset=iso-8859-1
Content-Transfer-Encoding: 8bit

Here is a patch to add getopt_long and PAMify groupmems.&nbsp; Please review and let me know what else you need or fix.<br><br>Thanks,<br><br>George (gk4)<br><br>
--0-278417196-1153233227=:33590--
--0-503822006-1153233227=:33590
Content-Type: text/x-patch; name="groupmems.patch"
Content-Description: 3095974306-groupmems.patch
Content-Disposition: inline; filename="groupmems.patch"

--- src/groupmems.c.orig	2006-07-16 11:56:33.000000000 -0500
+++ src/groupmems.c	2006-07-16 21:27:48.000000000 -0500
@@ -27,12 +27,17 @@
  *	
 */
 
+#include <config.h>
+
 #include <fcntl.h>
+#include <getopt.h>
 #include <grp.h>
-#include <pwd.h>
 #include <stdio.h>
-#include <sys/stat.h>
 #include <sys/types.h>
+#ifdef USE_PAM
+#include "pam_defs.h"
+#include <pwd.h>
+#endif                          /* USE_PAM */
 #include "defines.h"
 #include "groupio.h"
 
@@ -164,8 +169,27 @@
 	int arg, i;
 	char *name;
 	struct group *grp;
+#ifdef USE_PAM
+	pam_handle_t *pamh = NULL; 
+	struct passwd *pampw;
+	int retval;
+#endif
+
+	setlocale (LC_ALL, "");
+	bindtextdomain (PACKAGE, LOCALEDIR);
+	textdomain (PACKAGE);
+
+	int option_index = 0;
+	static struct option long_options[] = {
+		{"add", required_argument, NULL, 'a'},
+		{"delete", required_argument, NULL, 'd'},
+		{"group", required_argument, NULL, 'g'},
+		{"list", no_argument, NULL, 'l'},
+		{"purge", no_argument, NULL, 'p'},
+		{NULL, 0, NULL, '\0'}
+	};
 
-	while ((arg = getopt (argc, argv, "a:d:Dg:l")) != EOF) {
+	while ((arg = getopt_long (argc, argv, "a:d:g:lp", long_options, &option_index)) != EOF) {
 		switch (arg) {
 		case 'a':
 			adduser = strdup (optarg);
@@ -175,7 +199,7 @@
 			deluser = strdup (optarg);
 			++exclusive;
 			break;
-		case 'D':
+		case 'p':
 			purge = TRUE;
 			++exclusive;
 			break;
@@ -209,6 +233,38 @@
 		exit (EXIT_NOT_PRIMARY);
 	}
 
+#ifdef USE_PAM
+	retval = PAM_SUCCESS;
+
+	pampw = getpwuid (getuid ());
+	if (pampw == NULL) {
+		retval = PAM_USER_UNKNOWN;
+	}
+
+	if (retval == PAM_SUCCESS) {
+		retval = pam_start ("groupmod", pampw->pw_name, &conv, &pamh);
+	}
+
+	if (retval == PAM_SUCCESS) {
+		retval = pam_authenticate (pamh, 0);
+		if (retval != PAM_SUCCESS) {
+			pam_end (pamh, retval);
+		}
+	}
+
+	if (retval == PAM_SUCCESS) {
+		retval = pam_acct_mgmt (pamh, 0);
+		if (retval != PAM_SUCCESS) {
+			pam_end (pamh, retval);
+		}
+	}
+
+	if (retval != PAM_SUCCESS) {
+		fprintf (stderr, _("PAM authentication failed for\n"));
+		exit (1);
+	}
+#endif
+
 	if (!gr_lock ()) {
 		fprintf (stderr, _("Unable to lock group file\n"));
 		exit (EXIT_GROUP_FILE);
@@ -241,5 +297,10 @@
 
 	gr_unlock ();
 
+#ifdef USE_PAM
+	if (retval == PAM_SUCCESS) {
+		pam_end (pamh, PAM_SUCCESS);
+	}
+#endif                          /* USE_PAM */
 	exit (EXIT_SUCCESS);
 }
--- ../shadow-4.0.17/src/Makefile.in	2006-06-25 07:31:43.000000000 -0500
+++ src/Makefile.in	2006-07-13 15:28:32.000000000 -0500
@@ -43,6 +43,7 @@
 	newgrp$(EXEEXT) passwd$(EXEEXT)
 usbin_PROGRAMS = chgpasswd$(EXEEXT) chpasswd$(EXEEXT) \
 	groupadd$(EXEEXT) groupdel$(EXEEXT) groupmod$(EXEEXT) \
+	groupmems$(EXEEXT) \
 	grpck$(EXEEXT) grpconv$(EXEEXT) grpunconv$(EXEEXT) \
 	logoutd$(EXEEXT) newusers$(EXEEXT) pwck$(EXEEXT) \
 	pwconv$(EXEEXT) pwunconv$(EXEEXT) useradd$(EXEEXT) \
@@ -115,6 +116,10 @@
 groupmod_OBJECTS = groupmod.$(OBJEXT)
 groupmod_DEPENDENCIES = $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_2) \
 	$(am__DEPENDENCIES_2) $(am__DEPENDENCIES_2)
+groupmems_SOURCES = groupmems.c
+groupmems_OBJECTS = groupmems.$(OBJEXT)
+groupmems_DEPENDENCIES = $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_2) \
+	$(am__DEPENDENCIES_2) $(am__DEPENDENCIES_2)
 groups_SOURCES = groups.c
 groups_OBJECTS = groups.$(OBJEXT)
 groups_LDADD = $(LDADD)
@@ -209,12 +214,14 @@
 	$(AM_LDFLAGS) $(LDFLAGS) -o $@
 SOURCES = chage.c chfn.c chgpasswd.c chpasswd.c chsh.c expiry.c \
 	faillog.c gpasswd.c groupadd.c groupdel.c groupmod.c groups.c \
+	groupmems.c \
 	grpck.c grpconv.c grpunconv.c id.c lastlog.c $(login_SOURCES) \
 	logoutd.c newgrp.c newusers.c nologin.c passwd.c pwck.c \
 	pwconv.c pwunconv.c $(su_SOURCES) sulogin.c useradd.c \
 	userdel.c usermod.c vipw.c
 DIST_SOURCES = chage.c chfn.c chgpasswd.c chpasswd.c chsh.c expiry.c \
 	faillog.c gpasswd.c groupadd.c groupdel.c groupmod.c groups.c \
+	groupmems.c \
 	grpck.c grpconv.c grpunconv.c id.c lastlog.c $(login_SOURCES) \
 	logoutd.c newgrp.c newusers.c nologin.c passwd.c pwck.c \
 	pwconv.c pwunconv.c $(su_SOURCES) sulogin.c useradd.c \
@@ -376,6 +383,7 @@
 groupadd_LDADD = $(LDADD) $(LIBPAM) $(LIBAUDIT) $(LIBSELINUX)
 groupdel_LDADD = $(LDADD) $(LIBPAM) $(LIBAUDIT) $(LIBSELINUX)
 groupmod_LDADD = $(LDADD) $(LIBPAM) $(LIBAUDIT) $(LIBSELINUX)
+groupmems_LDADD = $(LDADD) $(LIBPAM) $(LIBAUDIT) $(LIBSELINUX)
 grpck_LDADD = $(LDADD) $(LIBSELINUX)
 grpconv_LDADD = $(LDADD) $(LIBSELINUX)
 grpunconv_LDADD = $(LDADD) $(LIBSELINUX)
@@ -585,6 +593,9 @@
 groupmod$(EXEEXT): $(groupmod_OBJECTS) $(groupmod_DEPENDENCIES) 
 	@rm -f groupmod$(EXEEXT)
 	$(LINK) $(groupmod_LDFLAGS) $(groupmod_OBJECTS) $(groupmod_LDADD) $(LIBS)
+groupmems$(EXEEXT): $(groupmems_OBJECTS) $(groupmems_DEPENDENCIES) 
+	@rm -f groupmems$(EXEEXT)
+	$(LINK) $(groupmems_LDFLAGS) $(groupmems_OBJECTS) $(groupmems_LDADD) $(LIBS)
 groups$(EXEEXT): $(groups_OBJECTS) $(groups_DEPENDENCIES) 
 	@rm -f groups$(EXEEXT)
 	$(LINK) $(groups_LDFLAGS) $(groups_OBJECTS) $(groups_LDADD) $(LIBS)
@@ -666,6 +677,7 @@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/groupadd.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/groupdel.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/groupmod.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/groupmems.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/groups.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/grpck.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/grpconv.Po@am__quote@
diff --new-file --exclude=Makefile -u ../shadow-4.0.17/etc/pam.d/groupmems etc/pam.d/groupmems
--- ../shadow-4.0.17/etc/pam.d/groupmems	1969-12-31 18:00:00.000000000 -0600
+++ etc/pam.d/groupmems	2006-07-16 20:59:22.000000000 -0500
@@ -0,0 +1,4 @@
+#%PAM-1.0
+auth		sufficient	pam_rootok.so
+account		required	pam_permit.so
+password	include		system-auth
diff --new-file --exclude=Makefile -u ../shadow-4.0.17/etc/pam.d/Makefile.in etc/pam.d/Makefile.in
--- ../shadow-4.0.17/etc/pam.d/Makefile.in	2006-06-25 07:31:37.000000000 -0500
+++ etc/pam.d/Makefile.in	2006-07-16 20:59:38.000000000 -0500
@@ -201,6 +201,7 @@
 	groupadd \
 	groupdel \
 	groupmod \
+	groupmems \
 	login \
 	newusers \
 	useradd \
--- ../shadow-4.0.17/man/groupmems.8.xml	2006-06-16 11:11:03.000000000 -0500
+++ man/groupmems.8.xml	2006-07-16 21:25:26.000000000 -0500
@@ -17,7 +17,7 @@
       <group choice='plain'>
 	<arg choice='plain'>-a <replaceable>user_name</replaceable></arg>
 	<arg choice='plain'>-d <replaceable>user_name</replaceable></arg>
-	<arg choice='plain'>-l </arg><arg choice='plain'>-D </arg>
+	<arg choice='plain'>-l </arg><arg choice='plain'>-p </arg>
 	<arg choice='opt'>-g <replaceable>group_name</replaceable></arg>
       </group>
     </cmdsynopsis>
@@ -58,9 +58,9 @@
 	</listitem>
       </varlistentry>
       <varlistentry>
-	<term><option>-D</option></term>
+	<term><option>-p</option></term>
 	<listitem>
-	  <para>Delete all users from the group membership list.</para>
+	  <para>Purge all users from the group membership list.</para>
 	</listitem>
       </varlistentry>
       <varlistentry>
--- ../shadow-4.0.17/man/Makefile.in	2006-07-10 09:00:56.000000000 -0500
+++ man/Makefile.in	2006-07-16 21:31:57.000000000 -0500
@@ -261,6 +261,7 @@
 	gpasswd.1 \
 	groupadd.8 \
 	groupdel.8 \
+	groupmems.8 \
 	groupmod.8 \
 	groups.1 \
 	grpck.8 \

--0-503822006-1153233227=:33590
Content-Type: text/plain; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: inline