#!/bin/bash
###############################################################
#
# Creation d'un utilisateur UNIX + SAMBA
# Modifie le 7 Aout 2007
#	suppression de la creation de comptes consecutifs
#	correction BUG dans la suppression de comptes
# 15/09/2007
#	forcage d'un mot de passe automatique contenu dans 
#	/root/mot_de_passe
###############################################################
VERSION="V 1.0 du 07/08/2007"

xUSER="-"
echo "" > /tmp/x_nom_linux

xGROUP="users"

xSHELL='/bin/bash'

xSMB_WINDOWS_ALIAS="-"
echo "" > /tmp/x_alias_samba

xPW=/etc/passwd
xSMBPW=/etc/samba/smbpasswd
xSMB_ALIAS_FILE=/etc/samba/smbusers

touch /tmp/x1
echo $(date)" Journal de la gestion des comptes" >> /tmp/x1

while [ TRUE ] ; do

	SORTIE="0"
	
		clear
		until [ $SORTIE != "0" ]
		do
	
		echo "      Valeurs courantes    "$VERSION
		echo "1 Utilisateur Unix = " $xUSER
		echo "2 Groupe           = " $xGROUP
		echo "3 Shell            = " $xSHELL
		echo "4 Nom Windows      = " $xSMB_WINDOWS_ALIAS
		echo "5 "
		echo "6 Test sur le nom Linux en cours"
 		echo "7 Effacer 1 compte Linux et Samba "
		echo "8 Ajouter un PC Windows au Domaine"
		echo ""
		echo ""
		echo "L = lister les comptes actifs"
		echo "I = imprimer les comptes actifs"
		echo "-"
		echo "F = Fin et ecriture DATA / X = Fin sans ecriture"
	
		echo -n " Commande = " ; read CDE
	
		clear
	
		case $CDE in
	 	"1")
			echo -n "Utilisateur = " ; read xUSER
			echo "" > /tmp/x_nom_linux
			# Le nom UNIX est-il acceptable ? Test premier caractere est lettre
			echo $xUSER | grep [a-z] >/dev/null
			if [ $? -eq 1 ] ; then
				echo "Nom utilisateur UNIX = "$xUSER
				echo "Err : le premier caractere doit etre une lettre minuscule"
				echo "-"
				xUSER="-"
			fi
			echo $xUSER > /tmp/xu
			cat $xPW | cut -d ":" -f 1 | grep $xUSER >> /tmp/xu
			cat /tmp/xu | awk -f $HOME/admin/user_passwd_find > /tmp/xuu
	
			if [ $(cat /tmp/xuu) -eq 0 ] ; then
				echo "Le nom UNIX existe déjà ! "
				echo $xUSER > /tmp/x_nom_linux
				xUSER="-"
			else
				echo "" > /tmp/x_nom_linux
			fi
		 ;;
	
		"2")
			echo -n "Groupe = " ; read xGROUP
			echo "Fonction non implementee" ; xGROUP="users"
		;;
	
		"3")
			echo "Valeurs SHELL possibles dans cette version "
			echo    " 1 pour /bin/bash"
			echo	" 2 pour /sbin/nologin"
			xSHELL="/sbin/nologin"
			echo -n "Choix du SHELL = " ; read xRS
			if [ $xRS = "1" ] ; then
				xSHELL="/bin/bash"
			fi

		;;
		"4")
			echo -n "Nom alias Windows = " ; read xSMB_WINDOWS_ALIAS
			echo "" > /tmp/x_alias_samba
			# Le nom SAMBA est-il acceptable ? Test premier caractere est lettre
			echo $xSMB_WINDOWS_ALIAS | grep [a-z] >/dev/null
			if [ $? -eq 1 ] ; then
				echo "Nom utilisateur SAMBA-WINDOWS = "$xSMB_WINDOWS_ALIAS
				echo "Err : le premier caractere doit etre une lettre minuscule"
				echo "-"
				xSMB_WINDOWS_ALIAS="-"
			fi
			echo $xSMB_WINDOWS_ALIAS > /tmp/xu
			cat $xSMB_ALIAS_FILE | cut -d "=" -f 2 | grep $xSMB_WINDOWS_ALIAS >> /tmp/xu
			cat /tmp/xu | awk -f $HOME/admin/user_smb_find > /tmp/xuu
	
			if [ $(cat /tmp/xuu) -eq 0 ] ; then
				echo "Erreur Le nom ALIAS Windows existe déjà ! "
				echo $xSMB_WINDOWS_ALIAS > /tmp/x_alias_samba
				xSMB_WINDOWS_ALIAS="-"
			else
				echo "" > /tmp/x_alias_samba
			fi

		;;
		"5")

		;;
		"6")
			echo "Tester les parametres de "
	
		;;
		"7")
			echo "Supprimer compte Samba puis Linux"
			if [ $(cat /tmp/x_nom_linux | wc -c) -eq 1 ] ; then
				echo "Impossible de supprimer un nom inexistant !!! "
				echo $xUSER > /tmp/x_nom_linux
			else

				nsb=$(cat /tmp/x_nom_linux)
				echo "Tentative suppression de "$nsb

				# on supprime en premier lieu l_entree smbpasswd
				touch /tmp/smbpasswd ; rm /tmp/smbpasswd
				cp /etc/samba/smbpasswd /tmp/smbpasswd
				smbpasswd -x $nsb
				if [ $? -eq 0 ] ; then
				  echo "Suppression SAMBA de "$nsb" dans smbpasswd OK"
				else
				  echo "Erreur Suppression de "$nsb" dans smbpasswd"
				fi
			fi

			# traitement du fichier des alias
			touch /tmp/smb_tmp ; rm /tmp/smb_tmp
			cp /etc/samba/smbusers /tmp/smbusers
			xx=$(cat /tmp/smbusers | wc -l)
			num_user=1
			until [ $num_user -gt $xx ] ; do
				lig=$(cat /tmp/smbusers | head -n $num_user | tail -n 1)
				nom=$(echo $lig | cut -d "=" -f 1)
				#echo $nom ; echo $lig ; exit
				if [ -z $nom ] ; then
					echo $lig >> /tmp/smb_tmp
				else
					# supprimer les espaces entre la fin du mon et le signe =
					echo $nom > /tmp/smb_nom
					if [ $nsb != $(cat /tmp/smb_nom) ] ; then
						echo $lig >> /tmp/smb_tmp
					else
						echo "Suppression ALIAS de "$lig" dans smbusers : OK"
					fi
				fi
				let num_user++
			done

			echo "Traitement nom Linux"
			# si la lg du fichier vaut 1 il est vide
			if [ $(cat /tmp/x_nom_linux | wc -c) -eq 1 ] ; then
				echo "Impossible de supprimer un nom inexistant !!! "
				echo $xUSER > /tmp/x_nom_linux
			else
				/usr/sbin/userdel -r $(cat /tmp/x_nom_linux)
				if [ $? -eq 0 ] ; then
					echo "Suppression Linux de "$(cat /tmp/x_nom_linux) " dans passwd : OK"
				else
					echo "Suppression Linux de "$(cat /tmp/x_nom_linux) "Erreur"
					# Attention il faut passer un nom
				fi
			fi
			cp /tmp/smb_tmp /etc/samba/smbusers

			xUSER="-"
			xSMB_WINDOWS_ALIAS="-"

		;;

		"8")
			echo "Ajouter un PC Windows au Domaine"
			echo -n "Nom netbios de la machine = " ; read xPC
			/root/admin/deviceadd $xPC
		;;

		[Ll])
			clear
			echo "Liste des utilisateurs actifs mode Windows"
			# on extrait de smbpasswd les users avec mot de passe valide
			cat /etc/samba/smbusers | sort | more
			echo -n "Retour au menu principal : frapper Entrée"
			read aa
			clear
		;;

		[Ii])
			clear
			echo "Imprimer les comptes actifs mode Windows"
			/root/admin/active_users
			date > /tmp/_users
			echo "             Liste des utilisateurs de SMRVILLEBON" >> /tmp/_users
			echo "" >> /tmp/_users
			cat /tmp/_user4 >> /tmp/_users
			cat /tmp/_users | lpr

		;;

		[Ff])
			echo "Test de validité des paramètres"
			# xUSER xGROUP xSHELL $xSMB_WINDOWS_ALIAS
			SORTIE="1"
			if [ $xUSER == "-" ] ; then
				SORTIE="0"
				echo "Erreur nom UNIX"
			fi
	
			if [ $xGROUP == "-" ] ; then
				SORTIE="0"
				echo "Erreur GROUP"
			fi
	
			if [ $xSHELL == "-" ] ; then
				SORTIE="0"
				echo "Erreur SHELL"
			fi
	
			if [ $xSMB_WINDOWS_ALIAS == "-" ] ; then
				SORTIE="0"
				echo "Erreur nom WINDOWS"
			fi
	
		;;
	
		[Xx])
			clear
			echo "Sortie sans modification"
			echo "-"
			exit
		;;
	
		*)
			echo "Commande inatendue = " $CDE
		;;
	
		esac
	
	done
	
	# Parametres corrects, on ecrit
	# Unix user add
	echo "Ajout de "$xUSER "aux utilisateurs UNIX sans mot de passe"
	/usr/sbin/useradd -d /home/$xUSER -g users -s $xSHELL -n $xUSER
	echo "Forcage du mot de passe standard de /root/admin/mot_de_passe"
	cat /root/admin/mot_de_passe | passwd $xUSER --stdin

	echo "Ajout de "$xUSER "aux utilisateurs SAMBA avec mot de passe"
	smbpasswd -a $xUSER
	
	# samba add + ajout alias windows
	echo "Ajout de "$xUSER "avec comme alias "$xSMB_WINDOWS_ALIAS
	echo $xUSER" = "$xSMB_WINDOWS_ALIAS >> /etc/samba/smbusers

	xUSER="-"
	xSMB_WINDOWS_ALIAS="-"

	#
	echo " "
	echo "Fin de creation"
	echo " "
	
done

