#!/bin/sh #---------------------------------------------------------------------------- # add-group - add a group # # Creation: 2001-11-04 fm # Last Update: $Id$ # # Copyright (c) 2001-@@YEAR@@ the eisfair team, team(at)eisfair(dot)org # # usage: add-group # or: add-group [--quiet] [-r] group [gid] # # -q | --quiet - suppress all screen output # -r | --system - create system group # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. #---------------------------------------------------------------------------- # include eislib . /var/install/include/eislib #debug=true if ${debug:-false} then exec 2>/tmp/$(basename ${0})-trace$$.log set -x ask_debug=true export ask_debug fi ASK=/var/install/bin/ask AWK=/usr/bin/gawk CUT=/usr/bin/cut GETENT=/usr/bin/getent GREP=/usr/bin/grep GROUPADD=/usr/sbin/groupadd MKTEMP=/usr/bin/mktemp RM=/usr/bin/rm #---------------------------------------------------------------------------- # usage #---------------------------------------------------------------------------- usage() { cat <' in the future!" fi systemswitch='' fi fi # check if GID is already used if [ -n "${gid}" ] then gidmatch=$(${GETENT} group ${gid}) if [ ${?} -eq 0 ] then # GID already used myecho --error "Given GID '${gid}' is already used by group '$(echo "${gidmatch}" | ${CUT} -d: -f1)'." do_exit 1 fi if [ -n "${systemswitch}" ] then # system group gidmin=${system_gidmin} gidmax=${system_gidmax} else # user group gidmin=${user_gidmin} gidmax=${user_gidmax} fi # check if GID is in allowed range if [ ${gid} -lt ${gidmin} -o ${gid} -gt ${gidmax} ] then # GID out of range myecho if [ ${gid} -lt ${system_gidmin} ] then myecho --warn "Given GID '${gid}' is in in a reserved range (< ${gidmin})." else myecho --error "Given GID '${gid}' is out of the allowed range (${gidmin}-${gidmax})." do_exit 1 fi fi fi if [ -z "${group}" ] then _ask_tmpfile=$(${MKTEMP} -t .XXXXXXXXXXXXX) ${ASK} "Group (max. 32 characters, e.g. 'www'): " '' '*' > ${_ask_tmpfile} rc=${?} read group < ${_ask_tmpfile} ${RM} -f ${_ask_tmpfile} if [ ${rc} = 255 ] then exit 1 fi if echo "${group}" | ${GREP} -q '^\-r' then systemswitch='-r' systemflag=true group="$(echo "${group}" | ${AWK} '{print $2}')" fi fi if [ -z "${group}" ] then myecho myecho --warn "No group added" do_exit 1 fi if [ "${#group}" -gt 32 ] then myecho myecho --warn "Name of group is too long" do_exit 1 fi # check if group name is already used gidmatch=$(${GETENT} group "${group}") if [ ${?} -eq 0 ] then myecho myecho --warn "Group '${group}' already exists with GID '`echo "${gidmatch}" | ${CUT} -d: -f3`'." do_exit 1 fi group_gid='' if [ -n "${gid}" ] then # add GID to command line group_gid="-g ${gid}" fi ${GROUPADD} ${systemswitch} ${group_gid} "${group}" } #---------------------------------------------------------------------------- # main #---------------------------------------------------------------------------- main() { group='' gid='' interactive=false systemflag=false systemswitch='' quiet=false last_date=20190901 actual_date=$(/usr/bin/date +%Y%m%d) # get optional flags while [ 1 ] do case "${1}" in -r|--system) systemswitch='-r' systemflag=true shift ;; -q|--quiet) quiet=true shift ;; -h|--help) usage exit 0 ;; *) break ;; esac done # get parameter case ${#} in 0) interactive=true ;; 1) if [ ${actual_date} -lt ${last_date} ] then systemswitch='-r' # set for compatibility reason fi group="${1}" ;; 2) group="${1}" gid=${2} ;; *) usage exit 1 ;; esac set_defaults add_group ${group} ${gid} } #---------------------------------------------------------------------------- # call function main #---------------------------------------------------------------------------- main "${@}" #---------------------------------------------------------------------------- # end #----------------------------------------------------------------------------