#! /bin/sh
#----------------------------------------------------------------------------
# /var/install/bin/remove-user - remove a user
#
# Copyright (c) 2001-2004 Frank Meyer <frank@eisfair.org>
#
# Creation:	04.11.2001  fm
# Last Update:  $Id$
#
# 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.
#
# usage: remove-user
#    or: remove-user [-f] user do-remove-homedir
#
#                     -f  force remove
#                         remove user even uid is less 200
#                         or uid is greater 65533
#
#                     do-remove-homedir
#                         y/yes  remove home directory
#                         n/no   to not remove home directory
#
#                         home directory is not removed if it is
#                         not located in /home
#
#    Return:          0   user was removed
#                         or
#                         no user selected in interactive mode
#                     1   wrong usage
#                         or
#                         question interrupted
#                     2   user does not exist
#                         or
#                         user is system user and -f was not used
#
#----------------------------------------------------------------------------

# include eislib
. /var/install/include/eislib

if [ "$1" = "-f" ]
then
    force=true
    shift
else
    force=false
fi

case $#
in
    0)
	interactive='true'
	user=""
	do_remove_homedir=""
	;;
    2)
	interactive='false'
	user="$1"
	do_remove_homedir="$2"
	case "$do_remove_homedir"
	in
	    y | yes)
		do_remove_homedir='y'
		;;
	    n | no)
		do_remove_homedir='n'
		;;
	    *)
		mecho -error "`basename $0`: do-remove-homedir must be 'yes' or 'no'" >&2
		exit 1
		;;
	esac
	;;
    *)
	mecho "usage: `basename $0`" >&2
	mecho "   or: `basename $0` [-f] user do-remove-homedir" >&2
	exit 1
	;;
esac

if [ "$interactive" = "true" ]
then
    clrhome
    mecho -info "Remove user"
    mecho
fi

if [ "$user" = "" ]
then
   /var/install/bin/ask "User to remove (e.g. 'www')" "" "*" > /tmp/ask.$$
   rc=$?
   user=`cat /tmp/ask.$$`
   rm -f /tmp/ask.$$
   [ $rc = 255 ] && exit 1
fi

if [ "$user" = "" ]
then
    mecho
    anykey
    exit 0
fi

line=`grep "^$user:" /etc/passwd`

if [ "$line" = "" ]
then
    mecho
set -x
    mecho -error "User $user does not exist"
    #anykey
    exit 2
fi

OLDIFS="$IFS"
IFS=':'
set -- $line
IFS="$OLDIFS"

if [ $force = false ]
then
    if [ $3 -lt 200 -o $3 -ge 65534 ]
    then
	mecho
	mecho -error "It is not allowed to remove system user $user, sorry"
	#anykey
	exit 2
    fi
fi

home=`eval echo ~$user`

grep -v "^$user:" /etc/passwd >/tmp/passwd-$$
cp /tmp/passwd-$$ /etc/passwd		# cp: keep inode & permissions
rm -f /tmp/passwd-$$

cp /etc/shadow /tmp/shadow-$$           # create file in /tmp without
                                        # read access for group an others
grep -v "^$user:" /etc/shadow >/tmp/shadow-$$
cp /tmp/shadow-$$ /etc/shadow		# cp: keep inode & permissions
rm -f /tmp/shadow-$$

# remove entries for user from /etc/group
#   :user$ -> :
#   :user, -> :
#   ,user, -> ,
sed "s/:$user\$/:/;s/:$user,/:/;s/,$user,/,/" < /etc/group > /tmp/group-$$
cp /tmp/group-$$ /etc/group             # cp: keep inode & permissions
rm -f /tmp/group-$$

if [ "$do_remove_homedir" = "" ]
then
   /var/install/bin/ask "Remove home directory $home" "n"
   rc=$?
   case $rc in
      0)  do_remove_homedir=y;;
      1)  do_remove_homedir=n;;
      *)  exit 1;;
   esac
fi

if [ "$do_remove_homedir" = "y" ]
then
    case "$home"
    in
	/home/*)
	    rm -rf $home
	    ;;
	*)
	    mecho -warn "remove-user: did not remove home directory $home" >&2
	    ;;
    esac
fi

if [ "$interactive" = "true" ]
then
    mecho
    anykey
fi