#!/bin/bash
# lastact: arturo@2023-09-2023
# desc: A consecuencia los crash con Xorg de lightdm, cacheamos el last-user asociado al autologin, pudiendo indicar como parámetro otro usuario

FICHFUNCS="/usr/bin/vx-funcs-bash"
[ -f "${FICHFUNCS}" ] && . "${FICHFUNCS}" "null"

# Help-Begin: Descripción de la ayuda de la función:
AYUDA='Ayuda: Script encargado de cachear el last-user gestionado por lightdm.  Se puede pasar opcionalmente como parámetro:
    # 1) "---": Si no pasamos parámetros se configurará como last-user el usuario asignado en autologin-user en lightdm.conf
    # 2) "null": Elimina el archivo encargado de cachear el last-user
    # 3) "nombre-usuario": Se asignará el usuario pasado como parámetro como last-user'
EJEMPLOS=("${0} ")
EJEMPLOS+=("${0} \"docente\"")
EJEMPLOS+=("${0} \"null\"")
if vx-check_need_help "${1}"; then
    vx-show_help "${0}" "${AYUDA}" "${EJEMPLOS[@]}" && exit 0
fi
# Help-End

# 1) Comprobamos que es el usuario root quien quiere ejecutar el programa, sino salimos:
MENSAJE="Necesitas permisos de administrador para cachear el last-user en lightdm"
vx-check_user_root "${MENSAJE}"

# 2) Preparamos la auditoria:
LOG="$(basename "${0}").log"
vx-log_xsession -o "${LOG}"

TEXTO="Cachear last-user para lightdm"
vx-echo_log_titulo1 "SRV-LIGHTDM-LASTUSER" "${TEXTO}"

# 3) Comprobamos si se ha enviado como parámetro el null o el usuario a imponer como last-user:
# Rescatalamos el valor del autologin en caso de no recibir parámetro:
FICH_CONF="/etc/lightdm/lightdm.conf"
DIRECTIVA_AUTOLOGIN="autologin-user"
SECCIONLIGHTDM="Seat:*"
if [[ ! "${1}" ]]; then
    LASTUSER="$(crudini --get "${FICH_CONF}" "${SECCIONLIGHTDM}" "${DIRECTIVA_AUTOLOGIN}" 2>&1)"
else
    LASTUSER="${1}"
fi

# 4) Creamos o eliminamos el fichero que se encarga de cachear el last-user:
# [greeter]
# last-user=estudiante
FICH="/var/lib/lightdm/.cache/lightdm-gtk-greeter/state"
DIRBASE="$(dirname "${FICH}")"
SECCION="greeter"
DIRECTIVA="last-user"
if getent passwd "${LASTUSER}" >/dev/null 2>&1; then
    # Quitamos el bloqueo del fichero que lo cachea:
    [[ ! -f "${FICH}" ]] && mkdir -p "${DIRBASE}" && touch "${FICH}"
    chattr -i "${FICH}"
    crudini --set "${FICH}" "${SECCION}" "${DIRECTIVA}" "${LASTUSER}" &&
        echo "#> ${FICH}: ${SECCION} => ${DIRECTIVA}=${LASTUSER}" ||
        echo "#> Error: Al guardar en ${FICH}: ${SECCION} => ${DIRECTIVA}=${LASTUSER}"
    sed -i --follow-symlinks "s/\ *=\ */=/g" "${FICH}"
    chattr +i "${FICH}"
else
    [[ "${LASTUSER}" == "null" ]] &&
        [[ -f "${FICH}" ]] &&
        chattr -i "${FICH}" &&
        rm -f "${FICH}" &&
        echo " #> ${FICH}: Eliminamos el rastro del último last-user"
fi

exit 0
