#!/bin/bash exit 0 # $HeadURL$ $LastChangedRevision$ # Modules . $(miniade) || { echo "${0##*/}: ERROR: miniade failed (hint: run 'miniade' to see error)" >&2; exit 1; } # Configurable stuff # Other globals main() { local MY_ARGS # Defaults for options # Process options miniade_process_options --help-handler=help MY_ARGS "$@" && set -- "${MY_ARGS[@]}" # Process arguments [ $# = 1 ] || miniade_bad_usage miniade_debug 10 "main: calling [encode --decode \"$1\"] ..." type encode > /dev/null 2>&1 || miniade_internal "encode: command not found (hint: is PATH set correctly?)" ENCODE_OUTPUT=$(encode --decode "$1") || miniade_internal "encode: failed (hint: see messages above)" eval set -- "$ENCODE_OUTPUT" miniade_debug 10 "main: \$#=$#" [ $# -ge 2 ] || miniade_bad_usage LOGIN="$1"; shift CREATE_PASSWD_ENTRY_FLAG="$1"; shift miniade_debug 10 "main: LOGIN=$LOGIN, CREATE_PASSWD_ENTRY_FLAG=$CREATE_PASSWD_ENTRY_FLAG" [[ $CREATE_PASSWD_ENTRY_FLAG =~ ^(true|false)$ ]] || miniade_error "$CREATE_PASSWD_ENTRY_FLAG: invalid flag" if $CREATE_PASSWD_ENTRY_FLAG; then IS_SYSTEM_USER_FLAG="$1" FULL_NAME="$2" HOME_DIR="$3" shift 3 miniade_debug 10 "main: IS_SYSTEM_USER_FLAG=$IS_SYSTEM_USER_FLAG, FULL_NAME=\"$FULL_NAME\", HOME_DIR=$HOME_DIR" # Sanity checks and derivations [[ $IS_SYSTEM_USER_FLAG =~ ^(true|false)$ ]] || miniade_error "$IS_SYSTEM_USER_FLAG: invalid flag" if $IS_SYSTEM_USER_FLAG; then GROUPADD_OPTS="--system" USERADD_OPTS="--system --password '*'" else GROUPADD_OPTS= USERADD_OPTS="--password ''" fi # Guts getent group $LOGIN > /dev/null || groupadd $GROUPADD_OPTS $LOGIN getent passwd $LOGIN > /dev/null || { # In order to make code path simpler, don't create user's home yet; leave that # to code further down. eval "useradd $USERADD_OPTS -g $LOGIN -s /bin/bash -M $LOGIN" if ! $IS_SYSTEM_USER_FLAG; then chage -d 0 $LOGIN fi } [ "X$(getent passwd $LOGIN | cut -d: -f5 | cut -d, -f1)" = "X$FULL_NAME" ] || chfn -f "$FULL_NAME" $LOGIN; \ [ "X$(getent passwd $LOGIN | cut -d: -f6)" = "X$HOME_DIR" ] || usermod -d $HOME_DIR $LOGIN 2>/dev/null || { echo "usermod failed for user $LOGIN" >&2; exit 1; } fi CREATE_HOME_DIR_FLAG="$1"; shift miniade_debug 10 "main: CREATE_HOME_DIR_FLAG=$CREATE_HOME_DIR_FLAG" [[ $CREATE_HOME_DIR_FLAG =~ ^(true|false)$ ]] || miniade_error "$CREATE_HOME_DIR_FLAG: invalid flag" if $CREATE_HOME_DIR_FLAG; then GET_HOME_FROM_PASSWD_FLAG="$1"; shift miniade_debug 10 "main: GET_HOME_FROM_PASSWD_FLAG=$GET_HOME_FROM_PASSWD_FLAG" if $GET_HOME_FROM_PASSWD_FLAG; then HOME_DIR=$(getent passwd $LOGIN | cut -d: -f6) else HOME_DIR="$1"; shift fi miniade_debug 10 "main: HOME_DIR=$HOME_DIR" mkdir -p $HOME_DIR chown $LOGIN:$LOGIN $HOME_DIR fi } help() { local PROGNAME miniade_get_progname PROGNAME echo "Usage: $PROGNAME [ ] @[@...]@[@...]" exit 0 } main "$@"