diff --git a/user-rename b/user-rename new file mode 100644 index 0000000..c010e1f --- /dev/null +++ b/user-rename @@ -0,0 +1,51 @@ +#!/bin/sh +# Arguments: old name, new name + +if [ $# -lt 3 ]; then + printf '%s\n' "Wrong number of arguments\!" >&2 + printf '%s\n' "Usage: user-rename [old name] [new name] [new home]" >&2 + exit 1 +fi + +OLD=$1 +NEW=$2 +HOME=$3 + +# Get old home dir (no longer used, keeping around for a bit in case it is needed) +#OLD_HOME=$(grep $OLD /etc/passwd | awk -F: '{print $6}') + +# Begin sanity check +if ! id "$OLD" 2>&1 >/dev/null; then + printf '%s\n' "ERROR 11: OLD user name not found: $OLD" >&2 + exit 11 +fi + +if id "$NEW" 2>&1 >/dev/null; then + printf '%s\n' "ERROR 12: NEW user name already exists: $NEW" >&2 + exit 12 +fi + +if [ -d "$HOME" ]; then + printf '%s\n' "ERROR 13: New HOME directory already exists: $HOME" >&2 + exit 13 +fi +# End sanity check + +# Rename user +usermod -l $NEW $OLD || { printf '%s\n' "Error renaming user\!" >&2 && exit 1 } + +# Change home dir location +usermod -d $HOME -m $NEW || { printf '%s\n' "Error moving home directory\!" >&2 && exit 1 } + + +# Check if primary group matches old user name; modify if so +if [ ! "$(id -gn $NEW)" == "$OLD" ]; then + groupmod -n $NEW $OLD || { printf '%s\n' "Error renaming primary group\!" >&2 && exit 1 } +fi + +# Done! Print some info and exit +grep $NEW /etc/passwd +id $NEW + +exit 0 +