summaryrefslogtreecommitdiffstats
path: root/contrib/groupmems.shar
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-06-26 16:18:39 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-06-26 16:18:39 +0000
commit5242eef8fc54636a41701fd9d7083ba6e4a4e0b3 (patch)
treee6a0980092957865a937cc0f34446df3d5194e99 /contrib/groupmems.shar
parentReleasing progress-linux version 1:4.13+dfsg1-5~progress7.99u1. (diff)
downloadshadow-5242eef8fc54636a41701fd9d7083ba6e4a4e0b3.tar.xz
shadow-5242eef8fc54636a41701fd9d7083ba6e4a4e0b3.zip
Merging upstream version 1:4.15.2.
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'contrib/groupmems.shar')
-rw-r--r--contrib/groupmems.shar465
1 files changed, 0 insertions, 465 deletions
diff --git a/contrib/groupmems.shar b/contrib/groupmems.shar
deleted file mode 100644
index 62e9b48..0000000
--- a/contrib/groupmems.shar
+++ /dev/null
@@ -1,465 +0,0 @@
-#!/bin/sh
-# This is a shell archive (produced by GNU sharutils 4.2.1).
-# To extract the files from this archive, save it to some FILE, remove
-# everything before the `!/bin/sh' line above, then type `sh FILE'.
-#
-# Made on 2000-05-25 14:41 CDT by <gk4@gnu.austin.ibm.com>.
-# Source directory was `/home/gk4/src/groupmem'.
-#
-# Existing files will *not* be overwritten unless `-c' is specified.
-#
-# This shar contains:
-# length mode name
-# ------ ---------- ------------------------------------------
-# 1960 -rw-r--r-- Makefile
-# 6348 -rw-r--r-- groupmems.c
-# 3372 -rw------- groupmems.8
-#
-save_IFS="${IFS}"
-IFS="${IFS}:"
-gettext_dir=FAILED
-locale_dir=FAILED
-first_param="$1"
-for dir in $PATH
-do
- if test "$gettext_dir" = FAILED && test -f $dir/gettext \
- && ($dir/gettext --version >/dev/null 2>&1)
- then
- set `$dir/gettext --version 2>&1`
- if test "$3" = GNU
- then
- gettext_dir=$dir
- fi
- fi
- if test "$locale_dir" = FAILED && test -f $dir/shar \
- && ($dir/shar --print-text-domain-dir >/dev/null 2>&1)
- then
- locale_dir=`$dir/shar --print-text-domain-dir`
- fi
-done
-IFS="$save_IFS"
-if test "$locale_dir" = FAILED || test "$gettext_dir" = FAILED
-then
- echo=echo
-else
- TEXTDOMAINDIR=$locale_dir
- export TEXTDOMAINDIR
- TEXTDOMAIN=sharutils
- export TEXTDOMAIN
- echo="$gettext_dir/gettext -s"
-fi
-if touch -am -t 200112312359.59 $$.touch >/dev/null 2>&1 && test ! -f 200112312359.59 -a -f $$.touch; then
- shar_touch='touch -am -t $1$2$3$4$5$6.$7 "$8"'
-elif touch -am 123123592001.59 $$.touch >/dev/null 2>&1 && test ! -f 123123592001.59 -a ! -f 123123592001.5 -a -f $$.touch; then
- shar_touch='touch -am $3$4$5$6$1$2.$7 "$8"'
-elif touch -am 1231235901 $$.touch >/dev/null 2>&1 && test ! -f 1231235901 -a -f $$.touch; then
- shar_touch='touch -am $3$4$5$6$2 "$8"'
-else
- shar_touch=:
- echo
- $echo 'WARNING: not restoring timestamps. Consider getting and'
- $echo "installing GNU \`touch', distributed in GNU File Utilities..."
- echo
-fi
-rm -f 200112312359.59 123123592001.59 123123592001.5 1231235901 $$.touch
-#
-if mkdir _sh10937; then
- $echo 'x -' 'creating lock directory'
-else
- $echo 'failed to create lock directory'
- exit 1
-fi
-# ============= Makefile ==============
-if test -f 'Makefile' && test "$first_param" != -c; then
- $echo 'x -' SKIPPING 'Makefile' '(file already exists)'
-else
- $echo 'x -' extracting 'Makefile' '(text)'
- sed 's/^X//' << 'SHAR_EOF' > 'Makefile' &&
-/*
-# SPDX-FileCopyrightText: 2000, International Business Machines, Inc.
-# SPDX-FileCopyrightText: 2000, George Kraft IV, gk4@us.ibm.com
-# SPDX-License-Identifier: BSD-3-Clause
-#
-X
-all: groupmems
-X
-groupmems: groupmems.c
-X cc -g -o groupmems groupmems.c -L. -lshadow
-X
-install: groupmems
-X -/usr/sbin/groupadd groups
-X install -o root -g groups -m 4770 groupmems /usr/bin
-X
-install.man: groupmems.8
-X install -o root -g root -m 644 groupmems.8 /usr/man/man8
-X
-SHAR_EOF
- (set 20 00 05 25 14 40 28 'Makefile'; eval "$shar_touch") &&
- chmod 0644 'Makefile' ||
- $echo 'restore of' 'Makefile' 'failed'
- if ( md5sum --help 2>&1 | grep 'sage: md5sum \[' ) >/dev/null 2>&1 \
- && ( md5sum --version 2>&1 | grep -v 'textutils 1.12' ) >/dev/null; then
- md5sum -c << SHAR_EOF >/dev/null 2>&1 \
- || $echo 'Makefile:' 'MD5 check failed'
-b46cf7ef8d59149093c011ced3f3103c Makefile
-SHAR_EOF
- else
- shar_count="`LC_ALL= LC_CTYPE= LANG= wc -c < 'Makefile'`"
- test 1960 -eq "$shar_count" ||
- $echo 'Makefile:' 'original size' '1960,' 'current size' "$shar_count!"
- fi
-fi
-# ============= groupmems.c ==============
-if test -f 'groupmems.c' && test "$first_param" != -c; then
- $echo 'x -' SKIPPING 'groupmems.c' '(file already exists)'
-else
- $echo 'x -' extracting 'groupmems.c' '(text)'
- sed 's/^X//' << 'SHAR_EOF' > 'groupmems.c' &&
-/*
-X * SPDX-FileCopyrightText: 2000, International Business Machines, Inc.
-X * SPDX-FileCopyrightText: 2000, George Kraft IV, gk4@us.ibm.com
-X * SPDX-License-Identifier: BSD-3-Clause
-X */
-/*
-**
-** Utility "groupmem" adds and deletes members from a user's group.
-**
-** Setup (as "root"):
-**
-** groupadd -r groups
-** chmod 2770 groupmems
-** chown root.groups groupmems
-** groupmems -g groups -a gk4
-**
-** Usage (as "gk4"):
-**
-** groupmems -a olive
-** groupmems -a jordan
-** groupmems -a meghan
-** groupmems -a morgan
-** groupmems -a jake
-** groupmems -l
-** groupmems -d jake
-** groupmems -l
-*/
-X
-#include <stdio.h>
-#include <pwd.h>
-#include <grp.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <fcntl.h>
-#include "defines.h"
-#include "groupio.h"
-X
-/* Exit Status Values */
-X
-#define EXIT_SUCCESS 0 /* success */
-#define EXIT_USAGE 1 /* invalid command syntax */
-#define EXIT_GROUP_FILE 2 /* group file access problems */
-#define EXIT_NOT_ROOT 3 /* not superuser */
-#define EXIT_NOT_EROOT 4 /* not effective superuser */
-#define EXIT_NOT_PRIMARY 5 /* not primary owner of group */
-#define EXIT_NOT_MEMBER 6 /* member of group does not exist */
-#define EXIT_MEMBER_EXISTS 7 /* member of group already exists */
-X
-#define TRUE 1
-#define FALSE 0
-X
-/* Globals */
-X
-extern int optind;
-extern char *optarg;
-static char *adduser = NULL;
-static char *deluser = NULL;
-static char *thisgroup = NULL;
-static int purge = FALSE;
-static int list = FALSE;
-static int exclusive = 0;
-X
-static int isroot(void) {
-X return getuid() ? FALSE : TRUE;
-}
-X
-static int isgroup(void) {
-X gid_t g = getgid();
-X struct group *grp = getgrgid(g);
-X
-X return TRUE;
-}
-X
-static char *whoami(void) {
-X struct group *grp = getgrgid(getgid());
-X struct passwd *usr = getpwuid(getuid());
-X
-X if (0 == strcmp(usr->pw_name, grp->gr_name)) {
-X return (char *)strdup(usr->pw_name);
-X } else {
-X return NULL;
-X }
-}
-X
-static void
-addtogroup(char *user, char **members) {
-X int i;
-X char **pmembers;
-X
-X for (i = 0; NULL != members[i]; i++ ) {
-X if (0 == strcmp(user, members[i])) {
-X fprintf(stderr, "Member already exists\n");
-X exit(EXIT_MEMBER_EXISTS);
-X }
-X }
-X
-X if (0 == i) {
-X pmembers = (char **)calloc(2, sizeof(char *));
-X } else {
-X pmembers = (char **)realloc(members, sizeof(char *)*(i+1));
-X }
-X
-X *members = *pmembers;
-X members[i] = user;
-X members[i+1] = NULL;
-}
-X
-static void
-rmfromgroup(char *user, char **members) {
-X int i;
-X int found = FALSE;
-X
-X i = 0;
-X while (!found && NULL != members[i]) {
-X if (0 == strcmp(user, members[i])) {
-X found = TRUE;
-X } else {
-X i++;
-X }
-X }
-X
-X while (found && NULL != members[i]) {
-X members[i] = members[++i];
-X }
-X
-X if (!found) {
-X fprintf(stderr, "Member to remove could not be found\n");
-X exit(EXIT_NOT_MEMBER);
-X }
-}
-X
-static void
-nomembers(char **members) {
-X int i;
-X
-X for (i = 0; NULL != members[i]; i++ ) {
-X members[i] = NULL;
-X }
-}
-X
-static void
-members(char **members) {
-X int i;
-X
-X for (i = 0; NULL != members[i]; i++ ) {
-X printf("%s ", members[i]);
-X
-X if (NULL == members[i+1]) {
-X printf("\n");
-X } else {
-X printf(" ");
-X }
-X }
-}
-X
-static void usage(void) {
-X fprintf(stderr, "usage: groupmems -a username | -d username | -D | -l [-g groupname]\n");
-X exit(EXIT_USAGE);
-}
-X
-main(int argc, char **argv) {
-X int arg, i;
-X char *name;
-X struct group *grp;
-X
-X while ((arg = getopt(argc, argv, "a:d:g:Dl")) != EOF) {
-X switch (arg) {
-X case 'a':
-X adduser = strdup(optarg);
-X ++exclusive;
-X break;
-X case 'd':
-X deluser = strdup(optarg);
-X ++exclusive;
-X break;
-X case 'g':
-X thisgroup = strdup(optarg);
-X break;
-X case 'D':
-X purge = TRUE;
-X ++exclusive;
-X break;
-X case 'l':
-X list = TRUE;
-X ++exclusive;
-X break;
-X default:
-X usage();
-X }
-X }
-X
-X if (exclusive > 1 || optind < argc) {
-X usage();
-X }
-X
-X if (!isroot() && NULL != thisgroup) {
-X fprintf(stderr, "Only root can add members to different groups\n");
-X exit(EXIT_NOT_ROOT);
-X } else if (isroot() && NULL != thisgroup) {
-X name = thisgroup;
-X } else if (!isgroup()) {
-X fprintf(stderr, "Group access is required\n");
-X exit(EXIT_NOT_EROOT);
-X } else if (NULL == (name = whoami())) {
-X fprintf(stderr, "Not primary owner of current group\n");
-X exit(EXIT_NOT_PRIMARY);
-X }
-X
-X if (!gr_lock()) {
-X fprintf(stderr, "Unable to lock group file\n");
-X exit(EXIT_GROUP_FILE);
-X }
-X
-X if (!gr_open(O_RDWR)) {
-X fprintf(stderr, "Unable to open group file\n");
-X exit(EXIT_GROUP_FILE);
-X }
-X
-X grp = (struct group *)gr_locate(name);
-X
-X if (NULL != adduser) {
-X addtogroup(adduser, grp->gr_mem);
-X gr_update(grp);
-X } else if (NULL != deluser) {
-X rmfromgroup(deluser, grp->gr_mem);
-X gr_update(grp);
-X } else if (purge) {
-X nomembers(grp->gr_mem);
-X gr_update(grp);
-X } else if (list) {
-X members(grp->gr_mem);
-X }
-X
-X if (!gr_close()) {
-X fprintf(stderr, "Cannot close group file\n");
-X exit(EXIT_GROUP_FILE);
-X }
-X
-X gr_unlock();
-X
-X exit(EXIT_SUCCESS);
-}
-X
-/* EOF */
-SHAR_EOF
- (set 20 00 05 25 14 36 38 'groupmems.c'; eval "$shar_touch") &&
- chmod 0644 'groupmems.c' ||
- $echo 'restore of' 'groupmems.c' 'failed'
- if ( md5sum --help 2>&1 | grep 'sage: md5sum \[' ) >/dev/null 2>&1 \
- && ( md5sum --version 2>&1 | grep -v 'textutils 1.12' ) >/dev/null; then
- md5sum -c << SHAR_EOF >/dev/null 2>&1 \
- || $echo 'groupmems.c:' 'MD5 check failed'
-f0dd68f8d762d89d24d3ce1f4141f981 groupmems.c
-SHAR_EOF
- else
- shar_count="`LC_ALL= LC_CTYPE= LANG= wc -c < 'groupmems.c'`"
- test 6348 -eq "$shar_count" ||
- $echo 'groupmems.c:' 'original size' '6348,' 'current size' "$shar_count!"
- fi
-fi
-# ============= groupmems.8 ==============
-if test -f 'groupmems.8' && test "$first_param" != -c; then
- $echo 'x -' SKIPPING 'groupmems.8' '(file already exists)'
-else
- $echo 'x -' extracting 'groupmems.8' '(text)'
- sed 's/^X//' << 'SHAR_EOF' > 'groupmems.8' &&
-X.\"
-X.\" SPDX-FileCopyrightText: 2000, International Business Machines, Inc.
-X.\" SPDX-FileCopyrightText: 2000, George Kraft IV, gk4@us.ibm.com
-X.\" SPDX-License-Identifier: BSD-3-Clause
-X.\"
-X.\" $Id$
-X.\"
-X.TH GROUPMEMS 8
-X.SH NAME
-groupmems \- Administer members of a user's primary group
-X.SH SYNOPSIS
-X.B groupmems
-\fB-a\fI user_name \fR |
-\fB-d\fI user_name \fR |
-\fB-l\fR |
-\fB-D\fR |
-[\fB-g\fI group_name \fR]
-X.SH DESCRIPTION
-The \fBgroupmems\fR utility allows a user to administer their own
-group membership list without the requirement of superuser privileges.
-The \fBgroupmems\fR utility is for systems that configure its users to
-be in their own name sake primary group (i.e., guest / guest).
-X.P
-Only the superuser, as administrator, can use \fBgroupmems\fR to alter
-the memberships of other groups.
-X.IP "\fB-a \fIuser_name\fR"
-Add a new user to the group membership list.
-X.IP "\fB-d \fIuser_name\fR"
-Delete a user from the group membership list.
-X.IP "\fB-l\fR"
-List the group membership list.
-X.IP "\fB-D\fR"
-Delete all users from the group membership list.
-X.IP "\fB-g \fIgroup_name\fR"
-The superuser can specify which group membership list to modify.
-X.SH SETUP
-The \fBgroupmems\fR executable should be in mode \fB2770\fR as user \fBroot\fR
-and in group \fBgroups\fR. The system administrator can add users to
-group groups to allow or disallow them using the \fBgroupmems\fR utility
-to manager their own group membership list.
-X.P
-X $ groupadd -r groups
-X.br
-X $ chmod 2770 groupmems
-X.br
-X $ chown root.groups groupmems
-X.br
-X $ groupmems -g groups -a gk4
-X.SH FILES
-/etc/group
-X.br
-/etc/gshadow
-X.SH SEE ALSO
-X.BR chfn (1),
-X.BR chsh (1),
-X.BR useradd (8),
-X.BR userdel (8),
-X.BR usermod (8),
-X.BR passwd (1),
-X.BR groupadd (8),
-X.BR groupdel (8)
-X.SH AUTHOR
-George Kraft IV (gk4@us.ibm.com)
-X.\" EOF
-SHAR_EOF
- (set 20 00 05 25 14 38 23 'groupmems.8'; eval "$shar_touch") &&
- chmod 0600 'groupmems.8' ||
- $echo 'restore of' 'groupmems.8' 'failed'
- if ( md5sum --help 2>&1 | grep 'sage: md5sum \[' ) >/dev/null 2>&1 \
- && ( md5sum --version 2>&1 | grep -v 'textutils 1.12' ) >/dev/null; then
- md5sum -c << SHAR_EOF >/dev/null 2>&1 \
- || $echo 'groupmems.8:' 'MD5 check failed'
-181e6cd3a3c9d3df320197fa2cde2b4a groupmems.8
-SHAR_EOF
- else
- shar_count="`LC_ALL= LC_CTYPE= LANG= wc -c < 'groupmems.8'`"
- test 3372 -eq "$shar_count" ||
- $echo 'groupmems.8:' 'original size' '3372,' 'current size' "$shar_count!"
- fi
-fi
-rm -fr _sh10937
-exit 0