#!/bin/bash
# setsmbpass: cambia la contraseña del usuario del cliente para acceder a los
#	servicios Samba.
# Nota: se modifica el Initrd del cliente y se cambia la clave en el servidor.
# Nota: no se modifica el usuario de acceso (usuario "opengnsys").
# Uso:	setsmbpass
# Autor: Ramon Gomez - Univ. Sevilla, julio 2011


# Variables.
PROG=$(basename $0)
OPENGNSYS=${OPENGNSYS:-"/opt/opengnsys"}
SAMBAUSER="opengnsys"				# Usuario por defecto.
TFTPDIR=$OPENGNSYS/tftpboot
CLIENTINITRD=$TFTPDIR/ogclient/oginitrd.img
TMPDIR=/tmp/ogclient$$

# Control básico de errores.
if [ $# != 0 ]; then
	echo "$PROG: Error de ejecución" >&2
	echo "Formato: $PROG"
	exit 1
fi
if [ "$USER" != "root" ]; then
	echo "$PROG: Error: solo ejecutable por root" >&2
	exit 1
fi

# Crear clave para usuario de acceso a los recursos.
if [ -r $CLIENTINITRD ]; then
	stty -echo 2>/dev/null
	echo -n "Clave del usuario Samba: "
	read SAMBAPASS
	# Solo se deben aceptar números y letras para la clave de acceso.
	if [ -n "${SAMBAPASS//[a-zA-Z0-9]/}" ]; then
		echo
		echo "$PROG: Error: la clave solo debe contener caracteres alfanuméricos" >&2
		stty echo 2>/dev/null
		exit 2
	fi
	echo
	echo -n "Confirmar clave: "
	read SAMBAPASS2
	echo
	stty echo 2>/dev/null
	if [ "$SAMBAPASS" != "$SAMBAPASS2" ]; then
		echo "$PROG: Error: las claves no coinciden" >&2
		exit 2
	fi
	# Editar la parte de acceso del cliente:
	#    descomprimir Initrd, sustituir clave y recomprimir Initrd).
	mkdir -p $TMPDIR
	cd $TMPDIR
	gzip -dc $CLIENTINITRD | cpio -im
	if [ -f scripts/ogfunctions ]; then
		sed -i "s/OPTIONS=\(.*\)user=\w*\(.*\)pass=\w*\(.*\)/OPTIONS=\1user=$SAMBAUSER\2pass=$SAMBAPASS\3/" scripts/ogfunctions
		# TEMPORAL: solución ticket 554, actualizar cliente en caché (ogLive r3257).
		sed -i "s/busybox reboot/reboot/" scripts/ogfunctions
		# FIN CÓDIGO TEMPORAL.
		# Ticket 565, preparar acceso Rsync cliente.
		echo "$SAMBAPASS" > scripts/passrsync
		chown root.root scripts/passrsync
		chmod 400 scripts/passrsync
		# Generar Initrd del cliente.
		find . | cpio -H newc -oa | gzip -9c > $CLIENTINITRD
		# Ticket 565, preparar acceso Rsync servidor.
		echo "$SAMBAUSER:$SAMBAPASS" > /etc/rsyncd.secrets
		chown root.root /etc/rsyncd.secrets
		chmod 600 /etc/rsyncd.secrets
	else
		echo "$PROG: Aviso: no se ha modificado la clave del cliente."
	fi
	rm -fr $TMPDIR
	md5sum $CLIENTINITRD | cut -f1 -d" " > $CLIENTINITRD.sum
	cp -a $CLIENTINITRD $TFTPDIR
	cp -a $CLIENTINITRD.sum $TFTPDIR
else
	SAMBAPASS="og"                  # Clave por defecto.
        echo "$PROG: Aviso: no se ha modificado la clave del cliente."
fi
echo -ne "$SAMBAPASS\n$SAMBAPASS\n" | smbpasswd -a -s $SAMBAUSER

