Add a vigr(8) utility which does for /etc/group what vipw(8) does for

/etc/master.passwd.
This commit is contained in:
Dag-Erling Smørgrav 2014-12-14 16:40:46 +00:00
parent 88ef06f3a9
commit 17a2c536c8
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=275768
4 changed files with 173 additions and 0 deletions

View File

@ -94,6 +94,7 @@ SUBDIR= adduser \
trpt \
tzsetup \
ugidfw \
vigr \
vipw \
wake \
watch \

6
usr.sbin/vigr/Makefile Normal file
View File

@ -0,0 +1,6 @@
# $FreeBSD$
SCRIPTS= vigr
MAN= vigr.8
.include <bsd.prog.mk>

71
usr.sbin/vigr/vigr.8 Normal file
View File

@ -0,0 +1,71 @@
.\"-
.\" Copyright (c) 2014 Dag-Erling Smørgrav
.\" All rights reserved.
.\"
.\" Redistribution and use in source and binary forms, with or without
.\" modification, are permitted provided that the following conditions
.\" are met:
.\" 1. Redistributions of source code must retain the above copyright
.\" notice, this list of conditions and the following disclaimer.
.\" 2. Redistributions in binary form must reproduce the above copyright
.\" notice, this list of conditions and the following disclaimer in the
.\" documentation and/or other materials provided with the distribution.
.\"
.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
.\" SUCH DAMAGE.
.\"
.\" $FreeBSD$
.\"
.Dd December 14, 2014
.Dt VIGR 8
.Os
.Sh NAME
.Nm vigr
.Nd edit the group file
.Sh SYNOPSIS
.Nm
.Op Fl d Ar directory
.Sh DESCRIPTION
The
.Nm
utility makes a temporary copy of the group file, allows the user to
edit it, then verifies that the edited file is valid before installing
it.
.Pp
The following options are available:
.Bl -tag -width Fl
.It Fl d Ar directory
Edit the group file in the specified directory instead of the default
.Pa /etc/group .
.El
.Sh ENVIRONMENT
.Bl -tag -width EDITOR
.It Ev EDITOR
The editor to use instead of
.Xr vi 1 .
.It Ev TMPDIR
The directory in which to store the temporary copy of the group file.
.El
.Sh SEE ALSO
.Xr group 5 ,
.Xr chkgrp 8 ,
.Xr vipw 8
.Sh HISTORY
The
.Nm
utility appeared in
.Fx 11.0 .
.Sh AUTHORS
The
.Nm
utility and this manual page were written by
.An Dag-Erling Sm\(/orgrav Aq Mt des@FreeBSD.org .

95
usr.sbin/vigr/vigr.sh Normal file
View File

@ -0,0 +1,95 @@
#!/bin/sh
#-
# Copyright (c) 2014 Dag-Erling Smørgrav
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions
# are met:
# 1. Redistributions of source code must retain the above copyright
# notice, this list of conditions and the following disclaimer.
# 2. Redistributions in binary form must reproduce the above copyright
# notice, this list of conditions and the following disclaimer in the
# documentation and/or other materials provided with the distribution.
#
# THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
# ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
# SUCH DAMAGE.
#
# $FreeBSD$
#
error() {
echo "$@" >&2
exit 1
}
usage() {
error "usage: vigr [-d dir]"
}
# Check arguments
while getopts d: opt ; do
case $opt in
d)
etcdir="${OPTARG}"
;;
*)
usage
;;
esac
done
# Look for the current group file
grpfile="${etcdir:-/etc}/group"
if [ ! -f "${grpfile}" ] ; then
error "Missing group file"
fi
# Create a secure temporary working directory
tmpdir=$(mktemp -d -t vigr)
if [ -z "${tmpdir}" -o ! -d "${tmpdir}" ] ; then
error "Unable to create the temporary directory"
fi
tmpfile="${tmpdir}/group"
# Clean up on exit
trap "exit 1" INT
trap "rm -rf '${tmpdir}'" EXIT
set -e
# Make a copy of the group file for the user to edit
cp "${grpfile}" "${tmpfile}"
while :; do
# Let the user edit the file
${EDITOR:-/usr/bin/vi} "${tmpfile}"
# If the result is valid, install it and exit
if chkgrp -q "${tmpfile}" ; then
install -b -m 0644 -C -S "${tmpfile}" "${grpfile}"
exit 0
fi
# If it is not, offer to re-edit
while :; do
echo -n "Re-edit the group file? "
read ans
case $ans in
[Yy]|[Yy][Ee][Ss])
break
;;
[Nn]|[Nn][Oo])
exit 1
;;
esac
done
done