#!/bin/sh
# Verwaltet von Tuxflotte (Rolle personalisierung)
#
# Gibt die Anmeldung am Konto "Personalisierung" frei oder nimmt sie weg
# (ADR-0041, Ergänzung 18.10.2026). Frei nur, wenn beides gilt:
#   - die Verwaltung bietet sie an (Merkerdatei, von der Rolle gesetzt: kein
#     persönliches Konto auf dem Gerät oder ein neuer Code läuft), und
#   - das laufende LightDM nutzt schon den Kiosk-Wrapper. LightDM liest
#     seine Konfiguration nur beim Start; vorher bekäme das passwortlose
#     Konto den vollen Desktop.
# Sonst: keine passwortlose PAM-Freigabe und Shell nologin, damit blendet
# AccountsService das Konto im Anmeldebildschirm aus.
#
# Aufruf: "start" aus ExecStartPre von lightdm.service (LightDM startet
# gleich mit der aktuellen Konfiguration), ohne Argument von der Rolle.
# Ausgabe: "frei" oder "gesperrt", bei einer Änderung mit " geaendert".
set -eu

KONF=/etc/lightdm/lightdm.conf.d/85-tuxflotte-personalisierung.conf
MERKER=/etc/tuxflotte/personalisierung-anbieten
PAM=/etc/pam.d/lightdm
ZEILE='auth        sufficient                                  pam_succeed_if.so user = personalisierung'
MUSTER='^auth[[:space:]]+sufficient[[:space:]]+pam_succeed_if\.so[[:space:]]+user[[:space:]]+=[[:space:]]+personalisierung[[:space:]]*$'

wrapper_aktiv() {
    [ -f "$KONF" ] || return 1
    [ "${1:-}" = start ] && return 0
    pid=$(systemctl show -p MainPID --value lightdm.service 2>/dev/null || true)
    [ "${pid:-0}" -gt 0 ] 2>/dev/null || return 1
    laufzeit=$(ps -o etimes= -p "$pid" | tr -d ' ')
    [ -n "$laufzeit" ] || return 1
    [ $(( $(date +%s) - laufzeit )) -gt "$(stat -c %Y "$KONF")" ]
}

soll=gesperrt
if [ -f "$MERKER" ] && wrapper_aktiv "${1:-}"; then
    soll=frei
fi

geaendert=""
if [ "$soll" = frei ]; then
    if [ -f "$PAM" ] && ! grep -Eq "$MUSTER" "$PAM"; then
        sed -i "1i $ZEILE" "$PAM"
        geaendert=" geaendert"
    fi
    shell=/bin/bash
else
    if [ -f "$PAM" ] && grep -Eq "$MUSTER" "$PAM"; then
        sed -i -E "/$MUSTER/d" "$PAM"
        geaendert=" geaendert"
    fi
    shell=/usr/sbin/nologin
fi

if getent passwd personalisierung >/dev/null; then
    if [ "$(getent passwd personalisierung | cut -d: -f7)" != "$shell" ]; then
        usermod -s "$shell" personalisierung
        geaendert=" geaendert"
    fi
fi

echo "$soll$geaendert"
