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. 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