#!/bin/bash # $Header: /home/cvsd/magellan-cvs/magellan-src/mage/usr/lib/mage/museradd,v 1.4 2005-06-01 15:48:43 niro Exp $ # include all needed files [ -f /etc/mage.rc.global ] && source /etc/mage.rc.global [ -f ${MAGERC} ] && source ${MAGERC} [ -f ${MLIBDIR}/mage4.functions.sh ] && source ${MLIBDIR}/mage4.functions.sh print_usage() { echo "$(basename $0 .sh) adds users to /etc/passwd." echo " USAGE: $(basename $0 .sh) -o OPTIONS USER_NAME .." echo echo " OPTIONS: -o \"OPTS\"all options from /usr/sbin/useradd can be used." echo echo " Examples:" echo " $(basename $0 .sh) -o \"-u 22 -g sshd -d /var/empty -s /bin/false\" sshd" echo } busybox_fix_user_opts() { local i local FIXED_USER_OPTS for i in $* do case $1 in -d) shift; FIXED_USER_OPTS+=" -h $1" ;; -g) shift; FIXED_USER_OPTS+=" -G $1" ;; -G) shift; shift; continue;; # will be parsed through fix_group_opts -u) shift; [[ $1 -lt 100 ]] && FIXED_USER_OPTS+=" -S"; FIXED_USER_OPTS+=" -u $1" ;; -r) FIXED_USER_OPTS+=" -S" ;; -M) FIXED_USER_OPTS+=" -H" ;; *) FIXED_USER_OPTS+=" $1" ;; esac shift done echo "${FIXED_USER_OPTS}" } busybox_fix_group_opts() { local i local FIXED_GROUP_OPTS for i in $* do case $1 in -G) shift; FIXED_GROUP_OPTS+="$(echo $1 | sed 's:,:\ :g')" ;; esac shift done echo "${FIXED_GROUP_OPTS}" } fix_usermod_opts() { local i local FIXED_USERMOD_OPTS for i in $* do case $1 in -M) continue ;; # usermod does not support the -M switch *) FIXED_USERMOD_OPTS+=" $1" ;; esac shift done echo "${FIXED_USERMOD_OPTS}" } if [[ ! -z ${MROOT} ]] && [[ ${MROOT} != / ]] then chroot="chroot ${MROOT} " else chroot="" fi while getopts "o:-" opt ; do case "${opt}" in o) USER_OPTS="${OPTARG}" ;; -) break ;; *) print_usage exit 1 ;; esac done shift $(($OPTIND - 1)) #exit if $1 is zero if [ -z "$1" ] then print_usage exit 1 fi USER_TO_ADD="$1" # busybox support needed? if need_busybox_support adduser then echo -n " Adding user '${USER_TO_ADD}'" [[ ! -z ${chroot} ]] && echo -n " into MROOT='${MROOT}'" echo " ..." ${chroot} adduser -S -D $(busybox_fix_user_opts ${USER_OPTS}) "${USER_TO_ADD}" for grp in $(busybox_fix_group_opts ${USER_OPTS}) do ${chroot} addgroup "${USER_TO_ADD}" "${grp}" done # normal systems else # get the info my_user="$(${chroot} getent passwd ${USER_TO_ADD})" if [ -z "${my_user}" ] then echo -n " Adding user '${USER_TO_ADD}'" [[ ! -z ${chroot} ]] && echo -n " into MROOT='${MROOT}'" echo " ..." ${chroot} useradd -r ${USER_OPTS} "${USER_TO_ADD}" else echo -n " Modifing user '${USER_TO_ADD}'" [[ ! -z ${chroot} ]] && echo -n " in MROOT='${MROOT}'" echo " ..." ${chroot} usermod $(fix_usermod_opts ${USER_OPTS}) "${USER_TO_ADD}" fi fi